ソフトウェアエンジニアリングにおける
情報専門教育カリキュラム標準J07-SEの紹介
電気通信大学 電気通信学部 システム工学科
講師 西 康晴
1.J07-SEの位置づけ
近年、ソフトウェアは社会に欠くことのできない存在となった。しかしその一方で、ソフトウェアに起因するエンタープライズ系のシステム障害や組込み系システムの製品リコールが多発している。特に最近では、金融システムのような重要な社会インフラや、人命に関わる製品にも及んでいる。このままでは、我が国の産業競争力にも消費者安全にも大きな負の影響を及ぼしてしまう。 その一因が、質の高い人材を生み出すシステムが機能していないことである点は論を待たない。我が国のソフトウェアは、ソフトウェアエンジニアリング(SE)に関する十分な体系的教育を受けていない技術者によって作り続けられているのだ。これは極めて憂慮すべき問題である。
この問題の解決に必要なのは、大学などの高等教育機関におけるSE教育の質の向上である。もちろんこれまでも、意識の高い研究者は自ら実践的・先端的なSE教育や産学連携を行っている。SE教育の議論を熱心に交わすNPO法人もある。経産省や文科省、経団連はいくつかの大学や大学院に対して助成を行っている。またITSS/ETSS/UISSなどのスキル標準でも高等教育との関連性が議論されている。
こうした流れを踏まえ、情報処理学会にはSEのカリキュラムの参照モデルの策定が強く望まれてきた。それによって様々なSE教育の取り組みを整理し強みや弱みを明らかにでき、さらなる改善を促すことができる。SEの学科やコースの設置もが容易になる。
情報処理学会では、1999年からアクレディテーション委員会SE分科会として,知識体系の調査、日本で適用可能なフルセットとしてのカリキュラムモデルJpn1の策定、 (特に米国における)SEアクレディテーション動向の調査などを行ってきた。2006年からはSE教育委員会として、ミニマムセットとしての情報専門教育カリキュラム標準J07-SEを策定することとした。その内容はJ07-SE領域のWebサイトにて公開されている。
2.J07-SEの概要と特徴
J07-SEは、大学などの高等教育機関の情報専門学科におけるSE教育のためのカリキュラムモデルであり、知識項目や最低限必要なコア科目などから構成される。J07の方針に従い、知識項目としてCCSE 2004(IEEE Computer Society と ACMが共同作成したComputing Curricula Series 2004年版)を参照し、再体系化を行っている。J07-SEのコア科目と年次進行例を表1に示す。ちなみに科目とは、90分×15回の講義を指す。
J07-SEを基にしてカリキュラムを開発する際には、学科やコースの特色を反映した科目をコア科目以外に追加する必要がある。例として、エンタープライズや組込み、Webなどの適用ドメイン的な特色を反映したり、要求開発やアーキテクチャ設計、テスト、品質管理、マネジメントなど技術的な特色を反映した学科やコースなどが考えられる。
J07-SEの基本的なコンセプトは"実践的"と"骨太"である。これらはエンジニアリング教育には必要欠くべからざる特性であり、産業界から強く求められている特性でもある。
実践的な側面としては、プログラミング言語の習得に留まらず開発ライフサイクルを網羅したり、理論の理解に留まらず品質・生産性・コストといった要因を重視している。個人に閉じた作業に留まらず、開発に必要なマネジメントやコミュニケーション、チームダイナミクスなどを指向している。開発者のモチベーションや、不具合につながる開発者のヒューマンエラーといった心理的側面も取り扱っている。
とはいえSEの技術進化の速さを鑑みると、単なる近視眼的な技術訓練では不十分であり、骨太なカリキュラムモデルが必要となる。SEにおいて重要なのは技術の使い方よりも"ものの考え方"そのものであるため、モデリングを習得することで「捉える力」や「考える力」「表現する力」などを、検証と妥当性確認やプロセス改善を習得することで「問題発見能力」や「問題解決能力」などを、プロセスやマネジメントを習得することで「段取り力」や「調整力」などを涵養することを指向した。またソフトウェアに留まらない一般的な工学原則も学ぶこととした。これによって、技術を単に理解するだけでなく、臨機応変に応用でき中長期的に付加価値を生み続けられる技術者の育成が期待できる。
コア科目は、情報科学基礎科目とSE科目に分けられる。情報科学基礎科目とは、論理と計算理論、離散数学、オペレーティングシステム基礎・データベース基礎といったSEの基礎となる科目である。SE科目とは、ソフトウェア構築やソフトウェア設計、検証と妥当性確認、開発マネジメントといったSE技術を扱う科目である。
実習科目は、プログラミング入門、プログラミング基礎実習、プログラミング応用実習、ソフトウェア開発実習から構成される。プログラミング入門では、教養系で実施する一般的なプログラミング入門を想定している。プログラミング基礎実習では、個人でのプログラム開発と単体・統合テストを行う。プログラミング応用実習では、与えられた要求仕様に対して個人やグループでのアーキテクチャ設計、ソフトウェア設計、プログラム開発、単体・統合・システムテストを行う。ソフトウェア開発実習では、要求開発も含めてグループでのシステム開発とプロジェクトマネジメントを行う。エンタープライズ系や組込み系など学科やコースの特色に合わせて、かなり具体的なシステムを想定した実習となる。
品質という側面からJ07-SEを捉えると、従前の日本におけるSE教育に比してかなり踏み込んだ内容であることがご理解頂けると思う。科目としてはソフトウェアプロセスと品質、開発マネジメント、検証と妥当性確認の3科目で大きく品質について扱う。他にも、ソフトウェア構築科目では単体テストツールやテストファーストプログラミングについて扱い、モデル化と要求開発、アーキテクチャ設計、ソフトウェア設計の各科目では品質特性や非機能特性、設計品質やメトリクスなどを扱う。工学基礎では、ソフトウェアだけでは実現できない安全性やセキュリティ、性能といった品質特性や、測定の原則、統計解析などソフトウェアエンジニアに不足しがちとなる一般的な工学原理について幅広く扱う。
3.おわりに
J07-SEは高等教育機関におけるカリキュラムモデルであるが、産業界におけるSE教育に大きく参考になる内容を豊富に含んでいる。本稿に目を通した読者は一度、自社の教育が必要な知識項目を含んでいるのか、十分に体系的であるのか、実践的かつ骨太となっているのか、などを振り返って頂きたい。そしてJ07-SEを、自社の教育体系の構築・整備に役立てて頂ければ幸甚である。
表1 J07-SEのコア科目と年次進行例
コア科目 | |
---|---|
1年 | <前期> コンピュータとソフトウェアの基礎 <後期> 確率・統計 離散数学 プログラミング基礎 プログラミング入門 |
2年 | <前期> 論理と計算理論 オペレーティングシステム基礎・データベース基礎 ソフトウェア構築 <後期> ネットワーク基礎 モデル化と要求開発 ソフトウェア設計 プログラミング基礎実習 |
3年 | <前期> ソフトウェアアーキテクチャ 検証と妥当性確認 ソフトウェアプロセスと品質 プログラミング応用実習 <夏期休暇> インターンシップ <後期> 形式手法 開発マネジメント ヒューマンファクター ソフトウェア開発実習 |
4年 | <前期> 工学基礎 卒業研究 <後期> 卒業研究 |