学生の実習用のシミュレータプログラムの開発経験

6ダースの学生作品(6実用的な作品* 10学生)をチェックする必要性に直面して、私はこのプロセスが自動化されるべきであることに気づきました。 手書きの決定を検証する難しさは言うまでもなく、不正行為の問題を何らかの形で解決する必要があります。 学生時代の私でも、特別に開発された制御およびトレーニングプログラムシミュレータ(DOS用)を使用して、コンピューターの分野の1つで練習をしました。 今、私はこの経験を繰り返したいと思いました。



これはシミュレータであり、テストシステムではないことを明確にします。 私はそれらの違いを次のように定義します:テストシステムは入力でテストのセットとそれらに対する回答のセットを受け取り、作業の過程で学生にテストを与え、回答との一致をチェックします。 それどころか、シミュレータには各問題を解決するためのアルゴリズムが含まれているため、一意のタスクが生成され、その解決策が実行されるたびに、学生の解答がシステムの解答と照合されます。 このオプションの利点は、質問と回答のデータベースをコンパイルしてシステムを回避できないことです。 新しく生成された各タスクは、最初から解決する必要があります。



シミュレーターの開発に言語と技術を選択するという問題は解決しませんでした。 外部の学生や、家を出ずに仕事をする機会に遅れている学生を提供する必要があります。 したがって、唯一のWebアプリケーション、したがって、PHPは私にとって最も便利な言語です。 DBMS-MySQL。



実際の作業を確認するために必要な分野は、「情報検索」と呼ばれます。 タスク- クリストファー・D・マニング、プラバカール・ラガヴァン、ハインリッヒ・シュッツェの本から。 情報検索の紹介 。 自然言語処理の必要性が問題を複雑にしました。



まず、タスクの生成元となるドキュメントのコレクションコンパイルする必要がありました。 私はロシアのことわざの辞書から始めましたが、ロシア語の形態学的分析の複雑さのためにこの考えを放棄し、同じ英語の辞書を使用しなければなりませんでした。これにより、チェックスクリプトは文を単語に分割します。



多くのタスクでは、ソースデータ生成は困難なタスクであることが判明しました。 たとえば、ドキュメントのコレクションの逆インデックスを作成するには、そのような「ドキュメント」として使用されることわざにいくつかの共通の単語が含まれている必要があります。 それ以外の場合、タスクは解決できません。 したがって、アルゴリズム全体を考え出す必要がありました。ランダムな単語を選択し、それが使用されているすべてのことわざを見つけ、それらをペアで比較し、各ペアの一般的な単語の数を数え、この数が所定のしきい値を超える場合のことわざを書き留めます。 結果の要素のリストが、指定された別のしきい値よりも小さい場合、最初からやり直します。 そのようなものをその場で生成するのが難しいことは明らかなので、私はすべてのことわざを同時に索引付けし、それらを言葉で分割し、結果をデータベースに書き込む必要がありました。 難しいですか? そして、そのようなアルゴリズムはほとんどすべてのタスクのために発明されなければなりませんでした!



また、回答フォームは常に些細な質問ではありません。 回答については、数字または文字列を書き留めれば十分な場合もありますが、この数字または文字列は目で簡単に計算でき、数式を使用する必要はありません。 そして、数式の知識を正確に確認する必要があります! したがって、応答の記録形式はさまざまでした。 どこか普通のテキストボックス、どこかテキストエリア。 ただし、2つの単語間のレーベンシュタイン距離を計算するタスクでは、学生が計算アルゴリズムを理解していることを確認することが重要であるため、マトリックス全体を導出する必要がありました。



画像



シミュレーターを使用する手順については、タスクにアクセスするには登録が必要です。 ログインしたユーザーには、すべての作品とすべてのタスクのリストが表示され、彼が渡したタスクもハイパーリンクなしで表示されます-アクセスは拒否されます。



画像



エラーの修正は提供されません-タスクにアクセスするたびに、スクリプトはそれを再度生成します。



ここで、生徒がそのような知識の管理システムをどのように認識したかについて説明します。 最初は、多くの神経が原因​​で、わずかなエラーでタスクを再度解決する必要がありました。 すぐに、これを回避する2つの方法が見つかりました。 1つ目はOperaブラウザを使用することです。このブラウザでは、「戻る」ボタンをクリックすると、古いタスクとともにページ全体が復元されます。 2つ目は、生徒の回答が確認のために送信されただけでなく、課題もHTMLフォームの非表示要素で送信されたポストリクエストを置き換えることです。 数回の授業の後、学生は、要求後のなりすましを使用して、他の誰かの古いタスクではなく、他の誰かのタスクを送信できることを理解しました。 したがって、彼らはここでも帳消しにすることを学びました。



ただし、すべてが償却されたわけではなく、いずれにしても、少数の人にとっては、1つの決定を確実に下さなければなりません。 したがって、私たちの実践におけるコンピュータークラスの見方は、すべての生徒の激しい精神的作業の素晴らしい写真でした。



進捗状況を表示するために、完了したタスクのリストを表示するスクリプトを作成し、日時の降順または学生別にソートしました。



画像



画像



これで、日曜日にこのリストを開いて、休憩中に生徒がタスクを続けていることがわかります。



この経験からどのような結論を導き出すことができますか? もちろん、シミュレータを改善する必要があります。 タスクを渡す試行回数を制限し、ソースデータの置換の可能性を防ぐ必要があります。 私はこの学期に、システムの降伏/バイパス/ハック(あなたは決して知らない)のプロセスのみを観察し、何も修正しないと決めました。 将来的には、このシミュレータを他の分野に適応させることを考えています-タスクがあるところはどこでも。



残念ながら、同じ方法で研究室の学生が書いたプログラムコードを検証することはほとんど不可能です。 ACM / ICPCプログラミング競技会のように、ここではブラックボックス方式のみを使用できます。 しかし、盗作をチェックする方法を探す必要があります。 さらに、人間の教師に代わるプログラムはありません。



実際、それがすべてです。 最後まで記事を読んでくれた人々に感謝します。 コメント、コメント、アドバイスを待っています。



ここでシミュレーターをテストできます: science-search.ru/ir_studentsログイン: test 、パスワード: test



All Articles