2008-09-20

組込みソフトってなに?(高校生の質問から)つづき

匿名の高校生さんから追加情報をもらった。

3 コメント:

匿名 さんのコメント...

すみません、初めてのコメントです。実は私、高校生なんですが、組込みソフトに興味を持っています。今、私たちの生活の中で(身近なところ)よく使われている組込みソフトってなんですか。答えてくれるならすごくうれしいです。お願いします。

sakai さんのコメント...

組込みソフトウェア工房の管理人です。

たぶん一度では答えられないので何度かやりとりしましょう。

「組込みソフトとは何か?」これに答えるにあたって一番の大事なのは高校生の君がなぜそれを知りたいと思ったのか・・・これが問題です。

1. 学校の授業で「組込みソフト」の話がでてきたから
2. 何かおもしろそうな感じがするのでどんなものか知りたいから
3. 進路について組込みソフトの仕事につくことも考えているから
4. 親が組込みソフトの仕事をしているのだけれど教えてくれないから
5. その他の理由

この中のどれ? 例えば、1とか2なら組込みソフトでワクワクするイベントや教材を紹介するし、3や4ならどんなところが楽しいのか、どんなところが大変なのかを中心に答えを考えます。

こんな日記風の説明もありますが、もう少し情報をください。

匿名 さんのコメント...
組込みソフトってなに?(高校生の質問から)を読んで

ありがとうございます。わかりやすかったところもありますし、少しわかりにくいところもありました。私は元々ソフトウェアに興味を持っていて、将来 ソフトウェアに関する仕事につきたいと考えています。その中でも、特に組込みソフトに強い関心を持っています。ってことは、2. 3.ですね(笑)。ぜひ、組込みソフトについていろんな話を聞かせてください。


もしも、君が組込みソフトに興味を持っていて、将来組込みソフトの仕事につきたいと思っているのなら、おすすめのアプローチは『習うより慣れろ!』作戦だ。

まずは昔話から

実は組込みソフトは社会人になってからでしか始められないかというと、今はそうではない。30年前は高校生が組込みソフトをやってみたいと思っても難しかったね。

実 際、自分が大学生のとき日本で初めて個人でも使えるパーソナルコンピュータPC-8001がNECから発売された。もともと外国製では Appleのコンピュータがあったけど何十万円もしてとても手が出なかった。PC-8001も高かったので結局は買えず、その弟ぶんのパソコン PC-6001が出たとき7万円くらいで買った。これは家庭にあるテレビにつないで画面を見るタイプのパソコンでプログラムはなんとこれも自分が持ってい るテープレコーダに音声情報として録音していたんだ。

このときはパソコン雑誌に載っているプログラムのリストをキーボードから打ち込んで は実際に動かして遊んでいた。でも、打ち込むプログラムがだんだん多くなってくるとプログラムリストを紙に打ち出したくなる。でもプリンタが高い。モノク ロでしかも一行ずつ文字しか打てないインクリボン式のプリンタがパソコンと同じく7万円もしたんだよ。でも、どうしても欲しかったからアルバイトしてお金貯めて買ったなあ。

パソコンの価格だけは時がたつにつれて安くなるので驚きだね。いまや7万円で高性能なディスプレイ付きのパソコンが買えるし、カラーのインクジェットプリンタは1万円台で買える。(消耗品のインクで儲けているからプリンタはほとんどタダ同然でもいいんだ)

だから、君はすでにパソコンを持っているという前提で話しをするよ。

君 がパソコンを持っていてインターネットに接続する環境があるのなら、プログラムを作ってみる方法はたくさんある。今はインターネットで世界中がつながったことで、無償でソフトウェア開発の環境を提供してくれる個人や企業もたくさんあるし、わからないことがあったら親切に教えてくれるしくみもそろっている。

だけど、君が組込みソフトに興味を持っているのなら、おすすめのコースは別にある。

前回の記事に書いたように組込みソフトはセンサーとアクチュエータがあると格段におもしろい。センサーとアクチュエータを積んだ組込み機器に自分が作ったプログラムを載せて、いろいろ試してみると自分が作ったプログラムの通りに組込み機器が動くから楽しい。

実は、こんな教材を高校生向けに考えてプロデュースしている二上 貴夫というおじさんがいるんだ。この人はとてもおもしろい人で、サラリーマンとして仕事を持っていながら組込みソフトの楽しさを多くの人に伝えることができるのなら寝食を忘れてがんばっちゃう人なんだ。

科学の楽しさをわかりやすく子供達に伝える活動をしている米村でんじろうさんは知っていると思うけど、二上 さんは組込みソフトの世界では有名な組込みソフトの楽しさを伝える伝道師なんだよ。

