タグ付けされた質問 「code-quality」

高品質のコードを書くためのベストプラクティスに関する質問。

1
ソースコードのコメントがソフトウェアの品質、保守性、開発者の生産性に及ぼす影響に関する実証的な研究はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 私はソースコードにコメントし、ソフトウェア製品を文書化することを提唱しています。私の個人的な経験と観察から、厳密にコメントされているソースコードに取り組んでいると、ソフトウェアの成長や保守が必要になったときにさまざまな方法で役立ったことがわかります。 しかし、コメントすることは最終的に価値がない、またはその価値には疑問があると言う別のキャンプがあります。コメントなしのコーディングの支持者は次のように主張しています。 コードの一部が適切に記述されている場合、それは自明であり、したがってコメントする必要はありません コードが自明でない場合は、コメントを必要としないように、リファクタリングして自明にする テストスイートはライブドキュメントです 時間が経つにつれて、コードとコメントが同期しなくなり、別の頭痛の種になります アジャイルは、ドキュメントの山よりも作業コードの方が重要だと言っているので、コメントを書くことは安全に無視できます。 私にとってこれは単なる教義です。繰り返しになりますが、私の個人的な観察では、賢明で経験豊富な開発者のチームによって作成されたソフトウェアは、最終的に自明ではないかなりの量のコードになります。 繰り返しますが、Java API、Cocoa API、Android APIなどは、高品質のドキュメントを作成して維持したい場合にそれが可能であることを示しています。 これらすべてを言ったが、個人的な信念に基づいたドキュメントの長所と短所およびソースコードへのコメントについての会話は、通常うまく終了せず、満足のいく結論につながらない。 そのため、ソフトウェアドキュメントの影響、特にソースコードのコメント、品質と保守性、およびチームの生産性への影響に関する学術論文と実証研究を探しています。 そのような記事につまずいたことがありますか、もしあればその結果はどうでしたか?

6
if / elseまたはブール式によるブール代入のどちらがより保守性が高いですか?
どちらがより保守性が高いと考えられますか? if (a == b) c = true; else c = false; または c = (a == b); Code Completeで調べてみましたが、答えが見つかりません。 最初のほうが読みやすいと思います(文字通り大声で読むことができます)。2番目の方法は確かに理にかなっており、コードを削減しますが、C#開発者にとってそれが保守可能であるかどうかはわかりません(たとえば、このイディオムはPythonでもっと見られると思います)。

5
単体テストのコードを繰り返しても大丈夫ですか?
クラス割り当て用のソートアルゴリズムをいくつか作成し、アルゴリズムが正しく実装されていることを確認するためのテストもいくつか作成しました。私のテストの長さは10行に過ぎず、3行ありますが、3行の間で変更されるのは1行だけなので、多くのコードが繰り返されます。このコードを、各テストから呼び出される別のメソッドにリファクタリングする方が良いでしょうか?その後、リファクタリングをテストするために別のテストを作成する必要はありませんか?一部の変数は、クラスレベルまで移動することもできます。テストクラスとメソッドは、通常のクラス/メソッドと同じルールに従う必要がありますか? 以下に例を示します。 [TestMethod] public void MergeSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Millisecond); for(int i = 0; i < a.Length; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b = new int[1000]; a.CopyTo(b, 0); List<int> temp = b.ToList(); temp.Sort(); b = temp.ToArray(); MergeSort merge = new MergeSort(); …

6
私のコードをチーム内の他のプログラマーにとって読みやすくする必要がある
私はデルファイでプロジェクトを進めており、アプリケーションのインストーラーを作成しています。主に3つの部分があります。 PostgreSQLのインストール/アンインストール myapplication(myapplicationのセットアップはnsiを使用して作成されます)インストール/アンインストール。 スクリプト(バッチファイル)を使用してPostgresでテーブルを作成します。 すべてがうまくスムーズに実行されますが、何かが失敗した場合は、 このようにプロセスのすべてのステップをLogToFileするLogToFilegerを作成しました LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); 関数LogToFileToFile.LogToFile()これは、内容をファイルに書き込みます。これはうまく機能していますが、問題は、コードのどこでも関数呼び出しを見るだけでコードを読むことが難しくなっているため、コードが台無しになっていることLogToFileToFile.LogToFile()です 例 if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ Failed'); end; if Not FileExists(SystemDrive+'\SecondFileName.txt') then begin if CopyFile(PChar(FilePathBase+'SecondFileName.txt'), PChar('c:\SecondFileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] …


