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

24
23 Java プログラミング学 援システム コード 09420925 大学 ネットワーク 24 2 6

Transcript of Javaプログラミング学習支援システムでの コード...

Page 1: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

平成 23年度 特別研究報告書

題 目

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

報 告 者

中 村 拓 哉

学籍番号:09420925

岡山大学工学部通信ネットワーク工学科

平成 24年 2月 6日提出

指導教員 舩曵 信生 教授

Page 2: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

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

要約

社会の IT 化の浸透に伴い,ソフトウェアの不具合によるシステム障害がもたらす経済的,社会的影響は計り知れないものになっている.このような不具合を未然に防ぐため, プログラム開発の際に, 先に「コード設計」を行った上で実際のプログラムを作成することが一般的になっている.

これにより, バグやエラーなどが少ない, より正確なプログラムが作成できる. また, コード設計の際にプログラムのコード設計書を作成することで, 項目の識別や分類を容易にし, システムの処理効率を上げられるという利点もある. このため, コード設計は現在のプログラム開発において必要不可欠なものとなっている.

本研究グループでは,これまで学生の Javaプログラミング学習の支援,ならびに, 教員の教育負担の軽減を目的として,Javaプログラミング学習支援システムを提案している.本システムでは,教員があらかじめ各課題に対する模範解答と, 仕様書の代わりとなるテストコードを登録しておく. 学生はテストコードを仕様書として, 課題プログラムを作成・検証する.この従来のシステムでは, 学生にコード設計を行わせる前に教員がテストコードを与えてしまう

ため, 学生が自らコード設計をするための能力が身につかない, という問題点が挙げられる. また,

課題を解く際においても, 実際にテストコードを作成したのが学生自身ではないため, プログラミングが不得意な学生では, 仕様書であるテストコードが理解できず, プログラムのソースコードが全く書けない, といった問題も起こり得る.

そこで本研究では,学生自身にプログラムのコード設計書を作成させ, この仕様書に基づいて実際のプログラムを書かせる, 「コード設計学習機能」を, Javaプログラミング学習支援システムに実装する. 提案する機能では, まず, 学生がソースコードを作成する前に自身でコード設計を行い,

教員があらかじめ作成したコード設計書と学生自身が作成したコード設計書の比較検証を行う. ここで, プログラミングが不得意な学生にも十分な情報を含んだ仕様書が書けるように, 模範解答から自動的に仕様書のヒントが与えられるようにしている, その上で学生は, 作成したコード設計書を元にソースコードの作成を行う. このようにして, 学生自身でコード設計書作成を行わせることで, コード設計能力を身につけることが期待できる.

本機能の有効性を検証するため, 本学工学部通信ネットワーク工学科 2年生を対象に, 実際に本機能を使ってもらい, アンケートによる評価を行った. その結果, 学生自身がコード設計を行うことがソースコードの作成に役立ったことが明らかになった.

今後の課題としては, まず, 今回の検証実験でコード設計書に関する知識が少ない学生が多く見られたことから, コード設計書作成がより容易に行えるように改善する必要がある. 次に, 作成したコード設計書の検証の際, メソッドの処理内容や引数の意味などは自動で検証できなかったことから, 今後, 自動検証できるように工夫する必要がある. さらに, 模範解答にコンストラクタを持つ場合, 現在のシステムでは対応できないため, これに対応する必要がある.

i

Page 3: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

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

Page 4: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

目 次

1 まえがき 1

2 先行研究 2

2.1 Javaプログラミング学習支援システム . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 コード設計に基づくプログラム開発 . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2.1 開発サイクル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2.2 利点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 コード設計学習機能 4

3.1 学生によるコード設計書作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3.2 コード設計書検証支援と学生による修正 . . . . . . . . . . . . . . . . . . . . . . . 5

3.3 学生によるコード設計書に基づいたソースコード作成 . . . . . . . . . . . . . . . . 7

