ソフトウェア工学

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

8
「倫理的」な理由で差別するソフトウェアライセンス
よくあるコピーレフトと寛容なソフトウェアライセンスを読むのに少し時間を費やしました。アプリケーションまたはアルゴリズムの作成者が、自身の個人的な偏見に基づいて誰が製品を使用/配布できるかを広く指定できるライセンスはありますか? 私は、人々が二重ライセンスを使用して営利団体に許容ライセンスの支払いを強制するか、プロジェクトのソースコードの配布を強制することを理解していますが、たとえば、「このコードは自由に使用できますが、業界xに関与していないエンティティ(フリーソフトウェアを使用する価値がないと判断したエンティティ)によって変更および配布されます。」 私はそのようなライセンスやライセンステンプレートを見つけることができず、少なくとも一部のプログラマーは製品の倫理的な意味を心配するだろうと考えていました。AIパスファインディングアルゴリズムを作成し、それが武装ドローンまたは北極の流氷モデルを誘導しないようにし、許容スタイルのライセンスを使用しながら、オフショア石油掘削に使用されないようにすることは可能ですか?

9
バージョン管理フックで単体テストを実行するのは良い習慣ですか?
技術的な観点から、特定のコミットをリモートのデフォルトブランチにマージする前に、ユニットテストを実行する事前/事後プッシュフックを追加することができます。 私の質問は-ビルドパイプラインでユニットテストを保持する(つまり、破損したコミットをレポに導入する)方が良いのか、それとも「悪い」コミットが発生しないようにする方が良いのかです。 私は、この2つのオプションに制限されていないことを理解しています。たとえば、マージコミットをレポジトリにプッシュする前に、すべてのコミットの分岐とテストを許可できます。しかし、この2つのソリューションを正確に選択する必要がある場合、どちらを選択しますか。

7
完全な不変性とオブジェクト指向プログラミング
ほとんどのOOP言語では、オブジェクトは通常、限られた例外セット(たとえば、Pythonのタプルや文字列など)を使用して変更可能です。ほとんどの関数型言語では、データは不変です。 可変オブジェクトと不変オブジェクトの両方が、独自の長所と短所の完全なリストをもたらします。 たとえば、(明示的に宣言された)可変データと不変データがあるscalaのような両方の概念を結合しようとする言語があります(間違っている場合は修正してください、scalaの知識は限られています)。 私の質問は次のとおりです。完全な(原文のまま!)不変性-つまり、オブジェクトが作成された後はオブジェクトを変更できません-は、OOPコンテキストで意味をなしますか? そのようなモデルの設計または実装はありますか? 基本的に、(完全な)不変性とOOPは反対ですか、それとも直交ですか? 動機:OOPでは通常、データを操作し、基礎となる情報を変更(変更)し、それらのオブジェクト間の参照を保持します。たとえば、別のオブジェクトを参照Personするメンバーを持つクラスのオブジェクト。父親の名前を変更すると、更新の必要なく、これはすぐに子オブジェクトに表示されます。不変なので、父と子の両方に新しいオブジェクトを構築する必要があります。ただし、共有オブジェクト、マルチスレッド、GILなどを使用すると、kerfuffleがはるかに少なくなります。fatherPerson

3
ブールメソッドの命名の肯定と否定
ブール型メソッドは、否定的な形式でのみ使用される場合でも、常に肯定的な形式を取る必要がありますか? エンティティを作成する前にエンティティが存在するかどうかを確認したかったとしましょう。私の主張は、メソッドが肯定的なフォームで使用されているかどうかに関係なく、下の最初のフォームは2番目のフォームより優れているということです。 要約すると、私はif(!affirmative)よりも読みやすいと思いますif(negative)。意見が合わない同僚がいますか? 最初のフォーム: int entity_id = 42; if(!entity_exists(entity_id)) create_entity(entity_id); 2番目のフォーム: int entity_id = 42; if(entity_not_exist(entity_id)) create_entity(entity_id);
43 naming  functions 

