SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
aomoriringo
   フリーソフトウェア

   コードの静的メトリクス計測ツール

   C, C++, C#, VB.NET, Java, Delphi, VB6,
    HTML
   sourceMonitorはコード解析をして、
    こんなものを表示してくれます

    ◦   コメントの割合
    ◦   ドキュメントの割合
    ◦   メソッド数/1クラス
    ◦   構文数/1メソッド
    ◦   一番複雑なメソッドの名前/行数
    ◦   Avg/Max Complexity
    ◦   Avg/Max Block Depth
   ソースコード内の線形独立な経路の数

   条件複雑度(Conditional Complexity)とも
    呼ばれる

     完全な分岐網羅ができるテストケースの数
    ≦ 循環的複雑度
    ≦ 完全な経路網羅ができるテストケースの数
   Start with 1 for a straight path through the
    routine.
   Add 1 for each of the following keywords or
    their equivalent:
    ◦ if, while, repeat, for, and, or
   Add 1 for each case in a switch statement.
Public void ProcessPages()
{
  while( nextPage != true )
  {
     if(    ( lineCount <= linePerPage )
            && (status != Status.Cancelled)
            && (morePages == true ) )
     {
            //…
     }
  }
}
Public int getValue( int param1 )
{
  int value = 0;
  if ( param1 == 0 )
  {
       value = 4;
  }
  else
  {
       value = 0;
  }
  return value;
}
Complexity   Risk Evaluation
<=10         よい構造。
             ほとんどリスクなし

11 to 20     少し複雑。
             わずかな(moderate)リスク

>30          複雑。
             構造に疑問
>50          テストが不可能
>75          いかなる変更も誤修正を生む原因を
             作る
Complexity   Risk Evaluation
<=10         よい構造。
             ほとんどリスクなし

11 to 20     少し複雑。
             わずかな(moderate)リスク

>30          複雑。
             構造に疑問
>50          テストが不可能
>75          いかなる変更も誤修正を生む原因を
             作る
   経路数が多く、テストケースもたくさん必要

   意味を理解するのに多くの経路を
    追わなければいけない

   凝集度が低い傾向にある
   あるコードがどれだけそのクラスの
    責任分担に集中しているかを示す尺度

   凝集度が高い
    ◦ コードが読みやすい
    ◦ 再利用しやすい

   凝集度が低い
    ◦ クラスのメソッド群に共通性がない
    ◦ 各メソッドが全く関係のないデータを扱う
   sourceMonitorは複雑度を解析してくれる



   複雑度はテストや保守に関わる重要な指標
    (しかも定量的)



   たまには複雑度のこと、思い出してあげてください

Weitere ähnliche Inhalte

Was ist angesagt?

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリットTakashi Toyosaki
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをなAmazon Web Services Japan
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)Tomoaki Uchida
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 

Was ist angesagt? (20)

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 

Mehr von aomori ringo

Distributed Systems 第10章 Distributed Object-Based Systems (後編)
Distributed Systems 第10章 Distributed Object-Based Systems (後編)Distributed Systems 第10章 Distributed Object-Based Systems (後編)
Distributed Systems 第10章 Distributed Object-Based Systems (後編)aomori ringo
 
Mathematicaでgolf
MathematicaでgolfMathematicaでgolf
Mathematicaでgolfaomori ringo
 
Mathematicaをはじめよう
MathematicaをはじめようMathematicaをはじめよう
Mathematicaをはじめようaomori ringo
 
Distributed Systems 第10章 Distributed Object-Based Systems
Distributed Systems 第10章 Distributed Object-Based SystemsDistributed Systems 第10章 Distributed Object-Based Systems
Distributed Systems 第10章 Distributed Object-Based Systemsaomori ringo
 
Distributed Systems 第1章 Introduction
Distributed Systems 第1章 IntroductionDistributed Systems 第1章 Introduction
Distributed Systems 第1章 Introductionaomori ringo
 
md5のアルゴリズム
md5のアルゴリズムmd5のアルゴリズム
md5のアルゴリズムaomori ringo
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章aomori ringo
 

Mehr von aomori ringo (7)

Distributed Systems 第10章 Distributed Object-Based Systems (後編)
Distributed Systems 第10章 Distributed Object-Based Systems (後編)Distributed Systems 第10章 Distributed Object-Based Systems (後編)
Distributed Systems 第10章 Distributed Object-Based Systems (後編)
 
Mathematicaでgolf
MathematicaでgolfMathematicaでgolf
Mathematicaでgolf
 
Mathematicaをはじめよう
MathematicaをはじめようMathematicaをはじめよう
Mathematicaをはじめよう
 
Distributed Systems 第10章 Distributed Object-Based Systems
Distributed Systems 第10章 Distributed Object-Based SystemsDistributed Systems 第10章 Distributed Object-Based Systems
Distributed Systems 第10章 Distributed Object-Based Systems
 
Distributed Systems 第1章 Introduction
Distributed Systems 第1章 IntroductionDistributed Systems 第1章 Introduction
Distributed Systems 第1章 Introduction
 
md5のアルゴリズム
md5のアルゴリズムmd5のアルゴリズム
md5のアルゴリズム
 
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
 

Source monitorと複雑度のはなし

  • 2. フリーソフトウェア  コードの静的メトリクス計測ツール  C, C++, C#, VB.NET, Java, Delphi, VB6, HTML
  • 3. sourceMonitorはコード解析をして、 こんなものを表示してくれます ◦ コメントの割合 ◦ ドキュメントの割合 ◦ メソッド数/1クラス ◦ 構文数/1メソッド ◦ 一番複雑なメソッドの名前/行数 ◦ Avg/Max Complexity ◦ Avg/Max Block Depth
  • 4. ソースコード内の線形独立な経路の数  条件複雑度(Conditional Complexity)とも 呼ばれる  完全な分岐網羅ができるテストケースの数 ≦ 循環的複雑度 ≦ 完全な経路網羅ができるテストケースの数
  • 5. Start with 1 for a straight path through the routine.  Add 1 for each of the following keywords or their equivalent: ◦ if, while, repeat, for, and, or  Add 1 for each case in a switch statement.
  • 6. Public void ProcessPages() { while( nextPage != true ) { if( ( lineCount <= linePerPage ) && (status != Status.Cancelled) && (morePages == true ) ) { //… } } }
  • 7. Public int getValue( int param1 ) { int value = 0; if ( param1 == 0 ) { value = 4; } else { value = 0; } return value; }
  • 8. Complexity Risk Evaluation <=10 よい構造。 ほとんどリスクなし 11 to 20 少し複雑。 わずかな(moderate)リスク >30 複雑。 構造に疑問 >50 テストが不可能 >75 いかなる変更も誤修正を生む原因を 作る
  • 9. Complexity Risk Evaluation <=10 よい構造。 ほとんどリスクなし 11 to 20 少し複雑。 わずかな(moderate)リスク >30 複雑。 構造に疑問 >50 テストが不可能 >75 いかなる変更も誤修正を生む原因を 作る
  • 10. 経路数が多く、テストケースもたくさん必要  意味を理解するのに多くの経路を 追わなければいけない  凝集度が低い傾向にある
  • 11. あるコードがどれだけそのクラスの 責任分担に集中しているかを示す尺度  凝集度が高い ◦ コードが読みやすい ◦ 再利用しやすい  凝集度が低い ◦ クラスのメソッド群に共通性がない ◦ 各メソッドが全く関係のないデータを扱う
  • 12. sourceMonitorは複雑度を解析してくれる  複雑度はテストや保守に関わる重要な指標 (しかも定量的)  たまには複雑度のこと、思い出してあげてください