2
データベースサービス関数を呼び出すアプリケーションサービス層。悪いアーキテクチャ?
シナリオ: スタック:Java、Spring、Hibernate。 モデル:クライアントサーバーアプリケーション。 パターン:Model-View-Controller(MVC)。 サービス層クラスには3つの動作があります。 一部のサービスには、メソッド内にビジネスルールがあり、永続性をアプリケーションに委任します。お気に入り: EntityManager.save(entity); 一部のサービスは、単純にデータベース関数(パラメーターを渡す)を呼び出します。 CallableStatement cls = con.prepareCall( "{call databaseFunction(args)}"); 一部のサービスには、両方の動作を持つメソッドがあります。 私の質問: アプリケーションサービスに直接データベース機能を呼び出しても問題はありませんか?これは悪い習慣ではありませんか?このようなプロジェクトに適用できるアーキテクチャモデルは何でしょうか? 同じサービスで動作が混在することに問題はありますか?トランザクションや一貫性など? メンテナンスの場合、このカプセル化により、開発者はデータベースの機能も変更する必要があることがわかりにくくなりますか?これを回避するには? このシナリオは世界中の他のアプリケーションで発生しますか、それとも単なるアーキテクチャ上のエラーですか?

4
どこでもデータチェックを導入するのに適したコードスタイルですか?
プロジェクトのサイズが十分に大きいので、頭の中ですべての側面を維持することはできません。その中でいくつかのクラスと関数を扱っており、データを渡しています。 時間の経過とともにエラーが発生し続けることに気づきました。別の関数にデータを渡すときに、データの正確な形式を忘れてしまったためです(たとえば、ある関数が文字列の配列を受け入れて出力し、別の関数は後で記述します)。辞書などに保持されている文字列を受け入れるため、操作している文字列を配列に入れてから辞書に入れるように変換する必要があります)。 どこがどこでどこが壊れているのかを常に把握する必要がないように、私は各関数とクラスを「分離されたエンティティ」として扱うようになりました。場合によっては、データが間違った形式で指定されている場合は、データを再キャストします。 これにより、渡すデータがすべての関数に「適合」することを確認するために費やす時間が大幅に短縮されました。クラスと関数自体が、入力に問題がある場合に警告を発し(場合によってはそれを修正することもあり)、デバッガーを使用してコード全体を処理し、問題が発生した場所を特定する必要があります。 一方、これによりコード全体も増加しました。 私の質問は、このコードスタイルがこの問題の解決に適切かどうかです。 もちろん、最善の解決策は、プロジェクトを完全にリファクタリングし、データがすべての機能に対して均一な構造を持っていることを確認することです。 。 (参考:私はまだ初心者なので、この質問が素朴だった場合は失礼します。私のプロジェクトはPythonで行われています。)

4
多くの異なるステータスを表す整数コードを返す関数を作り直す
私は、以下の短いサンプルを含めたいくつかのひどいコードを継承しました。 この特定のアンチパターンに名前はありますか? これをリファクタリングするための推奨事項は何ですか? // 0=Need to log in / present username and password // 2=Already logged in // 3=Inactive User found // 4=Valid User found-establish their session // 5=Valid User found with password change needed-establish their session // 6=Invalid User based on app login // 7=Invalid User based on network …

2
単体テストと統合テストのコードカバレッジレポートを分けますか、それとも両方のレポートを1つにしますか?
単体テストと統合テストの個別のコードカバレッジレポート、または両方のコードカバレッジレポートが必要ですか? この背後にある考え方は、コードカバレッジにより、コードが可能な限りテストによってカバーされていることを確認できるということです(とにかく、マシンができる限り)。 個別のレポートがあると、単体テストでカバーされなかったこと、統合テストでカバーされなかったことを知るのに便利です。しかし、この方法では、総カバレッジ率を確認できません。

6
複数のスクラムチームによるコードの所有権
2つのスクラムチームが同じソフトウェアコンポーネントを使用する場合、そのコンポーネントの明確なアーキテクチャビジョンを提供し、コードベースの進化に合わせてこのビジョンを維持/開発する責任を持つのは誰ですか?スクラムでは、共同でコードを所有することになっているので、チームAが行った開発がチームBが行った開発に干渉しないようにする方法を教えてください。