その二上さんが最近開発した飛行船をプログラムで制御するキット「マジカルスプーン」というのがある。

現在はマジカルスプーンシミュレータが約7千円で通販で買える。二上さんは今マジカルスプーンリアルを開発していてもうしばらくすると買えるようになるよ。

マジカルスプーンはスプーンをたたいて出る超音波で命令コードを作り(=プログラム)をセンサーでこの超音波を拾って飛行船を制御するんだ。なんだか、わくわくするでしょ。

簡単な説明は、自分も所属している組込みソフトの教育を考えるコミュニティSESSAMEのこのページを見て欲しい。

また、二上さんに負けず劣らず、組込みソフトの楽しさを伝えるのにがんばっちゃっているおじさん、おばさん(おねえさんと言わないと怒られるかも)達は何人もいて、この中の舘 伸幸さんたちがマジカルスプーンのことをWEB上で連載記事として書いているのでこれも読んでみて欲しい。

最後にもう一つのおすすめは、もし君が関東近県に住んでいるのなら、レゴで作った車にプログラムを載せて動かすETロボコンのチャンピオンシップ大会がパシフィコ横浜で11月19日~21日のどこかであるのでこれを見てみたらどうかと思う。チャンピオンシップ大会は平日になるので学校の先生に正直に話しをして休みをもらって見学しに行こう。組込みソフトに夢中になっている学生や社会人達の情熱が伝わってくると思うよ。

以上、これが組込みソフトを知る『習うより慣れろ作戦』の全貌です。また、何かもっと聞きたいことがあったらコメントをください。このやり取りのことは仲間のおじさん達にも伝えておくので後でアドバイスをもらっておきます。

そ れと、『習うより慣れろ作戦』で組込みソフトの楽しさを満喫したら、次は職業として組込みソフトエンジニアになることについて真剣に考えてみて欲しい。 仕事で組込みソフトを作るのは自分が楽しければいいってもんじゃないから、時には辛いことも乗り越えなければいけない技術的な壁もある。でも、自分が作っ た組込みソフトが組込み機器に搭載されお客さんに満足してもらえることが分かると、喜びや辛さを繰り返しながら、それらの壁を乗り越えることができる。だから、まずは何が楽しいのか、おもしろいのかを実感した上で、職業としての組込みソフトと組込みソフトエンジニアについて考えて欲しいと思う。
 

2008-09-16

組込みソフトってなに?(高校生の質問から)

組込みソフト開発におけるプロセス改善』の記事に匿名さんから次のようなコメントをもらった。
すみません、初めてのコメントです。実は私、高校生なんですが、
組込みソフトに興味を持っています。今、私たちの生活の中で(身近なところ)よく使われている組込みソフトってなんですか。答えてくれるならすごくうれしいです。お願いします。
そもそも、このブログを始めた最初の目的は読者との双方向コミュニケーションなので、いただいたお題に対して答えてきたいと思う。(=○○)の記述は大人向けの解説。

自分は組込みソフトを説明するときにこの絵を使うことが多い。

まずは、一番左を見てもらいたい。

そもそも、人間が生活していく上であると便利なものはたくさんある。便利なものがあってもオーダーメードで作っていたのでは多くの人に使ってもらうことができない。

だから、加工しやすい部材を使って同じ働きをするものをいくつも作ることを人間は考えた。加工しやすい部材とは古くは木材であっただろう。今でも木はさまざまなものに加工され商品となっている。

その後、電気で動く部品(トランジスタなど)が発明され、定電圧で動くさまざまな電子部品、機械部品が作られて流通するようになった。これらの電子部品、機械部品の中にはセンサーと呼ばれる外界の状態をセンシングする電子部品や、モーターのように物理的に物体を動かすことのできるアクチュエータと呼ばれる機械部品もある。

これらセンサーやアクチュエータは、総称してハードウェアと呼ばれる。ハードウェアは決められた入力に対して決められた動作をする。それぞれのハードウェアにはデータシートもしくはスペックシートという取扱説明書がついている。ハードウェア部品を利用するエンジニアはこの取扱説明書を見てある目的を達成するための機器を作ろうとする。

センサーを使うと外界の状況を機器に取り込むことができる。また、アクチュエータにある入力を与えると何らかの動作をさせることができる。

センサーとアクチュエータを組み合わせると、外界の状況に合わせて組込み機器に何らかの動作をさせることができそうだ。ところが、センサーからの出力をアクチュエータに直接つないで期待通りの動きをさせることができるかというとなかなかそうはいかない。

センサーからの出力を期待通りの動きになるように変換してからアクチュエータに入力してしなければいけない。

