ソースコードの複雑さを測ろう     2012/4/10
自己紹介‣   永井伸弥(@Shinya_131)‣   製薬会社で営業支援システムを開発中‣   Ruby & Ruby on Rails暦10ヶ月くらい
【今日のテーマ】メトリクス測定
メトリクス測定って何?•   コードの複雑な部分を指摘してくれるツール     ‣   長過ぎるクラス、メソッド     ‣   短すぎる変数名(a, b, c...)     ‣   多すぎる変数     ‣   Rdoc用のコメントが無いク...
例えば   Rubyのメトリクスツール”Reek”を使ってみる$gem install reek$reek myApp.rbmyApp.rb -- 9 warnings: A has no descriptive comment (Irresp...
例えば                     Railsにも使える$reek myRailsApp/app/controller/file_a.rb -- 10 warnings: A has no descriptive comment (I...
【メトリクス測定とは?】コードの複雑さを見える化する事
あるプロダクトのClass別Warning数                     •   プロダクト全体で63のClass         Class A          14%        •   でも上位5つだけでWarningの半...
【課題】複雑になったコードをリファクタリング    するのはとっても大変
【対策】そもそも複雑にならないようにしよう!
治療より予防!
治療より予防!• 複雑にならないように書くべき ➡複雑になったらすぐリファクタリング ➡コミットする度にメトリクス測定 ➡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
Upcoming SlideShare
Loading in …5
×

コードの複雑さを測ろう

2,421
-1

Published on

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,421
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

コードの複雑さを測ろう

  1. 1. ソースコードの複雑さを測ろう 2012/4/10
  2. 2. 自己紹介‣ 永井伸弥(@Shinya_131)‣ 製薬会社で営業支援システムを開発中‣ Ruby & Ruby on Rails暦10ヶ月くらい
  3. 3. 【今日のテーマ】メトリクス測定
  4. 4. メトリクス測定って何?• コードの複雑な部分を指摘してくれるツール ‣ 長過ぎるクラス、メソッド ‣ 短すぎる変数名(a, b, c...) ‣ 多すぎる変数 ‣ Rdoc用のコメントが無いクラス、メソッド ➡ こう言う部分を見つけて指摘してくれる
  5. 5. 例えば Rubyのメトリクスツール”Reek”を使ってみる$gem install reek$reek myApp.rbmyApp.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) ・・・
  6. 6. 例えば 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)・・・
  7. 7. 【メトリクス測定とは?】コードの複雑さを見える化する事
  8. 8. あるプロダクトのClass別Warning数 • プロダクト全体で63のClass Class A 14% • でも上位5つだけでWarningの半分以上!その他 B40% 13% • A∼Eを集中してリファクタリングすべき! C • どこが複雑か把握できると対処しやすい E D 13% 10% 10%
  9. 9. 【課題】複雑になったコードをリファクタリング するのはとっても大変
  10. 10. 【対策】そもそも複雑にならないようにしよう!
  11. 11. 治療より予防!
  12. 12. 治療より予防!• 複雑にならないように書くべき ➡複雑になったらすぐリファクタリング ➡コミットする度にメトリクス測定 ➡reekをJenkinsに組み込もう!
  13. 13. Reek Viewerでレポート作成• reekをjenkinsで自動実行→あまり見やすくは無い...• reekの出力結果を見やすく整形するツール”reek viewer” ➡コマンドライン→HTML ➡Warning数が多い順に表示 ➡複雑さを色でお知らせ
  14. 14. • Class別にWarningを表示• クリックすると詳細表示
  15. 15. 使い方$reek -y myRailsApp/app/ > reek.yaml$ruby reek_viewer.rb ./reek.yaml
  16. 16. DEMO
  17. 17. まとめ(1)reekでコードの複雑さを測ろう $gem install reek(2)複雑になる前にリファクタリングしよう!(3)reek viewer使ってみてね!
  18. 18. ご清聴ありがとうございました @Shinya_131
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×