0

私は単なるスパゲッティではなく、壊れると卵の殻に変わる (ハンプティ ダンプティ シンドローム) レガシー アプリに取り組んでいます。煙突でプードルを見つけます。

例として、ここに私が理解しなければならないメソッドがあります。これはほんの最初の部分です:

private void InitializeBackgroundThread( LoginStatuses loginStatus, string DialogCap )
{
    try
    {
        double pause         = 1;
        int    wait          = 250;
        ProgressChangedFlag  = false;
        ProgressChangedIndex = 0;
        pc                   = new PendingCommands( pause, wait );

        PendingCommands.ProcessCommands = true;

        if (!((loginStatus == LoginStatuses.LoginVendors) || (loginStatus == LoginStatuses.LoginInventory)))
            PendingCommands.Processing = false;

        PendingCommands.Timeout        = false;
        Util.StopCancelRequested       = false;

        if( timeOut != "" )
            pc.timeOut = timeOut;

        if (!((loginStatus == LoginStatuses.LoginVendors) || (loginStatus == LoginStatuses.LoginInventory)))
        {
            InitializeBackgroundThread_CCRLoginTerminate        (true);
            InitializeBackgroundThread_CCRTimerExceeded         (true);
            InitializeBackgroundThread_CCROnline                (true);
        }

        if (loginStatus == LoginStatuses.LoginVendors)
        {
            InitializeBackgroundThread_CCRCommandConfirmedGetsites  (false);
            InitializeBackgroundThread_CCRCommandConfirmed      (false);
            InitializeBackgroundThread_CCRCommandConfirmedSitesetup (true);
        }
        else if (loginStatus == LoginStatuses.LoginSitesData)
        {
            InitializeBackgroundThread_CCRCommandConfirmed      (false);
            InitializeBackgroundThread_CCRCommandConfirmedSitesetup (false);
            InitializeBackgroundThread_CCRCommandConfirmedGetsites  (true);
        }
        else
        {
            InitializeBackgroundThread_CCRCommandConfirmedSitesetup (false);
            InitializeBackgroundThread_CCRCommandConfirmedGetsites  (false);
            InitializeBackgroundThread_CCRCommandConfirmed      (true);
        }

        InitializeBackgroundThread_CCRProgress              (true);
        InitializeBackgroundThread_CCRProgressChanged       (true);
        InitializeBackgroundThread_CCRProgressComm          (true);

これで、メモ帳を使って「デスクチェック」できます。は「SNAFU」ですか?などなど、吐き気がします。

ツールがこのスパゲッティを食べて、次のようなレポートを吐き出すことができたら素晴らしいと思いませんか。

*With a loginStatus of "AllQuiet"
PendingCommands.Processing is set to true.
InitializeBackgroundThread_CCRProgressChanged is called.
...
With a loginStatus of "SNAFU"
(etc.)*

これは、「キラー」なデバッグ/サニティ チェック ツールです。コード カバレッジ ツールがあることは知っていますが、これほど洗練されたツールはありますか?

4

1 に答える 1

4

これは、特定のテストを実行した場合に実行されるコードを追跡するだけのコード カバレッジではありません。

あなたが望むのは、プログラムのスライス (「あるコード ポイントから下流/上流のすべてを表示する」別名「スライス」http://en.wikipedia.org/wiki/Program_slicing ) と部分的な評価 (「showある値が特定の定数であると仮定すると、このコードはどのように見えるか" http://en.wikipedia.org/wiki/Partial_evaluation )。そして、実際のコードの上に結果を重ねて表示し (たとえば、選択した部分を太字にする)、フォーカスを確認します。

はい、それは非常に優れたツールです。

いいえ、私は何も知りません。C および C++ 用のプログラム スライサーがあります ( http://www.grammatech.com/research/technologies/codesurferを参照)。部分的な評価部分はないと思いますが、検査対象のスライスのサイズを最小限に抑えるためのオプションがいくつかあると思います。

于 2013-06-03T13:46:23.480 に答える