3.4 提案システムを用いた教員側のシステムの流れ . . . . . . . . . . . . . . . . . . . . 8

3.5 提案システムを用いた学生側のシステムの流れ . . . . . . . . . . . . . . . . . . . . 9

4 評価 10

4.1 システム構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.2 課題と解答結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.3 アンケート評価結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.4 アンケート結果に対する考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.5 課題提出結果に対する考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 関連研究 16

6 むすび 18

謝辞 19

参考文献 20

iii

Page 5: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

1 まえがき

社会の IT 化の浸透に伴い,システム障害やソフトウェアの不具合がもたらす経済的,社会的影響は計り知れないものになっている.このような背景のもと,コード設計を行った上でプログラムを作成することで, バグやエラーなどを従来よりも少なく, かつ正確なプログラムを作成できる.そのようなプログラムの開発方法として,「コード設計学習」がある.通常,プログラミングの

授業において, 学生がプログラムを書く際はコード設計を行わずにソースコードを作成するという方式を取ることが多い. それに対して,コード設計学習では,先にどのようにソースコードを書いていくかといったコード設計を行い, その作成したコード設計を元にソースコードを書くいうアプローチである.こうすることにより,実装機能の識別を容易にし, 仕様通りでない箇所がはっきりすることができる. さらに, システムの処理効率が上げられるという利点もある. 従来に比べてバグの少ないソフトウェアを作ることが出来る. このように, コード設計は, 学校でのプログラミング教育の段階で身につけるべきである.

本研究グループではこれまで,学生の Javaプログラミング教育の支援,ならびに, 教員の負担を軽減する目的として,Javaプログラミング教育支援システム [1]を提案してきた.本システムは,教員が登録した課題,テストコードを仕様書として,学生が課題プログラムを作成し,オンラインで検証するシステムである.この,従来のシステムでは,学生は教員が登録したテストコードを仕様書として,課題を作成

するだけで, 学生にコード設計結果の提出を求めていない. このシステムでは,学生は教員の示したテストコードを仕様書として参照するのみである. テストコードを作成したのは学生自身ではないため, プログラミングが不得意な学生ではそれが理解できず, ソースコードが全く書けない, 学生のコード設計に関する知識を深めることは出来ない, という問題点がある.また,学生が作成したプログラムが無限ループを発生させる場合や悪意のある処理が記述されている場合, どこでどういった処理が行なわれているか学生自身が理解できないなどの問題点もある.そこで本研究では,Javaプログラミング教育支援システムで学生がコード設計学習を可能とす

る拡張を行う.本機能の特徴として, 学生がコード設計学習を経験することによって,コード設計がソースコード作成に役立つと同時に, プログラミングについての知識を深めることが出来るという点が挙げられる.本機能では,学生がソースコードを作成する前に参照した課題に基づき, コード設計を行う. 教

員が課題を作成する際にコード設計の模範解答も作成しておき, 学生は自身が作成したコード設計結果と教員が作成したコード設計の模範解答とで検証を行う. この検証では, 学生が作成したコード設計のクラス名, メソッド名, メソッドの引数の型, 戻り値の型すべてが模範解答と一致しなければ, 次の順序であるソースコード作成画面へ遷移できないようになっている. そのため,メソッド内での処理内容や動作を理解でき, 学生はより模範解答に近いソースコードの作成が可能となる.本機能の評価として,実装機能を学生に使ってもらい,アンケートによるユーザビリティ評価

を行った.Java学習中である工学部通信ネットワーク工学科 2年生 37名に対し,簡単な課題を 1

問出題し,解答してもらった.アンケートの結果,本システムが学生のテストに関する学習に役立つことが明らかになった.本論文の章構成を以下に示す.まず,2章で先行研究を述べる.3章で提案機能について述べる.

4章で評価と考察を述べる.5章に関連研究を述べる.最後に 6章でむすびを述べる.

1

