🚗

SESで車載組み込みの世界に飛び込んだ人間の冒険記

2024/03/31に公開

はじめに

この記事はSESで車載組み込みの世界で働いたぼくの5年分のまとめと感想文です。
常日頃からウェブ上には車載組み込みエンジニアの世界の情報が少ないと感じていたので、ぼくの拙文でも参考になるかなと思いこの記事を書いています。
ぼくの人生の振り返りも兼ねているため、この記事は数年後にまた更新する予定です。

ぼくについて

・地方Fラン文系卒
・28才
・車載組み込み歴5年
・客先常駐SE
・年収300万くらい

この時点で察せられると思いますが、ぼくは優秀なエンジニアではないので、上流工程に関わる話や、技術についての深い話はできません。また、具体的な会社などの名前はもちろん出せません。内容も事実から少し変えています。なんなら下流工程もふわっとしています。これから話すのは、低レベルで、優秀ではないエンジニアが見た、ふわっとした車載組み込み世界についてです。車載組み込みの高度な技術の話とか期待していたら、ゴメンね。

素人からみた車載組み込みの世界

初めて技術者という人種と出会う

ぼくがこの世界に来たきっかけは、学生時代に就職活動をサボり、就職先がないまま卒業し、給料をもらいながら職業訓練を受けることができる会社に入社するしかない状況になったことでした。
その後、その会社の親切なひとから、地方の小さなSES企業を紹介され、ぼくのエンジニアとしての人生をスタートさせることになりました。

入社後、特に教育などは受けず、SIerの2次請け、車を作る会社から見たら4次請けくらいの会社の人のBP(ビジネスパートナー)さんとしてアサインされました。
ぼくの会社の上長にあたる人は二人いました。二人とも優秀なひとで、人間性にも優れていて、今でも初めて仕事する相手がこの二人でよかったと思っています。

ぼくがはじめて任された仕事は、C言語のソースコードにprintfでデバッグメッセージを入れるという作業でした。当時のぼくはC言語がわからないので、まず、Google検索でprintfでのログの出し方について、検索しました。ぼくの上長二人と、現場を任されていた2次請けの会社のリーダーさんは、Google検索するぼくを、後ろから神妙な顔で見つめていた気がしますが、あまり思い出したくありません。

ぼく専用の仕事

それからいろんなことがあって、上長に許可を取らずに残業して怒られたり、偉い人に不用意な発言をして怒られたり、SIerのひとに「ぼくさん、今日は上長さんが休みのようですので、現在の進捗について、聞きたいことがあります。難しいことは聞きませんので、今から行う質問には、はい、いいえどちらかしか答えなくていいですよ」と優しく言われたり、エクセルにスクリーンショットを貼り付けたり、作ったことのない設計資料の更新作業をしながら、なんとか、生き延びていました。

そうして1年程経ち、初めてのぼく専用の仕事が与えられました。それは、クレーム票と言われるディーラからのフィードバックが書かれたpdfファイルを読み、ECU(Electronic Control Unit)のログを解析し、どこのモジュールが原因か調べて、担当者さんにチケットを渡す仕事でした。
クレーム票は日本語、英語、中国語など色々ありました。

まず、クレーム票なのですが、英語はともかく、中国語は、漢字の塊としか脳が捉えられず、翻訳ツールももちろん使用禁止なので、悪戦苦闘しました。が、あとから中国人さんが、翻訳役として、ぼくのサポートに入ってくれたので、その人が和訳してくれました。ありがとう中国人さん。

次に、ログについてなのですが、これが最初、読めませんでした。ログには、モジュール名、関数名、あと細かいパラメータが残されていました。しかし、モジュール名はABBとかBBCCとかCCCDDとか(架空のモジュール名です)、何の略称かわかりませんでした。ぼくは略称について、SIerの人に質問しました。

そうして、半年くらいで、モジュール略称一覧と、関数一覧の資料がもらえることになり、なんとか仕事がこなせるようになりました。

ぼく専用の仕事の終焉と別れ

どうやら、SIerさんと2次請けの会社さんが喧嘩をしたそうです。ぼく専用の仕事は別の会社の外国人部隊さんが担当するようになりました。ぼくは、作業のマニュアルや手順書、各モジュール開発担当者さんのお名前と会社をまとめた引き継ぎ資料を作り、それを外国人部隊さんに見せ、説明を4,5回した後、そのプロジェクトを去りました。

ぼくが、専用の仕事に就いたあとも、ふたりの上長さんはずっと、近くにいました。しかし、SIerさんと2次請けの会社さんが喧嘩をした影響で、ふたりは、別の会社の仕事にアサインされることになりました。ぼくはひとりぼっちになりました。

初めて技術者っぽい仕事に出会う

そうしてひとりぼっちになったぼくは、若干小太りだけど笑顔がチャーミングなSIerのPMさんと、2次請けの会社さんと、ぼくと、翻訳のお手伝いをしてくれていた中国人さんと、年配の穏やかなVim使いさん(後にぼくが勝手に師匠とする人。フリーランスの方だったのかな?)で構成されるプロジェクトにアサインされました。

このプロジェクトは、DCM(Data Communication Module)の開発で、過去機種を流用し、最先端のマイコンとSoC上で過去同等の機能を実現することを目的としていました。

この開発はアジャイル方式、ソースコードはgitでドキュメントはSVN(Subversion)で管理、毎日1時間のMTG(ミーティング)で進捗共有という方式でした。