このハードウェアとハードウェアの間に入って信号を変換する役割を担うのが元祖組込みソフトウェアだ。(上図の左)

組込みソフトウェアはCPU(中央演算装置:Central Processing Unit)という特殊なハードウェアにプログラムで命令を与えることで、信号をいろいろな信号に変換することができる。プログラムは書き換えることが可能なので、いろいろな信号の変換を試してみて「これでいける」と思ったら完成したプログラムをROM(Read Only Memory)と呼ばれる電子部品に書きこんで組込み機器に搭載する。(=設計情報の転写)

ハードウェア部品群とハードウェアとハードウェアをつなぐソフトウェアが協力しあって組込み機器が完成する。ハードウェア部品もソフトウェアも同じものを大量に生産できるので工場で部品を組み上げて消費者に届けることができる。(=設計から生産へ)

上図の左で、ハードウェアとハードウェアの隙間を埋めるような感じでソフトウェアを描いているのはソフトウェアにこんな特長があるからだ。

もうひとつ別な見方をすると、ユーザーや市場が欲しいと思うものに対して、メーカーは何らかのキーデバイスを選択して「こんな素晴らしいハードウェアを使った商品なんですよ」と宣伝する。

例えば薄型テレビのキーデバイスはもちろん液晶パネルやプラズマのパネルだ。このキーデバイスが表の顔であり、この表の顔にユーザーは惹かれる。(=コアコンピタンスとしてのハードウェア)

しかし、大抵の場合キーデバイスだけでは組込み機器に目的の動作をさせることはできない。ユーザーやマーケットが欲している機能や性能を実現するためには、キーデバイスの能力を引き出すソフトウェアが必要になる。これが組込みソフトウェアだ。(=コアコンピタンスとしてのソフトウェア)

ユーザーやマーケットの要求が複雑でかつ多様になるにつれ、組込み機器における組込みソフトの割合は大きくなってきた。

最初の絵の左から右への変遷がその様子を表している。今ではソフトウェアの分量は20年前の100倍から1000倍以上になっており、ハードウェアとハードウェアの隙間を埋めるためだけの役割だけではなくなってきている。

ソフトウェア自体を再利用可能な部品にしてそれらを組み合わせることもしないと、ソフトウェア作りが間に合わなくなってきた。(=ソフトウェアプロダクトラインの必要性)

昔はハードウェアとハードウェアの間を埋めるだけの役割をソフトウェアが担っていたので、試作品に対して何らかの入力を与え出力をチェックしながらプログラムを直していって「これで完成」という時点でソフトウェアをフィックスすればよかったが、今ではそんなやり方をしていたらソフトウェアが固まるまで何年もかかってしまう。(=Verification & Validationの計画と実行)

商品を作って他社との競争に勝つためには開発のスピード、商品が提供する機能や性能及び品質が大事になる。(=マーケティングと要求品質定義、トレーサビリティ)

ハードウェアは故障することで製品の品質を悪化させるが、ハードウェア部品の故障を最小限にするための技術は長い年月をかけて確立してきたと言える。(=故障解析、歩留まり)

一方でソフトウェアはバグと言われる意図しない動作をするプログラムが入ったまま製品を出荷することで製品の品質を悪化させる。これが市場で見つかるとメーカーは製品を回収してプログラムを正しいものに入れ替えたりする。(=リコール)

ではバグをなくしてから製品を出荷すればよいのに・・・と思うだろう。それはそう簡単ではない。例えば、400字詰めの原稿用紙で100枚ぶんの作文を書いたとしよう。この4万字の作文の中で誤字脱字を一個もない状態にするにはどれくらいの時間がかかるだろうか。

100枚の原稿を何回も何回も見直したりしていると、ふとこ「この文章を直しておきたいなあ」と思うこともある。手書きの原稿ならいざ知らず、今はパソコンで簡単に直せるので余り気にせずに直してしまう。これを何回も何回も繰り返していると、いつの間にか直す前の文章と直した後の文章がどれがどれだか分からなくなりごちゃごちゃになってしまったりする。(=構成管理、変更管理の必要性)

組込みソフトでもこれと同じことが起こる。100万行にも膨れあがったプログラムを一点のミスもない状態にするのは至難の業であり、時間もかかるし、みんなの知恵を借りていろいろなくふうをしないといけない。(=ソフトウェア工学の利用)

最後に、ひとつ現代の組込みソフトエンジニアのやりがいというプラスの面を書いておこう。ハードウェアは決まった動きをする要素部品であり、ハードウェアエンジニアは目的を果たすためにどのハードウェアをどのように組み合わせればよいかを考え、その考えを製品で実現し大量生産できるようにする。(=組み合わせとすり合わせの組み合わせ技術)

