2011-03-02 4 views
0

私は何をしなければならないのですか?コンパイラのフック/メソッドの出力のフック(C# - C++)

学生がエクササイズからいくつかのC++コードをアップロードできるようにする必要があります。このアップロードされたコードは、そのエクササイズの「ベストコード」と比較する必要があります。そして、それらの比較から、学生が良いコードや悪いコードをアップロードした場合、サーバはフィードバックを返します。 EG:1から10のアーリーリストを作って、生徒がコードをアップロードできるようにすることです。サーバーはそれを他のコードと比較し、フィードバックを与えます。

これは、ユーザーがコード化できるさまざまな変数のため、単なるファイル比較者になることはできないため、簡単に言えます。それで、私は外部コンパイラを使って出力を得て、この出力を "ベストコード"の出力と比較するようにしていたのです。または、コンパイラ内でフックを取得するために詳細なので、すべてのメソッドとすべての変数をチェックできます。

他の考え方、どのように確認したり比較したりできますか? 既に存在するプログラムはありますか?

非常に感謝し、 マイケル

+2

楽しんでください。あなたはpropably、*信じられないほど正しい*あなたがこれが「完了したよりも簡単だ」と言っていることを認識していない。とにかく、他のプロジェクトではライブラリとしてハッキング可能で再利用可能と明示的に設計されたC/C++/ObjCコンパイラであるClangを見てください。 – delnan

+0

Big0表記も考慮する必要があります。 – Nocturnal

+0

エクササイズはどのくらい簡単ですか?それが1行か2行以上であれば、それを単に名目上の最良の例と比較するだけでは役に立ちません。それを自動化しようとすると、たくさんの生徒が表示されます。それに固執すれば、教授は学生たちの間で悪い評判を得ることができますし、最近は悪者が誰でも見ることができるようになっています。 –

答えて

0

あり、プログラム全体の出力を評価するシステムがある(ejudgeが好き、それはコンテストのシステムとして使用されている)、そして、私の意見では、それはので、それらを使用する方が簡単ですプログラムコード上の条件を指定することは、自明なことではありません(学生が自明ではないプログラムを書く場合)。 ACSLのような正式な仕様言語を使用して入出力条件を設定し、プログラムが正しく動作することを証明することができます。

0

バウンダリテストスイート(または、エキサイティングなことを望む場合は突然変異テスト)のようないくつかの自動テストに対して動作をテストしてから、奇妙な実装を探すか、興味深いアーキテクチャは、関数の数、コード行、コンパイルサイズなどのコードメトリックを調べます。

このアプローチは、スケーラビリティがはるかに高く、特に自動テストシステムを簡単にセットアップできるC++やjavaには、多くの無料ツールがあります。

正確性を判断するためにコードを比較することは、実行方法によっては必ずしも正しいアプローチではなく、スケールアップするのが非常に難しいでしょう。