品質について その1

# 前書
先日、派遣先の会社で **QMS 勉強会** というのがありました。
勉強会、と言っても報告会＋初参加な人への簡単な説明会みたいなもんでしたが・・・
ここで `QMS` ＝ `Quality Management System 品質管理システム` という言葉を割と初めて意識しました。

そこで出てきた `QCD` という単語
調べてみると、`Quality` `Cost` `Delivery` らしい
これは果たして、どのようにソフトウェア品質管理に役立つのか？
そういえば、そもそもソフトウェアの品質なんかについては、ちゃんと知らないな・・・

ということで、調査してみました。
とりあえず今回は自分の中途半端な理解・考えを垂れ流すことにします。

## 予定
今回は、まず品質管理の歴史～ソフトウェア品質に至らないところまでまとめます。

## 参考文献
* [QC数学のはなし―品質管理を支える統計の初歩](http://www.amazon.co.jp/dp/4817180161/)
* その他、これまでなんとなくググったりして得てきた知識 (怪し目)

# 品質管理(Quality Control)
## 品質とは～大量生産と互換性～
* 工業製品の大量生産
* それを支える部品の大量生産
* 細かい部品の互換性および誤差 → 品質

そもそもここでいう管理と対象となるような『品質』の発祥は、大量生産を行う製造業の現場だそうです。
製品の設計図から、それぞれの部品の寸法が定められ、部品毎に発注されると
その部品の生産において、どの個体も対応する部品の個体と設計通り組み合うように、適切なサイズに収まっていなければなりません。
現実世界の話ですので、全く同じように作ってもそれぞれの部品に差異が出ます。

そこで **『要求から±どれだけの範囲の差異(誤差)を受け入れるか』** を決め、それ以外を不良品と扱います。
これで、良品のみを集めれば、確実に部品同士で組み合わせることができ、めでたく設計通りの製品が完成します。

## 統計的アプローチ
良品・不良品のみを分けるだけでは、まだ『品質』を扱ったことにはなりません。

このような現場では、検査 により、同じロット(生産単位) ごとに品質を **統計的** に決定します。

* 全数検査 or 抜き取り(サンプリング)検査
* サンプル全体の代表値・偏差(ばらつき) など、データを統計的に扱う
* みんな大好き正規分布
* サンプリングする件数(割合)の正当性 (多すぎるとムダ、少なすぎると信頼性低下)

こうやって得られた品質(ロットの不良品率) から
低品質であれば手間を増やして品質の向上、過剰品質であればコストダウンへ、など選択できます。
さらにこの品質を観察し続けることで『品質管理』へ繋がります。
このように品質とコストの **トレードオフ**、**改善** といったおなじみの概念が登場します。

※1 QC 数学、詳しくは参考文献をどうぞ
※2 ここらへんの話は、私が単純化して理解している可能性が高いです

## 品質について補足
今回はわかりやすい『サイズの互換性』＝品質としましたが
それ以外でも耐久性や安全性など、標本が要求水準を満たすか、というアプローチで同様の品質管理へ持ち込めます。


# 全社品質管理(Total Quality Control)
## 製造業以外へのヨコ展開
製造の現場での QC が成功したため、これを会社全部門へ導入したのが『全社品質管理』 `TQC` らしいです。

ここらへん軽くだけ調べたのですが、『品質』の定義についてよくわかっていません。
製造と同じ『部品』を扱っていても、流通や販売での『品質』は異なるでしょうし
サービス部門での『品質』はまったく別の対象を扱っているでしょう。

ここでは、何らかの形で『品質』を定義しデータ(数値)化し、それをどのようにコントローするかの『手法』等にフォーカスされたようです。

## 手法
ここも軽く調べただけですので、今のところは用語列挙のみに留めます

* プロセスの改善
    * みんな大好き CAPD (PDCA) など
    * 前述の QC の現場なので、観測した『品質』を向上・改善させるためのプロセスサイクル
* QC 7つ道具
    * 定義された『品質』をデータとして収集し、それを分析・改善に役立てるための手法・ツール
* マニュアル化の導入
    * 人間が行う作業の『品質』を高めるために導入された改善の例、としてよく挙げられていた
    * この場合の『品質』の定義はなんだろう…
* 顧客満足度
    * サービス業における『品質』定義の例。アンケートなどで収集するらしい

## 問題点？
大量生産における『品質』(例：部品のサイズの互換性) のように、単純にいかない可能性があります

* 要求水準をみたすかどうかの判定
* そもそもの要求、水準の決定

適切にこれらを定義できれば、おそらく QC の手法をシンプルに発揮できるのでしょう…が
サービス業やマーケティング分野とか、そんな一筋縄ではいってないようですね(素人感)


# 品質管理 (Quality Managemtn System)
https://www.jisc.go.jp/mss/qms-9000.html

正直、これはさっぱりわかりません。
なんだか時代が進んで、現場主体の TQC → 経営層主体の QMS となったとかなんとか…

割と幅広く扱っているようですので、現時点で私が見えている範囲での解釈を書きたいように書きます。


## トップダウン
* これまでの QC は、現場発・プロダクト重視の、ボトムアップなアプローチ
* QMS は経営層が行う、トップダウンの品質管理


## 品質の定義
なんとなくですが、プロダクトの品質だけではなく、マネジメントとしてプロジェクトの品質を管理する～という考えに見えます。

* プロダクトの品質、改善 (QC での品質・コストのトレードオフ)
* プロセスの品質、改善 (TQC 同様)

これらに加え、さらに 納期(Delivery) を含めた3つのトレードオフとしてプロジェクトを管理
組織全体として、プロジェクトリーダーの役割にプロジェクト全体の品質向上を役目と課して
経営層は各プロジェクトや部門の品質を向上させるための委員会(人材)や経費など、リソースを投入して会社全体の成長を目指す…といったモデルがあるようです。

## なぜ良くわかっていない QMS に言及？

自分はソフトウェアの品質、というとソースコードやソフトウェアそのものの品質など
プロダクトの品質ばかり着目していたのですが
QMS のアプローチから透けて見えた、全体的なプロジェクトの品質も重要なのではないか？
となんとなく気づいたからです。

文書化してみて分かったのですが、やっぱり QMS についてまださっぱり知りません
これは今後の TODO にしておきます…


# QMS の例
どこぞの IT 会社で聞いてきた例です。
これを噛み砕いていみようと思います

## 品質の指標
品質としてあげられていた項目です。

* 業務・開発プロセス
* 顧客満足度
* インシデント発生数

## 品質の詳細
* 業務・プロセスの改善
    * QCD
        * ここの Q について、具体的な指標は完全に不明です
        * CD についても、「目的を達成したか」としか記述がありません
    * 人材育成
        * 「平社員が上流工程に○人携わった』のような良く分からない指標
    * プロジェクト完了時の反省
        * チームリーダーから役員まで含めた、レビュー大会があるらしいです。
* 顧客満足度
    * なんかアンケート取るらしいです
    * 「納品後のアンケートで、『満足した』が○%以上」 とかいう雑な指標…
    * その他、お客様の声はプロジェクト完了後レビューに含められる模様
* インシデント
    * 重大インシデント○件、軽微インシデント△件、と言った指標
    * これの増減を観察して、品質管理といえるのだろうか…？


## 感想
全体的に、『品質』(要求水準) の定義がイマイチな感じがします。
果たして、大量にデータを収集できないものを QC の手法で扱って意味があるのか…？

## QCD について
特に QCD は気になりました。(もともとこの単語が気になったので、品質について調べだした)

この QCD はソフトウェアそのものではなく、ソフトウェア開発プロジェクトの品質管理の指標として扱われています。

察しの良い方は気づいていると思いますが
これ、アジャイルサムライで出てた「トレードオフ・スライダー」に似ているんです。が…

| アジャイル・サムライ | 品質管理 |
|:-----------|:---------|
| スコープ   |          |
| 予算       | Cost     |
| 時間       | Delivery |
| 品質       | Quality  |

スコープが無い！！

これは、この会社での開発手法がウォーターフォール型前提だから？
もともと QCD 自体が、製造業で良く使われる指標だから？
それとも、『トレードオフスライダー』自体を、品質の水準捉えて比較に用いるのが間違っている？

# ソフトウェアの品質について
ここまでの内容を踏まえて、ソフトウェアや開発プロジェクトの品質について
再考してみたいと思っています。
また日とエントリを改めて…

# いったんまとめ
| 略称 | 名称 | 対象 | 実施場所 | 責任 |
|:----|:----|:----|:----|:----|
| QC | Quality Control | プロダクトの品質 | 開発現場 | 開発現場 |
| TQC | Total Quality Control | 改善プロセス | 全社 (各現場) | 各現場 |
| QMS | Quality Management System | マネジメント | トップ～現場 | トップ(経営層) |

* QC の上2つは、主に品質・改善という現場のアプローチに焦点が、<br>
  QMS システムとしてどう運用していくかに焦点が当てられているように勝手に感じます
* 『責任』というのは QMS 導入に至る歴史的経緯で、TQC では各現場に責任が押し付けられてしまっていたので<br>
  QMS として ISO 化され、経営サイドの責任にしようとかなんとか… (よくわかっていない)


# 反省
* こういう内容はブログの方がよい？
    * そういえばブログ持ってない・・・
* TODO
    * QMS についてもう少し調べる
    * ソフトウェアの品質について
    * ソフトウェア開発プロジェクトの品質について