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

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

8
既存の悪い習慣、または古いコードに適合しない良い習慣を使用する方が良いでしょうか?
既存のサードパーティ製ソフトウェアの拡張機能を作成しようとしていたため、そのデータベースは恐ろしく非正規化されていたため、これを考えていました。既存のテーブルを使用して、多数の新しいフィールドを追加する必要がありました。 デザインスタイル(1つの大きなテーブルにあるほとんどすべてのプロパティで構成される)で新しいテーブルを作成するか、新しいテーブルセットを一緒に作成し、トリガーなどの特別なものを使用して、新しいテーブルと古いテーブル。 結局、既存の貧弱なデザインスタイルを使用するという最初のオプションに行き着きましたが、この質問が残されました:既存の悪い慣行に行くのか、既存のコードにうまく合わない良い慣行を実装するのが良いのでしょうか?どちらかを選択する必要がある状況はありますか? 注:これまでの多くの答えは、悪いコードをゆっくりとリファクタリングすることに関係していますが、私はそれをすることができません。コードは私たちのものではなく、ベンダーによって頻繁に更新されます。私はそれの上にのみ構築できます。

10
開発者が自分の作品のエッジケースを継続的に無視することに対処する
私のチームの開発者の1人に、興味深い、かなり一般的な問題があります。この男は優れた開発者であり、高速かつ生産的であり、かなり良い品質のコードなどを生成します。良いエンジニア。しかし、彼には問題があります-非常に多くの場合、彼はコードのエッジケースに対処できません。 私たちは彼と何度も話しましたが、彼は試みていますが、彼はこのように考えていないようです。そのため、最終的にQAがコードに関する多くの問題を発見し、何度も何度も開発に戻して、最終的に納期を逃し、チームの全員が不満に陥ることになります。 私は彼に何をすべきか、そして彼がこの問題を克服するのをどのように助けるかを知りません。おそらく、より多くの経験を持つ人がアドバイスできますか?

9
地図で広告掲載順序の問題を伝える方法は?
データベースから一連のタプルを取得して、マップに入れています。データベースクエリは高価です。 マップ内の要素の明らかな自然な順序付けはありませんが、それでも挿入順序は重要です。マップの並べ替えは重い操作になるため、クエリ結果が既に希望どおりに並べ替えられている場合は、それを避ける必要があります。したがって、クエリ結果をに保存LinkedHashMapし、DAOメソッドからマップを返します。 public LinkedHashMap<Key, Value> fetchData() processDataマップ上で何らかの処理を行うメソッドがあります。いくつかの値を変更し、いくつかの新しいキー/値を追加します。次のように定義されます public void processData(LinkedHashMap<Key, Value> data) {...} ただし、いくつかのリンター(ソナーなど)は、「データ」のタイプは「LinkedHashMap」(squid S1319)の実装ではなく、「Map」などのインターフェースであるべきだと文句を言います。 だから基本的には私が持っているべきだと言っている public void processData(Map<Key, Value> data) {...} しかし、メソッドのシグネチャには、マップの順序が重要であると言うようにしたい-それはアルゴリズムにとって重要であるprocessData-したがって、私のメソッドはランダムなマップだけに渡されない。 を使用したくないのはSortedMap、(のjavadocからjava.util.SortedMap)「キーの自然な順序に従って、またはソートされたマップ作成時に通常提供されるComparatorによって順序付けられる」ためです。 私のキーには自然な順序がありません。コンパレータを作成して何もしないのは冗長です。 そして、putキーの重複などを回避するために活用するために、それがマップであることを依然として望んでdataいますList<Map.Entry<Key, Value>>。 それで、私のメソッドはすでにソートされたマップを必要としていると言うにはどうすればいいですか 残念なことに、java.util.LinkedMapインターフェースはありません。そうでなければ、私はそれを使用していました。
24 java  code-quality  map 

