/note/tech

Raspberry Piは本当に壊れやすいのか

あと「なにもないかもしれないのに、なんでそんなに繰り返しテストするの?」という指摘がたまにあります。

これはソフトウェアテストとハードウェアテストの根本的な考え方の違いに起因するのかなと思っています。

ソフトウェアテストでは主に網羅的な機能チェックつまりカバレッジが重視される傾向にあると思います。わかりやすく言えば、デプロイ前に網羅的に1回テストパスすれば良い、というのがソフトウェアテスト的な考え方です。

一方で、ハードウェアはわずかな環境によって結果が違ってきたりするので、例えば「USBメモリが10回に1回くらい認識されないんだよね」みたいなことが出てきます。USBメモリならユーザが目の前いるので抜き差ししてもらえば良いですが、これがどこかに組み込まれてしかも1000台出荷して毎日100台が不具合を起こすシステムと聞くとだいぶまずいですよね。

この故障率が10回に1回なのか、100回に1回なのか、10,000回に1回なのかがわからないというのがハードウェアテストの考え方のベースにあります。つまり、ハードウェアテストとは故障率を明らかにすることだといえます。

この辺の考え方の違いは興味深い。

ソフトウェア開発の歴史はハードウェアを抽象化する試みの歴史とも言え、現在ではハードウェアはスペック以外はほぼ意識されない存在になっている。

ソフトウェアエンジニアの立場では、ハードウェアの個体差に起因する問題は無視できるレベルの誤差、あるいは問題が生じたらパーツ交換で回復するものという感覚になっている(それ自体は進歩の方向性として正しい)。

しかし、ハードウェア込みでプロダクトを提供する組込み開発ではこのような思考をするのだなと。