Slide 1

Slide 1 text

PHPアプリケーションにおける アーキテクチャメトリクスについて Qiita Night PHP by @isanasan_ 1

Slide 2

Slide 2 text

自己紹介 Qiita Night PHP by @isanasan_ 2

Slide 3

Slide 3 text

Lancers Productivity Team DevOpsに興味関心がある @isanasan_ @isanasan @isana Qiita Night PHP いさな by @isanasan_ 3

Slide 4

Slide 4 text

対象者 Qiita Night PHP by @isanasan_ 4

Slide 5

Slide 5 text

負債に苦しむエンジニア テックリード プレイングマネージャー Qiita Night PHP 対象者 by @isanasan_ 5

Slide 6

Slide 6 text

Qiita Night PHP アーキテクチャメトリクスとは by @isanasan_ 6

Slide 7

Slide 7 text

アーキテクチャの保守性を測定するための指標 Qiita Night PHP アーキテクチャメトリクスとは by @isanasan_ 7

Slide 8

Slide 8 text

Qiita Night PHP 保守性とは by @isanasan_ 8

Slide 9

Slide 9 text

システム/ソフトウェア製品品質(SQuaRE) Qiita Night PHP 保守性とは by @isanasan_ 9

Slide 10

Slide 10 text

Qiita Night PHP システム/ソフトウェア製品品質(SQuaRE) https://www.ipa.go.jp/sec/reports/20150331_1.html 10

Slide 11

Slide 11 text

以下の項目が今どのくらいヤバいのかを数字で示すためのもの モジュール性 再利用性 理解容易性 修正性 テスト容易性 Qiita Night PHP つまりアーキテクチャメトリクスとは by @isanasan_ 11

Slide 12

Slide 12 text

Qiita Night PHP ?? by @isanasan_ 12

Slide 13

Slide 13 text

Qiita Night PHP 具体的なユースケース by @isanasan_ 13

Slide 14

Slide 14 text

Qiita Night PHP とあるサービス by @isanasan_ 14

Slide 15

Slide 15 text

Qiita Night PHP 疲弊した現場 by @isanasan_ 15

Slide 16

Slide 16 text

荒みきったコード Qiita Night PHP by @isanasan_ 16

Slide 17

Slide 17 text

Qiita Night PHP 爆弾処理のようなリリース by @isanasan_ 17

Slide 18

Slide 18 text

Qiita Night PHP 改善したい!!!!!!! by @isanasan_ 18

Slide 19

Slide 19 text

Qiita Night PHP 今動いているものを直す必要ある? 効果測定どうやんの? 費用対効果はどれくらい? by @isanasan_ 19

Slide 20

Slide 20 text

説得失敗 Qiita Night PHP by @isanasan_ 20

Slide 21

Slide 21 text

Qiita Night PHP 改善の黄金パターン by @isanasan_ 21

Slide 22

Slide 22 text

1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita Night PHP 改善の黄金パターン by @isanasan_ 22

Slide 23

Slide 23 text

Qiita Night PHP ソフトウェア開発の現場では? by @isanasan_ 23

Slide 24

Slide 24 text

もちろんソフトウェア開発の現場でも考え方は同じ 特に「正確な現状把握」は必要不可欠 パフォーマンスチューニングはその代表的な例 Qiita Night PHP ソフトウェア開発の現場では? by @isanasan_ 24

Slide 25

Slide 25 text

Qiita Night PHP アーキテクチャの保守性を改善する時は? by @isanasan_ 25

Slide 26

Slide 26 text

Qiita Night PHP コードスメル(不吉な匂い) by @isanasan_ 26

Slide 27

Slide 27 text

定性的指標(≒ 暗黙知) 経験値に依存する 効果測定や優先順位付けが難しい 対外的な説明には使えない Qiita Night PHP コードスメルの欠点 by @isanasan_ 27

Slide 28

Slide 28 text

再掲 Qiita Night PHP by @isanasan_ 28

Slide 29

Slide 29 text

1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita Night PHP 改善の黄金パターン by @isanasan_ 29

Slide 30

Slide 30 text

1. 課題を認識する コードスメル 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める 3. 改善施策を実施する 4. 振り返りを行う Qiita Night PHP 改善の黄金パターン by @isanasan_ 30

Slide 31

Slide 31 text

1. 課題を認識する 2. 課題を定量化できるメトリクス(指標)を定義し目標を決める アーキテクチャメトリクス 3. 改善施策を実施する 4. 振り返りを行う Qiita Night PHP 改善の黄金パターン by @isanasan_ 31

Slide 32

Slide 32 text

Qiita Night PHP 定性的指標から定量的指標へ by @isanasan_ 32

Slide 33

Slide 33 text

利点 Qiita Night PHP by @isanasan_ 33

Slide 34

Slide 34 text