4
プルリクエストでTODOを処理する方法
この質問は、Software Engineering Stack Exchangeで回答できるため、Software Quality Assurance&Testing Stack Exchangeから移行されました。 昨年移行し ました。 プルリクエストの変更を確認すると、「TODO」のメモが付いたコメントに出くわすことがあります。 問題を解決するために使用されるソリューションは改善できますが、かなりの時間投資が必要になります。作成者はより迅速なソリューションを選択しましたが、より良いオプションが潜在的に利用可能であるというコメントを入れました すぐに修正する必要がある既存のバグを回避するための一時的なコードがあります TODOsが一般的にコードベースの存続期間中コードベースに留まることを知っているので、プルリクエストでそれらにどのように対応する必要がありますか?どうすればそれを避けるよう丁寧に要求できますか、またはそれが本当に正当化された場合、PRの作者が将来それをフォローアップすることをどのように確認できますか?

9
複雑さを追加して重複コードを削除する
私はすべてが一般的な基本クラスから継承するいくつかのクラスを持っています。基本クラスには、typeのいくつかのオブジェクトのコレクションが含まれますT。 各子クラスは、オブジェクトのコレクションから補間値を計算できる必要がありますが、子クラスは異なるタイプを使用するため、計算はクラスごとにわずかに異なります。 これまで、コードをクラスからクラスにコピー/ペーストし、それぞれに小さな変更を加えました。しかし、今は重複したコードを削除し、基本クラスの1つの汎用補間メソッドに置き換えようとしています。しかし、それは非常に困難であることが証明されており、私が考えているすべての解決策は非常に複雑に思えます。 DRYの原則はこのような状況にはあまり当てはまらないと思い始めていますが、それは冒aspのように聞こえます。コードの重複を削除しようとすると、どれだけ複雑になりますか? 編集: 私が思いつく最良の解決策は次のようなものです: 基本クラス: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return GetInterpolatedItem(frame, Data[index - 1], Data[index]); } protected abstract T GetInterpolatedItem(int …

7
「コードサンプル」はどのように表示されますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 ちょうどいい電話インタビューをしたばかりです(CakePHPに関連した立場のため、質問にとって特に重要なことではありません)。インタビュアーは私の履歴書と性格に感銘を受けたようです。しかし、最後に、彼は私の既存の作業プロジェクトからのコードサンプルをメールで送信するように頼みました。「あなたがひそかにひどいプログラマーではないことを確認するために! 私は自分のコードがそれ自体で成り立たないのではないかと心配しているわけではありませんが、私は専門家というよりは中級のプログラマーです。コードサンプルがその場で私を除外する場合、コードサンプルが落ちないことを確認するべき明らかな落とし穴は何ですか?第二に、これはおそらく答えるのが難しい部分です。コードサンプルのどの機能が印象的で、すぐにプログラマーに好意的になりますか? すべてのアイデアや提案を歓迎します!

9
私の同僚はナイスガイですが、彼のパフォーマンスは平均以下です。上司に伝えますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は約3か月前にプロジェクトに参加しましたが、それまで遅れていたため、新しく雇われた1人の開発者によって開発されていました。公平を期すと、このプロジェクトは、微妙な点が多く、比較的複雑な医療機器へのインターフェイスであるため、会社で経験のない人物を1人プロジェクトに配置することは、経営者の観点からはおそらく悪い決断でした。 とにかく、いったん作業を開始すると、...うまくいきませんでした。UIは素晴らしく見えましたが、実際には何もしませんでした。繰り返しになりますが、これは多くの場合、この開発者がデバイスへのインターフェイスを作成する準備が適切に行われていないためです。しかし、適切なコードが壊れやすく、保守が非常に難しいこともすぐにわかりました。 今、私は世界で最高のプログラマーであると主張していません。私は、私よりも優れた開発者である非常に頭の良い人たちと仕事をしています。しかし、できる限りシンプルで堅牢なコードを書くことは非常に難しいです。チェックインをテストします。コードが乱雑になり、作業が難しくなっていることがわかった場合は、変更します。私は同僚がより良いコードを書くのを手伝うために、同僚と何度か話をしました。a)彼は20年以上の分野での経験があり、私は5歳しかいません。b)彼はいわゆる「UXエキスパート」として雇われ、他の人は彼を経験豊富な個人と見なしています。 とは言っても、私はそれを見ないだけです。彼はとてもいい人であり、理にかなっていますが、壊れやすいコードを何度もチェックインし、最も楽観的なケースでのみ動作し、10回のうち9回は彼の作品のバグを修正します。彼のコードはアマチュアっぽいようで、明らかに、彼が雇われたときに持っていたと主張するレベルの経験を持っていません。彼のコードのリファクタリングとバグの修正に費やした余分な時間が私に負担をかけたというところまで来ました。私がそれを見る方法には、2つのオプションがあります: 何もせず、この製品が時間通りに出て、堅牢であり、将来的に彼が失敗するのを待つために、お尻をつぶしてください(最初のリリースの後、このプロジェクトで彼と一緒に仕事をするつもりはありません) 上司に彼のパフォーマンスについて話してください。私の上司は理にかなった人ですが、このアプローチをとるのは気まずいです。私は同僚を「バッシング」するのが好きではありません(より良い用語がないため)同僚と私は彼がそれを取る方法を知りません。 だから、それはそれについてです。彼の実装が機能しない理由や、コードをより保守しやすくする方法を説明することで、同僚とこれを解決しようとしましたが、彼は同じ間違いを犯し続けています。他の人が同じような状況をどのように扱っているのか、特に現在管理職の人たちがどのように扱っているかを聞くことに非常に興味があります。アドバイスをありがとうございます。

