静的解析、しましょうか。

11,758 views

Published on

YAPC Asia 2011のLT,mixi スポンサード,
Techinical Debt,Code Metrics

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,758
On SlideShare
0
From Embeds
0
Number of Embeds
6,591
Actions
Shares
0
Downloads
118
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

静的解析、しましょうか。

  1. 1.
  2. 2. 自己紹介<br />株式会社ミクシィ<br />たんぽぽチームリーダ<br />広木大地<br />@hiroki_daichi<br />やっていること<br />*刺身にたんぽぽ<br />*サービスアーキテクト<br />*非機能要件全般<br />*サービスのトラブル<br />*安くて速くて安心<br />
  3. 3. 静的解析、<br />しましょうか。<br />せいてきかいせき<br />
  4. 4. 静的解析<br />ってなんなんだよ。<br />
  5. 5. 静的<br />性的<br />
  6. 6. コードレビュー自動化<br />刺身にたんぽぽ<br />おかせない<br />ソフトウェア測定<br />
  7. 7. Technical Debt<br />技術的負債<br />最初のコードを出荷することは、借金をしに行くことと同じである。小さな負債は、代価を得て即座に書き直す機会を得るまでの開発を加速する。<br />危険なのは、借金が返済されなかった場合である。<br />
  8. 8. 複雑な依存関係<br />最長不倒関数<br />王様モジュール<br />
  9. 9. 01<br />●        ●         ●         ●      ●        ●        ●     <br />技術的負債の見える化<br />Inspect-package<br />
  10. 10. 95<br />計測できないものは<br />改善できない。<br />
  11. 11. 最長不倒関数<br />Node(2)<br />Node(3)<br />If( is_foo())<br />do_var()<br />Edge(4)<br />Node(1)<br />Node(5)<br />Edge(2)<br />start<br />do_hoge()<br />end<br />Edge(1)<br />Edge(3)<br />Edge(5)<br />Node(4)<br />Edge(6)<br />分岐、ループなど関数をグラフ構造としてとらえて、<br />その複雑さを測定する。<br />(Cyclomatic Complexity)<br />
  12. 12. 王様モジュール<br />good<br />bad<br />Module<br />Module<br />より大きく、より多くの人によって<br />差分が加えられているコードを探して計測する。<br />
  13. 13. 複雑な依存<br />good<br />good<br />bad<br />B<br />B<br />B<br />E<br />A<br />A<br />A<br />C<br />C<br />C<br />F<br />D<br />D<br />D<br />G<br />より多くに依存しながら、より多くに依存されている<br />コンポーネントを悪い依存として測定する。<br />
  14. 14. 計測<br />measurement<br />2011年2月某日<br />サービスの結合性に関するポリシーは決めた<br />これから順次リファクタリングが必要<br />あの日以来、すべてがスコアリングされた。<br />
  15. 15. 依存されている度<br />サービス全体への負債<br />依存している度<br />$ inspect-package Mixi::TheServiceMayUKnow -type ALLSCORE <br /> Ca Ce CC SRP couple cohesion<br />240 173 261 527 41520 138335<br />最長不倒関数度<br />コンポーネント内の負債<br />王様モジュール指数<br />
  16. 16. 王様モジュールをレビュー<br />$inspect-package Mixi/TheServiceUMayKnow -type SRP<br />score( 123):rev( 98):user( 16):lines(1331) Mixi/TheServiceUMayKnow.pm<br />score( 107):rev( 80):user( 18):lines(1323) Mixi/TheServiceUMayKnow/Object.pm<br />score( 47):rev( 40):user( 5):lines( 659) Mixi/TheServiceUMayKnow/Admin/Ad.pm<br />1300行で16人がいじってるけど、<br />そろそろ責務がいりまじってるんじゃない?<br />
  17. 17. 最長不倒関数をレビュー<br />$inspect-package Mixi::TheServiceUMayKnow -type CC <br />59 get_status   lib/Mixi/TheServiceUMayKnow/Analytics.pm <br />46 summarize   lib/Mixi/TheServiceUMayKnow/Counter/Summarizer.pm<br />44 _select_own_page lib/Mixi/TheServiceUMayKnow/Feed.pm <br />このモジュールのget_statusが複雑に<br />なりすぎてて、テストケース網羅できないほどだよ。<br />
  18. 18. 嫌だわ、早くすりつぶさないと<br />
  19. 19. せいてきかいせき<br />静的解析、<br />しましょうか。<br />
  20. 20. くわしいことは<br />WEB+DB Press 62のPerl Hackers Hubにも載ってます<br />http://gihyo.jp/dev/serial/01/perl-hackers-hub/000801<br />

×