Page 6: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

2 先行研究

本章では,本グループによる先行研究として,Javaプログラミング学習支援システム [1]について述べる. 次に本研究の前提となる,コード設計に基づいたプログラム開発の方法について述べる.

2.1 Javaプログラミング学習支援システム

本研究グループでは,学生の Javaプログラミング学習の支援を目的として,コード設計学習による Javaプログラミング学習支援システムを提案している.このシステムは,学生がソースコードを作成する前にコード設計することで,ソースコードの内容を理解でき, ソースコードの作成を支援するというシステムである.まず, 教員は学生に対するプログラミングの課題を考え, その課題文,模範解答コード,コード

設計の模範解答, テストコードを登録する.学生には,課題文,コード設計の入力フォーム, テストコードが提示され,学生はテストコードをプログラムレベルの仕様書として,クラス名やメソッド名, 処理内容などを設計する際に参考にし, コード設計を行う. 後に課題プログラムをテストコードのテスト項目を充足するようにコーディングする.コード設計した際に入力したクラス名・メソッド名・メソッドの引数の検証はオンラインで行う. また, 解答コードの検証もオンラインで行い, 検証結果は即座に学生へフィードバックされるため,教員の負担は軽減され,学生へのフィードバックの遅れも改善される.

図 1: オンラインでのプログラム課題評価

2.2 コード設計に基づくプログラム開発

コード設計とは,プログラムを実際に書き始める前に, プログラミングの目標を定め, そのプログラムの目的や必要な入出力, 処理内容を考え, プログラム全体を設計することである. 例えば, クラスや各メソッドの処理内容, 引数などを指す. プログラミング以前のコード設計を十分に行っておけば, プログラム作成のコストを小さくすることができるという利点がある. 以下でコード設計に基づいたプログラム開発のサイクルと利点を示す.

2

Page 7: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

2.2.1 開発サイクル

コード設計学習での基本となる開発サイクルは以下のようになる.

1. コード設計を行う

2. 自身が作成したコード設計を参考にプログラム本体を書く

3. プログラムのコンパイルが成功するまで修正を繰り返す

2.2.2 利点

コード設計学習での利点を 2つ以下に示す.

1. 作成したコード設計書自体が仕様書としての役割も持つことコード設計にはプログラムの仕様が網羅されていなければならない.すなわちコード設計を行なうことでプログラムがどのような動作をするのかが分かる.

2. プログラム作成のコストを小さくできることプログラミング以前のコード設計を十分に行うことで仕様が明確となり,プログラム作成のコストを小さくできる.

3

Page 8: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

3 コード設計学習機能

本章では,提案するコード設計学習機能の実装を説明する.

3.1 学生によるコード設計書作成

学生によるソースコード作成の支援を実現するために, 学生にコード設計書を作成させる.

学生は, 教員が作成した課題が講義ごとに参照できる. 対象の講義を選択すると, 課題一覧が表示される. 課題番号, 内容 (課題文), 提出状況が表示されており, 「解答」ボタンにより, その課題のコード設計を行うことができる. 課題一覧画面を図 2に示す.

図 2: 課題一覧画面

コード設計書には, クラス名, メソッド名, メソッドの引数, 引数の型, 引数の意味, メソッドの処理内容の入力フォームがある. 学生はその入力フォームに順次解答していくことでコード設計を行い, コード設計書を作成する. メソッド名, メソッドの引数, 引数の型の数は, 教員があらかじめ作成した模範解答コードから動的に取得することで, 入力フォームの数を確保する. コード設計書作成画面を図 3に示す. コード設計書作成画面では, コード設計の入力フォームとテストコードが参照でき, 学生はテストコードを参考にしながらクラス名, メソッド名, メソッドの引数の型を入力する.

4

Page 9: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

図 3: コード設計書作成画面

3.2 コード設計書検証支援と学生による修正

