2015年12月23日水曜日

品質のための「ひと工夫」

SQuBOKアトベントカレンダー

冬至が過ぎ、寒さも一段と深まってまいりましたがいかがお過ごしでしょうか。私はすっかり出不精になり、家でナノブロックを作ったり、それを年賀状にしたりしてすごしています。

さて、Advent Carenderということで、今回は品質のための「ひと工夫」を書いてみたいと思います。これらの工夫は私が模索中のものではありますが、自分の整理のためにも書いてみます。「ひと工夫」なので、特定の領域に限らず、様々な場面で使えると思います。

それではさっそく1つ1つ見ていきます。

1.全体から入る

これは、以前に「SQuBOKと要求について」で書いた、なるべく外側から分析するという考え方にも通じる話です。ソフトウェアの開発をするとき、ERPパッケージのようなものでもない限り、たいていはある特定の部門の仕事を支援をするソフトウェアを開発します。そして、その部門の業務分析を始めるのですが、特定の部門だけを分析する前に、まずその会社全体の業務を分析しておいた方が良いです。

というのも、その部門の仕事というのは、会社全体の事業の流れの中に位置づけられているからです。もちろん、部門の仕事から分析を始めても他の組織とのインターフェースは抽出できるのですが、その部門の目線に限定されてしまいます。このため他の部門が必要としている仕事のサイクル、情報の全体像が分からず思わぬ漏れを生んでしまうことになりかねません。

これは、ソフトウェアの構成などを考えるときにも同じことが言えます。たとえば、Webシステムを動作させるためのクライアントWebブラウザのターゲートバージョンを定める時には、そのシステムの周辺だけしか考えていないと、その会社全体としての計画と不整合を起こすことがあります。このため、会社全体の計画を入手、整理しておく必要があります。

2.作業の凝集度をあげる

作業の凝集度をあげることで、1つ1つの作業の責務が単一になる、もしくは少なくなります。これを意識しておくと、他人がレビューするときにどこに間違いがあるのかを検出しやすくなります。

たとえば、ある機能の変更に対するソフトウェア全体への影響調査をする場合、いきなりソースコードを読み始め、その結果を資料に取りまとてしまうと、その調査結果の資料だけを見ても、調査対象の絞り込み方は十分なのか、調査の方法は適切なのかが見えにくくなってしまいます。

もっと凝集度をあげるためには、作業を分離していきます。たとえば、

・影響調査の目的を明らかにする
・影響調査の方法を明らかにする
・対象物をリストアップする
・対象物を絞り込む
・影響調査を実施する
・結果をまとめる

のように分離し、それぞれに成果物を定めます。また、対象物のリストアップでは、先の「全体から入る」に習い、すべての構成物をリストアップしておく必要があります。なぜなら、この時点で漏れが出ることが多いのです。たとえば、sourceというフォルダ以下すべてのファイルを抽出したから十分だろうと考えてしまうことがあります。しかし、機能変更による影響調査は、設定ファイルやデータベースオブジェクト、連携する他のソフトェアなどにも影響が及ぶ場合があります。このため、どのような考え方で対象物を絞り込んだのか、を確認するためにも、絞り込みの過程を明らかにして他の人の目で確認してもらう必要があります。そしてそのためには、まず作業自体が適切に分割されている必要があります。

3.アルゴリズムを明らかにする

アルゴリズムというと適切ではないかもしれませんが、たいていの作業は1つ1つの作業をこなすだけでは十分ではなく、複数の作業を組み合わせてようやく品質を確保できます。たとえば、設計書が完璧で、実装が完璧なら、テストは不要かもしれませんが、これは現実的ではないのでテストをします。設計、実装、テストという一連の流れはあたりまえのように浸透しているので、あたりまえのように使っていますが、これは一種のアルゴリズムのようなものだと私は考えています。

レビューを例にとって考えてみます。レビューはSQuBOKでは「3.8 レビューの技法」で紹介されているように幾つかの手法がありますが、これらの手法を組み合わせて使うと有効に機能します。たとえば、ピアレビューで基本的な問題を検出しておき、インスペクションでは重要な問題に集中するといったように検出のシナリオを設定しておき、系統的に欠陥を検出します。レビューに限らず、品質確保のための活動はコーディング規約や静的解析ツール、テストなどの手法を組み合わせます。これらは、それぞれ検出できる欠陥の領域が異なるし、適切な順番で組み合わせないと、有効に機能しません。

この考え方は、1つ1つの仕事についても有効です。たとえば文書の仕上がりをよくし
たいという場合、
・テンプレートを使う
・チェックリストを使う
・校正ツールでチェックする
・自己チェックをする
・他者チェックをする
・問題の検出率を確認し、検出率が増加傾向ならチェックを繰り返す。十分に減少して
いたら完了とする。
といった手法の組み合わせを用いることで品質を上げることができます。

このように個々の手法を組み合わせて全体として適切に機能させるための方針をアルゴリズム、と呼んでみました。一般的には「戦略」という言葉を使うのだと思いますが、なんとなく意図からそれてしまいそうなので表現を変えました。

最後に

ということで、品質確保のための「ひと工夫」を書いてみました。SQuBOK Advenet
Carenderとしての私の記事は最後になるので、本当は「同値分割」について書こうと
思っていたのですが、Glenford J. Myersの「ソフトウェア・テストの技法」が見つから
ず、これでは書けないと諦めました。周りでは妻が掃除を始めており、そろそろ合流し
ないと叱られそうです。

それではみなさん、良いクリスマス&お年を!

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。