はじめに
コード品質ってなんだろうって調べてみた。
調べたこと
富士フイルムソフトウェア株式会社
メトリクスでソースコードの美しさは判断出来るのか?
- 巨大関数(100ステップ以上)が0件を目標
- クローン関数(30行以上)が0件を目標
疑問・感想
- ここで言うクローン関数ってなんぞ?
- Javaのcloneメソッドのこと?(自身を複製するメソッド)
- だとしてメトリクスを取得するほどたくさん作るようなメソッドだっけ?
- 何かコピーして作ってる系の関数?
- クローンかどうかの判別って難しくない?
- 括弧書きにある通り30行以上の関数?
- だとするなら、これが0の時点で、巨大関数は0になるのでは?
- Javaのcloneメソッドのこと?(自身を複製するメソッド)
- クローン関数の定義がちょっと把握できなかったものの、巨大関数とかの基準は圧倒的にありな気がしてる。
ソフトウェアシンポジウム2017
ソースコードメトリクスと品質リスクとの関係分析とそれに基づくリスクヘッジ手法に向けて
- 品質リスクメトリクス
- 修正延べ日数:問題が登録され修正完了となるまでの日数の合計
- 修正回数:問題の修正回数
- 平均修正日数:問題が登録され修正完了となるまでの修正日数の平均
- ソースコードメトリクス
- インパクトスケール:ソフトウェアの一部を変更した際、その影響が他のどれだけの箇所に影響するかを示す量である「影響波及量」を表すメトリクス。
疑問・感想
- インパクトスケールは取得する仕組み作る必要ありそうだけど、面白そう。
- 実際、波及影響の大きいコードの修正は結構たいへんだし、リスク観点で見るのはありな気がする。
個人ブログ(mtx2sさん)
コード品質はやはりビジネスに影響を与える
- ビジネス上の競争優位 ← 市場投入までの時間 ← アジリティ(agility) ← 保守性 ← コード品質
- だから ビジネス上の競争優位 ← コード品質
- 無視できない他の要素 市場投入までの時間 ← デプロイ容易性(deployability)
- コード品質
- コード分析ツールのCodeSceneで得られた結果を品質として、欠陥・開発時間と相関がある。
- 欠陥・開発時間が増えることによる影響
- 市場投入を遅くすることはもちろん、予測可能性を低下させるため、PJ瓦解にもつながる。
- コード品質の見える化
- 大事
感想
- 全く異論無い。というか、そう思ったので調べ始めたところがある。
- CodeSceneとか使えるなら使いたいなぁ。
スライド(t-wadaさん)
アジリティを支える品質特性
(いろいろ省略してるのでスライドを見るべき)
アジリティ
- アジリティと関係が深いのは解析性、修正性、試験性(いずれも品質特性の「保守性」にくくられているもの)
- 修正性=変更容易性
- 修正性(変更容易性:Modifiability)
- 複雑さの分解
- 高い認知不可
- 変更の増幅:やりたい変更に対して、あっちもこっちも直さないといけないこと?
- 未知の未知:知らない事自体を知らない
- 複雑さをもたらすもの
- 依存関係:変更の発散と高い認知不可
- 結合度と凝集性
- 不透明さ:未知の未知と高い認知不可
- 名前付けの失敗など
- 依存関係:変更の発散と高い認知不可
- 複雑さの分解
- 試験性(Testablity)
- 試験性の分解
- 実行円滑性:自動実行が容易かつ高速
- 観測容易性:テスト結果の取得、期待値比較を自動化しやすい
- 制御容易性:事前状態を制御し、テスト対象を自動操作しやすい
- 分解可能性:テスト対象を切り出し、テスト環境への部分置換が容易
- 試験性の分解
アジリティの本質
- あらゆるレベルの決定を可逆にする=戻る技術=安全に進む技術→DevOps
- テストの大半を統合環境を必要とせずに実施できる(テスト容易性)
- 独立した形でデプロイまたはリリースできる(デプロイ容易性)
- 品質特性
- 保守性:モジュール性
- 移植性:適応性・設置性・置換性
- 安全なリアーキテクティング
- ストラングラーパターン
- 安全なデプロイ
- Blue/Green Deployment
- Canary Release
- Feature Toggle
メトリクス取得ツール
ググって最初に出てきたもの。これがベストなのかはわからんけど、いっぱい取れそう。
個人的なまとめ
- 基本的には、品質特性における「保守性」「移植性」を踏まえた上でアーキテクチャを設計する。
- それを前提とした上で、コード品質として観測可能な形でメトリクスを取得していくのは面白そう。
- 保守性・移植性を前提にした時のメトリクスはもう少し調べても良さそう。
以上。