初めてのコーディング、テスト、設計

このプロジェクトでぼくに与えられた最初のオペレーションは、アプリ層の単体テストでした。なぜならテスト項目書の誤記程度の修正は行ったことがあったからです。

基本的に車載組み込みではドライバ層、ミドル層、アプリ層の3層のレイヤーで作業を分担して縦同士でAPIを叩いたりしてやり取りするらしいです。ゴメンなさいここからどんどん話がふわっとしていきます。

テストを行うにはまず、テスト設計書を作らなければなりません。テスト項目書はエクセルファイルで、表紙、本体、レビュー議事録の3つのファイルで構成されていました。
ぼくは、テスト設計書を作りました。何もわからないので過去機種にある、似た機能のテスト項目書をベースに、2次請けの会社さんのコードを読みながら作りました。

レビュアーはVim使いさんです。Vim使いさんはすべてを察していたので、レビュー議事録に適切な指摘を記載し、僕にドライバーとスタブという概念や、車載では基本的に命令網羅(C0)、条件網羅(C1)、条件網羅(C2)を全て満たさないとならないと教えてくれました。

その後、ぼくはコーディング(MISRA準拠)と詳細設計(フローチャート、変数や定数の命名、値域のリストの作成)、基本設計(IF仕様、モジュール関係図、状態遷移図、状態遷移表、シーケンス図の作成)などにも徐々に取り組むようになりました。ココらへんはきっと他の組み込み開発と変わらないと思うのとぼくが説明するのが大変なので省略です。

実は、他にもシステム設計書というものがあったのですが、このプロジェクトでは、基本設計書から抜き出したIF仕様書と、モジュール関係図を更に抽象化させたブロック図を貼り付けて終わりで文章が一切記載されない謎の資料でした。

テスト工程以降も、基本的にレビュアーはVim使いさんでした。彼はレビューを通して、ぼくのエンジニアとしての基礎を教えてくれました。
あと、彼がコードレビューを行う際、CygwinまたはMsys2上で、プラグインなどを一切追加していない素のVimを颯爽と扱う姿を見て、私は人生のテキストエディタをVimにすることを決めました。ありがとう師匠。

結合テスト、システムテスト

おそらく車載特有のクセのある工程だと思ったので別途分けました。世間一般ではこの2つは別物として扱われると思うのですが、ぼくが関わったプロジェクトでは、基本的にシステムテスト内に結合テストの観点を含ませて、実施し工数を削減する。という手法をとっていました。

結合試験で確認したいのはモジュールとモジュールのIF部分です。そしてシステムテストで確認したいのは、ユーザーの視点で動作(ちゃんと仕様通りに動くか)です。IFとなる部分にログを埋め込んでおいて、そのままシステムテストを行うことで、結合試験の多くを同時に消化することが可能になります。

さて、本命のシステムテストでは、実機の改造(線だし)が必要になります。
このとき、ハードチームに改造を依頼するのですが、テスト設計の時点で、改造方針をしっかり決めていないと悲惨なことになります。いらない線まみれになり最終的にはショートして壊れた基盤もありました。(ゴメンなさい、ぼくがやりました。)

一般的な民生品では、優れたデバッガを使用して実機を動作させながらデバッグができたりするらしいですが、ぼくのエンジニア人生にそれは、未だに登場しません。ぼくは上記で書いたような方法で、大量のログを埋め込み、オシロスコープを使用し波形を確認し、その結果をスクリーンショットで撮影したものをzipで固めてエビデンスとして扱います。(ログもスクリーンショットだったりします。エンドのお客さんはログ解析ツールが使えないのでエクセルに貼った画像を見たいのです。)

ぼくが担当した、作業はここまでです。ぼく自身は楽しくやらせて頂いてたのですが、ドライバ層周りとミドル層周りを担当している方々は深夜までずっとマイコンのマニュアルを眺めていました。ぼくが申し訳なさそうにしていると〇〇くん今日のレビューは良かったよとお声がけしてくれたり、いい人ばかりでした。

そしてプロジェクト崩壊いまのぼく

この新しいマイコンとSoCってさ、前のと比べて性能大して変わらくね?リスクとってレガシーから変える必要ある?

楽しく開発して1年ちょっと、突如この言葉によりプロジェクトは終わりを迎えました。DCM(Data Communication Module)ってボディ系やモータ系とかと比べてもあまり性能いらないらしいですね。この記事もこのオチありきでつくました。

最後のぼくたちの仕事は流用元のダイエットでした。ぼくはデータフラッシュやコードフラッシュなどの領域には詳しくなかったので、デットコードの削除と削除後コードの静的解析の対応を主に担当しました。

今のおしごと

まだ車載をやっています。今度はガッツリ下周りの移植で、ドライバ層などの構築を担当することになっています。ずっとマイコンのマニュアルとにらめっこしています。5000ページ以上あるpdfが複数あります。デカすぎます。

みんなたのしかったよ

以上が私の5年間の車載組み込み開発の冒険記でした。こんなオチになりましたがペーペーの素人がいまやZennに記事を書いてみるかなくらいの園児ニアになりました。
上長には怒られ、暴言まみれクレーム票を読みまくり、レビューでボロクソ指摘頂きましたが、不思議とそこまで辛いと思ったことはありませんでした。たぶん出会う人みんながいい人だったからです。なのでこれからのぼくは、そんないい人たちに報える人間にならなければなりません。ここまで見てくれてありがとう。

Discussion