ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

30
有名な1ライナーまたは2ライナーのプログラムと方程式は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 私は新しいプラットフォームで実験しており、60文字以下の文字列を扱うプログラムを作成しようとしています。有名なまたはよく知られた小さなコードの塊をデータストアに追加したいと思います。プログラミングと数学は私のソフトウェアのテーマに沿っているので、方程式。コードは、長さが合計60文字未満である限り、任意の言語および数学の専門分野の方程式を使用できます。私は人々がこの1 つのためにいくつかの頭痛をするつもりだと思う。 例えば、 #include<stdio.h> int main(){printf ("Hi World\n");return 0;} 正確に60文字! あなたの知恵に感謝します!

14
豊富なフレームワークがプログラマを馬鹿にしていますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 最近利用可能なすべてのフレームワーク、ORM、依存性注入(DI)、制御の反転(IoC)などにより、多くのプログラマーが困難な問題を解決するために必要な問題解決スキルを失っている、または持っていないことがわかります。多くの場合、予期しない動作がアプリケーションに忍び込み、開発者が問題を実際に掘り下げて見つけることができませんでした。ボンネットの下で何が起こっているかについての深い理解が失われているように思えます。 誤解しないでください、これらのフレームワークが良くないことや業界を前進させていないことを示唆していません。意図しない結果として、開発者が深い理解に必要な知識とスキルを得ていないかどうかを尋ねるだけですシステム。

10
再現しないバグをどうするか?
テスト中にエラーが発生するテスターがいますが(これまでのところ)、すぐに頻繁に報告します。私たち(開発者)は、テスターが問題を再現しようとしておらず、(尋ねられたときに)問題を再現する方法を見つけることができないことを後で発見します。 今、これらはまだバグです、私はそれらを無視したくありません。しかし、再現手順がないと、ちょっと行き詰まります。スタックトレースがある場合もあります(ただし、これはコンパクトなフレームワークであり、行番号がないため、しばしば有用ではありません)。しかし、ある場合、スタックトレースを取得してコードをクラックし、推測を開始できますが、テスト可能な「修正」にはつながりません。 このようなシナリオでは何をしますか?
22 bug  testing 

9
「Planning Poker」についてどう思いますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 プランニングポーカー 要約、wiki記事を読みたくない場合: 次のイテレーションで実行したいタスクのリストを取得します 各タスクについて: 2.1グループが必要とするものについて話し合う 2.2全員がタスクに必要な労力の見積もりを書き留める/選択する 2.3誰もが見積もりを明らかにする 2.4最高と最低の外れ値 がコンセンサスに達するまで繰り返す2.5 通常、0、½、1、2、3、5、8、13、20、40、100のようなフィボナッチ数列の数字に似た値が許可されているので、23のような近い値に対して長い引数を取得しません。 27。 さらに、数字は努力の単位のない値を表し、その値は、誰もが約1に等しいことに同意するベースラインタスクによって決定され、他のすべてはそれに関連しています。 最終的に、目標は、特定のチームの「速度」、つまり特定の反復で完了することができるこれらのポイントの数について良い感触を得ることです。これにより、特定の機能にかかる時間をかなり正確に見積もることができます。 私が働いていたある会社でのイテレーション計画会議でこれを行いましたが、それはその特定の会社にとって数少ない良いことの一つだと思いました。だから、私が思っているのは、誰かがこれを使ったことがありますか?推定に役立つツールだと思いますか?すべての状況で機能しますか、それとも特定のチーム、プロジェクトなどに役立ちますか?

3
C#8のnull不可の参照とTryパターン
Dictionary.TryGetValueandで例示されるC#クラスにはパターンがありint.TryParseます。操作の成功を示すブール値と実際の結果を含む出力パラメーターを返すメソッド。操作が失敗した場合、outパラメーターはnullに設定されます。 C#8のnull不可の参照を使用しており、自分のクラスのTryParseメソッドを記述したいとします。正しい署名はこれです: public static bool TryParse(string s, out MyClass? result); falseの場合、結果はnullであるため、out変数はnull可能としてマークする必要があります。 ただし、一般的にTryパターンは次のように使用されます。 if (MyClass.TryParse(s, out var result)) { // use result here } 操作が成功したときにのみブランチに入るため、そのブランチで結果がnullになることはありません。しかし、null可能としてマークしたので、それを確認するか!、オーバーライドに使用する必要があります。 if (MyClass.TryParse(s, out var result)) { Console.WriteLine("Look: {0}", result.SomeProperty); // compiler warning, could be null Console.WriteLine("Look: {0}", result!.SomeProperty); // need override } これは見苦しく、少し人間工学的ではありません。 典型的な使用パターンのため、別のオプションがあります:結果タイプについてうそをつきます: public static …
22 c#  .net  null 

