SWEBOKベースのCSDP試験とはどんなもの?

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

SWEBOKつながりでCSDP試験についても少し調べてみた。この試験は日本でもプロメトリックで受けられる。

CSDP試験は、SWEBOKの全ての知識領域を網羅して、4択問題が180問出題される。それを3時間半、1問あたり1分15秒で解答する。得点は均一ではなく、問題の難易度で重み付けされており、200点満点になるようになっている。170点が合格ラインになる。単純計算では85%が合格ラインになるので、180問中153問に正答する必要がある。

試験は、均衡のとれたソフトウェアエンジニアを想定して設計されてはいるが、特にソフトウェア設計、テスティング、要求、構築あたりが重視されているようだ。SWEBOK 2004ベースで配分は以下のようになっている。SWEBOK 2010に対応してCSDPも2010年3月には改訂されることになっている。

  3- 4%    1. Business Practices and Engineering Economics
 13-15% 2. Software Requirements
 22-24% 3. Software Design
 10-12% 4. Software Construction
 15-17% 5. Software Testing
  3- 5% 6. Software Maintenance
  3- 4% 7. Software Configuration Management
 10-12% 8. Software Engineering Management
  2- 4% 9. Software Engineering Process
  2- 4% 10. Software Engineering Tools and Methods
  6- 8% 11. Software Quality
「Business Practices and Engineering Economics」はSWEBOK 2004にはないCSDP固有の知識領域で、ソフトウェアエンジニアリングのプロとして行動指針である。プロ意識・倫理・行動指針、集団力学と心理学、コミュニケーション能力、知的財産・機密・セキュリティの知識、見積り・リスク・変化の予測の技法、意志決定の手法などを含んでいる。SWEBOK 2010でProfessional Practicesの知識領域、Engineering Economy Foundationsの教育領域として取り込まれるはずのものだ。

いろいろ情報はあるのだか、興味のある部分のみメモしておく。

CSDPで推奨される文献

CSDP対応の学習では、当然だが(1)SWEBOKを読んでおくこと、(2)IEEE CSの語彙を把握しておくこと。試験はIEEE CSの語彙をテストするものではないが、試験問題を理解するために把握しておく必要がある。例えば、どの時点で設計が終わり、構築が始まるかといったことはいまだに議論されている。設計(design)、構築(construction)といった定義をIEEE CS Vocabulary(SEVOCAB)で確認しておく必要がある。また、(3)IEEE CSが出している「Software Engineering」というタイトルの2巻で構成されるガイド(Richard H. Thayer, Merlin Dorfman, Mark J. Christensen著)を読んでおくこと、(4)CSDPでリストされている参照すべき文献を11の知識領域ごとに少なくとも1冊は読んでおくことを薦めているようだ。
※a) Software Engineering, Volume 1, The Development Process, 3rd Edition, Richard H. Thayer, Mark J. Christensen, Wiley-IEEE Computer Society Press, 2005.
※b) Software Engineering, Volume 2, The Supporting Processes, 3rd edition, Richard H. Thayer, Merlin Dorfman, Wiley-IEEE Computer Society Press 2005.

CSDPのサンプル問題

試験問題のサンプルが25問ほど公開されていた。勿論、英文だし、個々の技法の意外と細かいポイントが問われている。単に技法やツールのタイトルだけを覚えても答えられない。なかなかうまくは訳せないがいくつか挙げておく。

1. ソフトウェア構成管理でソフトウェアの構成の識別はどの時点で行うか。
[a] ライフサイクルの開始より前に行う
[b] ライフサイクルの開始時に行う
[c] あらかじめ決めておいたライフサイクル内の任意の時点で行う
[d] ライフサイクルの終了時に行う

2. ソフトウェアコンポーネントでないものはどれか。
[a] 個々に配置されるユニット
[b] 大規模ソフトウェアシステムの共有部分として開発されたもの
[c] サードパーティで開発されたユニット
[d] 修正のために抜粋したソースコード

3. 構造化分析(Modern Structured Analysis)において、イベントリストは何に用いるか。
[a] 要求のトレーサビリティを向上させるため
[b] ELH図(Entity-Life History diagram)を作成するため
[c] ER図(Entity-Relationship Diagram)でデータ・トランザクションを記述するため
[d] システムの予備的なDFD(preliminary Data Flow Diagram)を作成するため

