Pro Yearly is on sale from $80 to $50! »

コードの静的解析ツールを使う目的と効用

40f0651571d172e141b24b34602601d1?s=47 hihats
August 28, 2017

 コードの静的解析ツールを使う目的と効用

最近の解析ツールはソースコードのスコアリングもしてくれますが、それってどういう基準なの?
というお話をしました。

40f0651571d172e141b24b34602601d1?s=128

hihats

August 28, 2017
Tweet

Transcript

  1. コードの静的解析ツール コードメトリクスについて

  2. コードを静的解析してくれるツール PHP • phpmd • phpcs Ruby • Rubocop Javascript

    • ESLint
  3. • 一般的な規約に沿っているか • コーディングスタイルの統一 導入目的

  4. だけではない

  5. コードのスコアリング コードの定量評価(いわゆる点数付け)もしてくれる

  6. どういう基準で?

  7. • Coupling • Cohesion • Size • Complexity

  8. 凝集度と結合度 構造化設計

  9. 凝集度 Cohesion 各モジュール内の関連性を最大に すること class A { int width; Int

    height; function widen(int add){ width = width + add; } function highten(int add){ height = height + add; } } クラスのメンバ変数 は2つ 2つのメソッドで使 われているメンバ 変数はそれぞれ ひとつずつ
  10. 凝集度 Cohesion 各モジュール内の関連性を最大に すること class A { int width; Int

    height; function widen(int add){ width = width + add; } function highten(int add){ height = height + add; } } クラスのメンバ変数 は2つ 2つのメソッドで使 われているメンバ 変数はそれぞれ ひとつずつ 凝集度はそれほど 高くない
  11. 結合度 Coupling モジュール間の関連性を最小にす ること class Square { require Rhombus; function

    square(rhombus = new Rhombus){ return rhombus->width * rhombus->width; } } 属性は ・width ・angle があるが、angle がSquareの計算 に必要かというと 必要ない
  12. 結合度 Coupling モジュール間の関連性を最小にす ること class Square { function square(rhombus_width){ return

    rhombus_width * rhombus_width; } } 属性は ・width ・angle があるが、angle がSquareの計算 に必要かというと 必要ない 結合度が下がった!
  13. 循環的複雑度 簡単に言うとコードの分岐数

  14. ifやforを使うと1ずつ増えていく foreach ($array as $key => $value ){ for ($i+0;

    $i< $max; $++){ switch($value[$i]){ case 1: If ($value…) …… 分岐がなければ1(Best値) function good_method($array){ return array_map(function($n) { return $n * $n; }, $array); }
  15. ネストが深くなっている = 「責務を負いすぎている」 という考え方

  16. 詳しくはGoogleのブログ https://testing.googleblog.com/2011/02/this- code-is-crap.html

  17. まとめ コードの静的解析ツールはルールの統一だけでなく、コードのスコアリングも してくれる 基準となるのは ・ 凝集度 ・ 結合度 ・ 循環的複雑度

  18. 注意点 あくまでコードを多角的にみるためのもの 指標に囚われすぎるのはよくない 運用してみて、しっくりこないのであれば緩くするのもあり