コード設計書の検証の仕組みを図 4に示す. 学生がコード設計書を作成した後, 「コード設計書提出」ボタンをクリックすることでコード設計書の検証が行われる. 教員は課題, 模範解答コードを作成する際に, あらかじめコード設計書を作成し, データベースへ登録しておく. これを用いて学生が設計したクラス名, メソッド名, メソッドの引数の型, 戻り値の型を教員が作成したコード設計書と比較することで検証を行う. この検証では, 教員が作成したコード設計書のクラス名, メ

5

Page 10: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

ソッド名, メソッドの引数の型, 戻り値の型をデータベースから取得し, 学生がそのすべてを正解するまで再解答を要求する. 検証結果が正しければ, 学生が作成したコード設計書はデータベースへ登録され, 提出完了画面に遷移する.

図 ??に示すコード設計書提出完了画面では, 学生が提出したコード設計書の内容が表示される.

このとき, 教員が作成したコード設計書も表示される. そのため, 模範解答のクラス名, メソッド名,

メソッドの引数の型, 戻り値の型, 引数の意味, メソッドの処理内容を把握できる, そして, 「ソースコード作成」ボタンでソースコード作成画面へと遷移する.

図 4: コード設計書の検証の仕組み

6

Page 11: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

図 5: コード設計書提出完了画面

3.3 学生によるコード設計書に基づいたソースコード作成

ソースコード作成画面に遷移した後, 学生はソースコード作成を行う. ソースコード作成画面では, 学生自身が作成したコード設計書をデータベースから取得する. コード設計書をソースコード作成画面に出力することで, 学生はコード設計書を参考にしながらソースコードを作成することが可能となる. そのコード設計書は, 検証により, クラス名, メソッド名, メソッドの引数の型は模範解答どおりであるため, より模範解答に近いソースコードを作成できると言える.

7

Page 12: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

図 6: ソースコード作成画面

3.4 提案システムを用いた教員側のシステムの流れ

教員側の本機能利用時の流れを以下に示す.

1⃝ 課題・課題文を作成する

2⃝ 模範解答コードを作成する

3⃝ コード設計書の模範解答・テストコードを作成する

8

Page 13: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

図 7: 教員側の提案システムの流れ

3.5 提案システムを用いた学生側のシステムの流れ

学生側の本機能利用時の流れを以下に示す.

1⃝ 課題を参照する

2⃝ テストコードを参照してコード設計書作成を行う

3⃝ コード設計により作成したコード設計書を検証する

4⃝ 自身が作成したコード設計書を参考に解答コード本体を書き, パスするまで修正を繰り返す

図 8: 学生側の提案システムの流れ

9

Page 14: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

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

Page 15: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

表 1: コード設計書が作成できた人数と割合

コード設計支援あり コード設計支援なし実施人数 18人 19人

コード設計書が作成できた人数 9人 3人コード設計書が作成できた割合 50% 16%

4.3 アンケート評価結果

本システムの評価方法として, 学生 37名を対象に,予め用意しておいた Javaプログラミング課題に解答し,5段階評価のアンケートに回答してもらった.その問題を, 37名のうち 18名が今回の提案機能を利用し, 残りの 19名がそれを利用しなかった場合で検証した. 提案機能を利用しなかった場合は, クラス名, メソッド名などに分類された入力フォームは無く, 一つだけ入力フォームを用意し, そこに学生自身がプログラムの作成にあたって必要と思われる事柄 (クラス名, メソッド名, メソッドの処理内容など)を考えて入力してもらう. コード設計書作成の参考としてテストコードも参照できるようにした. 提案機能を利用しなかった場合のコード設計書作成画面を図 10

に示す.

図 10: 提案機能を利用しなかった場合のコード設計書作成画面

表 2のアンケート項目に対する学生の回答を表 3, 表 4に示す.

11

Page 16: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

表 2: アンケート項目 (5段階評価)

