2

シリアライゼーション レイヤー ジェネレーターの開発を続けています。ユーザーが型の説明を (現在は XSD または WSDL で) 入力すると、ソフトウェアは特定のターゲット言語 (現在は Java および ansi C89) でコードを生成します。このコードは、記述された型を表すことができ、シリアライズも可能です (バイト シーケンスに変換) し、これらの値を逆シリアル化します。

コードを生成するのは難しいからです (つまり、コードを書くのは難しいです。コードを書くコードを書くことは、難しいことをするためにコードを書くことです。これはまったく新しい難しさの土地です:))。したがって、私の修士論文に先立つプロジェクトでは、いくつかのシステム テストを実施する必要があると判断しました。

これらのシステム テストでは、値とバイト シーケンスのタイプとペアの数が認識されます。特定の言語でシステム テストを実行するために、型がシステム全体で実行され、上記のようなコードが生成されます。次に、このコードは、手書きのホスト コードとリンクされます。ホスト コードは、これらのバイト シーケンスと値のペアを読み取ることができ、文字列から指定された値の値を読み取る機能を備えています。次に、結果の実行可能ファイルが実行され、バイト値ペアがこの実行可能ファイルに供給され、そのようなすべてのバインディングが出力 "Y" になるかどうかが全体的にチェックされます。この場合、型のこれらの例の値は、以前に定義されたバイト シーケンスにシリアル化され、生成されたコードが正しくコンパイルおよび実行され、したがって全体として、この型を処理するシステムの部分が正しいと結論付けることができます。

ただし、現在の実装には少し不満があります。現在、クラス属性からこれらのバイト値バインディングを読み取るために、非常に多くのリフレクション ソーサリーを使用するカスタム junit ランナーを作成しました。また、コードを生成するための全体的なスタックには、多くのボイラープレート コードとボイラープレート クラスが必要です。さらに悪いことに、Junits 記述に基づいており、テスト失敗レポートを生成するすべてのツールと適切に統合することは非常に困難です。このエラーの形式がjunit独自のアサーションエラーとは異なるという理由だけで、有用なmaven JunitテストランナーまたはEclipseテストランナーがコンパイラーがスローしたエラーを飲み込んだ場合に何が起こっているかを実際にデバッグすることは非常に困難です。

さらに悪いことに、生成されたコードでテストが 1 回失敗すると、maven ビルドが失敗します。これは非常に面倒です。別のユニットの特定のテストが失敗した場合に maven ビルドが失敗した場合、(たとえば) 何らかの理由で特定の深さの最初の事前注文の計算が失敗した場合、すべてがうまくいかなくなるため、私はそれが好きです。ただし、動作していることがわかっている型に対して生成されたコードを誰かに見せたいだけの場合、現在取り組んでいる型が完成していないためにアプリケーションをすばやく構築できないと非常に面倒です。

では、この背景を考えると、これらの生成仕様をチェックする優れた自動システムをどのように入手できますか? 私が考えた可能性:

  • Junit 統合ソリューションは、maven、junit、および junit とランナーおよびその他すべてとの統合を改善できない限り、理想的とは言えません。
  • 以前はfitnesseを使用していましたが、解決するよりも多くの問題を引き起こしたため、全体的に見捨てました. 私たちが抱えていた主な問題は、maven と hudson への統合でした。
  • texttest を使用したソリューション。これは主に実行可能ファイル、stdin に配置する文字列、および stdout に期待する文字列を必要とするため、完全には確信が持てません。「アプリケーションを実行し、ホストコードとリンクして、生成された実行可能ファイルを実行する」全体を追加するのはちょっと複雑に思えます。
  • 私自身の解決策を書いています。これはもちろん機能し、私が望むことを行います。ただし、いつものように、これは最も時間のかかる作業になります。

それで...何か独自のものを書くことを避けながら、これを行う別の方法がありますか?

4

1 に答える 1

0

-Dmaven.test.skip=true で Maven を実行できます。プロジェクトをテストするコマンドの 1 つを明示的にヒットしない限り、Netbeans にはこれを自動的に設定する方法があります。Eclipse については知りません。

于 2010-06-14T18:06:41.057 に答える