経験知習得のための思考の協調的追体験学習支援システムの開発
・デザインパタ ー ンを対象にしてー
代表研究者
共同研究者
共同研究者

小尻智子
瀬田和久
林佑樹

関西大学システム理工学部 准教授
大阪府立大学大学院理学系研究科 教授
大阪府立大学現代システム科学域 助教

1はじめに
、

デザインパタ ーンは， オブ ジエクト指向パラダイムでのソフトウェア設計ノウハウを集めたカタログである［ ll. よく出会う様々な問題に対して先，、らが試行錯誤して得た経験を 一般化したものであり，オブジェク
ト指向設計における経験知とみることができる［2］. 先人による創意・工夫のプロセスを経て形式知化されたデザインパタ ーンの学習を通じて， その設計方法の意義や適用条件をより深く酸解することは， オフ。ジェク
ト指向設計における設計意図の習得と捉えられ， パタ ーンを直接使用しない場合であっても優れた設計を行えるようになると考えられている［11この意味でデサーインパタ ー ンはオブ、ジェクト指向の初学者にとってもよい教材であると考えられる しかし， そこに埋め込まれた設計意図を理解しないまま単に記憶していくのでは， 新しい問題に対して自ら創意工夫して設計できるようになるとは考えにくい
デザインパタ ー ンのような経験知が生み出される過程を体験することは，そこでなされた意志決定基準（以後， 設計意図と呼ぶ）の理解を促すと考えられる． しかし， 成果物のみが示されその生成過程が明記されていることは多くはない 経験知が形成されるまでには様々な生成物を比較し， 利点・欠点を検討する過程を経て何らかの基準に基づく選択がなされているが， その基準である設計意図が暗黙になっているために， 学
習者自身がその過程を推察して意図を理解できるかどうかは学習者の能力に依存する
デザインパタ ー ンの学管支援では， 問題を与え， これに対処する設計を学習者が作成することからスタ ートし， 修正を加えていくことでデザインパタ ーンを導出させようとする研究がある［3, 4] しかし， デザイ
ンパタ ーンの設計意図を修得しようとする学習者にデザインパタ ーンを導出させることは必ずしも容易ではない． 本研究では，IE解としてのデザインパタ ーンを出発点として，機能を維持しつつ望ましくない設計（代替設計）に変更させることで，デザインパター ンの設計意図を読み取るような学びを促すことを目的とする
このことで， 経験知の形成過程の一 部を体験する学びが学習者に課せられることとなり， デザインパタ ーン
を教材とした設計意図の学びを促すこととなる．
我々はこれまで， デザインパタ ーンの用いられたクラス図から用いない代替設計を作成するための支援シ
ステムを構築してきた［5, 6] しかし， 代替設計を作成させるだけではデザインパタ ー ンの利点を明示的に理解させることはできない そこで， 本研究課題では， 設計の対象としている問題を拡張する問題設定であるシナリオを与え， 作成した他の設計とデザインパタ ーンを用いた設計との比較を促し， デザインパタ ーン
に関するより深い理解を促す また， 本学習を実現するために， シナリオを満足するようにデザインパタ ーンを用いた設計と代替設置｜を変更できる環境を構築する また， 構築した環境を用いた学習を通して， シナ
リオを用いた設計の良さを考察する学習方法の有効性を明らかにする．
2設計意図習得のためにデザインパタ ーン学習
デザインパタ ーンは特定の問題に対する合理的な解となる設計カタログである そこでの特徴的なクラス
や関連には， 先人達が試行錯誤して確立した結果が示されている したがって， 特徴的なクラスや関連構造を壊しそれらを用いない設計に変更することは， 先人が試行錯誤する過程で生成した惑い設計を導出することにつながる． その上で，
惑い設計に存在しておらず／しており， 優れた設計に存在している／いないものは何だろう？
患い設計で解決できず， 良い設計で解決できる問題は何だろう？
を考えることで， デザインパタ ーンの設計に込められた暗黙的な設計意図を考察し， 理解を深めることが本研究の者想である
Adapterパタ ーンを用いた設計 （図1, [7] ）を例にとり説明する. Adapterパタ ーンは， 既存のクラス(Adap tee）を新しいクラスに(Target）差し替えるための設計方法を提供しており，新しいクラスを継承し， メ・・

電気通信普及財聞研究誠査報告書

ソッド中で既存のメソッドを呼び出すAdapterと呼ばれるクラスを利用することが特徴であるため， 新しいクラスを継承する理由を考察することがAdapterパタ ー ンを理解する手段の ー っとなる Adapterパタ ー ンの利点を理解する変形例として， Adapterクラスを用いず， Tarntetで既存のメソッドを直接呼び出す図2のような設計が考えられる 図！と図2をAdapterパタ ー ン の利点が発揮できるような問題設定に対して比べることで，継承を組み入れられた設計意図への気づきを促すことができると考えられる例えば， 「 さらにAdapteeではなく， Adaptee2に置き換えなければならなくなった」というような問題設定が考えられる この問題設定に対して図l，図2をそれぞれ拡張したクラス図の例が図3，図4のようになる図3ではTargetの内容を変更しなくてよいが，図4ではTarge lにメソッドを追加する必要があるため，図3の設計の方が拡張性に優れているといえる
Main
むses
Target司．

targetMethodl

Adapter．

targetMethodl

AdapteemethodA

図T Adapterパヲ ー ンを用いた設計

阿ain

...

Uses
TargetAdapteemethodA
図2 Adapterパ安 一 ンを用いない設計

同ain

•

Uses
TargetAdaptertargetMethod 1

targetMethod 1
Adapter2
targetMethod 1

AdapteemethodA
Adaptee2
methodB

図3 図1を拡張したクラス図

2

電気通信普及財団研究調査報告書

...

Main
--r-

Uses

TargetAdapteetargetMethodl
target阿ethod2

methodA

Adaptee2
methodB

図4図2を拡張したクラス図

3デザインパタ ー ン学習支援環境の枠組み
学習者自身で与えられた設計からオブ？ジェクト指向の特徴を減少させた設計を生み出せればよいが， 学習者が必ずしもオブジェクト指向の特徴が現れている筒所を理解し， 同等の振舞いを果たす設計に変更できるとも限らない． また， 設計を変形できたとしても， 惑い設計と比較して良い設計の良さを実感できる問題設定を自身で考案できるとは限らない
本研究では， デザインパタ ーンを用いたプログラム（以後， 良い設計とも呼ぶ）を， デザインパタ ーンを用いず等価な振舞いをするクラス図へと変形させることを支援する環境を提供する また， 代替設計を拡張させるような問題設定であるシナリオを明示的に与え， それに対するクラス図の拡張を考えさせ， 最終的には利点を解答させる陀題（拡張問題）として解答させることで， 学習者自身で問題設定を考える負荷を軽減する環境も構築する． 図5にシステムの枠組みを示す
代替設計作成支援機構は， 従来研究で開発された機構であり， システムに与えられたデザインパタ ーンを用いた良い設計から代替設計を作成するための支援を提供するー システムは， 良い設計に対する代替設計を
あらかじめ知識として保持しており， 学習者が代替設計と 一致しない変形をした場合は， 代替設計が生成できるようアドバイスを生成する． なお， 先人が試行錯誤した設計は膨大であることが想定され， 全ての設計を生成し比較させることは本研究の目的ではない． デザインパタ ーンを理解する上で重要な筒所は， オブジ
エクト指向の特徴的な設計を含んでいる箇所であるので， オブジェクト指向の特徴を削除した設計を学習者に変形してほしい代替設計として， あらかじめシステムに複数保持することにする．

？
・国
図5システムの枠組み

3

電気通信普及財団研究調査報告書

・

代替設計作成支援機構は以下の機構で構成される
等価変換支援機構
学習者がデザインパタ ーンのクラス図と等価な振舞いをする代替設計を作成できるよう支援する［6］本機構
は特定のクラス構造と等価な振舞いをする別のクラス構造を等価変換規則として保持しており，学習者の設計したクラス図に等価変換規則を適用することで，デザインパタ ーンのクラス図と等価な振舞いをするクラス図であるか判定する．等価な振舞いをするクラス図が作成できていない場合は，修正個所を示す
代替設計特定機構
学習者のクラス図がシステムの保持する複数の代替設計のどの代替設計を意図しているかを特定する［5］.シ
ステムの保持する複数の代替設計と学習者の作成したクラス図との相違の度合いを調べ，最も小さいものを学習者の意図する代替設計と判断する
代替設計作成助言機構
学習者が代替設計を作成できていない場合に 代替設計特定機構で特定された代替設計を作成できるようにするための支援をする［6]. 代替設計と学習者のクラス図の相違点を特定し，その箇所を指摘したり，代替設計と同じ構造を設計できるようにするための助言を生成したりする
拡張問題学習支援機構では，本研究課題で開発された機械であり，デザインパタ ーンを用いたクラス図と代替設計を拡張するための拡張問題を与えるデザインパタ ーンは，拡張性に優れていると言われている［7]ため，設計を鉱張するような拡張問題が望ましい．拡張問題では，その問題設定を与えた際に変更する必要のある設計箇所を多肢選択形式で解答させる 解答の正誤を判定することで，学習者が良い設計と惑い設計の利点／欠点を的確に把握できているかを判断する 的確に解答できていない場合は変更後のクラス図や具体的なプログラムを提示するなどして，理解を促すAdapterパタ ーンに関する拡張問題の例を表lに示す．

