1

そこで、AutoCAD 2005 用のプログラムをいくつか開発してきましたが、常に問題に直面していました。具体的には、絶対角度 (「方位角」) に基づいて線を描画する必要があるプログラムに取り組んでいました。距離、特別な入力形式から度、ラジアン、およびその逆への変換、および他の多くのプログラマーと同様に、私のコードは特にかさばり、バグが多くなりました。約 3 ~ 4 日かかるはずのプログラム/スクリプトで、ほぼ 1 週間半も立ち往生してしまいました。

開発をよりスムーズにするためのテスト フレームワークを実装することを考えていましたが、他の言語とは異なり、そのためのライブラリがまったくないと思われる言語で作業しており、さらに良いことに、それは埋め込みスクリプト環境です。

設計がどのように機能するかについていくつかのアイデアがありますが、いくつか説明する必要があります。

コマンドの実行/AutoLISP バックグラウンド

私が書くプログラムのほとんどは、シェルによく似たコンソールのようなコマンドの形式になっています。たとえば、 function を書くとしますx。AutoLISP では、次のように表されます (スラッシュも文字通りそこにあります): (defun x (arguments / local variables) body of function). コンソールに公開するには、名前を から に変更する必要がありxますC:x

そのため、ほとんどのテストはコンソールから直接行う必要があります。私は AutoCAD に組み込まれている Visual Lisp エディタを避ける傾向があります。これは、プログラムが使用される可能性が最も高い実際の作業環境から切り離されているように思われ、実際のデバッガがないように思われるためです。そのため、コードをデバッグするために、または他の方法を頻繁に使用する必要があります。(print "string")

アイデア/考え/質問

1. テスト フレームワーク用に公開したい関数の種類は? コンパイル時のテスト、アサート、Java のテスト クラスなど、複数のパラダイムについて聞いたことがあります。アサートをコーディングしてみる必要がありますか? おそらく、リフレクションを使用したテストを作成する必要がありますか?

2. テストを挿入する方法と場所は? 別の関数を作成し、すべてのローカル変数をグローバルに変更して、可能なテスト コンテキストに公開することを考えましたが、これをどのように実行したいかはまだわかりません。AutoLISP には通常の Lisp マクロが欠けていると思いますが、それでも非常に優れたリフレクション機能を備えていると思います。そのため、実際にコンソールにコマンドを入力して何かを実行することは可能です。外部の非侵入型フレームワークが最も理にかなっていると思いますが、これについてはより経験豊富な回答を得たいと思います。

4

1 に答える 1

1

基本機能:同じ入力を使用すると、システムは同じ出力を提供します。

便利な機能:アサート。コードのテストでいくつかのセットアップが与えられたら、テストするプログラムの一部を実行し、出力についてアサーションを行います。すべてのアサーションが期待どおりである場合は、最小限のものを出力します。アサーションが失敗した場合は、何が問題なのかを突き止めるのに役立つように、より詳細な情報を出力してください。

増分機能。何かがテストに忍び込み、手動でバグを見つけなければならない場合は、次回そのバグをカバーするテストを作成します。

継続的な機能。 ソース管理システムへの送信ごとに少なくとも 1 回はテストを実行します。失敗が一般的であるがテスト自体は迅速な場合は presubmit として実行できます。または、失敗がまれであるがテストが遅い場合は postsubmit として実行できます。

于 2015-06-26T03:25:16.400 に答える