項目 内容Q1 作成したコード設計書はソースコードを作成する上で役に立ったかQ2 自分でコード設計書の作成ができたかQ3 コード設計書作成は重要だと思ったかQ4 コード設計書作成画面は見やすかったかQ5 コード設計書作成画面の操作に問題はなかったか

表 3: アンケート結果<コード設計支援あり> (5段階評価)

項目 1 2 3 4 5

Q1 役に立たない 2 2 12 1 1 役に立ったQ2 できなかった 4 2 9 1 2 できたQ3 思わなかった 2 3 10 2 1 思ったQ4 見にくかった 3 2 11 2 0 見やすかったQ5 問題あった 5 2 10 1 3 問題なかった

表 4: アンケート結果<コード設計支援なし> (5段階評価)

項目 1 2 3 4 5

Q1 役に立たない 0 0 13 4 2 役に立ったQ2 できなかった 3 6 7 1 2 できたQ3 思わなかった 1 2 11 2 3 思ったQ4 見にくかった 0 1 10 4 4 見やすかったQ5 問題あった 1 2 9 4 0 問題なかった

12

Page 17: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

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

Page 18: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

4.5 課題提出結果に対する考察

まず, 「コード設計支援あり」の場合で学生が作成した仕様書の一例を以下の表 5に示す.

表 5: 学生が作成したコード設計書の例の一部<コード設計支援あり>

クラス名 Calculate

メソッド名 plus

引数 1(型) int

引数 1(意味) 足される数引数 2(型) int

引数 2(意味) 足す数処理内容 足し算メソッド名 minus

引数 1(型) int

引数 1(意味) 引かれる数引数 2(型) int

引数 2(意味) 引く数処理内容 引き算

「コード設計支援あり」の場合, クラス名, メソッド名などが正解しなければソースコード作成画面へ遷移できないため, テストコードを参考にして, クラス名, メソッド名など入力が出来ている人が多かった. 引数の意味や処理内容も入力フォームに書かせることにより, どういった処理をするのか考える学生が多く, 簡単ではあるが設計できている学生が見られた.

次に, 「コード設計支援なし」の場合で学生が作成したコード設計書の一例を以下に示す.

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

Page 19: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

}

}

これは, テストコードをそのまま入力フォームにコピーしたものであり, コード設計書とは言ない. 「コード設計支援なし」の場合の学生の 6割近くがこのようにテストコードをそのまま入力していた.

「コード設計支援なし」の場合で学生が作成したコード設計書のもう一つの例を以下の表 6に示す.

表 6: 学生が作成したコード設計書の例の一部<コード設計支援なし>

クラス名 CalculateTest

メソッド名 testPlus

メソッド名 testMinus

メソッド名 testMultiply

メソッド名 testDivision

ここで, テストコードのクラス名とメソッド名がそのまま入力されている. 「コード設計支援あり」の場合でテストコードのクラス名やメソッド名を入力すると, 検証する際に間違っているため,

ソースコード作成画面に遷移できず, ソースコードをクラス名などが間違ったまま作成することは無くなる.

以上の結果から, コード設計書の意味が理解できる学生とそうでない学生でばらつきが生じていることがわかる. 実際, コード設計書作成が行えた学生は一部しかいなかった. これは,コード設計書作成画面でコード設計書とは何か, どのように入力したらよいか, 何をすればよいかなど, 明確な説明が無かったからである.この問題点は今後の課題として,必ず考慮しなければならない点である.その対策としては,コード設計がしやすいように説明文等を加え, 適切な処理が行えるようにエラー処理も行うといったことが挙げられる.

「コード設計支援なし」の場合, クラス名やメソッド名を間違ったままソースコードの作成をしてしまう, 処理内容をあまり理解せずにソースコードの作成をしてしまうといったことが起こる.