・・

表l 拡張問題の例
拡張問題： fAdapteeクラス（methodAメソッド）に代わってAdaptee2クラス（租ethodBメソッド）を使用しなければならなくなりました. Adaptee2 クラスに対応できるようにプログラムを拡張しましょっ」
解答形式：「デザインパタ ーンを拡張したプログラムでは［①］において［②］を［③］するだ
けでよいが，代替設計を拡張したプログラムでは［④］において［⑤］を［⑥］する必要があり修正量が多くなる.
選択絞：①デザインパタ ーンにおける既存のクラス名②デザインパタ ーンを拡張した場合の変更対象（インスタンス宣言時のクラス名，インスタンス宣言時のコンストラクタ名，など）③変更種別（変更，追加，削除）④代替設計における既存のクラス名⑤代替設計を拡張した場合の変更対象（インスタンス宣言時のクラス名，インスタンス宣言時のコンストラクタ名，など）⑤変受種別（変更，追加，削除）
拡張問題のもとでのデザインパタ ーンや代替設計のプログラムの変更点を正しく解答するためには，デザインパタ ーンと代替設計の拡張クラス図の全体像を犯握し， その拡張クラス図のプログラムが元のプログラムと比較してどの部分で変更が生じるかを考える必要がある．そこで，拡張問題を解答させる際に，まずデザインパタ ーンと代替設計の拡張クラス図を作成させ，その後プログラムの変更点を解答させる形式をとる
拡張クラス図ができていない場合，または拡張クラス図はできているがプログラムの変更点が正しく解答できていない場合にアドバイスを生成する
デザインパタ ーンと代替設計のうちいずれかの拡張クラス図ができていなかった場合，拡張クラス図の作
成方法を理解できていないと考えられる そこで，拡張クラス図を作成する際に考えるべきクラス ・ 関連に着目する旨のアドバイスを学留者に与える．それでもましいクラス図が作成できない場合は，拡張クラス凶の具体的な作成方法に関するアドバイスを学習者に与えるまた，余分な変形をすると，陪題の趣旨に合わ

