SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
ソースコードの複雑さを測ろう
     2012/4/10
自己紹介

‣   永井伸弥(@Shinya_131)

‣   製薬会社で営業支援システムを開発中

‣   Ruby & Ruby on Rails暦10ヶ月くらい
【今日のテーマ】
メトリクス測定
メトリクス測定って何?
•   コードの複雑な部分を指摘してくれるツール

     ‣   長過ぎるクラス、メソッド

     ‣   短すぎる変数名(a, b, c...)

     ‣   多すぎる変数

     ‣   Rdoc用のコメントが無いクラス、メソッド

    ➡ こう言う部分を見つけて指摘してくれる
例えば
   Rubyのメトリクスツール”Reek”を使ってみる

$gem install reek
$reek myApp.rb
myApp.rb -- 9 warnings:
 A has no descriptive comment (IrresponsibleModule)
 A has no descriptive comment (IrresponsibleModule)
 A#a has the variable name 'f' (UncommunicativeName)
 B has no descriptive comment (IrresponsibleModule)
 B#a calls a.b twice (Duplication)
 B#a contains iterators nested 2 deep (NestedIterators)
 ・・・
例えば
                     Railsにも使える

$reek myRailsApp/app/controller/
file_a.rb -- 10 warnings:
 A has no descriptive comment (IrresponsibleModule)
 ・・・
file_b.rb -- 32 warnings:
 B has no descriptive comment (IrresponsibleModule)
 ・・・
file_c.rb -- 3 warnings:
 C has no descriptive comment (IrresponsibleModule)
・・・
【メトリクス測定とは?】
コードの複雑さを見える化する事
あるプロダクトのClass別Warning数


                     •   プロダクト全体で63のClass
         Class A
          14%        •   でも上位5つだけでWarningの半分以上!
その他             B
40%            13%   •   A∼Eを集中してリファクタリングすべき!


               C     •   どこが複雑か把握できると対処しやすい

       E   D  13%
      10% 10%
【課題】
複雑になったコードをリファクタリング
    するのはとっても大変
【対策】
そもそも複雑にならないようにしよう!
治療より予防!
治療より予防!

• 複雑にならないように書くべき


 ➡複雑になったらすぐリファクタリング


 ➡コミットする度にメトリクス測定


 ➡reekをJenkinsに組み込もう!
Reek Viewerでレポート作成

• reekをjenkinsで自動実行→あまり見やすくは無い...


• reekの出力結果を見やすく整形するツール”reek   viewer”

 ➡コマンドライン→HTML


 ➡Warning数が多い順に表示


 ➡複雑さを色でお知らせ
•   Class別にWarningを表示

•   クリックすると詳細表示
使い方

$reek -y myRailsApp/app/ > reek.yaml
$ruby reek_viewer.rb ./reek.yaml
DEMO
まとめ

(1)reekでコードの複雑さを測ろう
 $gem install reek


(2)複雑になる前にリファクタリングしよう!



(3)reek viewer使ってみてね!
ご清聴ありがとうございました
     @Shinya_131

Mais conteúdo relacionado

Semelhante a コードの複雑さを測ろう

090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて
Tomoya Kawanishi
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
 

Semelhante a コードの複雑さを測ろう (20)

Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報
 
C#のココが好き!
C#のココが好き!C#のココが好き!
C#のココが好き!
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slide
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
Coderetreat
CoderetreatCoderetreat
Coderetreat
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 

コードの複雑さを測ろう