4
Microservice Architectureでの大容量ファイル/データ転送
私の会社は現在、マイクロサービスアーキテクチャの採用に取り組んでいますが、その過程で成長中の痛み(衝撃!)に直面しています。私たちが直面している主要な競合ポイントの1つは、異なるサービス間で大量のデータを通信する方法です。 ちょっとした背景として、社内全体で処理する必要があるドキュメントのリポジトリとして機能するドキュメントストアがあります。このストアとのやり取りは、クライアントに一意のIDとドキュメントをストリーミングする場所を提供するサービスを介して行われます。ドキュメントの場所は、指定されたIDを使用したルックアップを介して後でアクセスできます。 問題はこれです-すべてのマイクロサービスが、ドキュメントとやり取りする目的のために、APIの一部としてこの一意のIDを受け入れることは理にかなっていますか?私にとってこれは本質的に間違っているように感じます-サービスはもはや独立しておらず、ドキュメントストアのサービスに依存しています。これによりAPIの設計が簡素化される可能性がありますが、おそらく、パフォーマンスを改善するだけでなく、結果として得られるカップリングの利点が相殺される可能性もあります。 レインボーユニコーン(Netflix、Amazon、Googleなど)がサービス間の大きなファイル/データ交換を処理する方法を知っている人はいますか?

5
アルゴリズム:O(n)とO(nlog(n))を合計するにはどうすればよいですか?
重複を見つけて削除する次のアルゴリズムがあります: public static int numDuplicatesB(int[] arr) { Sort.mergesort(arr); int numDups = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { numDups++; } } return numDups; } これの最悪の場合の時間の複雑さを見つけようとしています。私はマージソートが知っているnlog(n)し、私のforループではデータセット全体を反復処理しているので、それはとしてカウントされnます。しかし、これらの数値をどうするかはわかりません。合計するだけですか?もしそうするなら、どうすればいいですか?