4

電気通信普及財団研究調変報告書

なくなるだけでなく， 作成したクラス図の存在意義がわからなくなる． 従って余分な変形が含まれていた場
合， 余分な変形を無くすためのアドバイスを優先して生成する．
拡張クラス図はできているがプログラムの変更点が正しく解答できていない場合， プログラムとしてどの部分で変更が生じるかを理解できていないと考えられる． そこで， プログラムを拡張する際に変更する可能性のあるプログラム中の箇所を具体的に明示するアドバイスを学習者に与える それでも変更点を解答できない場合は， 変更後のプログラムを明示するアドバイスを学習者に与える． それでも正しく解答できない場
合は， 解答した変更点の誤り箇所を指摘するアドバイスを学習者に与える． なお， プログラムの変更点の選
択肢には「コンストラクタj「インスタンス」などの用語が含まれており， 学習者がそれらの用語を正確に理解していない可能性がある そこで， 変更点の誤り箇所を指摘するだけでなく， f コンストラクタJ「インスタンス」 などを使用したプログラムの具体例を提示するアドバイスも同時に与える．
拡張クラス図の作成に関するアドバイス生成パタ ーンのフロー チャ ー トを図6に示す． まず， 学習者の作成したデザインパタ ー ン ・ 代替設計の拡張クラス図とシステムの保持する拡張クラス図が 一致しているかどうかを判定する 一致していればデザインパタ ー ン ・ 代替設計の拡張クラス図は正解となり， 学習者にプログラムの変更点の解答を促す． 一致していなければデザインパタ ー ン ・ 代替設計いずれかの拡張クラス図が誤答であるので， まず余分な変形をしているかどうかを判定する． 余分な変形をしていれば， 余分な変形を無くすための方法が記述されたアドバイスを生成する（アドバイスC）. 余分な変形をしていなければ必要な変形がされていないため， まず拡張クラス図を作成するj擦に考えるべきクラス ・ 関連に着目する旨のアドバ
イスを生成する（アドバイスA). アドバイスAを既に出していれば必要な変形に対するアドバイスを生成する（アドバイスB）. 以上のアドバイス生成を学習者がデザインパタ ー ン ・ 代替設計両方の拡張クラス殴を作成できるまで繰り返す．
プログラムの変更点の解答に関するアドバイス生成パタ ー ンのフロ ー チャ ー トを図7に示す． 学習者の解答したプログラムの変更点とシステム内の解が完全 一致しているかどうかを判定し， 一致していれば正解となり「 ExcellentJ と出力して終了する． 一致していなければ誤答であるので， まずプログラムを拡張する際に考慮すべきプログラム箇所を呉体的に明示するアドバイスを生成する（アドバイスD). アドバイスDを既に出していれば， 変更後のプログラムを明示するアドバイスを生成する（アドバイスE）. アドバイスEを既に出していれば， 学習者の変更点の誤り箇所を指摘するとともに， 「 コンストラクタj「インスタンス」などを使用したプログラムの具体例を提示するアドバイスを生成する （アドバイスF).
アドバイスA～Fに対応するアドバイスはアドバイス ・ テンプレ ー トで保持する． アドバイス ・ テンプレ ー
トを図Bに示す ＜対象＞とは変更対象のことで， 誤って生成 ・ 削除されたクラス ・ 関連が入る これらは学営者の作成したデザインパター ン ・ 代替設計の拡張クラス閣とシステム内の各々の拡張クラス図との差分をとることにより取得できる． ＜要素＞とはインタフェ ー ス， 継承などのクラスのプロトタイプを指す ＜誤り箇所＞とは学習者のプログラムの変更点の解答で誤っている選択肢の番号のことである． これは学習者の解答したプログラムの変更点とシステム内の解を比較することにより取得できる

