Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture ...
Search
Isana
January 25, 2023
Programming
2
1.2k
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications
以下のイベントの発表資料です。
https://increments.connpass.com/event/270421/
Isana
January 25, 2023
Tweet
Share
More Decks by Isana
See All by Isana
Web Industory Super Beginners Guide
isanasan
0
140
開発組織の生産性を可視化するState of DevOpsとFour Keysとは(増補改訂版) / Introduction to State of DevOps and Four Keys for Visualizing Productivity in Development Organizations expanded and revised edition
isanasan
23
9.7k
今あらためて考える PHPに型定義をする理由 / why use type hint and static analyse at php
isanasan
0
1.9k
「LeanとDevOpsの科学」を実践して LancersのDevOps的取り組みとこれから / Lancers' DevOps efforts and the future
isanasan
0
1.4k
開発組織の生産性を可視化する State of DevOpsとFour Keysとは / deep dive into State of DevOps
isanasan
0
1.1k
Other Decks in Programming
See All in Programming
Writing documentation can be fun with plugin system
okuramasafumi
0
120
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
130
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
160
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
150
color-scheme: light dark; を完全に理解する
uhyo
3
310
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
47
17k
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.3k
WebDriver BiDiとは何なのか
yotahada3
1
140
DROBEの生成AI活用事例 with AWS
ippey
0
130
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
Software Architecture
hschwentner
6
2.1k
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
0
140
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
It's Worth the Effort
3n
184
28k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Building an army of robots
kneath
303
45k
Automating Front-end Workflow
addyosmani
1368
200k
Fireside Chat
paigeccino
34
3.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Transcript
PHPアプリケーションにおける アーキテクチャメトリクスについて Qiita Night PHP by @isanasan_ 1
自己紹介 Qiita Night PHP by @isanasan_ 2
Lancers Productivity Team DevOpsに興味関心がある @isanasan_ @isanasan @isana Qiita Night PHP
いさな by @isanasan_ 3
対象者 Qiita Night PHP by @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 PHP by @isanasan_ 16
Qiita Night PHP 爆弾処理のようなリリース by @isanasan_ 17
Qiita Night PHP 改善したい!!!!!!! by @isanasan_ 18
Qiita Night PHP 今動いているものを直す必要ある? 効果測定どうやんの? 費用対効果はどれくらい? by @isanasan_ 19
説得失敗 Qiita Night PHP by @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 PHP by @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 PHP by @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 PHP PHPの循環的複雑度を計測するツール by @isanasan_ 38
Qiita Night PHP churn-php by @isanasan_ 39
terryyin/lizard CCNを含む複数の指標で複雑さを計測するツール 行数、CCN、token、引数の数を計測してくれる 出力形式にxmlやhtmlを選べる Qiita Night PHP PHPの循環的複雑度を計測するツール by @isanasan_
40
============================================================== 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
テストカバレッジ テストコードとプロダクトコードの割合 テストの実行時間 Qiita Night PHP テスト容易性に関連するメトリクス by @isanasan_ 42
k1LoW/octocov カバレッジ、コードの割合、実行時間を全て計測できる CIフレンドリー PRにコメントしたり 複数リポジトリの数値を収集したりできる Qiita Night PHP テスト容易性を計測するツール by
@isanasan_ 43
Qiita Night PHP octocov by @isanasan_ 44
edsonmedina/php_testability 密結合になっている箇所(new演算子とか)を数えて テスト容易性のリストを出力できる Qiita Night PHP テスト容易性を計測するツール by @isanasan_ 45
Qiita Night PHP php_testability by @isanasan_ 46
変更頻度と変更人数 あまりにも多くの人が頻繁に変更を加えるソースは責務が大きすぎる可能性がある churn-php もこれで循環的複雑度を重み付けしている PRのリードタイム アーキテクチャ のメトリクスとは言えないが、アーキテクチャメトリクスの遅行指標 として扱える 例えば,「理解容易性が悪化すればPRのリードタイムは伸びる」みたいな Qiita
Night PHP その他のもの by @isanasan_ 47
最後に Qiita Night PHP by @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 PHP PHPで使えるツールも沢山ある by @isanasan_ 53
exakat/php-static-analysis-tools このリポジトリにまとまっている メンテされなくなったものも紛れてるので注意 DeGraciaMathieu/php-arguments-detector 引数が多すぎないかどうかをチェックするツール phpmetrics/PhpMetrics 結構色々取れるツール。 結果がHTMLでしか出力できないのでCIと組み合わせたりするのはちょっと手間 Qiita Night
PHP PHPで使えるツールも沢山ある by @isanasan_ 54
Qiita Night PHP 測りたい指標を決めたら探してみよう by @isanasan_ 55
まとめ Qiita Night PHP by @isanasan_ 56
保守性を改善するときはアーキテクチャメトリクスを計測しよう 現場の課題に合ったメトリクスを見つけよう PHPの現場で使えるツールは沢山あるので探してみよう Qiita Night PHP まとめ by @isanasan_ 57