JavaテストにParasoft Jtestを利用することで、チームはより確実かつ迅速に品質とセキュリティを実現できます。この記事では、Jtestを活用してJavaテストのROIを向上させ、ソフトウェアの品質を高めながらソフトウェアデリバリーを加速する方法を説明します。
今日のデジタル経済では、企業が消費者の要望に応えるためには、ソフトウェアをより迅速に市場に届ける必要があります。品質とセキュリティを犠牲にすることなくこれを達成するには、ソフトウェアコードの変更を徹底的かつ迅速にテストできなければなりません。しかし、そのような徹底的なテストはボトルネックにもなり、ソフトウェアチームにストレスとリスクをもたらし、デリバリーを遅らせ、ビジネスに直接的な影響を及ぼす可能性もあります。
ソフトウェアプロジェクトの遅延の大きな要因の1つは、開発プロセスの終盤で発見されるバグです。このような状況が発生するのは、経営陣が開発チームにスケジュールを守るようプレッシャーをかけ、テストと製品の品質にしわ寄せがいくためです。この問題に対処するため、開発チームはユニットテストと静的コード解析を活用して、サイクルのより早い段階で欠陥を明らかにしようとしています。ただし、これらのプラクティスにも、時間とコストの面でそれぞれ欠点があり、それが短期間で品質を達成する妨げになる可能性があります。
デリバリーの遅れに対処し、チームがより確実かつ迅速に品質とセキュリティを達成するのを支援するために、企業はParasoft Jtestを活用してJava開発テストの効率を高めることができます。新しいコードの開発でも、レガシーアプリケーションの保守でも、Parasoft Jtestはユニットテストの生成、拡張、複製、および変更を行ういっぽうで、ユニットテストの実行を最適化し、ユニットテストに関連する時間とコストの大幅な改善を促進します。「副次的な」メリットとして、メンテナンスが容易で意味があるユニット テスト スイートが得られます。
さらに、Parasoft Jtestは開発中にソースファイルをスキャンしてアプリケーションのセキュリティと品質を向上させることができます。総合すると、ソフトウェア開発プロセスの早い段階で欠陥を検出することによって、デリバリーを加速し、ソフトウェアの品質を高めるのに役立ちます。
ユニットテストのROI向上:ユニットテストの作成
ユニットテスト作成段階でのROI向上を説明するための例として、大手金融機関がクラウド移行戦略の一環として、新しいJavaアプリケーションを開発中だとしましょう。開発チームは20人の開発者で構成されており、開発者1人あたり平均10万ドルの費用がかかるため、開発の総コストは年間200万ドルです。新しいアプリケーションは四半期ごとにリリースされるため、リリースあたりの開発コストは50万ドルです。私たちの調査によると、平均的な開発チームは、控えめに見積もっても30%の時間を手作業でユニットテストを作成することに費やしています。
(1/4)(200万ドル)(.30) = 150,000ドル
(四半期ごとのリリース) (年間開発コスト) (ユニットテストに費やす時間の割合) = ユニットテストの作成コスト
調査レポートによれば、Parasoft Jtestを使うと、ユーザーは半分の時間でテストを作成できます。ユニットテストに必要な時間のかかる手作業の多くを排除できることに加えて、AIを使用して、コードが作成されるとすぐにコードカバレッジを向上させるユニットテストを自動的に生成できることによって、時間短縮が実現されます。したがって、開発の30%ではなくわずか15%の時間をユニットテストの作成に費やすだけでよく、テストのビジネスロジック部分により多くの時間を投下することができます。
(1/4)(200万ドル)(.30)(.50) = 75,000ドル
(四半期ごとのリリース) (年間開発コスト) (ユニットテストに費やす時間の割合) (Jtestによる時間短縮率) = Jtestを使ったユニットテスト作成のコスト
これにより、ユニットテストの作成コストが150,000ドルから75,000ドルに削減され、1回のリリースあたり75,000ドルのコスト削減、年間では300,000ドルのコスト削減につながります。
150,000ドル – 75,000ドル= 75,000ドル
元のユニットテストのコスト – Jtestでのユニットテストのコスト= Jtestによる削減コスト
(75,000ドル)(4) = 300,000ドル
(削減コスト)(年間リリース回数) = Jtestによる年間削減コスト
開発コストを削減することは、ビジネスに収益性をもたらすのに役立ちます。コストだけでなく、貴重な時間も節約されます。2週間10営業日のスプリントを採用して開発を行っている場合、30%つまり3日がユニットテストに割り当てられます。1回のリリース (3か月) につき、合計6つのスプリントがあります (例:開発用に5スプリント、最終テスト用に1スプリント)。この数値から計算すると、1リリースにつき15日間がユニットテストに使用されます。
(5)(10)(.30) = 15 日
(開発スプリント数) (スプリントの日数) (ユニットテストに費やす時間の割合) = リリースごとのユニットテストに費やされる日数
Jtestはこの期間を半分にするので、1スプリントあたり1.5日間、1 リリースあたり7.5日間のユニットテストが行われます。
(5)(10)(.30)(.50) = 7.5日
(開発スプリント数) (スプリント日数) (ユニットテストに費やす時間の割合) (Jtestによる時間の削減率) = Jtestを使用した場合に1回のリリースでユニットテストに費やされる日数
7.5営業日の節約は、市場へのリリースで競合他社に勝つために時間がひっ迫している状況では非常に貴重です。
15 – 7.5 = 7.5日
もともとユニットテストに費やしていた時間 – Jtestを使用したユニットテストの時間 = Jtestによる時間の節約
この例では、手動によるユニットテストの作成に割り当てられる時間として、控えめに見積もった30%という数値を使用していますが、多くの場合、この数値ははるかに高く、組織の単体テストプラクティスに応じて最大50%にもなります。そういった組織では、Parasoft Jtestを使用することで、さらに時間とコストを節約できます。
ユニットテストのROI向上:ユニットテストの実行
今度は、先ほどの組織が新しいアプリケーションを追加構築しているとします。ますます多くのユニットテストが作成され、数秒で実行が終わる孤立した (分離された) ユニットテストから、連携した (統合レベルの) ユニットテストを行うよう変化しており、実行に非常に時間がかかるようになっています。ユニットテストスイート全体の実行時間は2時間にもなり、この2時間は開発ビルド全体の時間にも悪影響を及ぼしています。コード変更のフィードバックを得るのに2時間もかかるのは開発チームにとって長すぎます。組織はアジャイル手法を採用しているため、ソフトウェアチームに頻繁にフィードバックを提供するために、1日に複数回ビルドが実行されますが、ユニットテスト実行に2時間かかるため、1日に3回のビルドしか実行できず、1日のユニットテスト実行時間は6時間にもなります。これでは開発プロセスが非効率的になる可能性があります。
リリースサイクルを短くするために、チームはParasoft Jtestを使ってユニットテストの実行を最適化することができます。 Jtestは、AIを利用したテスト自動化によって、完全なテスト一式の代わりに、変更されたコードに基づいて最適化されたユニットテストを実行することで、ユニットテストの実行にかかる時間を短縮します。この最適化は、開発者がコードをチェックインする前のIDE内とCIでのビルド時に適用され、夜間には完全なテストスイートが実行されます。実行対象のテストを最適化することで、全体的なビルド時間が劇的に短縮され、ソフトウェアチームへのすばやいフィードバックが可能になります。また、1日のビルド回数を増やすことができるため、日中の活動時間の生産性が向上し、デリバリーまでの期間が短縮されます。Jtestのテスト手法を利用すると、時間とコストの両方を節約できます。
静的コード解析のROI向上:自動スキャン
同じ組織の例を使って別のシナリオの説明を続けましょう。テストを実施するうちに、サイクル終盤でいくつか欠陥が見つかっているとします。カーネギーメロン大学のソフトウェア工学研究所による「Composing Effective Software Security Assurance Workflows」にある欠陥あたりのコストの算定基準を適用すると、サイクルの早期に発見された欠陥は平均1時間の修正コストであるいっぽう、サイクル後期で発見された欠陥は7倍以上、つまり7時間以上のコストがかかる傾向にあります。平均10万ドルの給与に基づいて換算すると、早期の欠陥の発見と修正には最大48ドルかかり、後期の欠陥の発見と修正には最大336ドルかかります。サイクル後期に20個の欠陥が発見されると、これを解決するために合計6,720ドルと140時間(約18営業日)を要します。このデータを使用すると、後期の不具合がリリースの期間とコストに与える影響は明らかです。
(48ドル)(7)(20) = 6,720ドル
(1時間あたりの開発者コスト) (サイクル終盤の不具合発見および修正時間) (サイクルの終盤の不具合数) = 不具合の総修正コスト
[(7)(20)] / 8 = ~18営業日
[(サイクル終盤の不具合発見および修正時間) (サイクル終盤の不具合数)] / (1営業日の標準時間数) = 不具合の総修正時間
サイクル後期に発覚する欠陥の量を減らすために、Parasoft Jtestは、静的コード解析とセキュリティテストを自動化し、開発時(サイクル早期)にコードの潜在的な脆弱性と問題を検出するためのルールを1000個以上提供します。少なく見積もって、Jtestが後期欠陥のうち25%を早期に検出できると仮定すると、結果としてサイクル早期に5個の欠陥が発見され、15個の欠陥がサイクル後期に残ります。サイクル早期および後期の両方の欠陥を見つけて修正するには、5,280ドルと110時間(約14営業日)がかかります。これにより、リリースあたりの不具合修正の時間とコストが約25%削減されます。
(48ドル)(1)(5) = 240ドル
(1時間あたりの開発者コスト) (サイクル早期の不具合発見および修正時間) (サイクル早期の不具合数) = サイクル早期の不具合修正コスト
(48ドル)(7)(15) = 5,040ドル
(1時間あたりの開発者コスト) (サイクル後期の不具合発見および修正時間) (サイクル後期の不具合数) = サイクル後期の不具合修正コスト
240ドル + 5,040ドル = 5,280ドル
サイクル早期の修正コスト+サイクル後期の修正コスト= Jtestによる欠陥修正コストの合計
(6,720ドル – 5,040ドル)/6,720ドル = ~25% Jtestのコスト削減効果
(元の修正コスト – Jtestを使用した場合の修正コスト) / 元の修正コスト= Jtestによるコスト削減率
[(1)(5)] / 8 = ~1日
(サイクル早期の不具合発見および修正時間) (サイクル早期の不具合数) / (1 営業日の標準時間数) = サイクル早期の不具合修正時間
[(7)(15)] / 8 = ~13日
(サイクル後期の不具合発見および修正時間) (サイクル後期の不具合数) / (1 営業日の標準時間数) = サイクル後期の不具合修正時間
1 + 13 = 14日
サイクル早期の修正時間+サイクル後期の修正時間=合計欠陥修正時間
(18 – 14)/18 = ~22% Jtestによる時間削減効果
(元の修正時間 – Jtestを使用した場合の修正時間) / 元の修正時間= Jtestによる時間削減率
問題の検出をさらにシフトレフトできるよう、Jtestは開発中にIDE内で臨機応変に継続的解析の実行を可能にします。そのため、開発者は問題が入り込んだとき、まだ該当コードの作業をしている間に問題を解決できます。これにより、欠陥修正に関連する時間とコストがさらに削減され、スピードを伴う品質が大幅に向上します。
まとめ
Parasoft Jtestは、迅速に品質を提供するための重要な要素です。開発者は、ユニットテストと自動静的コード解析を改善することで、後期の不具合を減らし、ビジネスに貢献する新機能の開発に集中できます。また、迅速なフィードバックからも恩恵を受けることができます。コードの変更がアプリケーションの機能を壊していないかをすばやく確認し、対処できます。Parasoft Jtestを使用すると、開発チームは、品質を犠牲にすることなく、アジャイルとより早いデリバリーを実現し、ビジネスを成功させることができます。
(この記事は、開発元Parasoft社 Blog 「How to increase Java testing ROI with Parasoft Jtest」2019年2月7日の翻訳記事です。)
Parasoft Jtestについて
Java対応静的解析・単体テストツール Parasoft Jtest
Jtestは、テスト工数の大幅削減とセキュアで高品質なJavaシステムの開発を強力にサポートするJava対応テストツールです。1,000個以上のコーディング規約をもとにソースコードを静的に解析し、プログラムの問題点や処理フローに潜む検出困難なエラーを検出します。さらに、JUnitを用いた単体テストについて、作成、実行、テストカバレッジ分析、テスト資産の管理といった単体テストに係る作業をサポートし、単体テストの効率化を促進します。