4
C ++の安全なインターフェイスのパターンは何ですか
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 注:以下はC ++ 03コードですが、今後2年以内にC ++ 11への移行を予定しているため、この点に留意する必要があります。 私は、C ++で抽象的なインターフェースを作成する方法についてのガイドライン(特に初心者向け)を書いています。この件についてサッターの両方の記事を読み、インターネットで例と回答を検索し、いくつかのテストを行いました。 このコードはコンパイルしてはいけません! void foo(SomeInterface & a, SomeInterface & b) { SomeInterface c ; // must not be default-constructible SomeInterface d(a); // must not be copy-constructible a = b ; // must not be assignable } …
22 c++ 

5
秘密鍵を保存する場所は?
ソフトウェアの一部を暗号化するとします。たとえば、データベースなどの資格情報。これらの値をどこかに保存する必要がありますが、クリアテキストで保存すると、攻撃者が簡単に不正アクセスを取得できます。 ただし、クリアテキストを暗号化する場合、キーはどこに保存しますか?難読化のレベルに関係なく、ソフトウェアがアクセスできるものはすべて、意欲的な攻撃者はアクセスできます。 キーがファイルシステムのセキュリティモデルによって保護されているとします。しかし、(悪意のある)スーパーユーザー、またはそのような忠実度を提供しないプラットフォームはどうでしょうか? または、キーはソフトウェアバイナリにハードコードされていますが、常にデコンパイルできます。オープンソースソフトウェアや解釈されたコードについてはどうでしょうか。 キーが生成される場合、そのようなアルゴリズムは決定的(おそらく)である必要があり、同じ問題がシードに適用されます。 等 暗号化は、チェーン内の最も弱いリンクと同じくらい強力であり、これはかなり緩いもののようです!それが仕事にふさわしいツールだと思い込んで(ユーモア)、そのような情報を堅牢に保護するにはどうすればよいでしょうか? ジョブに適したツールについて:おそらく、たとえば-サービスアクセス(DB、認証サーバーなど)の場合、サービスアカウントを使用してこの層でのアクセスを制限します。監査などのように、クリアテキストで資格情報を持っていることはそれほど心配ではありません。 しかし、私にはそれでも不十分だと思われます。だれもいるべきではないところをぶらぶらしたくないのです!

6
sizeofスタイル:sizeof(type)またはsizeof変数?
sizeofメモリ関連の操作(in memsetやなどmalloc)に使用する2つのスタイルを見てきました。 sizeof(type)、そして sizeof variable または sizeof(variable) どちらを好むか、2つのスタイルを組み合わせて使用​​しますか。また、各スタイルをいつ使用しますか。各スタイルの長所と短所、およびそれらを使用するときは何ですか? 例として、一方のスタイルが役立ち、もう一方のスタイルが役立たない次のような状況を見ることができます。 ポインターの間接指定が間違っている場合: type *var; ... memset(var, 0, sizeof var); /* oops */ タイプが変更されたとき: new_type var; /* changed from old_type to new_type */ ... memset(&var, 0, sizeof(old_type)); /* oops */
22 c  coding-style 

5
事前スクリーニングコーディングテスト-どのくらいの期間が妥当ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 編集 トピックについて十分に考え、自己反省した後、この質問で提起した問題のほとんどは、専門的な観点ではなく個人的な観点からのみ生じていることに気付きました。したがって、モデレーターは、私が話そうとした問題の非常に個人的で主観的な性質のため、この質問を保留にしました。私は質問を言い換えることを考えていましたが、質問をより客観的な方法で明示する可能な方法を実際に見つけることができなかったので、答えが何らかの証拠または参照でバックアップできる議論の主題になる可能性があります。 まだ興味のある人のために、私はこの質問から浮かび上がった議論の要約を述べようとしています: 4時間の事前インタビュー、オフサイトプログラミングテストは通常​​ではありませんが、 多くの人々は、いくつかの企業では、それよりもずっと長い間インタビューするだろうと指摘しました。 テストを受けるかどうかは私たちの個人的な決定であり、私たちの状況と会社に雇われたという認識された利益に基づいてこれを評価することができます すべての企業は人々とは異なり、ニーズや状況に合うものであれば、企業がより長いインタビュー前のオフサイトテストを採用することは完全に合理的です。 元の質問は、私に4時間を期待するのがいかに合理的であり、ソリューション(コードではなく設計)を企業で使用できるように問題をどの程度倫理的に与えるかについてでした。私が見ることができるように、これらの質問の両方は、スタック交換のような質問回答型のコミュニティツールを使用するのではなく、フォーラムの議論でしか探せません。 しかし、あなたの答えはすべて貴重であり、共有してくれてありがとう。 オリジナルポスト 私はいくつかのポジションの面接を行っていますが、そのほとんどに事前スクリーニング段階があり、電話インタビューまたはオンサイトインタビューを行う前にコーディングテストを提出する必要があります。私はこのアイデアにかなり慣れており、企業が私にこれを行うことを期待するのはかなり合理的であり、私が自分で作成できる仕事の種類を確認できます。 一般に、私の経験では、これらのタイプのコーディング演習はほとんどが小さなプログラミングタスクです。いくつかのロジックを実行し、おそらく小さなアルゴリズムを実装し、ファイルを開いてデータを読み書きします。最も単純なタスクでさえ、ロジック、テスト可能なコンポーネントなどをうまく分離することで実装でき、候補者がどのようにコーディングしているか、一般的には会社が記入したい仕事のタイプにどれだけ準備ができているかを確認できます。 最近、私は彼らのビジネスの実際の問題を解決するために私に彼らの運動のページ全体の長い説明を含むコーディングテストを送ってくれた会社に出会いました(私は会社を保護するための詳細は言いたくないが、テスト彼らが何をすべきかについてほとんどでした)。彼らは実装するかなり複雑なシステムを説明し、実際のデータを含め、最終的に彼らはコーディングテストに4時間以上かかるべきではないと結論付けました。 会社から、挨拶をする前であっても、私の自由時間にダミーの割り当てに4時間を費やすことを期待するのは合理的ですか?(採用担当者がコーディングテストを送ってくれました) 誤解しないでください、私は新しい仕事と新しい挑戦を見つける意欲がありますが、ほとんどの企業は私がそのようなタスクに最大1〜2時間を費やすことを期待しており、そのようなタスクは常にはるかに簡単です。 この会社で結論として思いついたのは、次のいずれかです。 1)私の動機は良くなく、おそらく彼らは他の誰かを探している 2)彼らは将来の従業員に敬意を払わず、彼らに挨拶することなく、このような長いコーディングテストが行​​われることを期待していません 3)彼らは、自分が取り組んでいる問題の1つを提供し、無料で解決できる熱心な若い女性がいないかどうかを確認したいだけです(繰り返しますが、誤解しないでください私は陰謀論者ではありませんが、私は持っていますそのような話を聞いた...) 企業は、候補者と話をせずにダミーのコーディングテストに時間を費やすことを企業が期待するのはどれくらい合理的だと思いますか?一般的にあなたの経験は何ですか?
22 interview 