コードスメルのような暗黙知を形式知にすることが出来る 効果測定を行うことでフィードバックサイクルを回せる 測定基準を設けることで負債を未然に防ぐ Qiita Night PHP 利点 by @isanasan_ 34

Slide 35

Slide 35 text

Qiita Night PHP 代表例と測定ツール by @isanasan_ 35

Slide 36

Slide 36 text

理解容易性に関連するメトリクス テスト容易性に関連するメトリクス その他 Qiita Night PHP 代表例と測定ツール by @isanasan_ 36

Slide 37

Slide 37 text

循環的複雑度(CCN) 要するに分岐の数 24以上の値ではエラーレートが急速に増加すると言われている 加重平均を用いることで時系列推移を計測できる Qiita Night PHP 理解容易性に関連するメトリクス by @isanasan_ 37

Slide 38

Slide 38 text

bmitch/churn-php 変更頻度で重み付けしたCCNのスコアを計測するツール Qiita Night PHP PHPの循環的複雑度を計測するツール by @isanasan_ 38

Slide 39

Slide 39 text

Qiita Night PHP churn-php by @isanasan_ 39

Slide 40

Slide 40 text

terryyin/lizard CCNを含む複数の指標で複雑さを計測するツール 行数、CCN、token、引数の数を計測してくれる 出力形式にxmlやhtmlを選べる Qiita Night PHP PHPの循環的複雑度を計測するツール by @isanasan_ 40

Slide 41

Slide 41 text

============================================================== NLOC CCN token param function@line@file -------------------------------------------------------------- 10 2 29 2 start_new_player@26@./html_game.c Qiita Night PHP lizard by @isanasan_ 41

Slide 42

Slide 42 text

テストカバレッジ テストコードとプロダクトコードの割合 テストの実行時間 Qiita Night PHP テスト容易性に関連するメトリクス by @isanasan_ 42

Slide 43

Slide 43 text

k1LoW/octocov カバレッジ、コードの割合、実行時間を全て計測できる CIフレンドリー PRにコメントしたり 複数リポジトリの数値を収集したりできる Qiita Night PHP テスト容易性を計測するツール by @isanasan_ 43

Slide 44

Slide 44 text

Qiita Night PHP octocov by @isanasan_ 44

Slide 45

Slide 45 text

edsonmedina/php_testability 密結合になっている箇所(new演算子とか)を数えて テスト容易性のリストを出力できる Qiita Night PHP テスト容易性を計測するツール by @isanasan_ 45

Slide 46

Slide 46 text

Qiita Night PHP php_testability by @isanasan_ 46

Slide 47

Slide 47 text

変更頻度と変更人数 あまりにも多くの人が頻繁に変更を加えるソースは責務が大きすぎる可能性がある churn-php もこれで循環的複雑度を重み付けしている PRのリードタイム アーキテクチャ のメトリクスとは言えないが、アーキテクチャメトリクスの遅行指標 として扱える 例えば,「理解容易性が悪化すればPRのリードタイムは伸びる」みたいな Qiita Night PHP その他のもの by @isanasan_ 47

Slide 48

Slide 48 text

最後に Qiita Night PHP by @isanasan_ 48

Slide 49

Slide 49 text

Qiita Night PHP アーキテクチャメトリクスはめっちゃ種類ある by @isanasan_ 49

Slide 50

Slide 50 text

累積コンポーネント依存度(CCD) 平均コンポーネント依存度(ACD) 伝搬コスト(PC) 相対循環依存度(RC) 構造的負債指数(SDI) Qiita Night PHP アーキテクチャメトリクスはめっちゃ種類ある by @isanasan_ 50

Slide 51

Slide 51 text

Qiita Night PHP 現場によって抱えている課題は異なる by @isanasan_ 51

Slide 52

Slide 52 text

Qiita Night PHP あなただけのメトリクスを見つけよう by @isanasan_ 52

Slide 53

Slide 53 text

Qiita Night PHP PHPで使えるツールも沢山ある by @isanasan_ 53

Slide 54

Slide 54 text

exakat/php-static-analysis-tools このリポジトリにまとまっている メンテされなくなったものも紛れてるので注意 DeGraciaMathieu/php-arguments-detector 引数が多すぎないかどうかをチェックするツール phpmetrics/PhpMetrics 結構色々取れるツール。 結果がHTMLでしか出力できないのでCIと組み合わせたりするのはちょっと手間 Qiita Night PHP PHPで使えるツールも沢山ある by @isanasan_ 54

Slide 55

Slide 55 text

Qiita Night PHP 測りたい指標を決めたら探してみよう by @isanasan_ 55

Slide 56

Slide 56 text

まとめ Qiita Night PHP by @isanasan_ 56

Slide 57

Slide 57 text

保守性を改善するときはアーキテクチャメトリクスを計測しよう 現場の課題に合ったメトリクスを見つけよう PHPの現場で使えるツールは沢山あるので探してみよう Qiita Night PHP まとめ by @isanasan_ 57