ソフトウェアエンジニアはハードウェアの構成が決まれば、勝負の世界は自分が書くプログラムにゆだねられる。毎日のプログラミングの積み重ねが商品の善し悪しを決定する。(=組み合わせとすり合わせ技術のすり合わせ技術)

ある意味、自分の技術や努力の結果が商品の品質にストレートに影響するとも言える。ようするに腕のよいソフトウェアエンジニアが書いたプログラムが高い商品価値を生み出すということだ。技術的な成長を反映させやすい、また成果を実感しやすい仕事であるとも言えるだろう。

また、ハードウェアとソフトウェアが協力して合って組込み機器ができあがるため、特にアクチュエータが使われていると物理的な動きが見えてきて機器が完成して自分の思い通りに機器が動いたとき喜びが大きい。そして、自分が作ったソフトウェアが組込み機器に載って多くのお客さんに使ってもらえるという喜びもある。これらが組込みソフトの醍醐味である。(=組込みソフトエンジニアのモチベーションの源泉)

以上、「組込みソフトってなに?」の疑問の解消にこの記事が少しでも役に立てれば幸いである。
 

2008-09-01

ソフトウェア工場 vs アジャイル どっちが組込みに向いている?

先日、「Rational Team Concert にみるソフトウェア開発におけるチームコラボレーション支援について」というタイトルの講演(講師 日本アイ・ビー・エム株式会社ソフトウェア事業 Rational テクニカルセールス&サービス 藤井 智弘氏)を聴いた。

簡単に言うと、IBMによって開発された統合開発環境のEclipseを開発したチームが使用したチームコラボレーション支援ツールを一般向けに使えるように整備するというプロジェクトの話しだ。

オブジェクト指向におけるデザインパターンの有名な本の著者 GoF (Gang of Four) の一人、Erich Gamma もこのプロジェクトにスイスから参加している。

ものすごく表面的でやじうま的な見方をすると、Microsoft が提唱した Software Factories の開発手法とまったく正反対のアプローチを IBM Rational が打ち出した・・・ように感じた。

【Microsoft の Software Factories】

Software Factories の考え方は、開発から運用までのソフトウェア・ライフサイクルの効率化を開発者の側に立って推進する「Dynamic Systems Initiative(DSI)」がベースにあって、Microsoft の戦略に乗っかるのならば、Visual Studio Team System を使っていくことになる。

どちらかと言えばトップダウンのアプローチであり、ソフトウェアプロダクトライン、ドメインエンジニアリングの考え方も踏襲されていて、非常にシステマティックだと感じるし、これまでのソフトウェアエンジニアリングの延長線上にあるように見える。

ただひとつだけ引っかかるのは、優れたアーキテクトがプロジェクト内にいない状態でSoftware Factories のアプローチを進めていくには無理があって、どうしてもやりたい場合はVisual Studio Team System を使うことで Microsoft が用意したアーキテクチャやソフトウェア資産を使うように誘導されてしまうような気がする点である。

また、Visual Studio Team System を使いこなすだけでもソフトウェアエンジニアに相当量の学習が必要がある。ある程度システムの全体構成を構築できてしまえば、その後の開発が飛躍的に効率化できるようになるものの、そこに達するまでのハードルが高いという印象がある。

【IBM Rational の Team Concert】

一方、IBM Rational Team Concert を利用した Jazz プロジェクトは、「分散」「アジャイル」「コラボレーション」といったキーワードからわかるように、どちらかと言えばボトムアップのアプローチで巨大ソフトウェアシステムの開発を成功に導こうとしている。

これまで Agaile は大規模システムへの適用は困難と見られていたが、IBM Rational Team Concert はAgaile のアプローチの人力で提唱されていた部分をすべてシステムに取り込んで、数百人の規模の開発でも、Agail の効果を最大限に引き出すことを目的にしているようだ。

実際、Eclipse の開発で成功した実績があるのだから説得力がある。

Rational Team Concert では、日々の作業はワークアイテムを中心に回っていく。ワークアイテムは「反復する計画と関連するワークアイテムの管理」「ソース管理」「ビルド」「レポート」を含む。

ある拠点に置かれた大量なトランザクションを処理できる強力なサーバー(おそらくはIBMのサーバー)を中心にして、世界中のプログラマーが WEB上のポータルサイトを共有するような感じで、プロジェクトの状況をリアルタイムに見ることができる。各人の写真も掲載され、チャットもできるし、プロジェクトリーダーやコンポーネントの責任者からの指示も共有できる。

