ほとんどの最新バージョンのコントロールツールには、履歴のバイナリ検索(バイセクト)によってバグを導入した変更を見つけるコマンドがあります。このようなコマンドは組み込みのものでも、拡張機能やプラグインとして提供されるものでもよい。例としてはGitのgit-bisect、Mercurialの「hg bisect」(拡張子はhbisect)、Bazaarのプラグインはbzr-bisectです。改訂履歴とテスト可能でないコミット(リビジョン)をバイセックス(検索)することでバグを見つける
非線形履歴(分岐点とマージ)が存在する場合でも、自動または半自動の方法で行うことが課題です。目標は、一般的に、最小限のステップで「悪い」リビジョンを見つけることです。テストを行うコミットを見つけるために、より詳細に、可能であればコミットのグラフをテスト(コミットのDAG)を半分に分けます。この問題は解決されたと私は思う。
しかし、のテストできないコミットに問題があります。いくつかのリビジョンコードがコンパイルされていない場合、またはコンパイルされた場合、それは開始/実行されません(または、検索しているものと無関係のバグを見つける)。バギー行動 - バグが
- 良い:これは代わりに、単純に「良い」または「悪い」としてコミットマーキングの、あなたが今可能な状態を持っていることを意味し
- 不明(テスト不能は) - バグが存在する場合は知られていない
一部のバージョン管理システム(SCM)では、このようなコミットを「スキップ」することができます。通常は、親のリビジョンに次にテストするものとなります。
質問は以下のとおりです。
あなたはこのような状況に対処する場合は、二分を使用し、非テスト可能改定つまずい意味、あなたの経験では、このような非検証可能なコミットの分布は何ですか?それらは孤立して(単一のun-testableコミット)発生するか、範囲内に現れますか(リビジョンa..bはテスト不能です)?あなたはコミット後にコミットをスキップしなければならない状況に自分自身を見つけましたか?
リスト/線形履歴を単純に二等分する場合や、リビジョンの任意のDAGを二等分する場合など、いくつかのマテリアルモデルがあるか、テスト可能でないコミットをスキップするのを最適化するアルゴリズム(おそらくヒューリスティック)があります。目標は、テストできないコミット(または無関係のバグ)が存在する場合に、テストするバージョンの数を(平均で)最小にすることです。
バージョン管理システム、またはリビジョン管理システム用のアドオン/拡張/プラグイン、またはそのようなアルゴリズムを実装するサードパーティのツールを使用しますか?隣に移動することでテストできないコミットを単にスキップすることができますリビジョン?このVCSまたはツールとは何ですか?あなたがそれを知っているなら、どのアルゴリズムを使用していますか?
これにより、さらに簡単に(半自動的に)バグを発見することができます。
を追加しました2009年6月6日:
Gitリポジトリの高度な機能を使用して、あなたがテストに少なくともハードテスト不能コミットの(または全体を支店を持つことができるものな状況があります)、つまり「サブツリー」を使用して、2つの別々のプロジェクト(例えば、完全なLinuxカーネル、「サブツリー」マージを使用して別々に開発されたドライバーを含む)の履歴を結合します。これは、テスト可能でないコミットに対処するためのアルゴリズムを考案する際に考慮すべき点です。非線形履歴では、テストできないコミットの全体が存在する可能性があり、アルゴリズムはトポロジ(幾分)を考慮する必要があります。
あなたのアドバイスは、テストできないコミットを導入することです。良いアドバイスですが、大したことはありません(サブツリーマージに関するコメントも参照してください)。 –
悪いコミットのようなポケットの長さの分布を知っているといいでしょう。 –