300を超えるライブラリの不具合ゼロを目指す品質管理とは
グレープシティは宮城県に本社を構える日本企業である。国内およびアメリカ・中国・韓国・インドなど海外にも拠点を構えながら、エンジニアの開発を支援する高機能ライブラリを開発・販売。その実績は30年以上にも渡る。
まず村上氏は、同社のライブラリに対するテストや品質管理を行う上で、「我々のライブラリの不具合が、お客さまのソフトウェアの不具合に直結してしまう」ことを、非常に重要視しているポイントだと切り出す。
そして、不具合をゼロに近づける取り組みのキーワードとして「シナリオ至上主義」「オートテストとジレンマ」「育成カリキュラムでつくる”知ってる”QAチーム」を挙げた。今回のレポートでは、大きくこの3つの取り組みについて紹介していきたい。
1. シナリオ至上主義
グレープシティが掲げるテストの最重要項目は「シナリオ」である。国内・海外に関わらず、テスト項目を策定する際の大原則は、「Preparing high-level test scenarios(高度なテストシナリオを用意する)」。社内には必ず掲示してあり、新人が入った際にはまずたたき込まれる重要なルールの一つだ。
テストシナリオとは、ブラックボックステスト技法の一つ。機能要件やビジネス要件が満たされているかどうかを確認するためのテスト項目。ユースケースをベースに考える。テストケースはそのテストシナリオを「どのように実施するのか」を詳細なテスト項目にしたものだと、村上氏はわかりやすく説明する。
例えば、同社のグリッドを表示するライブラリ「FlexGrid」に当てはめると、以下のようになる。業務システムの中でも、顧客のデータを管理するためのUIに使われることが多いため、テストシナリオは「業務システムUI(顧客データ管理)」。これをテストケースに落とし込んでいくと、「大規模なデータ結合のテスト」「状況に応じたフィルタリングやソート」「データ更新を行った際の整合性」と考えることができるわけだ。
2. オートテストとジレンマ
グレープシティが提供するライブラリのテスト項目は、1ライブラリあたり10くらいのものから、1000を超えるものまであり様々だが、平均すると1コントロールあたり約300程度の項目数になる。そこで同社では、オートテストを採用しながら日々の品質管理を行っている。
「オートテストでよく使われるツールであるJenkinsを採用し、テスト環境を構築して運用しています。具体的には、QAチームが自動テストスクリプトを作り、BitbucketやTeamCityを経由して、最終的にテスト用アセンブリが実行できるソリューションのかたちになります。それをJenkinsで管理しているテストのエージェントマシーンに送り、テストを実行。テスト完了後はテストレポートが発行されるという流れです」(村上氏)
このオートテストには、実は理想と実際というものがあると村上氏は続ける。オートテストが完璧かと言うと、そうではないのだ。
まず理想的な状況を挙げてみる。
- ぜんぶ自動テスト
- ボタン 1発
- テスト完了!
上記のように、全てが自動テストで賄えるようになっていて、ボタンを押せば全部のテストが走って、テストが終わる。そんなイメージを持つ人が多いだろう。だが、実際には全てを自動化することはなかなか難しい。なぜなら自動化に向かないテストがあるからだ。例えば、以下のようなテストである。
- 特定の条件下のみをテストすればいい
- 複雑な手順を1回だけテスト(繰り返しが発生しないので、スクリプトを組むより手動のほうが早い)
このようにオートテストで全自動を目指そうとすると、効率化からは遠ざかってしまうジレンマが発生するケースもある。こうしたジレンマにグレープシティでは、3段体制のQAで挑んでいる。
「まず、QAリードがテスト項目の作成をします。テスト項目が出来上がったら、手動テストチームのメンバーにアサインを行います。テスト項目をチェックし、自動テストの方が明らかに効率がいいものがあったら、自動テストチームにアサインする体制を組んでいます」(村上氏)
つまり以下の図のように、手動テストで行うべきもの、自動テストで行うべきものを決めて、並行する形でテストを行い、効率よく品質管理を高めているわけである。
何を自動化するかについては、以下のようなプライオリティがルール化されている。
例えば、テストする箇所が製品の基幹部分であれば、プライオリティ1。製品の重要機能、主要なAPIであれば、プライオリティ2、その他の諸機能であればプライオリティ3、レアなユースケース試験は、プライオリティ4となる。
「プライオリティの優先度は、不具合が発生してしまった場合における製品への影響指数で考えています。影響度が大きいプライオリティ1であれば、できるだけ自動化して人的ミスを排除し、確実に毎回のリリースで実行できるように品質管理を行っています」(村上氏)