SWEBOK 2010に追加される教育領域とは

[2011/08/16追記]この記事は古いので注意ください。現在は
SWEBOK Version 3として改訂作業が進行中のようです。

SWEBOK 2010に追加される知識領域には、ソフトウェア計量(Measurement)、ソフトウェアセキュリティ(Security)、プロとしての実践(Professional Practices)がある。また4つの教育領域として、ソフトウェアエンジニアリング経済基礎(Engineering Economics foundations)、コンピュータ基礎(Computing foundations)、数学基礎(Mathematical foundations)、一般エンジニアリング基礎(Engineering foundations)が追加される。これらをもう少し詳細にみておきたい。

計量とセキュリティには十分な情報が公開されているので省略する。「SWEBOK 2010版がそろそろ出るか」の記事を参照のこと。計量については、ドラフト版が公開されているし、セキュリティについては、Security-oriented Point-wise Changes to SWEBOKに情報がある。なお、ソフトウェアセキュリティはSWEBOK 2010で独立したKAになるかどうかはまだはっきりしていないようだ。CSDPとの兼ね合いがあるのだろう。どうも資金源であるCSDPに主導されて、本体であるべきSWEBOKの方が揺らいでいるようにも見れる。

プロとしての実践(Professional Practices)とソフトウェアエンジニアリング経済基礎は、CSDPのKAとして追加されていた「Business Practices & Engineering Economics」を踏襲したものになるはずである。Business Practices & Engineering Economicsでは、ビジネス上でソフトウェアエンジニアリングのプロとしてふるまうための基本原理と手法を扱っている。以下のような内容となっている。


■CSDPでのBusiness Practices & Engineering Economics
* プロ意識(Professionalism)
* 行動指針(Codes of Ethics)
* 集団力学/心理学(Group Dynamics/Psychology)
* コミュニケーション能力(Communications Skills)
* 知的財産・機密・セキュリティ(Intellectual Property, Confidentiality, Security)

* ソフトウェアエンジニアリング経済(Software Engineering Economy Fundamentals)
* 利益にかかわる意志決定(For-profit Decision-making)
* 利益にかかわらない意志決定(Non For-profit Decision-making)
* 経済の現状(Present Economy)
* 見積り、リスク、変化の予測(Estimation, Risk, Uncertainty)
* 複合する決定要因(Multiple Attribute Decisions)

これの前半がプロとしての実践(Professional Practices)、後半がソフトウェアエンジニアリング経済基礎に相当すると思われる。Software Engineering 2004 curriculumでは、Professional Practicesを集団力学/心理学、コミュニケーション能力、プロ意識という3つの構成で以下のようにまとめられている。

■プロとしての実践(Professional Practices)
* 集団力学/心理学(Group Dynamics/Psychology)
+-- Dynamics of working in teams/groups
+-- Individual cognition (e.g. limits)
+-- Cognitive problem complexity
+-- Interacting with stakeholders
+-- Dealing with uncertainty and ambiguity
+-- Dealing with multicultural environments

* コミュニケーション能力(Communications Skills)
+-- Reading, understanding and summarizing reading (e.g. sourcecode, documentation)
+-- Writing (assignments, reports, evaluations, justifications, etc.)
+-- Team and group communication (both oral and written)
+-- Presentation skills

* プロ意識(Professionalism)
+-- Accreditation, certification, and licensing
+-- Codes of ethics and professional conduct
+-- Social, legal, historical, and professional issues and concerns
+-- The nature and role of professional societies
+-- The nature and role of software engineering standards
+-- The economic impact of software
+-- Employment contracts

Software Engineering 2004 curriculumでのソフトウェアエンジニアリング経済基礎に相当する部分「Engineering economics for software」では次のようになっている。

