た,操作内容,この例では「hello2.c」に名前を変更するということをサーバに送信する.そして,サーバ内 の利用者のフォルダ内にある「hello.c」を検索し,「hello2.c」という名前に変更している.
エディター
プログラムを編集するエディターを実装するために,Ace.jsを利用した.また,利用者が開いているプログ ラムに合わせて,適切なシンタックスハイライトを設定する必要がある.そのため,利用者が現在開いている プログラムのファイル名の拡張子からプログラミング言語を判断し,Ace.jsが提供しているシンタックスハイ ライトを設定している.
WOJ上のエディターには,Redo,Undo機能がある.これらもAce.jsが提供しているAPIを利用して実現 をした.
コンパイル・実行
利用者が開発したプログラムは,サーバ内でコンパイル,実行される.そのため,プログラムのコンパイ ル,実行はセキュリティの観点から,セキュアな環境下で行う必要がある,なぜなら、プログラムに悪意のあ るコードが含まれているとサーバを乗っとられたり、破壊される恐れがあるためである.
そのため,Isolateを利用しサンドボックスを作成した.利用者のプログラムは全てサンドボックス内でコン パイル,実行される.これにより,サンドボックス外のファイルにアクセスすることが不可能であるため,悪 意のあるコードが含まれていてもシステム自体に影響を及ぼすことがない.
5.3 自動採点
WOJではプログラムの提出を受け付けると,以下の手順に従い採点を行う.
コンパイル
WOJではプログラムの提出を受け付けると,始めにコンパイルを行う.コンパイルエラーが起こった場合 は,コンパイラのエラーメッセージを提出者に表示し不合格とする.
テストケースの読み込み
コンパイルが正しく通った場合は,図4.11に示した書式のテストケースを読み込み,それに従い順次プロ グラムを実行し,テストを行う.
テスト
テストは,テストケースに従って入力を行い,正しい出力が行われたかを確認する.プログラムの実行に5 秒以上かかる場合はタイムアウトし,その旨を提出者に表示し不合格とする.テスト結果はすべてDBに保存 している.
5.4 学習状況把握
WOJ内での利用者の行動を逐一,ログファイルに書き込んでいる.書き込む内容は,時刻,操作内容,学 籍番号,権限,操作の詳細である.学習状況の把握は,これらのログファイルを解析することで実現できる.
ログファイルの例を図5.1に示す.左から順に,操作時刻,操作内容,学籍番号,権限,課題ID,詳細と なっている.操作時刻の次に表示されている文字列は操作内容を表している.ログファイルにおける操作内容 の表記を表5.1に示した.その次の文字列は操作を行った利用者の学籍番号を表す.そして,次のstudentは 権限を表す.教員権限の場合はteacher,管理者権限の場合はadminとなる.次の数字は課題IDを表し,ど の課題において操作をしたかがこれによりわかる.一番最後の文字列である詳細は,操作内容により異なる.
図の例における1〜4行目では,操作対象のファイルを表す.例の場合,「test.c」に対して操作を行っている.
図の5行目である採点においては,採点結果の点数を表す.例の場合,100点を取得している.
図5.1: ログファイルの例
表5.1: ログファイルにおける操作内容の表記
表記 操作内容
Activity: [GetProgram] プログラムを開く Activity: [NewFile] ファイル作成 Activity: [DeleteFile] ファイル削除 Activity: [RenameFile] ファイル名変更 Activity: [NewFolder] フォルダ作成 Activity: [DeleteFolder] フォルダ削除 Activity: [RenameFolder] フォルダ名変更 Activity: [SaveProgram] プログラム保存 Activity: [Compile] コンパイル Activity: [Mark] 採点