コンテンツにスキップ

2025年10月4日

今週の活動

開発者の経験を表す変更メトリクス

  • 先行研究で検討されたメトリクス
    • EXP: 特定のシステム全体におけるコードベースに対する変更回数の合計
    • SEXP: 特定のシステムにおけるサブシステム全体のコードベースに対する変更回数の合計
    • REXP: 変更回数の合計を変更の時間間隔で重み付けしたもので、最近の変更ほど重みが大きい
  • 先行研究で検討されたメトリクスの問題点
    • 作業量のみを考慮しており、作業の質(理解度)を考慮していない
    • 複雑な設計を少数実装した開発者よりも、単純な修正を大量に行った開発者の方が経験を高く評価される
  • 変更回数の重み付けをする際に、コードベースに対する変更規模を考慮するのはどうか?
    • 「大きさ(Size)」カテゴリーの変更メトリクスを用いて以下のように重みを定義
    • 追加率 = 追加行数 / 変更前の総行数
      • ただし、変更前の総行数が0のときは、追加率 = 1
    • 削除率 = 削除行数 / 変更前の総行数
    • 獲得経験値 = 1 + 追加率 + 削除率
    • 開発者の経験値 = Σ 獲得経験値

先行研究の経験値メトリクスとの比較

項目 先行研究 提案手法
評価観点 変更回数 変更回数 + 変更規模
変更回数 高く評価 ある程度評価
変更規模 低く評価 ある程度評価
コードベースへの理解度 反映されない 反映される
小規模な変更
  • 追加: 10行
  • 削除: 5行
  • 変更前: 1000行
  • 追加率 = 10/1000 = 0.010
  • 削除率 = 5/1000 = 0.005
  • 獲得経験値 = 1 + 0.010 + 0.005 = 1.015
大規模な変更
  • 追加: 500行
  • 削除: 400行
  • 変更前: 1000行
  • 追加率 = 500/1000 = 0.500
  • 削除率 = 400/1000 = 0.400
  • 獲得経験値 = 1 + 0.500 + 0.400 = 1.900
完全な書き換え
  • 追加: 1000行
  • 削除: 1000行
  • 変更前: 1000行
  • 追加率 = 1000/1000 = 1.000
  • 削除率 = 1000/1000 = 1.000
  • 獲得経験値 = 1 + 1.000 + 1.000 = 3.000
大規模ファイルに対する小さな変更
  • 追加: 100行
  • 削除: 50行
  • 変更前: 10000行
  • 追加率 = 100/10000 = 0.01
  • 削除率 = 50/10000 = 0.005
  • 獲得経験値 = 1 + 0.01 + 0.005 = 1.015

ケーススタディのためのプロジェクトの再選定

  • 有意性検定で帰無仮説が棄却されない(優位差が見つからない)問題を避けるため、データセットのレコード数が大きいプロジェクトを優先的に採用
  • データセットを構築する際にSZZアルゴリズムを用いているため、解決済みのバグレポートの数とデータセットのレコード数の大きさは相関関係にあり、その値からデータセットの相対的な大きさを推測できる
プロジェクト 解決済みのバグレポートの数
Elasticsearch 4,287
Hazelcast 3,762
Netty 2,207
OrientDB 1,272
Neo4j 1,152
Eclipse plugin for Ceylon 841
Broadleaf Commerce 675
mcMMO 656
MapDB 228
ANTLR v4 156
Titan 127
jUnit 84
Android Universal Image Loader 75
Oryx 65
Mission Control Technologies 37

得られた成果

  • 新たな経験値メトリクスを定義
  • 解決済みのバグレポートの数に基づいたプロジェクトの選定基準を定義

来週の計画

  • 変更メトリクスを収集するプログラムの作成と実行
  • バグ予測精度が改善されるかどうか検証