UTI UML教育研究所
読み物
OCUPブログ
OCRESブログ
UMLコラムから学ぶ
スキル・キャリアコラム
プロジェクト導入事例
エキスパートインタビュー
資格取得までのステップ
FAQ
教育コンテンツ
キャンペーン
ブックプラス
パートナープログラム
認定ユーザープログラム
メールマガジン登録
お問合わせ
組込み開発に携わる方のためのOCRESブログ 第5回

ソフトウエア工学
最近は、以前ご紹介したOCRESの試験範囲にも指定されている書籍を発行する事もあり、組込み系・リアルタイム系のソフトウエア工学の話をする事が多くなりました。
そこで、今回のブログでは、それらの対話を通じて非常に良く聞かれる事、2点について書いてみたいと思います。言うなれば、ブログ版FAQ(Frequently Asked Questions)です。

欧米のエンジニアは、ソフトウエア工学をいつどこで、どのように学ぶのか?

最も正確な解答は、「欧米と一言で言っても、国によって様々であり、アメリカといっても産業や企業ごとに異なる」です・・・といっても、恐らく大部分の人にとっては、正確過ぎて反って、期待した答になっていないと思いますので、私見も交え、大雑把な図を描いてみたいと思います。

まず第一に、IT系と組込み・リアルタイム系では、様子が少し異なります。
IT系エンジニアは、学校でコンピュータ・サイエンス系のトレーニングを一通り受けてきた人が多いのに対し、組込み・リアルタイム系エンジニアは、むしろ、電子工学や機械工学、化学と言ったコンピュータ・サイエンス以外の分野の専門教育を受けて来た人たちが多数を占めます。
従って、学校でのコンピュータ教育は、言語教育までと言った人が主流となり、ソフトウェア工学のトレーニングは、主に企業内教育の場で行われる事になります。

また、ITと異なり、ハードウェアとソフトウエアの独立性が低く、ハードウェアの設計者であってもソフトウェア側の事情を知らないとシステム設計が出来ない場合が多く(ハードのソフト化)、システム工学と合わせてソフトウェア工学のトレーニングを行います。(現実的には、分野によっては、システム設計の主導権をソフトウェア側が握っており、そういった場合は、ソフトウェア工学を通じてシステム工学を学ぶ事になります)
そして、企業教育の特徴は、グループによる事例研究や演習を短期間(通例2〜4日間)に集中して行う点であり、学校教育のように、週2時間で半年間という様なパターンは皆無に近いと思います。(ただし、E-ラーニング等で、知識教育を補助的に組み合わせるケースは非常に多い)

システム品質について

システム品質の話をする場合、時々、NASAの惑星探査ロケットが、かつて、メートル法とフィート法を間違えて距離を測定し、惑星に接近するつもりが、激突してしまった事例を取り上げる事があるのですが、人によって受け取り方が違い、筆者の意図する向きとは正反対の方向に解釈される場合もあるので(恐らく、筆者の言葉足らずのせいでしょう)、ここで、改めてお断りしておきたいと思います。
この話をする時の反応は大きく2つに分かれ、一つは、「メートルとフィートの換算方法は小学生でも知っており、なんで何人もの博士号を持つ技術者たちがチェックしたと言うのに、事前に分からなかったのか?注意不足にもほどがある。」というものです。

この問題は、例えて言うと、ビット列「0100」を一方のソフトは4メートルと解釈し、もう一方は4フィートと解釈する様な現象で、解釈が異なる、つまり意味を取り違えてしまうバグで、意味論的エラー(セマンティック・エラー)と呼ばれる問題です。
実は、このようなバグはソースコード・レビューのようなテスト以外の手法で取り去るのは非常に困難である事が知られています。

また、遠い宇宙空間で走る予定のソフトを地上でテストするのも大きな課題です。(たとえ地上でテストしても、宇宙空間で同じように走る保証がない等)
関係者にとっては、「まさか」に属する種類の間違いですが、残念ながら、このような間違いは人間の注意力では解決されず、よりシステマティックなアプローチが必要である事が専門家の間では常識になっています。
システム工学の進歩も、このような品質問題を解決するために進歩してきました。
最近の飛行機は、昔に比べて数段安全になってきましたが、これは決して、昔に比べて、関係者の注意力が増して来たからではなく、墜落する原因のいくつかが解って来て、それに対してシステム的な対処がなされた事に大きく起因します。

従って、こういった問題で重要な事は、エラーを起こした人間の責任を追及する事ではなく、なぜ、エラーが発生するのか、なぜ防げないのかと言った点を調査する事にあり、それに対しシステマティックな解決策を取る事にあります。(当事者は、説明する責任は当然ながらあります)
昨今のUMLをはじめとするソフトェア設計手法やテスト手法の発達もシステマティックな解決策の一つです。