「ソフトウェアレビューの基本スキルを3つ教えてください」と聞かれたら
静岡大学 情報学部
森崎 修司
ソフトウェアレビューは非常に浸透してきています。しかし、一方で形骸化してしまったり効果が上がらなかったりという声を聞くことが多いのも事実です。私もプロジェクトマネージャとして開発に携わっていた時期があり、レビューとは具体的に何をやればよいかという質問を開発メンバに聞いたことがあります。メンバからは「早めに(プログラムを動かさずに)不具合を発見すること」という答えが返ってくることが多かったことを記憶しています。
真の目的は別にあると認識していながらも、レビュー報告書の「実施日」を埋めるための儀式で、ざっとドキュメントやソースコードを見回して、目についた欠陥を指摘すると考えられていることも少なくありません。品質トラブルが起きた際に今後の対策として「レビューを強化する」という項目が挙げられることは多いのですが具体的にレビューをどのように強化するかを考えられていることはそれほど多くないでしょう。
では、新人や新しく組織やプロジェクトに加わったメンバに(つまりご自身が指導的立場に立たなければならないという前提で)、「レビューの基本スキルを教えてください」と質問されたら何を挙げますか?4つ以上挙がる場合には、そのうち大事なもの上位3つを挙げてほしいと言われたらどうされますか?
ご自身の組織やプロジェクトに合わせて正解は変わります。参考として私の回答を以下に記します。もちろん、回答の1パターンにすぎませんので、全ての方にとって正しいとは限りません。
1. レビューでどのような欠陥を発見することが望まれるかを理解・合意できるスキル
やみくもに誤りだけを検出、指摘するだけでは、いくら時間があっても足りない場合が多いでしょう。まず、どのような欠陥を検出、指摘することがレビューの効率化につながるのかがプロジェクトやレビューアの間で合意できているかに気づく必要があります。合意できている場合にはそれに沿って欠陥を検出するスキルが必要になります。同時に、知識不足等により十分な欠陥検出ができないときには、自身ができる範囲内ではどのような欠陥が検出できるかを想像できる必要があります。また、レビューの実施コストが得られる品質向上に見合うものであるかどうかを意識できると更に望ましいでしょう。
2. 欠陥を伝えるスキル
他の人ではなかなか指摘できない深刻で検出の価値が高い欠陥を見つけたとしても、その伝え方が適切でなければ修正されなかったり軋轢を生んでしまったりする場合があります。相手の事情を配慮し、上手に伝えるスキルも重要です。上述1のスキルにも関連しますが、プロジェクトメンバにとって最も有益な指摘から順番に伝える配慮も必要になります。プロジェクトにとって致命的なものは何で、そうでないものは何かを認識できていることが前提となります。組織の文化にもよりますが、これみよがしに徹底的に細かい指摘を並べ連ね、ドキュメントをつるし上げることは「そんなことをやる時間があったら・・」という他のメンバの思いを強くしてしまう可能性が高いでしょう。 このスキルは経験が少ない人に限定されるスキルのようにも思えますが、実は中堅やベテランにも異なった形で求められるスキルです。新人や新しく加わったメンバに対して、威嚇や圧力を与える目的で欠陥を指摘している場面に出会ったことはないでしょうか?新人、新メンバが何か直接的に言いづらい間違いや気にくわない態度を取っているときに、新人や新メンバが担当している部分を必要以上に細かくチェックして、たくさんの欠陥を指摘することで間違いや態度を変えさせようとすることは効果もそれほど望めませんし、時間の面からみても効率的ではありません。
3. 簡潔な説明ができ、必要がなければ黙っておくスキル
自身が発見した欠陥を端的に説明できるスキルは、特に会議形式のレビューの効率を高めます。きちんとまとめられていないときに限って、自身でも説明不足、物足りないと感じ,長々と冗長な発言をしてしまうことが多い傾向にあります。説明が複雑になる欠陥では、検出時にどのように説明すれば明確になるかを考えるスキルが必要になります。 「他の人が指摘をしているから、なんとなく自分も発言しておかないと」とか「自分も気づいていたことを知らせたい」と思ったとしても、その発言によって会議のスムーズな進行を妨げたり、検討にプラスにならないと考えたりすれば、黙っておくスキルも必要です。黙っておくスキルは中堅以上に特に求められるスキルといえます。
レビューにおいて普遍的なスキルを挙げました。プロジェクトレビュー、ドキュメントレビュー、コードレビュー等、実施形態やレビュー対象によっても求められるスキルはかわります。また、開発するソフトウェアや組織によっても変わりますのでただ1つの正解はないことを認識し、ご自身の状況(コンテキスト)に応じて、どのようなスキルが求められているかを考えなければなりません。本稿がそのようなご検討のヒントとなっていれば幸いです。