モノづくりエンジニアの問題解決
皆さんこんばんは。
本日は、組み込みソフトエンジニアである私が、日々の業務の中で取り入れている問題解決のアプローチについて書いていきたいと思います。
ちょっとニッチな業界にいる私ですが、なるべく誰でも分かるように書きますので、非日常を味わうためにも是非読んでいってください。
そもそも、組み込みソフトって何?
と思われた方が多いと思いますので、簡単に。
洗濯機や冷蔵庫など、電気を使って動作する機器には、入力した情報に対して、必要な動作を判断して、動きます。
例えば、洗濯機で言うと「設定した時間に洗濯を開始する」、「洗濯物の重さに合わせて水の量を決める」、冷蔵庫で言うと「スイッチで設定した冷却温度に、冷蔵庫内を冷やす」など、
この、必要な動作を判断するには、制御プログラムというソフトウェアが必要です。
ソフトウェアの中でも、特に家電製品や産業機器など、独立して動く電子機器に搭載するものを、組み込みソフトウェアといいます。
まさに、電子機器の中に組み込む必要があるソフトウェア。ということです。
私は産業機器メーカーのエンジニアとして働いており、商品の開発を手掛けております。
商品開発プロセスには、大きく分けて、設計と評価の二つがあります。
現在はちょうどその境目で、設計通りに試作品が動くかどうかを確認しているフェーズになります。
ただ、設計工程で想定していた通りにはなかなか動いてくれません。。
またこの開発は数十年前にリリースした商品のリニューアルなので、
当時の設計資料もなく、設計者もいない。
つまり、部分的な理解で設計を進める必要がありました(ほとんどの商品開発がこのような部分理解の中で進める必要がありますが)。
自身の理解を超えた領域がある中で、不具合の原因を探ることは困難を極めます。
このような状況の中で、私が実際に使った問題解決のアプローチについて、二つ紹介します。
1.現象から原因を想定する
例えば、LEDスイッチをONしても、LEDが点灯しないといった不具合が発生したとします。
まず、①今起きている現象を把握するために、情報を集めます。
どのような条件でその不具合が発生するのか、ほかのスイッチの動作は正常なのか、ほかの類似商品の動作は同じなのか。
すると、この現状が起きるために必要となる条件が絞り込めてきます。
次に、②この条件下で現象が発生するには、どのような原因が想定されるかを書き出していきます。
例えば、CPUのポートの設定ができていなければ、LEDはつかないなあ。
とか、異常モードに入っていたらLEDはつかないな。
とかです。
①で不具合の発生条件をしっかりと絞り込めていれば、②の作業である程度当たりをつけて原因の想定ができます。
2.原因の切り分けをする
例えば、試作品に入力した温度センサの値が、表示されないという現象が起きたとします。
まず最初に、①不具合の原因が、ハードウェア起因なのか、ソフトウェア起因なのかを切り分けます。
温度センサからのデータが、CPUまで正常に送られているのかを、オシロスコープ(電気的な信号を可視化する測定機器)で確認します。
正常に送られているのであればソフトウェア起因、そうでなければハードウェア起因であることが分かります。
ソフトウェア起因であったとすると、次は、
②受け取ったデータがおかしな値なのか、それともそのあとのデータの処理がうまくいっていないのかを切り分けます。
センサの生の入力データを、理想値と比較したり、既存商品とのデータの比較します。
生データが正しければ、その後のデータの処理に不具合があることが分かります。
このように、現象を見て、ひとつひとつ原因の切り分けを行います。
3.アプローチの使い分け
1.現象から原因を想定する
2.原因の切り分けをする
二つの問題解決アプローチについて紹介しました。
それぞれメリットとデメリットがあります。
「1.現象から原因を想定する」では、ある程度の予測の精度が求められます。
予測が当たった場合は、原因の特定まで最短でたどり着ける一方で、予測が外れてしまえば、また原因の仮説を立てることろからやり直す必要があり、時間がかかります。
「2.原因の切り分けをする」は、時間はかかりますが、1に比べてより確実性の高いやり方です。
現象を正しくとらえて、整理しながら一つ一つ切り分けをしていけば、必ず原因にたどり着けます。
原因がある程度予測できそうな場合は1を、全く原因が分からない場合は2のアプローチをとると良いです。
4.まとめ
いかがでしたか。
組み込みソフトエンジニアという、一見ニッチで小難しそうな職業にも、
皆さんの日々の業務と似通ったところがあったのではないでしょうか。
業界、職種によらず、「なんでこんなことが起きるんや!!」
と絶望する機会は、少なくないと思います。
そんな場面に出くわしたときに、大事なのは、
冷静に状況を分析して、素早く着実に原因にたどり着ける能力だと思います。
私自身、2年前にハードウェアエンジニアから、今のソフトウェアエンジニアに転向したばかりで、まだまだ未熟者です。
一つ一つ経験を積み、目の前の問題に立ち向かっていくスキルと勇気を持ち、早く一人前の技術者になれるように精進したいと思います。
業界は違えど、是非皆さんも、一緒に頑張っていきましょう。