4
git-flowおよびgithubを使用したコードレビュー
通常のgitとgithubを使用して、マスターブランチに取り組んでいる機能ブランチのプルリクエストを作成するだけで、コードレビューを行うことができます。git-flowでコードレビューを行うにはどうすればよいですか?「git flow feature finish`」のようなワークフローでは、コードレビューが実際に行われる場所と、git-flowまたはgitがそのレビューを容易にする方法について混乱しています。

3
SOLID Principlesのプログラミング
時間が経つにつれて、SOLIDの 2つの部分、「S」と「O」を理解できました。 「O」–継承と戦略パターンの助けを借りて、オープンクローズドプリンシプルを学びました。 “ S” – ORMの学習中に単一責任の原則を学習しました(永続化ロジックはドメインオブジェクトから取り除かれます)。 同様に、SOLIDの他の部分(「L」、「I」、「D」)を学習するのに最適な領域/タスクは何ですか? 参照資料 msdn-C#でのSOLID原則違反の危険性 channel9-.NET / C#でのSOLID Principlesの適用 OOPS原則(固体原則)

16
ソフトウェアバージョン番号としての日付
ソフトウェア開発者は通常、日付をバージョン番号として使用しませんが、YYYYMMDD形式(またはそのバリエーション)は十分に堅実に見えます。そのスキームに何か問題はありますか?または、限定された「タイプ」のソフトウェアのみに適用されますか(社内制作など)。
43 versioning 

11
符号なし整数に関するベストプラクティスは何ですか?
私はどこでも符号なしintを使用していますが、そうすべきかどうかはわかりません。これは、データベースの主キーID列からカウンタなどになります。数値が負の値にならないようにする場合は、常にunsigned intを使用します。 しかし、他のコードでは、他の誰もこれを行っていないようです。私が見落としている重要なものはありますか? 編集:この質問以来、私はCでは、C ++のように例外をスローするのではなく、エラーに対して負の値を返すことが一般的であることに気付きました。

6
long if条件をフォーマットする最も読みやすい方法は?[閉まっている]
if可能な場合は、長い巻き取り条件を避ける必要がありますが、ときどき私たち全員がそれらを書くことになります。たとえそれが非常に単純な条件であっても、関係するステートメントは時々非常に冗長であるため、条件全体が非常に長くなります。それらをフォーマットする最も読みやすい方法は何ですか? if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } または if ( FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy ) { thud(); } または if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } または thudable = FoobarBaz::quxQuux(corge, grault); thudable ||= !garply(waldo); thudable …

3
コントローラがサービスの代わりにリポジトリを呼び出すのは悪い習慣ですか?
コントローラがサービスの代わりにリポジトリを呼び出すのは悪い習慣ですか? さらに説明する: 優れた設計では、コントローラーがサービスを呼び出し、サービスがリポジトリを使用することがわかります。 ただし、コントローラーにはロジックがない場合や必要ない場合があり、dbからフェッチしてビューに渡すだけでよい場合があります。 そして、私はリポジトリを呼び出すだけでそれを行うことができます-サービスを呼び出す必要はありません-それは悪い習慣ですか?

7
各スプリントの複数のブランチ/開発者からのコードの統合をどのように処理しますか?
開発者は、各スプリントのマスターブランチへのストーリーの統合について懸念を表明するレトロコールを終了しました。開発者はすべて自分のブランチ内のコードを作成し、スプリントの終わりに向かってすべて1つのマスターブランチにマージします。 次に、ある開発者(通常は同じ開発者)に、すべてが他の開発者のコ​​ードとうまく統合されていることを確認するタスクを残します(ほとんどの変更は同じページにあります。たとえば、データ表示ストーリー、データフィルターストーリー、 SLAインジケータ)。 この負担を軽減し、コードをより簡単にマージするにはどうすればよいですか?私の観点からすると、POまたはSMがストーリーをより効率的な方法で優先順位付けすることで、同じスプリントでこれらの種類の依存関係がなくなるため、いくつかの問題が解決する可能性があります。他のみんなはどのようにこれに取り組んでいますか?または、これはプロセスの一部ですか?


9
「原始的な強迫観念」を許す正当な理由は「ヨーヨーの問題を回避する」ことですか?
よると、原始的強迫観念ではないコードのにおいがある場合は?、Stringオブジェクトの代わりに郵便番号を表すZipCodeオブジェクトを作成する必要があります。 しかし、私の経験では、私は見たいです public class Address{ public String zipCode; } の代わりに public class Address{ public ZipCode zipCode; } 後者では、プログラムを理解するためにZipCodeクラスに移動する必要があると思うからです。 そして、私はすべてのプリミティブデータフィールドがあるかのように感じているクラスに置き換えた場合、私は定義を参照するために多くのクラス間を移動する必要があると考えているから苦しみヨーヨー問題(アンチパターン)。 そこで、ZipCodeメソッドを新しいクラスに移動したいと思います。例えば: 古い: public class ZipCode{ public boolean validate(String zipCode){ } } 新着: public class ZipCodeHelper{ public static boolean validate(String zipCode){ } } そのため、郵便番号を検証する必要があるのはZipCodeHelperクラスに依存するだけです。そして、私は原始的な強迫観念を保持する別の「利点」を見つけました。たとえば、文字列列zipCodeを持つアドレステーブルなど、クラスがシリアル化された形式のように見えます。 私の質問は、「ヨーヨーの問題を回避する」(クラス定義間を移動する)が「原始的な強迫観念」を許可する正当な理由ですか?

8
何も表さないクラス-それは正しいですか?
アプリケーションを設計しているだけで、SOLIDとOOPを正しく理解しているかどうかはわかりません。クラスは1つのことを実行し、適切に実行する必要がありますが、一方で、クラスは実際のオブジェクトを表します。 私の場合、データセットで特徴抽出を行い、機械学習分析を行います。私は3つのクラスを作成できると思います FeatureExtractor データセット アナライザ しかし、FeatureExtractorクラスは何も表さず、クラスというよりもルーチンのようなものにします。使用される関数はextract_features()1つだけです。 一つのことではなく一つのことを表すクラスを作成するのは正しいですか? 編集:それが重要かどうかはわかりませんが、私はPythonを使用しています そして、extract_features()がそのように見える場合:そのメソッドを保持する特別なクラスを作成する価値はありますか? def extract_features(df): extr = PhrasesExtractor() extr.build_vocabulary(df["Text"].tolist()) sent = SentimentAnalyser() sent.load() df = add_features(df, extr.features) df = mark_features(df, extr.extract_features) df = drop_infrequent_features(df) df = another_processing1(df) df = another_processing2(df) df = another_processing3(df) df = set_sentiment(df, sent.get_sentiment) return df

10
ランダムな整数が一意であることに依存しても問題ありませんか?
ネットワークプロトコルを実装しており、パケットに一意の識別子が必要です。これまでのところ、ランダムな32ビット整数を生成しており、プログラム/接続の存続期間中に衝突が発生する可能性は天文学的に低いと想定しています。これは一般に、本番コードで受け入れられるプラクティスと考えられていますか、それとも衝突を防ぐためにより複雑なシステムを考案する必要がありますか?

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