4
多対多(ジャンクション)テーブルに一意のID列が必要ですか?
EFでいくつかのプロジェクトを開始しましたが、結合テーブルやキーなどについて質問がありました。アプリケーションのテーブルと権限のテーブルがあるとします。アプリケーションには多くの権限があり、各権限は多くのアプリケーション(多対多)に属することができます。 これで、アプリケーションテーブルとアクセス許可テーブルが簡単になりました。 Applications -------------- PK ApplicationID Name Permissions -------------- PK PermissionID Name しかし、結合テーブルを実行する最良の方法は何ですか?次の2つのオプションがあります。 ApplicationPermissions ----------------------- PK ApplicationPermissionID CU ApplicationID CU PermissionID または ApplicationPermissions ----------------------- CPK ApplicationID CPK PermissionID PK = Primary Key CPK = Composite Primary Key CU = Composite Unique Index ある方法で他の方法よりもやけどをしたことがありますか?それは厳密に好みですか?リポジトリパターンによって多くの「違い」が抽象化されることがわかりました(たとえば、アクセス許可オブジェクト全体を作成してアプリケーションに追加することはほとんどありませんが、IDまたは一意の名前または何か)、しかし、私はホラーストーリーを探していると思います。


4
GPL-配布とは何ですか?
GPLプロジェクトの不正流用の疑いについて、別のスレッドで興味深い点が浮上しました。この場合、エンタープライズソフトウェアは、本質的にコードを取得し、名前を変更し、GPL通知を削除して結果を使用した大企業によって使用されました。 要点は、会社がこれを行い、ソフトウェアを内部でのみ使用した場合、配布はなく、GPLで完全に合法であることです。内部使用のための従業員による変更も許可されます。 それで、どの時点で分布になりますか? おそらく、彼らが「雇用のための仕事」の下で外部の請負業者を持ち込んだ場合、彼らの修正も内部的なものであり、分配ではないでしょう。 変更を行うために外部ソフトウェアを雇い、それらの変更が社内でのみ使用された場合、それらの変更は配布されますか?GPLはクライアントまたは外部開発者に適用されますか? 会社が結果を別の部門、別のビジネスユニット、別の会社に渡した場合、他の会社が完全子会社の場合はどうなりますか? 追伸 はい、私は答えが弁護士に尋ねることであることを知っています。しかし、GPL2 / GPL3の配布に関して私が見た議論はすべて、Webサービスに関するものであり、内部使用に関するものではありません。
22 legal  gpl 

6
単体テストは本当にドキュメントとして使用されていますか?
「ユニットテストは、テスト中のコードのドキュメントの非常に重要なソースである」という流れの中でステートメントを読んだ回数を数えられません。それらが真実であることを否定しません。 しかし、個人的には、ドキュメントとしてそれらを使用していることを発見したことはありません。私が使用する典型的なフレームワークの場合、メソッド宣言はそれらの動作を文書化しており、それが私が必要とするすべてです。そして、ユニットテストでは、そのドキュメントに記載されているすべての内容に加えて、内部的なものがバックアップされる可能性があるため、一方では文書化を複製し、他方では無関係なものを追加する可能性があります。 質問は次のとおりです。ユニットテストはいつドキュメントとして使用されますか?コメントがすべてを網羅していないときは?開発者はソースを拡張しますか?そして、ドキュメント自体が公開できない有用で関連性のあるものを公開しますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.