■ソフトウェアエンジニアリング経済基礎(Engineering Economics foundations)
* Value considerations throughout the software lifecycle
* Generating system objectives
(e.g. participatory design, stakeholder win-win,
quality function deployment, prototypingなど)
* Evaluating cost-effective solutions
(e.g. benefits realization, tradeoff analysis,
cost analysis, return on investmentなど)
* Realizing system value
(e.g. prioritization, risk resolution,controlling costsなど)
次に数学基礎だが、これにはSoftware Engineering 2004 curriculumの「Mathematical Foundations」そのものが該当する。数学の基本原理と手法を扱っており、以下のような内容となっている。

■数学基礎(Mathematical foundations)
* 関数、関係、集合(Functions, Relations, Sets)
* 論理(命題論理・述語論理)(prepositional, predicate)
* 証明法(直接証明・背理法帰納法)(direct, contradiction, inductive)
* 計数(Basic Counting)
* グラフ構造とツリー構造(Graphs, Trees)
* 離散確率(Discrete Probability)
* 有限ステートマシン、正規表現(Finite State Machines, regular expressions)
* 文法(Grammars)
* 数値精度、正確さとエラー(Numerical precision, accuracy, errors)
* 数論(Number Theory)
* 代数(Algebraic Structures)
同じようにSoftware Engineering 2004 curriculumには「Computer Science foundations」があり、これがコンピュータ基礎に該当する。認知科学や形式的手法なども充実されるという情報をどこかでちらとみた記憶があるので、もっと範囲は広いかもしれない。

■コンピュータ基礎(Computing foundations)
* プログラミング基礎(Programming Fundamentals)
* アルゴリズム、データ構造とデータ表現(静的/動的)、複雑性
(Algorithms, Data Structures/Representation (static & dynamic), Complexity)
* 問題解決技法(Problem solving techniques)
* 抽象化(カプセル化、階層表現)(encapsulation, hierarchyなど)
* コンピュータの構成(Computer organization)
* システムの概念(Basic concept of a system)
* 利用者側要因(Basic user human factors (I/O, error messages, robustness))
* 開発者側要因(Basic developer human factors (comments, structure, readability))
* OS(Operating system basics)
* DBとデータ管理(Database Basics and Data Management)
* 通信(Network communication basics)
  * Semantics of programming languages

* 分散処理、並列処理(Distributed and Parallel Computing)
* プログラミング言語(Concepts of programming languages)
* デバッグ技術(Debugging Tools and Techniques)
* セキュリティ(Secure Coding)

またSoftware Engineering 2004 curriculumの「Engineering foundations for software」が、一般エンジニアリング基礎に相当するだろう。

■一般エンジニアリング基礎(Engineering foundations)
* 経験と実験(Empirical methods and experimental techniques
(such as computer-related measuring techniques for CPU and memory usage))
* 統計解析(Statistical analysis (including simple hypothesis testing,
estimating, regression, and correlation))
* 計量とメトリクス(Measurement and metrics)
* システム開発
   (security, safety, performance, effects of scaling, feature interactionなど)
* エンジニアリング設計(問題の系列化、候補解の導出、実現可能性の判断など)
(problem formulation, alternative solutions, feasibility)
* 計量法(Theory of measurement)
* Engineering science for other engineering disciplines
   (strength ofmaterials, digital system principles, logic design,
    fundamentals ofthermodynamics, etc.)

* シミュレーション、モデリング、概念プロトタイピング
(Simulation, Modeling, Conceptual Prototyping)
* GQM表(GQM Paradigm)
* 標準の認識・評価・選定・適用(Standards identify, evaluate, select, adapt)
* ツールと基盤の選定(Tool and platform selection)
* 根源的原因分析(Root cause analysis)

キーワードだけだが、プロとしての実践(Professional Practices)、ソフトウェアエンジニアリング経済基礎(Engineering Economics foundations)、コンピュータ基礎(Computing foundations)、数学基礎(Mathematical foundations)、一般エンジニアリング基礎(Engineering foundations)に大体どのような概念が含まれるかが見えてきた。