Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications

Isana
January 25, 2023

PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications

以下のイベントの発表資料です。

https://increments.connpass.com/event/270421/

Isana

January 25, 2023
Tweet

More Decks by Isana

Other Decks in Programming

Transcript

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

    View full-size slide

  2. 自己紹介
    Qiita Night PHP
    by @isanasan_ 2

    View full-size slide

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

    View full-size slide

  4. 対象者
    Qiita Night PHP
    by @isanasan_ 4

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. Qiita Night PHP ??
    by @isanasan_ 12

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. 説得失敗
    Qiita Night PHP
    by @isanasan_ 20

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  28. 再掲
    Qiita Night PHP
    by @isanasan_ 28

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  33. 利点
    Qiita Night PHP
    by @isanasan_ 33

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  39. Qiita Night PHP
    churn-php
    by @isanasan_ 39

    View full-size slide

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

    View full-size slide

  41. ==============================================================
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  44. Qiita Night PHP
    octocov
    by @isanasan_ 44

    View full-size slide

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

    View full-size slide

  46. Qiita Night PHP
    php_testability
    by @isanasan_ 46

    View full-size slide

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

    View full-size slide

  48. 最後に
    Qiita Night PHP
    by @isanasan_ 48

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  56. まとめ
    Qiita Night PHP
    by @isanasan_ 56

    View full-size slide

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

    View full-size slide