電気通信普及財団研究調資報告書

響

勝
Yes

Yes

No

図6

拡張クラス図の作成に関するアドバイス生成のフロ ー チャ ー ト

雪験

図7

プログラムの変更点の解答に関するアドバイス生成のフロ ー チャ ー ト

電気通信普及財閥研究調査報告書

(A）拡張クラス図の実現のため， ぐが愛〉に着目して考えてみましよう．

(B ）拡張クラス図の実現のため， ぐ対象〉を（追加／削除）してみましよう．
(C ）ぐ対象〉の（追加／削除）はその ぐ要素〉の存在意義に関わるような変形ではないので，余分な変形です．
ぐ方選実〉を（削除／追加）してみましょう．

(D）拡張する際に考慮しないといけない箇所を青色で提示します．具体的にどう変更するかを考えてみましょう．
｛※該当するプログラム笛援を膏色で表示）(E ）変更後のプログラムを赤色で提示します．最後に「プログラムの拡張J
ウインドウで，プログラムの具体的な変更箇所をまとめてみましょう．
｛※変更後のプログラムを赤色で表示）(F ）プログラムの具体的な変更箇所をまとめてみましょう

リスト ぐ議 Vffim＞を考え直してみましょう．
プログラム中， ne閣の直後にあるのが「コンストラクタ名j ，インスタンス
宣言時にインスタンスの直前にあるのが「クラス名」，インスタンスを使ってメソッドを呼び出しているものが「インスタンスが日乎ぴ出すメソッド
名Jです．
（例） Frame w = new Dra出 Frame();w.setdrawframe();※ Frame ：クラス名
w ：インスタンス名
図B

DrawFram巴：コンストラクタ名
setdrawframe ：メソッド名

拡張問題に関するアドバイス ・ テンプレ ー ト

4プロトタイプ ・ システム
図9に代替設計作成のためのインタフェ ー スを示す． 問題選択部で学習者が学習したいデザインパタ ーン
を選択すると， クラス図表示部に選択されたデザインパタ ー ンを用いた良い設計が表示される． エンティテ
イ編集部ではクラスを， 関連編集部では関連を文字形式で編集できるようになっている凶 再描閏ボタンをクリックすることで， 編集された内容をクラス図表示部に再描画できる アドバイス生成ボタンをクリックした際， 学習者の作成したクラス図に誤り筒所が含まれていればアドバイス表示部に正しい解答をさせるためのアドバイスが表示される
学習者が代替設計を作成できると， 良い設計と学習者の作成した代替設計のクラス図（図10 ）， および拡張問題（図 11) が表示される 図 10 のクラス図は自由に変形することが可能であり， 学習者が拡張問題の解答を考えるための補助として活用する． 拡張問題提示インタフェ ー スでは， 変更点選択リストから問題の解答が選択できるようになっているアドバイス生成ボタンを押すと，学習者の解が正しいか否かを判定し，もし学留者が適切な解を生成できていない場合は助言を生成する図12にアドバイスの例を示す拡張問題
で変更が生じる個所が青色で， 変更後のプログラムが赤色で記述されている

7

電気通信普及財団研究調査報告書

図9 代替設計作成支援インヂフェ ース

e写 … －，
" ，
剖ι

伯

勿

a審夢

'

’

蜘.必，

ふ：，．

町ゐ 4町

ω

，純一一川町’叫閉図10クラス図拡張インタフェ ー ス

8

電気通信普及財団研究調査報告書

図11

シナリオと拡張問題提示インタフェ ース.blic class:
p0bl,c static vo,d図a山（Str,皿g[l acsa)(
factoc, factoc, " oe胸IDC,cdFactmO,司Fact 。c, factm O now Pa問問吋Factac,O,Pcadact cacdl " fact 。ry er開tee-Aさんつ，’
Pead町t cacdZ = factm cccatc（ Bさん勺．
c,cdl asoO, cacdZ.aecO;

密12 アドバイス例
5評価実験
5.1シナリオに基づいた設計比較の有効性の評価
本研究課題で構築したプログラム拡張問題学潔環境を備えたデザインパタ ー ン学習支援システムの有効性を検証することを目的に評価実験を実施した． 被験者は， オブジェクト指向プログラミングを学習し， かっ
作成した経験はあるが， デザインパタ ー ンの設計意図を深く理解していない大学院生9名である． 本実験では， あらかじめ代替設計を準備し， その代替設計とデザインパタ ー ンを用いた設計を比較させることで， デザインパタ ー ンの良さを理解できるかどうかを調査した．
初めに， デザインパタ ー ンの理解度を確認するため事前テストを実施した． 事前テストの大関2問で構成される（それぞれI • IIとする） . Iは， インタフェ ー スを使用した構造を包含したAdapterパタ ー ンを含む
クラス図を用いた. IIは， 抽象クラスや継承を使用した構造を包含したFactoryMethodパタ ー ンを含むクラス殴を用いた． 小向はそれぞれ2問ずつである． Iにおいて， l凋日はインタフェ ー スComponentの役割lを問う問題である. 2問団はそのインタフェ ー スComponentを使用する構造上の理由を問う問題である Eにおいても同様に，l i羽田は抽象クラスFae toryの役割lを問う問題で，2問日はその抽象クラスFactoryを使用する構造上の理由を問う問題である．これらの問題は，インタフェ ー スや抽象クラスのプログラムの中身や，それらを使用する設計意図を被験者が理解しているかどうかを確認するために設けた このとき， Adapter
パタ ーンやFactoryMethodパタ ー ンを用いた各々のプログラムの全体像を被験者に把援できるように， 各ク

9

電気通信普及財団研究調査報告書

ラスのプログラムを記述した資料を配布し， それらを参照しながらテストに解答させた．
また事前テストと同時に， デザインパタ ー ンに関する意識調査のため事前アンケ ー トに回答させた ． 事前
アンケ ー ト項目を表2に示す設聞は2問である． 設問①はデザインパタ ーンの学習経験を， 設問②はデザ
インパタ ーンを使用したプログラミングの経験を問う項闘で， いずれも「あるJ「ない」の2段階で評価させた
次に， 被験者に対し， プログラム拡張問題に基づいたデザインパタ ーンの学習方法をスライドを用いて説明した ． まず， 簡便なクラス図とプログラム拡張問題の例をあげ， それに対するプログラムの変更点の解答方法を説明した また， プログラムの変更点を解答する際に考えるべき拡張クラス図， 拡張プログラムについて説明し， その後， 本問題のプログラムの変更点の解答例についても説明した
説明後， 被験者にシステムを利用して拡張問題を学習してもらった． まず， あらかじめシステムの持たせ’ておいたデサ インパタ ーンおよび代替設計を提示し， 各々の拡張クラス図を作成させた． 正しい拡張クラス
図を作成後にプログラムの変更点を解答してもらった． その際， システムの操作方法を口頭で説明するとともに， 操作方法を示すプリントを配布した． 問題は全部で2問であり，l悶目はI teratorパタ ーンを用いた、
クラス図中のAggregateインタフェ ースおよび I leratorインタフェ ースの必要性を考える問題，2問目はのAdapterパタ ー ンを用いたクラス図中のAdapterクラスの必要性を考える問題である
学習後， デザインパタ ーンの理解度の変化を確認するため事後テストを実施した 事後テストはインタフ
ェ ー スを使用した構造を包含したPrototype パタ ー ンと， 抽象クラスや継承を使用した構造を包含した
TemplateMethodパタ ー ンの クラス図を用いて， 事前テストと同様にそれぞれProduc lインタフェ ー ス，
AbslractDisp!ay抽象クラスの役割とそれを使用する構造上の理由を問う 問題を出題した このとき，Prototypeパタ ーンとTemplateMethodパタ ー ンを用いたプログラムの全体像を被験者に把握できるように各々のパタ ー ンのプログラムを記述した資料を配布し， それらを参照しながらテストに解答してもらった ．
問題形式は事前テストと同様である． 事前テストと事後テストの結果を比較して， 学習効果が得られたかど
うかについて評価した
最後に， 本学習支援手法の性能を評価するため事後アンケ ー トに回答してもらった 事後アンケ ー ト項目を表3に示す． 設問①～③はそれぞれ1 （低評価）から4 （高評価）の4段階で， 設問⑤は1 （低評価）から5 （高評価）の5段階で評価してもらった． その他， 本システムに関する意見・感想・提案事項を白鴎記述し
てもらった
表2

事前アンケ ー ト項目

デザインパターンを学習したことがあるか
デザインパタ ー ンを使ってプログラムを作成したことがあるか
白日

き1

内容

プログラムの変更点を考えることでデザインパタ ー ンの設計の良さは理解できたか
新しいデザインパタ ー ンを学習するときに設計を拡張してみようと思うか
システムからのアドバイスはプログラムの変更点を考える上で理解できたか
シスチムは操作しやすかったか

ヨ

事前アンケ ー トの結果について述べる． 事前テストと同時に実施したデザインパタ ーンに関する意識調査のためのアンケ ー 卜の結果を表4に示す 設問①「デザインパタ ーンを学習したことがあるかJで， 学習したことがあると回答した被験者はj、中7人であった 一方， 設問②「デザインパタ ーンを使ってプログラ
ムを作成したことがあるかJで， 作成したことがあると回答した被験者は 9人中l人にとどまった ． したがって， デザインパタ ーンのプログラムの構造を学習した経験はあっても， それを自ら使用して新たなプログ
ラムを作成した経験がない被験者がほとんどである．
次に事前テストと事後テストの結果について述べる． 表5にその結果を示す事前テストについて， I （インタフェ ー スを使用した構造を含むデザインパタ ーン）のl何回「 インタフェ ー スの役割を問う問題jでは，被験者9人中i人が正しく説明できていたが， それ以外の8人は問題の意図と異なる説明をしているか， 白
紙解答であった， II （抽象クラスや継承を使用した構造を含むデザインパタ ーン） のl問日「抽象クラスの役割lを問う問題Jでも， 被験者9人中3人が正しく説明できていたが， それ以外の6八は問題の意図と異な
10

電気通信普及財団研究調査報告書

る説明をしているか， 白紙解答であった． また， Iの2問問fインタフェ ースを使用する構造上の理由を問う問題」 やEの2問団 「抽象クラスを使用する構造上の理由を問う問題Jでは， 正しく説明できていた被験者がそれぞれ9人中O人，9人中1人と，l関白よりもさらに正解率が低かった このように，事前テストの段階ではデザインパタ ー ンの概念が理解できていない， あるいは概念は理解できていてもなぜその構造をしているかが理解できていなかったことがうかがえる
一方， 事後テストでは， I の l 問団， E の l 問自とも， 被験者 9 人中 5 人が問題の趣旨に沿ってよく説明できており， 「メソッド名のみを定義し，そのメソッドの具体的な処理をサブクラスで定義させるJといった趣旨の解答が多かった． ただ， 正しく解答できなかった被験者も多く見受けられた． この原因の 一 つに， 各
クラスの役割を理解させる支援ができていなかったことがあげられる したがって， デザインパタ ーンの設計の良さだけでなく各クラスの役割を思考させる支援環境が必婆だと考えられる． Iの2問日やEの2関目
では，正しく説明できていた被験者がそれぞれ 9 人中 7 人， 9 人中 9 人と， l 問問よりもさらに正解率が高く，「 インタフェ ー ス（抽象クラス）を利用することで， サブクラスと他のクラスの実装が切り隣されるため，プログラムを拡張する際に他のクラスの変更を最小限に抑えられる」 といった趣旨の解答が多かった ． これ
らの結果から， 本システムによる支援機能がデザインパタ ーンの設計の良さを理解させる上で有効であった
ことが明らかになった．
最後に， 事後アンケ ー トの結果を表6, 7に示す①「プログラムの変更点を考えることでデザインパタ ーンの設計の良さは理解できたか」 と， ② 「 新しいデザインパタ ーンを学習するときに拡張プログラムを作成
してみようと思うか」では， いずれも被験者全員が 3 か 4 と回答していた ． 詳細な意見を聞いたところ，「既存プログラムを拡張することの意義を理解することができた」「デザインパタ ー ンを用いたプログラムの設計の良さをより深く理解することができた」という意見がみられた これらの結果から， プログラムの拡張を通じた学習方法の有効性を多くの被験者に認識してもらえたことが明らかになった． さらに「システムで具体的なプログラムが見れることにより， クラス図の全体像が把握しやすかった上， プログラムの変更箇所が考えやすかったjという意見もあった このことから， 拡張クラス図の作成や拡張問題の解答を通じた学習において， 全てのクラスのプログラムを提示する機能によって， 元のクラス図や拡張クラス図の全体像を把握させることができ， プログラムを読みながらプログラムの具体的な変更箇所をスム ー ズに考えさせることができたと考えられる ③ 「 アドバイスはプログラムの変更点を考える上で理解できたかJでは， アドバ
イス機能を全く使用していない被験者が2と回答していたが， それ以外の被験者8人が3か4と回答しており， 「プログラム中で変更点をアドバイスする所が見やすく，本機能で理解がより深まった」という意見もあったことから， プログラム中の変更点を色を変える機能が， 被験者の学習を適切に支援できていたことがうかがえる． ④ 「システムは操作しやすかったかJでは， 被験者9人中8人が4か5と回答しており， システ
ムのユ ー ザビリティは改善されていたことが明らかになった但し， 「 エンティテイはドラッグ＆ドロップで動かせるようにしてほしいjなど， システムの操作に改善を求める意見もあったため， 今後も引き続きシス
テムのユ ー ザビリティの改善をしていく必要がある
表4 事前アンケ ー トの結果②

学習したことがある
学習したことがない
作成したことがある
作成したことがない

l 問自
2 間関

表5 事前テスト ・ 事後テストの結果
テスト
事前
1 間関（役
2 問目（理由）
割）
正しく説明できたl人。人
間違えた説明をしていた
6人
5人
全く説明できなかった
4人
2人
適切な代替設計を作成できた
3人
1人
4人
適切でない代替設計を作成していた2人
全く作成できなかった
2人
6人

11

事後

l 関目
（役割）
5人
2人

、

2）

5人
2人
2人

2 問目
（理由）
7人
1人
1人
9人
。人
。人

電気通信普及財団研究調査報 告書

表6
設問
。人
。人
。人

①
②
③

設問
④

。人

事後アンケ ー トの結果（質問①～③）
選択肢(1 ：低評価骨4：品評価）
3
2
。人
5人
。人
5A
l人
5人

表7 事後アンケ ー トの結果（質問④）
選択肢I I：低評価特4：高評｛耐
2
3
I人
［人

I
I

4
4人

4
4人
4人
3人

5
4人

5-2代替設計の作成およりシナリオに基づいた設計比較の有効性の評価
本研究課題で構築したプログラム拡張問題学習環境に， これまで我々が開発してきた代替設計作成環境を統合し， 被験者が自身で代替設計を作成したうえでその拡張問題を考えるという一 連の学習方法の有効性を検証するための評価実験を実施した被験者は， デザインパタ ー ンについて学んだことがある大学生5名である
初めに，デザインパタ ー ンの理解度を確認するため事前テストを実施した事前テストにはBridgeパタ ーンを用いた事前テストの問題を表Bに示す. I問日は，Bridgeパタ ー ンを用いた設計を見せ， このデザイ
ンパタ ー ンが優れた設計である構造上の理由を問う問題である 2 問自は， 代替設計を作成させる問題である． これらの問題は， 被験者がデザインパタ ー ンの設計の良さを理解しているかを問うために設けた ． このとき， 各クラスのプログラムを記述した資料を配布し， それらを参照しながらテストに解答させた． 次に，被験者に対しシステムの操作方法について説明したその後， 被験者にシステムを利用してもらい， 提示されたデザインパタ ー ンを利用したクラス図の代替設計を作成させた． また， 代替設計が作成できた後は拡張問題を提示し， プログラムの変更点を解答してもらった． 問題は I 問で， Fae loryl日e thod パタ ー ンに関する問題である 本実験では， 最終的にすべての被験者が拡張問題を正しく解答することができた． システムを用いた学習後， 事後テストを実施した 事後テストは， 事前テストと同様の問題を，Observerパタ ー ンを用いたクラス図に対して聞いた．
表B 事前テストの問題
以下に示すのはBridgeパタ ー ンのクラス図です1.
このデザインパタ ー ンがなぜ優れた設計だといえるか，
構造上の理由を説明して下さい．
2.
このデザインパタ ー ンと同じ動作をするが設計の良さを低下させる代替設計のクラス図を作成して下さい．
事前・事後テストの結果を表9に示す事前テストについて， 2問とも正しく解答できていた被験者がl名いたが，l問問は3人が，2問沼は4 .d1l正しく解答することができていなかった． したがって，2陪とも正しく解答できていた被験者1人を除き， 残りの4人は事前テストの段階でデザインパタ ー ンがなぜその構造をしているかが理解できていなかったことがうかがえる． 一方， 事後テストでは， 事前テストで2問とも正しく解答できていた被験者l人に加え， l i習 日は残りの4人全員が問題の趣旨に沿ってよく説明できていた. 2問目はJ八中3人が適切な代替設計を作成できていた． これらの結果から， 提案したデザインパタ ーンの学習方法および本システムによる支援機能がデザインパタ ー ンの設計の良さを理解させる上で有効であったことが明5かになった．

12
電気通信普及財団研究調査報告書

表9 事前 ・ 事後テストの結果
テスト
事前
事後
i向田 正しく説明できた
2人
5人
間違えた説明をしていた
l人
日人
全く説明できなかった
日人
2人
2間同 適切な代替設計を作成できた
l人
4人
l人
l人
適切でない代替設計を作成していた全く作成できなかった
3人。人
最後に，アンケ ー トに回答してもらった アンケ ー ト項目を表10に示す設問①・④はそれぞれI （低評価）から4（高評価）の4 段階で，それ以外の設問は自由に記述してもらった なお，設問②は設問①で3または4と回答した被験者のみ記述してもらった．
表10 アンケ ー ト項目
代替設計作成やプログラムの変更点を考えることでデザインパタ ー ンの設計の良さは理解で①
きたか．
本実験のどの段階でデザインパタ ー ンの設計の良さを理解できたか②
デザインパタ ーンの設計の良さを理解する上でなぜ代替設計を作成する学習をしたと思うか．
③④
新しいデザインパタ ー ンを学習するときに代替設計を作成してみようと思うか．
ー
アンケ トの結果を示す設問①・④の結果を表IIに，設問②・③の結果を表12に示す①では被験者
会員が，④では被験者5人中4人が3か4と回答していた．④で2と回答した被験者Ldま，事前・事後テ
ストともに全ての問題で正しく解答できており，デザインパタ ー ンの設計の良さを既に十分理解していた
したがって，本実験での学習から習得した知識が少なかったため，学習効果が少なかったと考えられる また，Clの結果から， 代替設計を作成するプロセスでデザインパタ ーンの設計意図を理解できる被験者もいる
が，拡張問題で良い設計が有効に機能する場面に触れることで初めて設計意図を習得できた被験者もいたことが明らかになった さらに，③では，被験者全員がデザインパタ ー ンの設計の良さと代替設計の悪さを実感するためだと回答していた．これらの結巣から，多くの被験者に代替設計作成や問題設定の拡張を通じた学習方法の有効性を認識してもらえたことが明らかになった
表11 アンケ ー トの結果（①，④）
設問
I
2
3
4
①
人
人
4人
I人
④
人j
l人
3人
I人

I
I
I

o
o

I
I

o

I
I
I

I
I
I

アンケ ー 卜の結果（②，③）②
代替設計の作成終了時
2人
拡張問題の解答時
2人
拡張問題のアドバイス取得時
l人③
デザインパタ ー ンでは仕様の変更が容易であることを確認するため代替設計が仕様の変更に弱いことを実感するため設計の良し悪しをプログラム変更点の比較によって実感するため
表12

．．
．

6おわりに
本研究では，オブジェクト指向プログラミングにおける経験知の 一 つであるデザインパタ ー ンを対象として，デザインパタ ーンを用いたクラス図を試行錯誤的に変形することでデザインパタ ー ンの設計意図を理解する学習手法を提案し，その学習を体験できるシステムを構築した． 学習者が設計ー 上の利点を下げる代替設計を作成できるように，学習者の代替設計を判定し，必要に応じてアドバイスを生成する機構を構築した
さらに，代替設計の対象としている問題を拡張した拡張問題を提示することで，良い設計の設計意図を実感できるようなシステムを構築した．評価実験の結果， デザインパタ ー ンが優れた設計である理由やデザイン

13

電気通信普及財団研究調査報告書

パタ ーンの利点を下げる代替設計を多くの被験者が解答できるようになっ たことから， 代替設計作成に基づいた学習方法は有効であったことが明らかになった．
提案した学習方法ではデザインパタ ーンの設計意図を理解させることはできても， デザインパタ ーンを使いこなせるようになるための支援はできていない． デザインパタ ーンを適用している問題を摘象化することができれば，現在取り組んでいる問題にデザインパタ ー ンをできるか否かを判断できるようになると考えるー
したがって， 様々な問題に対して， デザインパタ ーンの使用可否とその理由を考えることのできる学習支援システムも， 今後考案していきたい【参考文献］[l] アラン ・ シャロウェイ，ジェ ー ムズ·R ・ トロット著，村上雅章訳「デザインパタ ー ンとともに学ぶオブジェクト指向の。
こころJ，ヒ アソン ・ エデュケ ー ション（2005)[2] マイケノレ・ポランニ ー ．「暗黙知の次元J，筑摩書房（2003)”[3] Stephen WEISS，吋'eaching Design Patterns by Stealth ，Proc. of SIGCSE 2005, pp.492-494, 2005.
”[4] Neishia PILLAY, "Teaching Design Patterns ，Proc. of SACLA (2010)[5］大江洋希，小尻智子，瀬田和久明IJ解作成に基づいたデザ、インパタ ー ン学習における学習者の別解特定機構の構築J，情報処理学会第76回全関大会講演論文集，pp.4-551-4-552 (2014)”[ 6] Hiroki OOE, Tomoko KOJIRI and Kazuhisa SETA： Learning Support System to Facilitate
Redesigning for Understanding Software Design Patterns” . Proc. ofICCE 2012, pp.61-65 (2012)、 a’[7] 結城浩，“Java言語で学ぶテ サインパタ ー ン入門 ＼ソフトパンククリエイティブ株式会社（2004)（発
題
名
代替設計との拡張性の比較に基づいたデザインパタ ー ン設計意図理解支援シ
ステムとその評価
Learning Method for Understanding
Design Policy of Object-oriented
Design and its Meta“ learning Support
System表資料〉

掲載誌・学会名等

発表年月

電子情報通信学会技術研究報
告， Vol. 114, No. 53. pp. 3ト36

2014年5月

Proc. of 22th International
Conference on Computers in
Education, pp. 129 131

2014年12月【

14
電気通信普及財団研究調査報告書