製造業の品質管理とソフトウェアのQA

## 1. はじめに
「[＜図解＞基本からよくわかる品質管理と品質改善のしくみ（西村仁 著）](https://www.njg.co.jp/book/9784534053206/)」（以下「品質管理と品質改善のしくみ」）を[テスターちゃん](https://testerchan.hatenadiary.com/)の作者・Matsu氏が[ポスト](https://twitter.com/mty_mno/status/1753951071171690582)されていて、自分も読んでみました。

基礎編（第1章～第3章）はQCD（品質、コスト、納期）をはじめエンジニアならドメイン問わず押さえておきたいトピックスが網羅されています。また、実践編（第4章～第7章）は業務を通して身につけた品質管理のスキルを体系立てて整理するのに役立つと思いました。生産技術や品質部門のエンジニアだけでなく彼らと一緒に仕事をする方が最初に読むのにも好適と思います。

## 2. ソフトウェアのQAにとって要注目なトピックス
ソフトウェア開発は製造工程を持たないため製造業のプラクティスはソフトウェア開発にも役立つものもあればそのまま持ち込むとおかしなことになるものもあります。ここでは「品質管理と品質改善のしくみ」からソフトウェアのQAにとって要注目なトピックスを3つ挙げます。

### 2.1 製造業の品質管理は製造品質の管理
> 実務では設計品質の管理を「製品開発」または「商品開発」、製造品質の管理を「品質管理」と呼んでいます。
>（品質管理と品質改善のしくみ p.40）

まず、製造業の品質管理は製造品質の管理であることを明示しているのが良いと思いました。例えば生産ラインで行っている「検査」は「判定基準に基づき合否を判定し、良品のみを次工程に流すこと（p.100）」です。検査のアウトプットは合格／不合格の二択、情報量でいえば1bitです。

一方、ソフトウェアのテストは検査以外にもさまざまな役割があります。

> 1.1.1 テスト目的
> 典型的なテスト目的は以下の通り。
> - 要件、ユーザーストーリー、設計、およびコードなどの作業成果物を評価する。
> - 故障を引き起こし、欠陥を発見する。
> - 求められるテスト対象のカバレッジを確保する。
> - ソフトウェア品質が不十分な場合のリスクレベルを下げる。
> - 仕様化した要件が満たされているかどうかを検証する。
> - テスト対象が契約、法律、規制の要件に適合していることを検証する。
> - ステークホルダーに根拠ある判断をしてもらうための情報を提供する。
> - テスト対象の品質に対する信頼を積み上げる。
> - テスト対象が完成し、ステークホルダーの期待通りに動作するかどうかの妥当性確認をする。
> 出典：[ISTQBテスト技術者資格制度Foundation Level シラバス 日本語版 Version 2023V4.0.J01](https://jstqb.jp/dl/JSTQB-SyllabusFoundation_VersionV40.J01.pdf)

一例を挙げると「ステークホルダーに根拠ある判断をしてもらうための情報」として「これはバグである」という1bitの情報にバグの内容（発生条件、発生手順、発生頻度、ワークアラウンド、バグを修正するリスク、修正しないリスクなど）を付加したものがあります。出荷判定に責任を負うステークホルダーはこういった情報を材料にしながら出荷判定をします。

「良品のみを次工程に流す」はハードウェア、ソフトウェアに共通する目標ですがソフトウェアにはソフトウェアに適したやり方があります。

### 2.2 品質管理部門は「しくみをつくる」
> 　品質管理の狙いは、**①外部不良を防ぎ、②そもそも不良をつくらないこと**です。そのための「**しくみをつくる**」のが品質管理部門です。すなわち、品質管理の司令塔の役割です。
> 　ここでいいたかったのは、品質管理メンバー自身が品質改善の実務を行うと、一朝一夕で解決できない問題に多くの時間が割かれてしまい、本来の「しくみづくり」に手が回らなくなってしまうということです。
![品質管理部門の役割](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/26b9a1f7-0439-aade-11be-0c0c224cf769.png)
>（品質管理と品質改善のしくみ pp.175-176）

「しくみづくり」に手が回らなくなるといえば「[Re-collection of embedded software qa in the last decade (西康晴 著）](https://www.slideshare.net/YasuharuNishi/recollection-of-embedded-system-qa-in-the-last-decade) 」p.50にダメなバランスのQA組織の例として「インプロセスQAに忙殺されてずっと手が打てないQA」が登場しますが、なぜダメなのかはQAが本来取り組むべき「しくみづくり」がおろそかになるからと自分は理解しています。これはハードウェア、ソフトウェア問わず一緒です。

> 　「しくみづくり」とは**生産ラインに検査と予防をいかに組み込むかを考え、その運用方法を決めること**です。（品質管理と品質改善のしくみ p.175）

ソフトウェア開発に生産ラインはないものの、例えば要件レビュー、仕様レビュー、コードレビュー、静的解析、単体テスト、結合テスト、システムテスト、受入テストなどバグを摘出するしくみがいくつもあります。そして市場にバグが流出するとは、これだけ多層化しているしくみを欠陥がすり抜けたということです。

ソフトウェアのQAとしては次のような取り組みがあります。
- これらのしくみを設計プロセスに組み込み、規程化、ガイドライン化する
- 流出したバグを分析し設計プロセスへフィードバックする
- 技術者教育を行って技術者のスキルアップを図る

### 2.3 治具化・自動化と品質改善
> 自動化する狙いは、生産能力の向上（増産）や、省力化による製造原価の低減などですが、品質面での自動化の効果を見ておきたいと思います。1つは「工法条件の安定性」、もう1つは「不良の自動検出」です。
>（品質管理と品質改善のしくみ p.210）

品質技術や生産技術をしくみ化、パッケージ化して設計現場へ提供するのも品質部門の役割です。ソフトウェア開発においてはCEDEC 2023でAIQVE ONE株式会社の松木氏が次のような話をされています。

> ゲームに限らず、QAというのは生産技術の一つです。モノづくりの成熟度の話になるのです。なので、そこで負けると全部負けてしまいます。ポジショントークではありますが、厳然たる事実です。
>
> モノづくりがうまくなれば、もっと早く作れる、もっといいものが作れることになるので、そういった道具を提供したいと思っています。
> 出典：[【CEDEC2023講演】「品質管理に、革命を。」の本当のところ。これから興るゲームQAの破壊的技術。汎用エージェントの取り組み](https://blog.aiqveone.co.jp/cedec2023_matsuki/)[^1]

工法条件の安定性は手作業で行っている操作を自動化することで操作のしかたに起因するばらつきのコントロールや操作ミスの撲滅、効率化が図れます。不良の自動検出は静的解析のCI/CDへの組み込みや、各種テストの自動化があります。

- [ArduinoとオシロスコープをExcelで制御して測定する(2) シャッタースピードの自動測定](https://qiita.com/pbjpkas/items/615a6eca0894c784e87a)
- [ストップウォッチを使う性能テストを実ステップ300行に満たない自動テストシステムで自動化する](https://qiita.com/pbjpkas/items/d525d7d19095d1e26452)
- [Lチカで始めるテスト自動化](https://techbookfest.org/product/5661312486998016)
- [電源をオンオフするテスト手順を自動化する](https://techbookfest.org/product/fFeUevUbL3NQrNbf5n4WEQ)

## 3. 初期流動管理
「品質管理と品質改善のしくみ」には登場しないものの、ソフトウェア開発に応用が利く製造業の手法の一つに初期流動管理があります。

量産開始直後は工程が安定しなかったり数量を多く流して初めて見つかる不具合が出ることがあり、いち早く問題を見つけて対策を行い問題の拡大を防止できるよう特別な管理体制を組みます。これを初期流動管理と呼び、日本品質管理学会によると製造業のみならずサービス業も含めて次のように定義しています。

> 8.5 初期流動管理
> 新製品・新サービスの生産・提供開始後あるいは新プロセス(4.1)及び／又は新システム(5.1)の導入後の一定期間，収集する品質情報の量・質を上げ，製品・サービス(2.1)に関する問題(7.3)を早期に顕在化させ，検出された問題(7.3)に対する応急対策(6.6)及び／又は再発防止(6.5)対策を迅速に行うための特別な組織的活動．
> 注記 製品・サービスの有効性の確認は，製品・サービスの所期目標の達成状況を確認することである．
> （出典：[品質管理用語 JSQC-Std 01-001:2023](https://jsqc.org/wp/wp-content/uploads/2023/10/JSQC-Std-00-001_yougo.pdf)）

ソフトウェア開発に応用すると「ソフトウェアを出荷してから一定期間、品質問題を迅速に解消するための特別な管理体制」となります。

## 4.おわりに
「品質管理と品質改善のしくみ」は製造業の品質管理の入門書としておすすめと思います。ソフトウェア開発に必ずしも応用できるとは限らないものの隣接分野の良い取り組みは参考になると思います。

[^1]: [【CEDEC2023】「品質管理に、革命を。」の本当のところ。これから興るゲームQAの破壊的技術、汎用エージェントの取り組み - YouTube](https://www.youtube.com/watch?v=QqRGNH3UEpk)