共通環境で管理されるのはユーザー間の情報のやりとりとソースファイルであって、分散された環境でそれぞれが持っている個々の開発環境はあまり制限せずに、それらの環境への URL によるリンクのみがツール上で飛び回ることになる。

一方で、プロジェクトの状況は自動的にグラフ化され、それらのグラフを眺めることで開発の進捗を確認したり、品質を推し量ったりできる。

ソース管理に関する機能は重要視されていて、リーダーは各チームが勝手にソースをチェックイン、チェックアウトできなくすることも可能。(チームのコンテキストにより運営ルールをダイナミックに変更できるというところが Rational Team Concert が単なるコミュニケーションツールではなく、コラボレーションツールであるという理由)

【組込みで使えそうか?】

「Rational Team Concert にみるソフトウェア開発におけるチームコラボレーション支援について」の講演を聴いていておもしろかったのは、ソフトウェアシステム開発におけるアーキテクチャの話しはほどんど出てこない点だ。アーキテクチャはコンポーネントアーキテクチャだとのこと。要するにソフトウェアのモジュールをコンポーネントに分けるところまでが重要なポイントで、後は繰り返しリリースを重ねる過程で最適化していくというような考え方に聞こえた。

大人数での Agile 開発での注意点は「コミッターボード」「ガバナンス」「チェックインの制限」ということで、ソフトウェア技術者に勝手気ままにやらせない上手なコントロールをツール上で提供することだということだった。

Rational Team Concert は表面的には出てこないが、プロジェクト内に必ず優秀なアーキテクト兼プロジェクトリーダー(複数人かもしれない)が必要になる。彼または彼らが上手にプログラマー達をコントロールしてソフトウェアシステム開発を成功に導く。表面的は完璧なボトムアップアプローチだ。(表には出てこないが、プロジェクトリーダーのリアルタイムの舵取りがプロジェクトの成功の鍵を握っているため、その意味ではトップダウンとも言えるかもしれない)

Iteration(反復)を数多く繰り返すことに重きが置かれているため、もともとポテンシャルの高い技術者が参加しているのなら、プログラマとしての成長も早いだろう。

ソフトウェアエンジニアリングの歴史から考えると正反対のアプローチのように見えるが、人間工学・組織行動学的には理にかなっているように見える。

IBM Rational Team Concert 的なアプローチがいいのか、Microsoft Software Factories 的なアプローチがいいのか・・・

組込みソフトの世界なら次のようなシナリオで適用したらうまくいくような気がするのだけれどどうだろうか?

(そのドメインの制約条件を含む知識を十分に持ち合わせた優秀なアーキテクトがプロジェクト内にいると仮定して)まず、IBM Rational Team Concert で徹底的に Iteration(反復)を繰り返し、完成度の高いプロトタイプモデルを作る。次に、できあがったプロトタイプモデルのアーキテクチャとドメインの要求がどのようにすり合わされたのかを分析し、今後同様の製品群を作成するためのプロセスモデル、ドメインモデル、アーキテクチャを Visual Studio Team System を使って設計し、可視化されたモデルをレビューし洗練させる。システムの品質が担保できるようにテスト計画を立て、すでに実施されているテスト結果を利用しながらシステム全体の Verification(検証)と Validation(妥当性確認)を確立する。

個人的な感想を言うと、IBM Rational Team Concert では、開発チームのパフォーマンスは最大になるように思うが、開発チームはシステムの品質をも担保できているようには見えない。(システム品質の説明責任を果たすことが難しい) 開発のパフォーマンスを最大限に上げることでシステム品質までも凌駕してしまおうというアプローチであり、根拠ははっきりしないが実効性はあるようにも感じる。(優秀なアーキテクト兼プロジェクトリーダーの存在が必須)

一方、 Visual Studio Team System では、プロセスモデル、ドメインモデル、アーキテクチャを構築するハードルが高く、それを実現できるプロジェクトは非常に少ない。道筋がつけられるまでを外部の優秀なアーキテクトにコンサルテーションしてもらうことは可能だが、効果が現れるまで時間がかかるし、効果が現れるまでに必要な時間や費用を組織内で確保するのが難しい。

でも、どちらのアプローチにも必要なのはドメインの知識に精通したアーキテクトの存在だ。ドメインの知識に精通したアーキテクトを育てるためには、Iteration(反復)をできるだけ回した方がいいから、IBM Rational Team Concert の方を先に取り入れた方がよいかもしれない。

【参考資料】
Rational Team Concert に関して Jazzプロジェクト
Eclips (Wikipedia)
Erich Gamma(Wikipedia)

Visual Sstudio Team System に関して(Microsoft)
Software Factories に関して(@it)