...

Javaプログラミング学習支援システムでの コード設計学習機能

by user

on
Category: Documents
5

views

Report

Comments

Transcript

Javaプログラミング学習支援システムでの コード設計学習機能
平成 23 年度
特別研究報告書
題
目
Java プログラミング学習支援システムでの
コード設計学習機能
報
中
告
村
者
拓
哉
学籍番号:09420925
岡山大学工学部通信ネットワーク工学科
平成 24 年 2 月 6 日提出
指導教員
舩曵 信生 教授
Java プログラミング学習支援システムでの
コード設計学習機能
要約
社会の IT 化の浸透に伴い,ソフトウェアの不具合によるシステム障害がもたらす経済的,社会
的影響は計り知れないものになっている.このような不具合を未然に防ぐため, プログラム開発の
際に, 先に「コード設計」を行った上で実際のプログラムを作成することが一般的になっている.
これにより, バグやエラーなどが少ない, より正確なプログラムが作成できる. また, コード設計の
際にプログラムのコード設計書を作成することで, 項目の識別や分類を容易にし, システムの処理
効率を上げられるという利点もある. このため, コード設計は現在のプログラム開発において必要
不可欠なものとなっている.
本研究グループでは,これまで学生の Java プログラミング学習の支援,ならびに, 教員の教育
負担の軽減を目的として,Java プログラミング学習支援システムを提案している.本システムで
は,教員があらかじめ各課題に対する模範解答と, 仕様書の代わりとなるテストコードを登録して
おく. 学生はテストコードを仕様書として, 課題プログラムを作成・検証する.
この従来のシステムでは, 学生にコード設計を行わせる前に教員がテストコードを与えてしまう
ため, 学生が自らコード設計をするための能力が身につかない, という問題点が挙げられる. また,
課題を解く際においても, 実際にテストコードを作成したのが学生自身ではないため, プログラミ
ングが不得意な学生では, 仕様書であるテストコードが理解できず, プログラムのソースコードが
全く書けない, といった問題も起こり得る.
そこで本研究では,学生自身にプログラムのコード設計書を作成させ, この仕様書に基づいて実
際のプログラムを書かせる, 「コード設計学習機能」を, Java プログラミング学習支援システムに
実装する. 提案する機能では, まず, 学生がソースコードを作成する前に自身でコード設計を行い,
教員があらかじめ作成したコード設計書と学生自身が作成したコード設計書の比較検証を行う. こ
こで, プログラミングが不得意な学生にも十分な情報を含んだ仕様書が書けるように, 模範解答か
ら自動的に仕様書のヒントが与えられるようにしている, その上で学生は, 作成したコード設計書
を元にソースコードの作成を行う. このようにして, 学生自身でコード設計書作成を行わせること
で, コード設計能力を身につけることが期待できる.
本機能の有効性を検証するため, 本学工学部通信ネットワーク工学科 2 年生を対象に, 実際に本
機能を使ってもらい, アンケートによる評価を行った. その結果, 学生自身がコード設計を行うこ
とがソースコードの作成に役立ったことが明らかになった.
今後の課題としては, まず, 今回の検証実験でコード設計書に関する知識が少ない学生が多く見
られたことから, コード設計書作成がより容易に行えるように改善する必要がある. 次に, 作成し
たコード設計書の検証の際, メソッドの処理内容や引数の意味などは自動で検証できなかったこと
から, 今後, 自動検証できるように工夫する必要がある. さらに, 模範解答にコンストラクタを持つ
場合, 現在のシステムでは対応できないため, これに対応する必要がある.
i
The Code Design Learning Function in Java Programming
Learning Assistant System
Abstract
With the penetrations of Information Technology into our society, system failures by the
software troubles have great negative influence on economy and society. In order to prevent
such failure, when developing a program, we create actual program after performing ”code
design”. Code design leads less bugs and errors. Moreover, if we create the specifications and
perform a code design, it can improve the processing efficiency. For this reason, the code design
is indispensable in the present program development.
In our group, we have proposed a Java programing assistant system for students and teachers.
In this system, teachers register the model answer to assignments and the test code. Students
create test assignment programs and verify the one with the test codes.
However, in this system, because teacher give a test code as the specification before student
make it. Therefore, when student solves a subject, there is a problem that student, who are not
good at programing, can’t understand specifications and write a source codes.
In this paper, we implement the code design learning function to Java programing learning
assistant system so that students can make and write the code design document of program and
make source codes based on it. In the propose system, at first, before a student creates a source
code, the student performs code design, and makes a comparison between the code design make
by the teacher beforehand and own code design document. The proposed system includes the
hint function given from the model answer so that the code design document include sufficient
information for a student with poor programming skills. Next, the student makes a source code
based on the document which the student created. Thus, the student can master the capability
of code design by code design and document creation.
In order to verify the validity of this system, we asked faculty of technology communication
network engineering department second grader to use the functions in the system, and it was
evaluated by questionnaire. The questionnaire results show that our system was useful for
creation of source code that student performs code design.
The future work is the following. First, code design should be done more easily because many
students with little knowledge about a document were seen in this verification experiment.
Second, when verifying the created specifications, it is necessary enabling it to verify them
automatically because the contents of processing of a method and the meaning of the argument
were not able to be verified automatically yet. Third, when it has a constructor in a model
answer, it is necessary to correspond because it can’t respond in the present system.
ii
目次
1
まえがき
1
2
先行研究
2.1 Java プログラミング学習支援システム
2.2 コード設計に基づくプログラム開発 . .
2.2.1 開発サイクル . . . . . . . . . .
2.2.2 利点 . . . . . . . . . . . . . . .
.
.
.
.
2
2
2
3
3
.
.
.
.
.
4
4
5
7
8
9
.
.
.
.
.
10
10
10
11
13
14
3
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
コード設計学習機能
3.1 学生によるコード設計書作成 . . . . . . . . . . . . . .
3.2 コード設計書検証支援と学生による修正 . . . . . . .
3.3 学生によるコード設計書に基づいたソースコード作成
3.4 提案システムを用いた教員側のシステムの流れ . . . .
3.5 提案システムを用いた学生側のシステムの流れ . . . .
評価
4.1 システム構成 . . . . . . . . .
4.2 課題と解答結果 . . . . . . . .
4.3 アンケート評価結果 . . . . .
4.4 アンケート結果に対する考察 .
4.5 課題提出結果に対する考察 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
関連研究
16
6
むすび
18
謝辞
19
参考文献
20
iii
1
まえがき
社会の IT 化の浸透に伴い,システム障害やソフトウェアの不具合がもたらす経済的,社会的影
響は計り知れないものになっている.このような背景のもと,コード設計を行った上でプログラ
ムを作成することで, バグやエラーなどを従来よりも少なく, かつ正確なプログラムを作成できる.
そのようなプログラムの開発方法として,
「コード設計学習」がある.通常,プログラミングの
授業において, 学生がプログラムを書く際はコード設計を行わずにソースコードを作成するという
方式を取ることが多い. それに対して,コード設計学習では,先にどのようにソースコードを書い
ていくかといったコード設計を行い, その作成したコード設計を元にソースコードを書くいうアプ
ローチである.こうすることにより,実装機能の識別を容易にし, 仕様通りでない箇所がはっきり
することができる. さらに, システムの処理効率が上げられるという利点もある. 従来に比べてバ
グの少ないソフトウェアを作ることが出来る. このように, コード設計は, 学校でのプログラミン
グ教育の段階で身につけるべきである.
本研究グループではこれまで,学生の Java プログラミング教育の支援,ならびに, 教員の負担
を軽減する目的として,Java プログラミング教育支援システム [1] を提案してきた.本システム
は,教員が登録した課題,テストコードを仕様書として,学生が課題プログラムを作成し,オン
ラインで検証するシステムである.
この,従来のシステムでは,学生は教員が登録したテストコードを仕様書として,課題を作成
するだけで, 学生にコード設計結果の提出を求めていない. このシステムでは,学生は教員の示し
たテストコードを仕様書として参照するのみである. テストコードを作成したのは学生自身ではな
いため, プログラミングが不得意な学生ではそれが理解できず, ソースコードが全く書けない, 学
生のコード設計に関する知識を深めることは出来ない, という問題点がある.また,学生が作成し
たプログラムが無限ループを発生させる場合や悪意のある処理が記述されている場合, どこでどう
いった処理が行なわれているか学生自身が理解できないなどの問題点もある.
そこで本研究では,Java プログラミング教育支援システムで学生がコード設計学習を可能とす
る拡張を行う.本機能の特徴として, 学生がコード設計学習を経験することによって,コード設計
がソースコード作成に役立つと同時に, プログラミングについての知識を深めることが出来るとい
う点が挙げられる.
本機能では,学生がソースコードを作成する前に参照した課題に基づき, コード設計を行う. 教
員が課題を作成する際にコード設計の模範解答も作成しておき, 学生は自身が作成したコード設計
結果と教員が作成したコード設計の模範解答とで検証を行う. この検証では, 学生が作成したコー
ド設計のクラス名, メソッド名, メソッドの引数の型, 戻り値の型すべてが模範解答と一致しなけれ
ば, 次の順序であるソースコード作成画面へ遷移できないようになっている. そのため,メソッド
内での処理内容や動作を理解でき, 学生はより模範解答に近いソースコードの作成が可能となる.
本機能の評価として,実装機能を学生に使ってもらい,アンケートによるユーザビリティ評価
を行った.Java 学習中である工学部通信ネットワーク工学科 2 年生 37 名に対し,簡単な課題を 1
問出題し,解答してもらった.アンケートの結果,本システムが学生のテストに関する学習に役
立つことが明らかになった.
本論文の章構成を以下に示す.まず,2 章で先行研究を述べる.3 章で提案機能について述べる.
4 章で評価と考察を述べる.5 章に関連研究を述べる.最後に 6 章でむすびを述べる.
1
2
先行研究
本章では,本グループによる先行研究として,Java プログラミング学習支援システム [1] につ
いて述べる. 次に本研究の前提となる,コード設計に基づいたプログラム開発の方法について述
べる.
2.1
Java プログラミング学習支援システム
本研究グループでは,学生の Java プログラミング学習の支援を目的として,コード設計学習に
よる Java プログラミング学習支援システムを提案している.このシステムは,学生がソースコー
ドを作成する前にコード設計することで,ソースコードの内容を理解でき, ソースコードの作成を
支援するというシステムである.
まず, 教員は学生に対するプログラミングの課題を考え, その課題文,模範解答コード,コード
設計の模範解答, テストコードを登録する.学生には,課題文,コード設計の入力フォーム, テス
トコードが提示され,学生はテストコードをプログラムレベルの仕様書として,クラス名やメソッ
ド名, 処理内容などを設計する際に参考にし, コード設計を行う. 後に課題プログラムをテストコー
ドのテスト項目を充足するようにコーディングする.コード設計した際に入力したクラス名・メ
ソッド名・メソッドの引数の検証はオンラインで行う. また, 解答コードの検証もオンラインで行
い, 検証結果は即座に学生へフィードバックされるため,教員の負担は軽減され,学生へのフィー
ドバックの遅れも改善される.
図 1: オンラインでのプログラム課題評価
2.2
コード設計に基づくプログラム開発
コード設計とは,プログラムを実際に書き始める前に, プログラミングの目標を定め, そのプロ
グラムの目的や必要な入出力, 処理内容を考え, プログラム全体を設計することである. 例えば, ク
ラスや各メソッドの処理内容, 引数などを指す. プログラミング以前のコード設計を十分に行って
おけば, プログラム作成のコストを小さくすることができるという利点がある. 以下でコード設計
に基づいたプログラム開発のサイクルと利点を示す.
2
2.2.1
開発サイクル
コード設計学習での基本となる開発サイクルは以下のようになる.
1. コード設計を行う
2. 自身が作成したコード設計を参考にプログラム本体を書く
3. プログラムのコンパイルが成功するまで修正を繰り返す
2.2.2
利点
コード設計学習での利点を 2 つ以下に示す.
1. 作成したコード設計書自体が仕様書としての役割も持つこと
コード設計にはプログラムの仕様が網羅されていなければならない.すなわちコード設計を
行なうことでプログラムがどのような動作をするのかが分かる.
2. プログラム作成のコストを小さくできること
プログラミング以前のコード設計を十分に行うことで仕様が明確となり,プログラム作成の
コストを小さくできる.
3
コード設計学習機能
3
本章では,提案するコード設計学習機能の実装を説明する.
3.1
学生によるコード設計書作成
学生によるソースコード作成の支援を実現するために, 学生にコード設計書を作成させる.
学生は, 教員が作成した課題が講義ごとに参照できる. 対象の講義を選択すると, 課題一覧が表
示される. 課題番号, 内容 (課題文), 提出状況が表示されており, 「解答」ボタンにより, その課題
のコード設計を行うことができる. 課題一覧画面を図 2 に示す.
図 2: 課題一覧画面
コード設計書には, クラス名, メソッド名, メソッドの引数, 引数の型, 引数の意味, メソッドの処
理内容の入力フォームがある. 学生はその入力フォームに順次解答していくことでコード設計を行
い, コード設計書を作成する. メソッド名, メソッドの引数, 引数の型の数は, 教員があらかじめ作
成した模範解答コードから動的に取得することで, 入力フォームの数を確保する. コード設計書作
成画面を図 3 に示す. コード設計書作成画面では, コード設計の入力フォームとテストコードが参
照でき, 学生はテストコードを参考にしながらクラス名, メソッド名, メソッドの引数の型を入力
する.
4
図 3: コード設計書作成画面
3.2
コード設計書検証支援と学生による修正
コード設計書の検証の仕組みを図 4 に示す. 学生がコード設計書を作成した後, 「コード設計書
提出」ボタンをクリックすることでコード設計書の検証が行われる. 教員は課題, 模範解答コード
を作成する際に, あらかじめコード設計書を作成し, データベースへ登録しておく. これを用いて
学生が設計したクラス名, メソッド名, メソッドの引数の型, 戻り値の型を教員が作成したコード
設計書と比較することで検証を行う. この検証では, 教員が作成したコード設計書のクラス名, メ
5
ソッド名, メソッドの引数の型, 戻り値の型をデータベースから取得し, 学生がそのすべてを正解
するまで再解答を要求する. 検証結果が正しければ, 学生が作成したコード設計書はデータベース
へ登録され, 提出完了画面に遷移する.
図 ??に示すコード設計書提出完了画面では, 学生が提出したコード設計書の内容が表示される.
このとき, 教員が作成したコード設計書も表示される. そのため, 模範解答のクラス名, メソッド名,
メソッドの引数の型, 戻り値の型, 引数の意味, メソッドの処理内容を把握できる, そして, 「ソー
スコード作成」ボタンでソースコード作成画面へと遷移する.
図 4: コード設計書の検証の仕組み
6
図 5: コード設計書提出完了画面
3.3
学生によるコード設計書に基づいたソースコード作成
ソースコード作成画面に遷移した後, 学生はソースコード作成を行う. ソースコード作成画面で
は, 学生自身が作成したコード設計書をデータベースから取得する. コード設計書をソースコード
作成画面に出力することで, 学生はコード設計書を参考にしながらソースコードを作成することが
可能となる. そのコード設計書は, 検証により, クラス名, メソッド名, メソッドの引数の型は模範
解答どおりであるため, より模範解答に近いソースコードを作成できると言える.
7
図 6: ソースコード作成画面
3.4
提案システムを用いた教員側のシステムの流れ
教員側の本機能利用時の流れを以下に示す.
1 課題・課題文を作成する
⃝
2 模範解答コードを作成する
⃝
3 コード設計書の模範解答・テストコードを作成する
⃝
8
図 7: 教員側の提案システムの流れ
3.5
提案システムを用いた学生側のシステムの流れ
学生側の本機能利用時の流れを以下に示す.
1 課題を参照する
⃝
2 テストコードを参照してコード設計書作成を行う
⃝
3 コード設計により作成したコード設計書を検証する
⃝
4 自身が作成したコード設計書を参考に解答コード本体を書き, パスするまで修正を繰り返す
⃝
図 8: 学生側の提案システムの流れ
9
4
評価
本章では,実装したシステムの拡張機能を Java 学習中の学生に実際に使ってもらい,アンケー
トによる評価を行った.本学本学科 2 年生 37 名を対象として,学生機能の利用と 5 段階評価を
行った.
4.1
システム構成
図 9 に,評価に用いたシステムの構成を示す.本システムでは,サーバ OS に Vine Linux 4.1[12],
Web サーバ兼アプリケーションサーバに Tomcat6.0.28[9] を使用している.サーバプログラムは
Servlet/JSP を用いて記述している.また,データベースには MySQL5[10] を用いている.これら
は,すべてオープンソースソフトウェアである.クライアントは Web ブラウザを用いてサーバに
アクセスし,本システムの機能を利用する.
図 9: システム構成
評価環境として,サーバ側は実装環境と同じシステム構成とし,クライアント側は Web ブラウ
ザ FireFox[13] を利用した.Web ブラウザに FireFox を用いた理由としては,本システムで利用し
た Web 上で動作するコードエディタである Codepress[14] が,FireFox 以外では利用できないた
めである.ただし,他のブラウザでも使えるようにファイルアップロードでの課題の提出も可能
としている.
4.2
課題と解答結果
出題した課題は四則演算を行うプログラムを作成させる問題である. 課題のプログラムのコード
設計を行う時間を 5 分ほど設け, コード設計書が作成できたかそうでないかを検証し, その後, ア
ンケートに回答してもらった. 自動検証が可能なクラス名, メソッド名, 引数の型, 戻り値の型すべ
て正解した場合を「コード設計書が作成できた」とみなす. コード設計書が作成できた人数と割合
を表 1 に示す.
「コード設計支援あり」の場合, 与えられた入力フォームを学生がテストコードを参考にしなが
ら埋めていくので, 18 人中 9 人と, 半数が正解していた. しかし「コード設計支援なし」の場合, 何
を書いていいかわからないといった学生が多く, 正しくコード設計書が作成できた人数は 19 人中
わずか 3 人だった.
10
表 1: コード設計書が作成できた人数と割合
コード設計支援あり
コード設計支援なし
18 人
9人
50 %
19 人
3人
16 %
実施人数
コード設計書が作成できた人数
コード設計書が作成できた割合
4.3
アンケート評価結果
本システムの評価方法として, 学生 37 名を対象に,予め用意しておいた Java プログラミング課
題に解答し,5 段階評価のアンケートに回答してもらった.その問題を, 37 名のうち 18 名が今回
の提案機能を利用し, 残りの 19 名がそれを利用しなかった場合で検証した. 提案機能を利用しな
かった場合は, クラス名, メソッド名などに分類された入力フォームは無く, 一つだけ入力フォーム
を用意し, そこに学生自身がプログラムの作成にあたって必要と思われる事柄 (クラス名, メソッ
ド名, メソッドの処理内容など) を考えて入力してもらう. コード設計書作成の参考としてテスト
コードも参照できるようにした. 提案機能を利用しなかった場合のコード設計書作成画面を図 10
に示す.
図 10: 提案機能を利用しなかった場合のコード設計書作成画面
表 2 のアンケート項目に対する学生の回答を表 3, 表 4 に示す.
11
表 2: アンケート項目 (5 段階評価)
項目
内容
Q1
Q2
Q3
Q4
Q5
作成したコード設計書はソースコードを作成する上で役に立ったか
自分でコード設計書の作成ができたか
コード設計書作成は重要だと思ったか
コード設計書作成画面は見やすかったか
コード設計書作成画面の操作に問題はなかったか
表 3: アンケート結果<コード設計支援あり> (5 段階評価)
項目
Q1
Q2
Q3
Q4
Q5
役に立たない
できなかった
思わなかった
見にくかった
問題あった
1
2
4
2
3
5
2
2
2
3
2
2
3
12
9
10
11
10
4
1
1
2
2
1
5
1
2
1
0
3
役に立った
できた
思った
見やすかった
問題なかった
表 4: アンケート結果<コード設計支援なし> (5 段階評価)
項目
Q1
Q2
Q3
Q4
Q5
役に立たない
できなかった
思わなかった
見にくかった
問題あった
1
0
3
1
0
1
2
0
6
2
1
2
12
3
13
7
11
10
9
4
4
1
2
4
4
5
2
2
3
4
0
役に立った
できた
思った
見やすかった
問題なかった
4.4
アンケート結果に対する考察
Q1 では,学生自身が作成したコード設計書がソースコードを作成する際に参考になったかどう
かを尋ねており,
「コード設計支援あり」の場合は 2 以下を選んだ人が 4 人いたのに対し, 「コード
設計支援なし」の場合は 0 人であった.また Q3 では, ソースコードを作成するにあたってコード
設計書を作成することは重要であるかどうかを尋ねており, 「コード設計支援あり」の場合は 4 以
上を選んだ人が 3 人なのに対し, 「コード設計支援なし」の場合は 5 人であった. これは,今回の
評価実験の対象が本学部生ということもあって, 学生がコード設計書はどういったものかをしっか
りとは理解していないため, 自己評価に対して実際のコード設計書の違いが顕著に表れた結果であ
ると考えられる. 今後は,コード設計がしやすいよう説明文を加えたりするなど, コード設計書作
成画面をよりわかりやすくし, またコード設計書に関する知識が少ない学生にも.コード設計が容
易に行なえるようにシステムを改善する必要がある.
Q2 では,実際に自分でコード設計が出来たかを尋ねており,
「コード設計支援なし」の場合は
「コード設計支援あり」の場合に比べて 2 以下を選んだ人が 3 人ほど多く, 4 以上を選んだ人はい
ずれも同じ人数であった. これは, コード設計支援を行う場合では, クラス名やメソッド名など, 用
意されたフォームに入力していけばコード設計書が完成するため, コード設計支援を行なわない場
合とで比べると, 自分でコード設計書を作成できなかった人が少ないということは十分に考えられ
る. よって本システムは, 自身でコード設計書を作成するのに役立っていることがわかった.
Q4 では,コード設計書作成画面のレイアウトが見やすいかどうかを尋ねるものであり, 「コー
ド設計支援あり」の場合は 2 以下を選んだ人が 5 人いたのに対し, 「コード設計支援なし」の場
合は 1 人であった. また Q5 では, 一連の画面操作に問題はなかったかどうかを尋ねるものであり,
「コード設計支援あり」の場合は 2 以下を選んだ人が 7 人いたのに対し, 「コード設計支援なし」
の場合は 3 人であった. これは, Q4 では「コード設計支援あり」の場合は, 今回の課題ではメソッ
ドが 4 つあり, その各メソッドごとに引数の型やその引数の意味, メソッドの処理内容を入力させ
るフォームを出力させたため, コード設計書自体がかなり縦になってしまい, レイアウトが見にく
かったと考えられる. また Q5 でもやはりメソッドの数が多いため, コード設計書をデータベース
に格納したりデータベースからコード設計書を取り出す際に, 不正な文字や記号などを誤って入力
してしまう可能性もあり, エラーが出てしまうことが考えられる. 今後は, メソッドが増えても見
やすいレイアウトにし, 誤った入力等を未然に防ぐためのエラー処理などをする必要がある.
13
4.5
課題提出結果に対する考察
まず, 「コード設計支援あり」の場合で学生が作成した仕様書の一例を以下の表 5 に示す.
表 5: 学生が作成したコード設計書の例の一部<コード設計支援あり>
クラス名
メソッド名
引数 1(型)
引数 1(意味)
引数 2(型)
引数 2(意味)
処理内容
メソッド名
引数 1(型)
引数 1(意味)
引数 2(型)
引数 2(意味)
処理内容
Calculate
plus
int
足される数
int
足す数
足し算
minus
int
引かれる数
int
引く数
引き算
「コード設計支援あり」の場合, クラス名, メソッド名などが正解しなければソースコード作成
画面へ遷移できないため, テストコードを参考にして, クラス名, メソッド名など入力が出来てい
る人が多かった. 引数の意味や処理内容も入力フォームに書かせることにより, どういった処理を
するのか考える学生が多く, 簡単ではあるが設計できている学生が見られた.
次に, 「コード設計支援なし」の場合で学生が作成したコード設計書の一例を以下に示す.
import junit.framework.*;
public class CalculateTest extends TestCase{
public void testPlus(){
Calculate tmp = new Calculate();
assertEquals(4 ,plus(2, 2) );
}
public void testMinus(){
Calculate tmp = new Calculate();
assertEquals(2 ,minus(4, 2) );
}
public void testMultiply(){
Calculate tmp = new Calculate();
assertEquals(4 ,multiply(2, 2) );
}
public void testDivision(){
Calculate tmp = new Calculate();
assertEquals(2 ,division(4, 2) );
}
14
}
}
これは, テストコードをそのまま入力フォームにコピーしたものであり, コード設計書とは言な
い. 「コード設計支援なし」の場合の学生の 6 割近くがこのようにテストコードをそのまま入力し
ていた.
「コード設計支援なし」の場合で学生が作成したコード設計書のもう一つの例を以下の表 6 に
示す.
表 6: 学生が作成したコード設計書の例の一部<コード設計支援なし>
クラス名
メソッド名
メソッド名
メソッド名
メソッド名
CalculateTest
testPlus
testMinus
testMultiply
testDivision
ここで, テストコードのクラス名とメソッド名がそのまま入力されている. 「コード設計支援あ
り」の場合でテストコードのクラス名やメソッド名を入力すると, 検証する際に間違っているため,
ソースコード作成画面に遷移できず, ソースコードをクラス名などが間違ったまま作成することは
無くなる.
以上の結果から, コード設計書の意味が理解できる学生とそうでない学生でばらつきが生じてい
ることがわかる. 実際, コード設計書作成が行えた学生は一部しかいなかった. これは,コード設
計書作成画面でコード設計書とは何か, どのように入力したらよいか, 何をすればよいかなど, 明
確な説明が無かったからである.この問題点は今後の課題として,必ず考慮しなければならない
点である.その対策としては,コード設計がしやすいように説明文等を加え, 適切な処理が行える
ようにエラー処理も行うといったことが挙げられる.
「コード設計支援なし」の場合, クラス名やメソッド名を間違ったままソースコードの作成をし
てしまう, 処理内容をあまり理解せずにソースコードの作成をしてしまうといったことが起こる.
しかし, 「コード設計支援あり」の場合は, 正しいクラス名やメソッド名, 処理内容を知ることがで
きるため, ソースコードの作成はより模範解答に近いものになる. すなわち,学生は,ソースコー
ドを作成する前に,具体的にどのようなソースコードを書くかコード設計を通して学ぶことが出
来ると言える.以上より本システムは, プログラムの作成に有効であると考えられる.
15
5
関連研究
本章では,本研究は進めるにあたり,参考とした関連研究・システムを紹介する.
• 失敗知識を利用したプログラミング学習環境の構築 [15]
「失敗から新たな知識を学ぶ」失敗学の概念をプログラミング教育に適用することを狙い
とした支援システムを提案し,学部 2,3 年生 21 名に対する評価実験を通じてその効果を示
している.本研究では,プログラミング教育における事象・概念を失敗学における失敗知識
に対応させている.具体的には,エラー(コンパイルエラー,実行エラー,論理エラー)を
「事象」,演習課題を「背景」,エラー発生時のソースプログラムを「経過」に対応させ,
「原
因」,
「対処」,
「総括」は学習者に記述させることで失敗情報の知識化を行い,内省を支援す
る.つまり,本システムでは,エラー発生時のソース該当箇所の提示と,その原因や対処を
記入するメモ欄を実装しているのみである.そのため,エラー発生時に,学習者がその原因
や対処方法を文章として整理し,システムに記憶させる(メモを残す)ことに,本システム
の独自性があると言えるが,それだけのものである.通常のノートに記述することも可能で
あり,Web システムとしての特徴,長所は活かせていない.各学習者に,それらをノートに
記載させるだけで,同様の効果が得られるものと思われる.また,論理エラーは学習者によ
る手入力のため,精度,手間の点で問題がある.実際,多くの学生は,演習課題に対して,
コンパイルエラー,実行エラーは 0 とすることができるが,論理エラーを 0 とすることに難
があるのが現状である.評価実験の事後テストにおいて,適用群と非適用群間に,正答率の
平均値に有意差がなく,標準偏差に有意差があると言っているのみである.すなわち,評価
も十分とは言えない.
• プログラミング演習における評価方法の改善 [16]
プログラミング演習における演習課題の評価を,学生自らコンパイル・実行すること,評
価者による口頭質問に回答することで行う.そのために,学生は,事前に授業支援システム
を用いてレポートを提出しておく,評価時には,学生が自らダウンロード,コンパイル・実
行,自動採点プログラム(Java のリフレクションを採用)の実行によるテスト項目とテスト
結果(構成テスト,機能テスト)の表示,評価者による口頭質問に対するソースコードを用
いての回答の順で行う.評価実験では,アンケートでの 80 %の学生が提案方式を支持,口
頭質問を入れることでのコピー防止などの結果が得られている.
本研究に対しては,テストコード,課題プログラムの検証結果に関する口頭試問の実施が挙
げられる.
• プログラミングレポート採点支援ツールと課題設計による評価方法の改善 [17]
プログラミングレポート採点作業の改善を目的として,プログラミングレポート採点支
援ツールを Java で開発している.コンパイル・実行・閲覧・評価記録の同一画面での表示,
コード検査・テストプログラムのプラグイン可能,プログラミング言語非依存,評価記録を
元にした学生のグループ化可能の機能を有している.
本システムの問題点は,評価項目毎の評価結果はすべて手動で入力すること,個々のプログ
ラムを手動で実行する必要があることが挙げられる.本研究に対しては,テスト項目毎の検
証結果閲覧機能の実装が挙げられる.
• 個々の学習者の理解状況と学習意欲に合わせたプログラミング教育支援 [18]
プログラミング教育において,個々の学習者の理解度と意欲に応じた演習課題を出題する
手法を提案し,立命館大学での実際の開講科目への適用結果を示している.学習者の理解度
の評価は,演習課題の達成度に対する協調フィルタリングを用いる.協調フィルタリングは,
16
Web サイト検索などで実用化されている,ユーザの傾向や嗜好を過去の行動で記録し,それ
を類似の行動を取るユーザの情報を元に,そのユーザの今後の傾向や嗜好を推測する手法で
ある.達成度は,課題毎に設定された 10∼20 個程度の評価観点に対して,重要度を 1∼10
で設定し,それぞれに対して,
「理解できている」,
「どちらとも言えない」,
「理解できていな
い」の 3 段階で教員が主観的に評価を行った結果を,重みでの加重平均を取ることで算出す
る.意欲は,教員が課題毎に 3 段階で主観的に行い,提出された課題での最低提出必要課題
数に関する平均値で評価する.
本手法の問題点は,まず,教員の負担が非常に大きいこと,公平性に問題があることである.
多数の学生からの多くの課題のそれぞれに対し,多数の評価観点からの評価は困難である.
評価の自動化,アルゴリズム化が不可欠である.また,多数の学生が課題の未提出となって
おり,推薦課題を提出したのは少数の元々意欲の高い学生と考えられることから,評価結果
の分析は正確ではない(提案手法の有効性は言えない)と思われる.但し,本研究に対して
は,学習者のプログラミング能力に関するプロファイルの作成と,それに基づいて,適切な
課題提示,個別指導が行える機能の実装が挙げられる.
• プログラミング教育における学習者に適応的な支援システムの推薦手法 [19]
プログラミング教育において,学習者を支援するシステムは数多く開発され,運用されて
いる.しかし,それらの支援システムを効率的に使用するためには,学習者の状態に対応し
た支援システムを推薦する必要がある.そこで,本論文では,学習者の状態と,プログラミ
ング教育と支援システムの分析を行なった結果をモデル化し,定義したそれぞれの情報に基
づく,支援システム推薦アルゴリズムを提案し,支援システム選出のための枠組みを示して
いる.
本研究に対しては,学生個人のプログラミング能力を定義し,情報をデータベースに登録す
ることで,レベルに応じた課題の提示機能の実装が挙げられる.
17
6
むすび
本研究では,本研究グループがこれまで提案してきた,Java プログラミング教育支援システム
において, コード設計に基づいたプログラム開発の学習支援についての拡張を行った.本機能では,
学生がソースコードを作成する前にコード設計したコード設計書を作成することで, ソースコード
の内容を理解でき, ソースコードの作成を支援する. まず, 学生が課題を参照した後に, 教員が作
成したテストコードを参考にクラス名, メソッド名などを学生が考えて目的のプログラムのコード
設計を行い, あらかじめ教員がコード設計したコード設計書の模範解答と照らし合わせて検証を行
い, パスした後に自身がコード設計したコード設計書を参考にプログラムを作成する.
今後の課題としては,コード設計書に関する知識が少ない学生が多く見られたため, コード設計
を用意に行えるようなシステムの改善, メソッドの処理内容, 引数の意味などの自動検証, 引数の
数の動的確保, 模範解答にコンストラクタを持つ場合, コード設計の入力フォームにコンストラク
タの追加し, それに応じた引数の型や数を定められるようにすることが挙げられる.
18
謝辞
本研究の全過程を通じて,御指導を賜りました舩曵信生教授に心より感謝いたします.
本研究を進めるにあたり,多岐にわたる御指導を賜りました岡山大学教育開発センターの天野
憲樹准教授に深く感謝致します.
本研究を進めるにあたり,種々御助言頂きました中西透准教授, 渡邊寛助教授に心からお礼申し
上げます.
同研究グループとして,関連研究の調査や種々御助言を頂いた,福山裕輝氏,伊永洋輔氏に感
謝致します.
本研究のシステム評価に協力して頂いた工学部通信ネットワーク工学科の 2 年生の皆様に深く
感謝致します.
最後に,種々ご協力と御助言頂いた分散システム構成学研究室の皆様に感謝致します.
19
参考文献
[1] 福山裕輝,舩曵信生,中西透,渡邊寛,天野憲樹,“テスト駆動型開発手法を用いた Java プロ
グラミング学習システムでのコード検証方法の改善 ”,信学技報,ET2011,pp.13-18,Sep.
2011.
[2] 単行本:Kent Beck, テスト駆動型開発入門, Sep. 2003.
[3] 単行本:森北出版, 初級プログラマのための Web アプリケーション構築入門, Jul. 2007.
[4] 単行本:ラトルズ, Java+MySQL+Tomcat ではじめる Web アプリケーション構築入門, Oct,
2008.
[5] JUnit.org, http://www.junit.org/
[6] JST 失敗知識データベース, 失敗事例, A-III 型のソフトウエアの欠陥による放射線治療機
事故,http://shippai.jst.go.jp/fkd/Detail?fn=0&id=CA0000496
[7] アジャイルソフトウェア開発 , http://www.atmarkit.co.jp/aig/04biz/asd.html
[8] エクストリームプログラミング , http://www.atmarkit.co.jp/aig/04biz/xp.html
[9] Apache Tomcat, http://tomcat.apache.org/
[10] MySQL , http://www.mysql.com/
[11] Checkstyle 4.4, http://checkstyle.sourceforge.net/
[12] Vine Linux Home Page,http://www.vinelinux.org/
[13] Firefox,http://mozilla.jp/firefox/
[14] CodePress, http://mrs.suzu841.com/highlighter/codepress/
[15] 知見邦彦, 櫨山淳雄, 宮寺庸造, “失敗知識を利用したプログラミング学習環境の構築, ” 信学
論 D-I, vol.J88-D-I, no.2, pp.66-75, Feb. 2005.
[16] 松浦佐江子, “プログラミング演習における評価方法の改善,” IT 活用教育方法研究, vol.8, no.1,
pp.51-55, Nov. 2006.
[17] 松浦佐江子, “プログラミングレポート採点支援ツールと課題設計による評価方法の改善,” IT
活用教育方法研究, vol. 9, no. 1, pp.36-40, Nov. 2006.
[18] 田口浩, 糸賀裕弥, 毛利公一, 山本哲男, 島川博光, “個々の学習者の理解状況と学習意欲に合
わせたプログラミング教育支援,” 情処論, Vol.48 No.2, pp.958-96, Feb. 2007.
[19] 山本耕大,中村勝一,森本康彦,横山節雄,宮寺庸造,“プログラミング教育における学習者
に適応的な支援システムの推薦手法” ET2009-82,pp.175-180,Dec.2009.
20
Fly UP