しかし,「コード設計支援あり」の場合は, 正しいクラス名やメソッド名, 処理内容を知ることができるため, ソースコードの作成はより模範解答に近いものになる. すなわち,学生は,ソースコードを作成する前に,具体的にどのようなソースコードを書くかコード設計を通して学ぶことが出来ると言える.以上より本システムは, プログラムの作成に有効であると考えられる.

15

Page 20: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

5 関連研究

本章では,本研究は進めるにあたり,参考とした関連研究・システムを紹介する.

• 失敗知識を利用したプログラミング学習環境の構築 [15]

 「失敗から新たな知識を学ぶ」失敗学の概念をプログラミング教育に適用することを狙いとした支援システムを提案し,学部 2,3年生 21名に対する評価実験を通じてその効果を示している.本研究では,プログラミング教育における事象・概念を失敗学における失敗知識に対応させている.具体的には,エラー(コンパイルエラー,実行エラー,論理エラー)を「事象」,演習課題を「背景」,エラー発生時のソースプログラムを「経過」に対応させ,「原因」,「対処」,「総括」は学習者に記述させることで失敗情報の知識化を行い,内省を支援する.つまり,本システムでは,エラー発生時のソース該当箇所の提示と,その原因や対処を記入するメモ欄を実装しているのみである.そのため,エラー発生時に,学習者がその原因や対処方法を文章として整理し,システムに記憶させる(メモを残す)ことに,本システムの独自性があると言えるが,それだけのものである.通常のノートに記述することも可能であり,Webシステムとしての特徴,長所は活かせていない.各学習者に,それらをノートに記載させるだけで,同様の効果が得られるものと思われる.また,論理エラーは学習者による手入力のため,精度,手間の点で問題がある.実際,多くの学生は,演習課題に対して,コンパイルエラー,実行エラーは 0とすることができるが,論理エラーを 0とすることに難があるのが現状である.評価実験の事後テストにおいて,適用群と非適用群間に,正答率の平均値に有意差がなく,標準偏差に有意差があると言っているのみである.すなわち,評価も十分とは言えない.

• プログラミング演習における評価方法の改善 [16]

 プログラミング演習における演習課題の評価を,学生自らコンパイル・実行すること,評価者による口頭質問に回答することで行う.そのために,学生は,事前に授業支援システムを用いてレポートを提出しておく,評価時には,学生が自らダウンロード,コンパイル・実行,自動採点プログラム(Javaのリフレクションを採用)の実行によるテスト項目とテスト結果(構成テスト,機能テスト)の表示,評価者による口頭質問に対するソースコードを用いての回答の順で行う.評価実験では,アンケートでの 80%の学生が提案方式を支持,口頭質問を入れることでのコピー防止などの結果が得られている.

本研究に対しては,テストコード,課題プログラムの検証結果に関する口頭試問の実施が挙げられる.

• プログラミングレポート採点支援ツールと課題設計による評価方法の改善 [17]

 プログラミングレポート採点作業の改善を目的として,プログラミングレポート採点支援ツールを Javaで開発している.コンパイル・実行・閲覧・評価記録の同一画面での表示,コード検査・テストプログラムのプラグイン可能,プログラミング言語非依存,評価記録を元にした学生のグループ化可能の機能を有している.

本システムの問題点は,評価項目毎の評価結果はすべて手動で入力すること,個々のプログラムを手動で実行する必要があることが挙げられる.本研究に対しては,テスト項目毎の検証結果閲覧機能の実装が挙げられる.

• 個々の学習者の理解状況と学習意欲に合わせたプログラミング教育支援 [18]

 プログラミング教育において,個々の学習者の理解度と意欲に応じた演習課題を出題する手法を提案し,立命館大学での実際の開講科目への適用結果を示している.学習者の理解度の評価は,演習課題の達成度に対する協調フィルタリングを用いる.協調フィルタリングは,

16

Page 21: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

