ツールの導入に加え、メンバーの育成、開発チームの活性化に注力
テスト工程にツールを導入したものの、品質の向上、開発の効率化が図れていない──。こんな課題を持っている開発現場は多い。そんな課題解決のヒントが得られるセミナーが、静的解析、動的解析の両方をサポートしたC/C++言語対応のオールインワンテストツール「C++test」や、ソフトウェア開発・テスト管理プラットフォーム「Parasoft DTP」を提供するテクマトリックスにより、2月10日、お茶の水ソラシティカンファレンスセンター(東京都千代田区)で開催された。
最初に登壇したのは、「C++test」を導入し、品質向上において結果を出しているJVCケンウッド 業務用システム事業統括部 プロオーディオ技術部の阿部博己氏。非常用放送システムや業務用放送装置などの開発を担当する阿部氏は「ツールを導入すると早い段階でバグ検出ができるなどの即効性は得られるが、それだけでは完璧ではない。真の品質向上を図るには、メンバーの育成、開発チームの活性化が不可欠だ」と強調する。
阿部氏の部署では検証専門チームを設置したり要求仕様の早期確定をしたりするなど、仕様面での品質向上に取り組んできたが、開発者のスキルに関する問題は解決できていなかった。そこで静的解析ツールの導入を検討することになったという。各種あるツールの中でもC++testを選択したのは、「他社製品に比較してバグの検出能力が高く、バッチ処理に対応するなど機能も豊富。総合的に見てコストパフォーマンスに優れていたため」と阿部氏は語る。
開発者のスキルにまつわる問題を解決するため、ツールの導入とともに取り組んだのが、先の阿部氏の言葉で紹介したとおりメンバー育成と開発チームの活性化である。というのも阿部氏の部署の技術者は新人の割合が多く、彼らのスキルアップが品質向上に直結するからだ。
多くの企業同様、阿部氏の部署でも研修やセミナーなどのOffJTと、OJTを併用して教育を行っていたが、中でもカギを握るのが「実務に直結し、継続的に実施できるOJTだ」と阿部氏は言う。だが、OJTは指導者のスキルに依存する上、推進する体制が整っていないと機能しないという問題点もある。そこで「C++testの検出結果を用いたコードレビューをチームで実施することで、スキルアップを図ろうと考えた」と阿部氏は語る。実のところ以前は、コードレビューがあまり行われておらず、解析結果を担当者が確認、修正するだけ。そのため「修正すれば終わりだったので、なぜバグになったのか、それを追究することがなかった。問題発生の傾向と対策を検討するというロジックを省略してしまい、スキルアップにはつながらなかった」と阿部氏は述懐する。
不具合件数は半減したが、コードレビュー時間は3倍。「これはムダではない」
現在、阿部氏の部署では検出されたバグに対してチームでレビューを実施している。バグにどのように対応すればよいかを議論し、共有する場を、ソフトウェアの作成完了後、およびソフトウェアの評価プロセスにおいて設けたのである。こういったレビュー時間の確保に大いに役立っているのがC++testであるという。「ツールの導入により、これまでできていなかったコードレビューの時間が増えた。レビューでは、自分一人では気付かなかったことを指摘され、スキルアップにつながるので、楽しくなる。それがモチベーションとなり、コードレビューの活性化につながった」と阿部氏は語る。
実施したテスト内容についても情報共有ツールを活用し、スキルの共有やレビュー記録の管理を行っている。このような仕組みを作ったことで、「問題点の追究もできるようになり、スキルの共有が図れ、スキル向上のスピードアップ、スキルの継承につながっている」と阿部氏。
実際、コーディングミスによる不具合の件数は、実施前の188件に比較し、96件に半減。一方、コードレビューの時間は51人時だったのが、160人時の3倍増に。コードレビューの時間が増えたことで、「効率化が図れていないのでは」と思うかもしれないが、「これはメンバー育成の大事な時間。スキルアップ向上による効果は、今後の商品開発に生きてくるので、無駄ではない」と言い切る。
「今では主体的にコードレビューが行われている」という阿部氏。チームの価値観や目標を明確にし、メンバー内で共有すること、リーダーの意識を変え、品質向上に熱い意識を持っている人材を発掘し、任せること、開発プロセスに組み込み、コーディングガイドラインを作成することなど、チームを活性化するポイントについても言及した。
「今後もソースコード解析などのツール、USDM(要求仕様を記述するための方法)などの手法を導入し、設計者のレベルアップを図り、高信頼性商品を提供していきたい。そのためにも他部門へもこのやり方を伝搬していくことを考えている」こう語り、セッションを締めた。
C++test、Parasoft DTPは「無料」で体験できます
本記事で紹介しているツールを、下記ページから無料でお試しいただけます。
製品についての詳しい情報は下記ページからご覧ください。ここでは紹介しきれなかった機能や活用例などもご紹介しています。
品質向上につなげる5つのメトリックス
続いて登壇したのは、ソフトウェアテストの専門会社エス・キュー・シー 代表取締役社長の倉田克徳氏。倉田氏は同社を立ち上げるまで、SIベンダーやITベンダーでQCやQAに従事してきた。
倉田氏はソフトウェア開発において「短納期」「低コスト」「高品質」が求められることによって、「QCDのバランスを適正に保つのは難しい状況に陥っている」と語る。また開発対象システムの稼働環境や接続環境、データ環境などが多様化していることから、何と何がつながり、どう動くか予想がつかないため、テストを実施しても、すべてのバグを見つけることはできず、制御できない状況ができているのも事実だと言う。このような環境変化に伴い、テスト環境も変化している。
「デバイスのクラウド接続など、組み込み系と業務系の区別がなくなりつつある」と倉田氏は指摘。またシステムが稼働後に五月雨式にアップデートされたりすることも多く、「システムテスト」「移行テスト」「運用テスト」を、ツールを活用してテストをやり続けなければならいなど、システム品質の担保方法にも変化が起こっているというのだ。もちろん、このようなテスト環境の変化に伴い、ツールも進化し、その活用率は向上している。
ではこのような状況の中で、QCDのバランスを保ちながらソフトウェア開発をおこなうにはどうすればよいのか。
そもそも品質を管理するには、適切なデータ収集、分析といった定量分析が欠かせない。「分析指標を念頭に置かずにデータを収集したり、分析目的が明確でないままデータを分析したりしても、意図した結果は得られない」と倉田氏は言う。このような適切な定量分析のために必要となるのが、本セッションのテーマであるメトリックスだ。倉田氏は、重要なメトリックスとして5つの例を取り上げた。
第一のメトリックスは機能カバレージ(機能エリア)における不具合発生率の分析である。「これを実施することで、ある機能における『不具合数』『全テストケース数』『消化テストケース数』から、不具合出現率やリスク予想を算出し、全体にどのくらいのリスクがあるか判断できる。大手メーカーのQCやQAでは当たり前の手法だ」と倉田氏は語る。未来に起こる不具合のリスクは過去のデータを分析することで予想できるからだ。ソフトウェアの場合は「ツールからはき出された結果を、このような観点から分析することでバグを出すリスクを減らせるようになる」と倉田氏は説明する。
第二のメトリックスは不具合相関分析。これを実施することで、開発している機能やテストフェーズ、バージョン、担当者などの情報から、不具合の原因がどこにあるのか、どのような条件で不具合が発生しているのかといったことがわかる。「不具合の原因や要因、条件の絞り込みができる。機能×フェーズの不具合相関分析は、再現がレアなバグに有効だ」と倉田氏は説明する。フェーズ×担当者の不具合相関分析では担当者の検出能力、フェーズ×テストケースではテストケースの不具合検出能力がわかる。
「注意しないといけないのは、例えばフェーズ×担当者の不具合相関分析で、バグが出なかったとしても、開発者の能力が高く品質が高いソフトだったのか、またテスト担当者の能力が低くてバグが検出できなかったということも考えられる。フェーズ×テストケースにおいても同様で、テストケースの設計や粒度が適切ではないことも考えられるからだ。いずれにしても品質は人に依存することを念頭に置いておくこと」と倉田氏は指摘する。
第三のメトリックスは傾向分析(時系列変動)。これを実施することで終了判断や目標判断を把握することができる。例えば時系列(日時)の累積不具合件数による傾向分析では、不具合収束曲線にして表し、終了判断に活用する。しかし「それだけではもったいない」と倉田氏は指摘する。経営陣から「もう少し品質を上げてほしい」「これぐらいの品質を目指してほしい」と言われたときの分析指標としても使えるからだ。第三のメトリックスを活用することで、経営陣に対して、QCDの適切なアセスメントが可能になる。
また、時系列の実行テストケース件数の傾向分析では、生産性やテストケース消化率(テストケース実行終了予想)ができる。ただ、ここで忘れてはならないのが、テストのカバレージである。自動テストは、いかに回帰テストを繰り返し行い、カバレージを上げていくかで効果が変わる。「テストのカバレージには、機能のカバレージと実行のカバレージの2種類がある。そのいずれのカバレージに対しても重み付けをきちんと管理し、適切に実行しなければテストの品質が上がらない」と倉田氏は指摘する。
第四のメトリックスは乖離分析。これは進捗や目標品質や生産性などを上げるために無意識にやっていることだ、と倉田氏は言う。進捗表に予想と実績が乖離しているときの、その程度、要因、予測、目標見直しなどに用いられるが、大事なのは、その乖離の幅の対策があらかじめ講じられているかどうか。「例えばこれくらいの乖離であれば人で手当てできる、ここまで開くともう一度プロジェクトを立て直さないといけないというように、どこまで乖離したらどういう対策にするのか、その管理者が対策を講じているかを意識して、乖離分析を活用するのが望ましい」と倉田氏は説明する。
第五のメトリックスは、テストの進捗を考える上で「テスト消化率進捗」と「テスト網羅率進捗」という2つの観点を持つことだ。「この2つの指標を比較検討して、正確なテストの進捗状況を捉えることで、遅れの対策や効率的なバグの発見を推進することができる」と倉田氏。このような2つの指標をより磨くため、同社では社内の技術者に演習を実施している。その演習内容も公開された。披露されたお題は「網羅率を考慮した進捗管理の観点で翌日の実施計画を立てる」「あるテストの進捗上から弱点を分析する」というもの。
「品質向上につなげるためには、分析目標のあるテスト計画をすること。そして収集されたデータを分析に沿って適切に分析することだ。これを実践するためにも、テスト全般の知識を身につくような人材育成にも注力して欲しい」倉田氏は最後にこう語り、セッションを終えた。
2大要求「リリーススピード」「信頼性」に応える仕組みを「Parasoft DTP」で実現
「開発現場のための定量分析運用環境のご提案」と題したテクマトリックスのセッションでは、同社ソフトウェアエンジニアリング技術部の渡辺征一氏が登壇。
市場から求められる「リリーススピード」と「信頼性」という2大要求に応えるために、企業はさまざまな努力をしているが、それに応えることができず、むしろ犠牲にしていることもたくさんあると渡辺氏は語る。特にソフトウェアの開発現場においては、問題を早期に発見できないためにシステム規模に比例してバグの修正コストが高いという問題があるという。
そこで全体を総合的かつ客観的に状況判断するために必要となるのが定量分析だ。定量分析の成功事例として紹介したのが、日本酒造りの職人である杜氏がいないという旭酒造。人気の純米大吟醸「獺祭(だっさい)」の蔵元である。ここでは徹底した数値管理を行い、専門家(杜氏)に依存したチームからの脱却を実現した。
旭酒造だけではない。多くのソフトウェア開発会社でも問題発生を早期に解決するため、定量分析の必要性に気付いているという。だた、その分析のためにツールを導入したのに、効果が見えない企業が多いのでは、と指摘する。その大きな要因は「分析に時間がかかり、開発現場へのフィードバックが遅くなったり、分析結果が分かりにくかったりするため、定量分析の有用性を疑ってしまう雰囲気を現場に植え付けてしまっていること」と渡辺氏は言う。つまり定量分析で効果を得るためには、「分析結果を開発者にリアルタイムにフィードバックでき、誰でも理解しやすい形で閲覧できるように共有化できる仕組みを作ること」と渡辺氏は強調する。
それを実現するのがテクマトリックスの「Parasoft DTP」である。Parasoft DTPであれば、C++testはもちろん、その他ベンダーの解析ツールや、Redmineなどのタスク管理ツール、git、Subversionなどの構成管理ツール、JenkinsなどCIツールなどの情報を一元管理し、収集されたデータを専用のダッシュボード上ですぐに一覧することが可能だ。
さらに収集された複数のデータを、Parasoft DTP独自の分析エンジン「PIE」で分析し、開発におけるさまざまな課題をすぐに把握することができる。例えば、プロジェクト管理ツールとバグ管理ツール、静的・動的解析ツールから得られたデータを基に、開発現場においてどの工程でバグが埋め込まれやすいかを見える化することも可能だ。
「評価用スターターキットもあるので、静的解析ツールを持っているか否かにかかわらず、試すことができる。ぜひこの機会に効果を実感して欲しい」と語り、セッションを終了した。
静的解析、単体テスト機能をさらに強化した「C++test」新バージョンを紹介
最後に、同社ソフトウェアエンジニアリング営業部の橘祐史氏より「C++test」の新バージョンの紹介も行われた。
今後、リリースが予定されているVer.9.6では、静的解析機能を拡張。コーディングルールは200種類以上追加され、合計2000種類に。単体テスト機能も拡張され、テストケース生成用の新GUI「Test Case Editor」の追加と、スタブ機能の強化が行われた。Test Case EditorではGUIを使ってテストパターンの作成とスタブの制御ができるため、単体テスト時の最大の課題であった「テストケースのコーディング作業」を行う必要がなくなる。さらにスタブ機能の強化では、スタブ動作の詳細な定義ができる上、スタブ化したメソッドの評価機能も搭載している。
同時リリース予定で、Ver.9.6との並行販売を予定しているVer.10.2では、クリティカルなバグの検知に最も効果を発揮する「静的フロー解析機能」が大幅に強化され、従来の2倍の種類のバグが検出可能になる。さらに、新しいアーキテクチャを採用し、Parasoft DTPと連携を実現。この連携により静的解析、動的解析における進捗状況が可視化できる上、ウィジェットから詳細情報へのドリルダウンができるようになる。これにより、静的解析違反の詳細内容の確認や担当者アサイン、優先度付けなども容易になる。最後に橘氏は「静的解析を重視するなら、静的フロー解析が強化されたVer.10.2がおすすめ」と紹介し、セミナーは終了した。
C++test、Parasoft DTPは「無料」で体験できます
本記事で紹介しているツールを、下記ページから無料でお試しいただけます。
製品についての詳しい情報は下記ページからご覧ください。ここでは紹介しきれなかった機能や活用例などもご紹介しています。