以下のイベントの発表資料です。
https://increments.connpass.com/event/270421/
PHPアプリケーションにおけるアーキテクチャメトリクスについてQiita Night PHPby @isanasan_ 1
View Slide
自己紹介Qiita Night PHPby @isanasan_ 2
Lancers Productivity TeamDevOpsに興味関心がある@isanasan_@isanasan@isanaQiita Night PHPいさなby @isanasan_ 3
対象者Qiita Night PHPby @isanasan_ 4
負債に苦しむエンジニアテックリードプレイングマネージャーQiita Night PHP対象者by @isanasan_ 5
Qiita Night PHPアーキテクチャメトリクスとはby @isanasan_ 6
アーキテクチャの保守性を測定するための指標Qiita Night PHPアーキテクチャメトリクスとはby @isanasan_ 7
Qiita Night PHP保守性とはby @isanasan_ 8
システム/ソフトウェア製品品質(SQuaRE)Qiita Night PHP保守性とはby @isanasan_ 9
Qiita Night PHPシステム/ソフトウェア製品品質(SQuaRE)https://www.ipa.go.jp/sec/reports/20150331_1.html 10
以下の項目が今どのくらいヤバいのかを数字で示すためのものモジュール性再利用性理解容易性修正性テスト容易性Qiita Night PHPつまりアーキテクチャメトリクスとはby @isanasan_ 11
Qiita Night PHP ??by @isanasan_ 12
Qiita Night PHP具体的なユースケースby @isanasan_ 13
Qiita Night PHPとあるサービスby @isanasan_ 14
Qiita Night PHP疲弊した現場by @isanasan_ 15
荒みきったコードQiita Night PHPby @isanasan_ 16
Qiita Night PHP爆弾処理のようなリリースby @isanasan_ 17
Qiita Night PHP改善したい!!!!!!!by @isanasan_ 18
Qiita Night PHP今動いているものを直す必要ある?効果測定どうやんの?費用対効果はどれくらい?by @isanasan_ 19
説得失敗Qiita Night PHPby @isanasan_ 20
Qiita Night PHP改善の黄金パターンby @isanasan_ 21
1. 課題を認識する2. 課題を定量化できるメトリクス(指標)を定義し目標を決める3. 改善施策を実施する4. 振り返りを行うQiita Night PHP改善の黄金パターンby @isanasan_ 22
Qiita Night PHPソフトウェア開発の現場では?by @isanasan_ 23
もちろんソフトウェア開発の現場でも考え方は同じ特に「正確な現状把握」は必要不可欠パフォーマンスチューニングはその代表的な例Qiita Night PHPソフトウェア開発の現場では?by @isanasan_ 24
Qiita Night PHPアーキテクチャの保守性を改善する時は?by @isanasan_ 25
Qiita Night PHPコードスメル(不吉な匂い)by @isanasan_ 26
定性的指標(≒ 暗黙知)経験値に依存する効果測定や優先順位付けが難しい対外的な説明には使えないQiita Night PHPコードスメルの欠点by @isanasan_ 27
再掲Qiita Night PHPby @isanasan_ 28
1. 課題を認識する2. 課題を定量化できるメトリクス(指標)を定義し目標を決める3. 改善施策を実施する4. 振り返りを行うQiita Night PHP改善の黄金パターンby @isanasan_ 29
1. 課題を認識するコードスメル2. 課題を定量化できるメトリクス(指標)を定義し目標を決める3. 改善施策を実施する4. 振り返りを行うQiita Night PHP改善の黄金パターンby @isanasan_ 30
1. 課題を認識する2. 課題を定量化できるメトリクス(指標)を定義し目標を決めるアーキテクチャメトリクス3. 改善施策を実施する4. 振り返りを行うQiita Night PHP改善の黄金パターンby @isanasan_ 31
Qiita Night PHP定性的指標から定量的指標へby @isanasan_ 32
利点Qiita Night PHPby @isanasan_ 33
コードスメルのような暗黙知を形式知にすることが出来る効果測定を行うことでフィードバックサイクルを回せる測定基準を設けることで負債を未然に防ぐQiita Night PHP利点by @isanasan_ 34
Qiita Night PHP代表例と測定ツールby @isanasan_ 35
理解容易性に関連するメトリクステスト容易性に関連するメトリクスその他Qiita Night PHP代表例と測定ツールby @isanasan_ 36
循環的複雑度(CCN)要するに分岐の数24以上の値ではエラーレートが急速に増加すると言われている加重平均を用いることで時系列推移を計測できるQiita Night PHP理解容易性に関連するメトリクスby @isanasan_ 37
bmitch/churn-php変更頻度で重み付けしたCCNのスコアを計測するツールQiita Night PHPPHPの循環的複雑度を計測するツールby @isanasan_ 38
Qiita Night PHPchurn-phpby @isanasan_ 39
terryyin/lizardCCNを含む複数の指標で複雑さを計測するツール行数、CCN、token、引数の数を計測してくれる出力形式にxmlやhtmlを選べるQiita Night PHPPHPの循環的複雑度を計測するツールby @isanasan_ 40
==============================================================NLOC CCN token param function@line@file--------------------------------------------------------------10 2 29 2 start_new_player@26@./html_game.cQiita Night PHPlizardby @isanasan_ 41
テストカバレッジテストコードとプロダクトコードの割合テストの実行時間Qiita Night PHPテスト容易性に関連するメトリクスby @isanasan_ 42
k1LoW/octocovカバレッジ、コードの割合、実行時間を全て計測できるCIフレンドリーPRにコメントしたり複数リポジトリの数値を収集したりできるQiita Night PHPテスト容易性を計測するツールby @isanasan_ 43
Qiita Night PHPoctocovby @isanasan_ 44
edsonmedina/php_testability密結合になっている箇所(new演算子とか)を数えてテスト容易性のリストを出力できるQiita Night PHPテスト容易性を計測するツールby @isanasan_ 45
Qiita Night PHPphp_testabilityby @isanasan_ 46
変更頻度と変更人数あまりにも多くの人が頻繁に変更を加えるソースは責務が大きすぎる可能性があるchurn-php もこれで循環的複雑度を重み付けしているPRのリードタイムアーキテクチャ のメトリクスとは言えないが、アーキテクチャメトリクスの遅行指標として扱える例えば,「理解容易性が悪化すればPRのリードタイムは伸びる」みたいなQiita Night PHPその他のものby @isanasan_ 47
最後にQiita Night PHPby @isanasan_ 48
Qiita Night PHPアーキテクチャメトリクスはめっちゃ種類あるby @isanasan_ 49
累積コンポーネント依存度(CCD)平均コンポーネント依存度(ACD)伝搬コスト(PC)相対循環依存度(RC)構造的負債指数(SDI)Qiita Night PHPアーキテクチャメトリクスはめっちゃ種類あるby @isanasan_ 50
Qiita Night PHP現場によって抱えている課題は異なるby @isanasan_ 51
Qiita Night PHPあなただけのメトリクスを見つけようby @isanasan_ 52
Qiita Night PHPPHPで使えるツールも沢山あるby @isanasan_ 53
exakat/php-static-analysis-toolsこのリポジトリにまとまっているメンテされなくなったものも紛れてるので注意DeGraciaMathieu/php-arguments-detector引数が多すぎないかどうかをチェックするツールphpmetrics/PhpMetrics結構色々取れるツール。結果がHTMLでしか出力できないのでCIと組み合わせたりするのはちょっと手間Qiita Night PHPPHPで使えるツールも沢山あるby @isanasan_ 54
Qiita Night PHP測りたい指標を決めたら探してみようby @isanasan_ 55
まとめQiita Night PHPby @isanasan_ 56
保守性を改善するときはアーキテクチャメトリクスを計測しよう現場の課題に合ったメトリクスを見つけようPHPの現場で使えるツールは沢山あるので探してみようQiita Night PHPまとめby @isanasan_ 57