web-dev-qa-db-ja.com

コード分​​析によって技術的負債を検出できますか?

SonarQubeは、FxCopやRe-sharperと同様のさまざまなコーディングスタイルルールやその他のメトリックを実行するソフトウェア製品です。これは、スタイル規則の違反を次のように定義しています。

「メンテナンスの問題

これは一般に技術的負債と呼ばれます。保守性に関連する問題は、当社の製品では「コードのにおい」と呼ばれています。」

https://www.sonarsource.com/why-us/code-quality/

しかし、私は通常、技術的負債を「全体的なアーキテクチャパターンに従っていないコードの一部」と考えます。

たとえば、ビジネスルールレイヤーがあるとしますが、簡単な修正として、UIレイヤーに1つのビジネスロジックを配置します。

または、非常にOOPであるプロジェクトがあるが、新しい機能の手続き型ヘルパークラスを追加するとします。

コードはすべてのスタイルルールを満たし、重複などはなく、それ自体で問題ない可能性があります。プロジェクト内の他のコードのパターンに適合しないため、技術的な負債と見なされています。プロジェクトを再び「ナイス」にするために、すべてが同じように機能するように戻ってリファクタリングする必要があります。

この種の違いをコード分析ルールセットで見つけるのは難しく、スタイルルール違反を「技術的負債」と呼ぶのは不誠実なように思えます。

私は間違っていますか、それとも正しいですか?いくつかの客観的ルールまたはいくつかのクラスのルールは、技術的負債または少なくとも一種の技術的負債の適切な定義を作成していますか?

明確化:

このツールは、コード行を管理者に伝えます

this.myvariable

ハイテク債務の2分の価値があります。それは間違っているようです。

ただし、循環的複雑性や重複コードに対しても同じことが行われます。間違いは少ないようです。

2
Ewan

コード分​​析によって技術的負債を検出できますか?

これはスピードメーターがあなたをより安全なドライバーにするかどうかを尋ねるようなものです。

しかし、私は通常、技術的負債を「全体的なアーキテクチャパターンに従っていないコードの一部」と考えます。

技術的負債にはそれ以上の面があります。比喩はあなたの将来の自分から時間を借りることについてです。運転と同じように、トラブルが発生する多くの方法があり、このツールでは解決できません。しかし、それはツールが役に立たないという意味ではありません。それに注意を払うことは役立ちます。それだけではありません。

技術的負債はプログラミングの概念であり、短期的に実装するのが簡単なコードを適用する代わりに使用したときに発生する追加の開発作業を反映しています最高の総合ソリューション。

技術的負債は、特にリファクタリングのコンテキストにおいて、一般的に極端なプログラミングに関連しています。つまり、既存のコードの再構築(リファクタリング)が開発プロセスの一部として必要であることを意味します。この考え方のもとで、リファクタリングは不十分に書かれたコードの結果であるだけでなく、問題の進化する理解とその問題を解決する最良の方法に基づいて行われます。

技術的債務は、設計債務とも呼ばれます。

techopedia.com

ボブおじさん は、設計を先延ばしにすることで得られる素早い利益は、混乱を引き起こす言い訳にはならないことを教えてくれます。

Fowler は、一部の債務は慎重で、一部は無謀で、一部は偶発的であると主張します。

Cunningham 新しい機能を追加する前に借金を返済して新しい機能のための余地を作る限り、満足しているようです。

私が気にするのは、あなたが仲間のプログラマーを惨めにしているかどうかです。私は、変更が速くて簡単な開発環境にいました。それが耐え難いと氷河だった他のもの。大きな違いは、あなたのデザインが奇妙だったときにそれを指で振るようなツールを持っていなかったことでした。

このツールに欠けている最大のことは、悪い名前を呼び出す機能です。物事に悪い名前を付ければ、技術的な借金の世界に突入します。悪い名前は、驚異的な関心を呼び、あなたがそれらを見るたびに支払うことを望んでいるローンサメです。それを見つけるためのツールはどうですか?このための最良のことは、名前が意味をなすかどうか他の開発者に尋ねることです。

私は間違っていますか、それとも正しいですか?いくつかの客観的ルールまたはいくつかのクラスのルールは、技術的負債または少なくとも一種の技術的負債の適切な定義を作成していますか?

制限速度を守ることは私にとって良いドライバーになりますか?時速25マイルで芝生でドーナツをやめるようにしませんか。

または、5歳のユーザーが説明したように、「このバグはあなたにバグがあるのですか?私はあなたに触れていません。」

このことは役立つかもしれませんが、それがすべてを処理することを考えている場合はそうではありません。

10
candied_orange

CppDepend を使用すると、CQLinqを使用して独自のルールを簡単に作成できます。ルールは、アーキテクチャ、設計、実装に関係する場合があります。プロジェクト、タイプ、メソッド間の結合を含みます。また、ここで説明するように、各ルールの技術的負債を指定できます http://www.cppdepend.com/technicaldebt

warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 10
select new { 
   m,
   m.CyclomaticComplexity,
   Debt = (3*(m.CyclomaticComplexity -10)).ToMinutes().ToDebt(),
   AnnualInterest = (m.PercentageCoverage == 100 ? 10 : 120).ToMinutes().ToAnnualInterest()
}