7
複雑すぎる方法を避ける-循環的な複雑さ
Cyclomatic Complexityを削減するためにこの方法をどのように実行するかわからない。ソナーは13を報告しますが、10が予想されます。しかし、この方法をそのままにしておいても、ソナーのルールに従う方法に挑戦するだけでは何の害もありません。どんな考えでも大歓迎です。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { …


7
単体テストのコード品質?
単体テストを作成するとき、コードの品質と可読性を高めるために余分な時間を費やす価値はありますか? テストを書くとき、より速く書くために、そして非常に多くの変数の使用を避けるために、私はしばしばDemeterの法則を破ります。技術的には、単体テストは直接再利用されません-それらはコードに厳密にバインドされているため、それらに多くの時間を費やす理由は見当たりません。機能する必要があるだけです。

2
Groovyでdefを使用する場合
私はGroovyで少しの間開発を続けてきましたが、どのくらいの頻度でダイナミックキャスティングを使用する必要があるのdefでしょうか?私の同僚は、Groovyが私には理解できない何らかの形で役立つので、常に使用すべきだと考えています。 現在、メソッドの戻り値の型と引数を宣言するとき、どのオブジェクトを取り込み、吐き出すかを意図的に述べたいと思います(コードを読みやすくするために、Javaのバックグラウンドから来たのは理にかなっています)例: String doSomething(String something){ //code } // vs def doSomething(def somthing){ //code } // vs def doSomething(somthing){ // code } だから、私の質問は、いつ使用するdefかという好みだけですか、それを常に使用することに本当の利点があるのでしょうか?(最後の例を追加したのは、Groovyの実行可能なオプションとしての質問に収まると感じたからです)

6
TESTコードをテストするにはどうすればよいですか?
ほとんどのソフトウェア開発者が同意する数少ない点の1つは、テストしない限り、正しく動作するためにコードに依存すべきではないということです。あなたがそれをテストしないなら、それはあなたが将来さらに仕事をすることになるだけの隠れたバグを持っているかもしれません。 通常のコードのテスト方法は理解していますが、テストコードをテストして、エラーが存在する場合に効果的にエラーを見つけて報告できることを確認するにはどうすればよいですか?私は個人的には、あるべきではないときに合格する誤ったテストケースを書くほど愚かであり、そもそも筆記テストの目的を破っています。幸いなことに、私は時間内にエラーを見つけて修正しましたが、テストのマントラによれば、それが機能することを確認するための独自のテストセットがなければ、テストスイートは完成しないようです。 これを行うための最良の方法は、バグのあるコードのテストが失敗することを確認することだと思われます。テストは「動作」します。これにより、2番目の質問が表示されます。テストケースでバグを確実にキャッチするために、バグを導入する良い方法は何ですか?文をランダムにコメントアウトしif-else、条件を否定して間違ったブランチを実行することを確認し、副作用などでコードの実行順序を変更して、テストが最もキャッチされるようになるまで一般的なバグ?プロの開発者は、テストが実際に行うべきことを実際に行うことをどのように検証しますか?彼らは単にテストが機能すると仮定していますか、それともテストにも時間をかけていますか?もしそうなら、彼らはどのようにテストをテストしますか? 私は、人々がテストをテストし、実際に実際のコードを書くことのないテストのためにテストをテストするのにそれほど多くの時間を費やすべきだと提案しているわけではありませんが、 「メタテスト」の、そしてそれを行うための最良の方法に興味がありました。:D *「バグのない」コードをテストするときにテストが合格するかどうかを確認できましたが、テストの仕様としてコードを使用することはかなり逆に思えます...

8
コメントのない汚いコードを整理しますか?
ダーティコードについていくつか質問をしたいと思います。中規模のプロジェクトでコーディングした初心者もいます。コードは非常に大きな泥の塊です。彼らは上級プログラマーではありません。彼らは、Javaについてキーボードの使い方を少し知っているだけです。メインクラスに12,000行のコードを記述しただけですが、6000行はNetBeans自体に属します。 私の仕事は、コードを分析し、コードを維持する良い方法を提案することです。私のアイデアは、プロジェクトを廃棄し、OOP方法論で新しいプロジェクトを開始することです。最近、このサイトや他のいくつかから、問題に関するメモやアイデアを集めました。 今、私は次の質問があります: コードを修復し、OOPに変更する必要がありますか?現在、デバッグ中です。 コードにはコメント、ドキュメント、プログラミングの特定のスタイルなどがありません。それを変更することは本当に高価で時間がかかります。これについて何ができますか? すべてのルール(コメント、OOP、優れたコード品質など)に従うように指導するにはどうすればよいですか? コードに誤りがあり、エラーが発生しやすい。私たちは何ができる?テスト?修正用に2〜3枚のA4ペーパーを作成しますが、終わりはないようです。 私は彼らとは新しいと言わなければなりません。同様に、プロジェクトへの参加が遅すぎるというルールを破ったと思います。私は彼らを去らなければならないと思いますか?

3
オフィスの官僚主義はコード品質にどのように影響しますか[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は、オフィスの官僚主義が最終的なコード品質の結果に直接影響を与えた物語に興味があります。 たとえば、友人から、以前の職場ではバージョン管理システムが非常にかさばっていて、VCSの神に許可を求めずにプログラマが新しい「モジュール」(ソースツリーのルートディレクトリ)を作成できなかったと言われました。その結果、プログラマーは余分な官僚的な手順を踏むことを嫌がり、機能がモジュールの現在の定義またはモジュール名にリモートで関連している場合でも、既存のモジュールの上に無関係な機能を積み重ねることになりました過去の方法でした。(モジュールの名前変更は言うまでもありません...) 私は、オフィス、運用、または最終的にはおそらく意図せずにソフトウェア品質に影響を与える他の官僚機構の同様の物語に興味があります

14
レガシーコードを渡したときに、独自のコーディングバイアスをどのように克服しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 プログラマとして、私たちはしばしばスキルに信じられないほどの誇りを持ち、「良い」コードと「悪い」コードとは何かについて非常に強い意見を持っています。 私たちのキャリアのどの時点でも、おそらくいくつかのレガシーシステムがラップに落ちていて、「このコードはダメだ!」それは、完全に機能的で保守可能なコードである可能性が高いにもかかわらず、優れたコードがどうあるべきかという概念に適合しなかったためです。 他のプログラマーの仕事を回避しようとするとき、どのように精神的に準備しますか?

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