4. エンジニアAさんはミッションクリティカルなプロジェクトでWEBのプレゼンテーション層を開発している。しかし、プレゼンテーション層を実現するために選択された技術ではユーザーインタフェース設計が難しい。Aさんはプロジェクトに必要なWEBインタフェースを作成するために有効そうな新しい技術情報を読んで知った。そして、その新しい技術の初期評価を行うために迅速にプロトタイプを作ることを決めた。このプロトタイピングを行う際に最低限守らなければならない基準はどれか。
[a] 機能をすべて覆うように試すこと
[b] 操作環境はシュミレーションすること
[c] 最低限の機能を試すこと
[d] デバッガでソースコードをステッピングすること

5. クリーンルーム・ソフトウェアエンジニアリングについて説明しているのはどれか。
[a] 欠陥を取り除くよりも欠陥を予防することを重視している
[b] 定型的な検証の実行を最小化できる
[c] 十分に整備されたソフトウェア開発プロセスを必要としない
[d] 開発メンバには1つの責務だけが与えられる

6. Aさんは反復型のライフサイクルで開発を行っているプロジェクトの開発リーダーであり、反復型開発は経験もあってよく熟知している。プロジェクトには主要な10個のユースケースがあり、最初の反復で2つをスケジュールどおりに完成させた。欠陥の修正に費やす工数を検討しているプロジェクトマネージャからの要求に応じて、Aさんは最初の反復の間に、品質を計るためのいくつかのデータを収集していた。そのデータを見ると、要求と設計での計画されたレビューが実施されていなかったし、またユニットテストシステムテストでは100行あたり(SLOC)の欠陥数が22件見つかっていた。プロジェクトを次に進めるためにAさんは欠陥の傾向を問われた。この欠陥の発生頻度のままだと、今後どうなるといえるか。
[a] よじれが生じているのでプロジェクトが遅延しそうだ
[b] 同じ状況が継続される
[c] プロジェクトの進行が早まりそうだ
[d] この時点で予測することはできない

7. ソフトウェア開発プロジェクトで2つの類似した要求の欠陥が見つかった。1つは要求フェーズで見つかり、もう1つは構築フェーズで発見された。この状況の説明でもっとも該当するのはどれか。
[a] 要求フェーズで見つかった欠陥の方が修正コストが高くなる
[b] 構築フェーズで見つかった欠陥の方が修正コストが高くなる
[c] 修正コストはどちらも同じくらいである
[d] 欠陥が発見されたフェーズと修正コストには関連はない

8. 統計テスト(statistical testing)において信頼性予測の精度に影響しないのはどれか。
  1) 運用プロファイル(usage profile)の妥当性
  2) 実施したテストケース数
  3) コードを実装するためのプログラミング言語
  4) コードのサイクロマティック複雑度
[a] 1,2
[b] 2,3
[c] 3,4
[d] 1,2

9. 構造化設計で変換分析を実施する際には入力(afferent)と出力(efferent)のフローを識別する必要がある。その理由は何か。
[a] フローはシステム内のデータを表現するため
[b] フローはデバイスの物理的な制約によって制限されるため
[c] システム設計はデータのフォーマットに依存すべきでないため
[d] システム性能は大部分においてフローの時間に依存するため

10. Aさんはソフトウェアプロジェクト管理計画のドラフトを作成した。この計画で検討すべき事項はどれか。
  1) スケジュール
  2) 予算
  3) 要求
  4) 要員
[a] 1,3,4
[b] 1,2,3
[c] 1,2,4
[d] 1,2,3,4

11. ソフトウェアメトリックの有用性は、特定の適用領域で評価されるべきである。では、ソフトウェアメトリックの有用性を評価する際に考慮すべきでない適用領域はどれか。
[a] プロダクトの複雑度を決定すること
[b] 個々の要員メンバの生産性を決定すること
[c] 期待していた品質に到達する時点を決定すること
[d] プロジェクトのプロセスの妥当性を決定すること

12. 品質保証すべき対象はどれか。
  1) 要求
  2) 設計
  3) コード
  4) テスト
[a] 1,2
[b] 1,2,3
[c] 1,2,3,4
[d] 4

とりあえず、訳しやすいものを半分ほど提示してみた。1問あたり1分15秒のペースで180問を解答するのは結構大変そうだ。