SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
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は複雑度を解析してくれる



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



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

Más contenido relacionado

La actualidad más candente

RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門Kent Ohashi
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話Tokoroten Nakayama
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかHiroshi Tokumaru
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューMoriharu Ohzu
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Hiroshi Tokumaru
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Tatsuya Ishikawa
 
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみたYuusuke Takeuchi
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 日本マイクロソフト株式会社
 
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~日本マイクロソフト株式会社
 
HBの人材育成について 2022
HBの人材育成について 2022HBの人材育成について 2022
HBの人材育成について 2022kuronekov3v
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCYuichi Hasegawa
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座Hiroshi Tokumaru
 
ぼくらが体験入社にこだわるワケ
ぼくらが体験入社にこだわるワケぼくらが体験入社にこだわるワケ
ぼくらが体験入社にこだわるワケDaisuke Sato
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法kazkiti
 
Unity Distribution PortalでAndroidアプリを世界の市場へ
Unity Distribution PortalでAndroidアプリを世界の市場へUnity Distribution PortalでAndroidアプリを世界の市場へ
Unity Distribution PortalでAndroidアプリを世界の市場へYasuyuki Kamata
 
AWS WAF を活用しよう
AWS WAF を活用しようAWS WAF を活用しよう
AWS WAF を活用しようYuto Ichikawa
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWSzaki4649
 
スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門Kenyu Miura
 

La actualidad más candente (20)

RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
 
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
プログラムを自動生成する技術 ~ Programming by Example ~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
【de:code 2020】 React Native で Windows アプリ開発 ~React Native for Windows~
 
HBの人材育成について 2022
HBの人材育成について 2022HBの人材育成について 2022
HBの人材育成について 2022
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
 
ぼくらが体験入社にこだわるワケ
ぼくらが体験入社にこだわるワケぼくらが体験入社にこだわるワケ
ぼくらが体験入社にこだわるワケ
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
Unity Distribution PortalでAndroidアプリを世界の市場へ
Unity Distribution PortalでAndroidアプリを世界の市場へUnity Distribution PortalでAndroidアプリを世界の市場へ
Unity Distribution PortalでAndroidアプリを世界の市場へ
 
AWS WAF を活用しよう
AWS WAF を活用しようAWS WAF を活用しよう
AWS WAF を活用しよう
 
AWS Black Belt Techシリーズ AWS IAM
AWS Black Belt Techシリーズ  AWS IAMAWS Black Belt Techシリーズ  AWS IAM
AWS Black Belt Techシリーズ AWS IAM
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWS
 
スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門スマホアプリ開発者のためのWeb api開発入門の入門
スマホアプリ開発者のためのWeb api開発入門の入門
 

Más de 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
 

Más de 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は複雑度を解析してくれる  複雑度はテストや保守に関わる重要な指標 (しかも定量的)  たまには複雑度のこと、思い出してあげてください