5
複数のif-elseでフラグを処理する方法
私のコードや他の人には、これが頻繁に見られるようです。それについてひどく間違っているように見えることについては何もありませんが、それはより良くできるように見えるので私を困らせます。Caseステートメントはもう少し理にかなっていると思いますが、多くの場合、変数はCaseステートメントではうまく機能しないか、まったく機能しないタイプです(言語によって異なります)。 If variable == A if (Flag == true) doFooA() else doFooA2 else if variable == B if (Flag == true) doFooB() else doFooB2 else if variable == C if (Flag == true) doFooC() else doFooC2 これを「因数分解」する方法は複数あるようです。たとえば、if-elsesの2つのセットで、1つのセットがFlag == trueのときに処理します。 これを因数分解する「良い方法」はありますか、またはこのif-elseアルゴリズムが発生した場合、通常は何か間違っていることを意味していますか?

6
言語に慣れていないときにコードの品質を評価する方法は?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 仮説として、私の経験が.NETであるときに誰かに新しいPHP開発者の面接を依頼した場合、彼らが提供したコードサンプルが効率的で質が良いかどうかをどのように判断できますか? 言い換えれば、言語に慣れていない場合にプログラマーのコードを評価するための最良の方法は何ですか?

7
コードを記述できる状態から優れた開発者になるにはどうすればよいですか?
スクリプト(bash、awk)から単純なアプリケーション(c、php、python)を記述して、より大きく複雑なソフトウェアを設計および開発する方法に至る具体的な説明がないことに私は不満を感じています。一方にはプログラミング言語の本があり、もう一方にはプログラマーのチーム向けに設計されたソフトウェアエンジニアリング/プロジェクト管理の本があるようです。 私は両方をたくさん読みました。私はXP / Agileの古典を読んだことがあり、ソフトウェア開発プロセスについて適切な理論的理解を持っています。私は他の人のコードを読むのが好きで、それをかなり順守できます。しかし、プロジェクトのアイデアがある場合、または「ここが問題/必要です」から「ここが解決策」に行きたいとき、私の心は空白を描き、どこから始めればよいのかわかりません。 私はそれをハックするだけですか?チームで働いていない個々の開発者や、大きなソフトウェア会社のための構造化されたワークフローはありますか?私はPMPを取得したり、ソフトウェア会社で働いたりすることを望んでいません。効果的、効率的、実用的なワークフローを探しています。

5
「依存性サイクルなし」ルール(NDepend)はどの程度厳密に遵守していますか
背景:チームリーダーとして、私はNDependを週に1回程度使用して、コードの品質をチェックしています。特に、テストカバレッジ、コード行、循環的複雑度メトリックスは私にとって非常に貴重です。しかし、それが平準化と依存関係のサイクルになると、私は少し心配です... Patrick Smacchiaが、平準化の目標を説明する素晴らしいブログ投稿を公​​開しています。 明確にするために:「依存サイクル」の下で、2つの名前空間間の循環参照を理解しています。 現在、組み込み機器用のWindows CEベースのGUIフレームワークに取り組んでいます。Androidグラフィックスプラットフォームについて考えてみてください。ただし、非常にローエンドの機器向けです。フレームワークは、約50.000行のコード(テストを除く)の単一のアセンブリです。フレームワークは次の名前空間に分割されます。 コアナビゲーションとメニューサブシステム 画面サブシステム(プレゼンター/ビュー/ ...) コントロール/ウィジェットレイヤー 今日、私はコードを適切なレベルにするために半日を費やしました[Resharperのおかげで一般に問題はありません]。 だから私の質問:「依存サイクルなし」ルールをどの程度厳密に守っていますか?平準化は本当に重要ですか?

9
人々がベンダーを嫌うのを防ぐために、ソフトウェア製品を管理する上でどのような間違いを避ける必要がありますか?
人々がマイクロソフトを嫌う理由についての以前の質問は締め切られました。これは、同じ一般的な線に沿って、もう少し建設的な質問への試みです。これは広いですが狭いです。マイクロソフトだけでなく、一般的なソフトウェアベンダーを対象とすることで、より一般的です。ソフトウェア製品の管理のみを扱うことで、より狭くなります。 それでは、個々のソフトウェア製品だけでなく、会社全体が尊敬/好意/見られることを確実にするために、個々のソフトウェア製品を管理する際にどのような手順を実行(または回避)する必要がありますか?

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