Webサイト検索などで実用化されている,ユーザの傾向や嗜好を過去の行動で記録し,それを類似の行動を取るユーザの情報を元に,そのユーザの今後の傾向や嗜好を推測する手法である.達成度は,課題毎に設定された 10~20個程度の評価観点に対して,重要度を 1~10

で設定し,それぞれに対して,「理解できている」,「どちらとも言えない」,「理解できていない」の 3段階で教員が主観的に評価を行った結果を,重みでの加重平均を取ることで算出する.意欲は,教員が課題毎に 3段階で主観的に行い,提出された課題での最低提出必要課題数に関する平均値で評価する.

本手法の問題点は,まず,教員の負担が非常に大きいこと,公平性に問題があることである.多数の学生からの多くの課題のそれぞれに対し,多数の評価観点からの評価は困難である.評価の自動化,アルゴリズム化が不可欠である.また,多数の学生が課題の未提出となっており,推薦課題を提出したのは少数の元々意欲の高い学生と考えられることから,評価結果の分析は正確ではない(提案手法の有効性は言えない)と思われる.但し,本研究に対しては,学習者のプログラミング能力に関するプロファイルの作成と,それに基づいて,適切な課題提示,個別指導が行える機能の実装が挙げられる.

• プログラミング教育における学習者に適応的な支援システムの推薦手法 [19]

 プログラミング教育において,学習者を支援するシステムは数多く開発され,運用されている.しかし,それらの支援システムを効率的に使用するためには,学習者の状態に対応した支援システムを推薦する必要がある.そこで,本論文では,学習者の状態と,プログラミング教育と支援システムの分析を行なった結果をモデル化し,定義したそれぞれの情報に基づく,支援システム推薦アルゴリズムを提案し,支援システム選出のための枠組みを示している.

本研究に対しては,学生個人のプログラミング能力を定義し,情報をデータベースに登録することで,レベルに応じた課題の提示機能の実装が挙げられる.

17

Page 22: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

6 むすび

本研究では,本研究グループがこれまで提案してきた,Javaプログラミング教育支援システムにおいて, コード設計に基づいたプログラム開発の学習支援についての拡張を行った.本機能では,

学生がソースコードを作成する前にコード設計したコード設計書を作成することで, ソースコードの内容を理解でき, ソースコードの作成を支援する. まず, 学生が課題を参照した後に, 教員が作成したテストコードを参考にクラス名, メソッド名などを学生が考えて目的のプログラムのコード設計を行い, あらかじめ教員がコード設計したコード設計書の模範解答と照らし合わせて検証を行い, パスした後に自身がコード設計したコード設計書を参考にプログラムを作成する.

今後の課題としては,コード設計書に関する知識が少ない学生が多く見られたため, コード設計を用意に行えるようなシステムの改善, メソッドの処理内容, 引数の意味などの自動検証, 引数の数の動的確保, 模範解答にコンストラクタを持つ場合, コード設計の入力フォームにコンストラクタの追加し, それに応じた引数の型や数を定められるようにすることが挙げられる.

18

Page 23: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

謝辞

本研究の全過程を通じて,御指導を賜りました舩曵信生教授に心より感謝いたします.本研究を進めるにあたり,多岐にわたる御指導を賜りました岡山大学教育開発センターの天野

憲樹准教授に深く感謝致します.本研究を進めるにあたり,種々御助言頂きました中西透准教授, 渡邊寛助教授に心からお礼申し

上げます.同研究グループとして,関連研究の調査や種々御助言を頂いた,福山裕輝氏,伊永洋輔氏に感

謝致します.本研究のシステム評価に協力して頂いた工学部通信ネットワーク工学科の 2年生の皆様に深く

感謝致します.最後に,種々ご協力と御助言頂いた分散システム構成学研究室の皆様に感謝致します.

19

Page 24: Javaプログラミング学習支援システムでの コード …dist/pdf/2011/2012_nakamura.pdfThe Code Design Learning Function in Java Programming Learning Assistant System

参考文献

[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