デグレードは、さまざまな問題の引き金となるため、原因を把握して適切な対策を行う必要があります。
今回は、デグレードの基礎知識から生じる問題、原因、対策方法まで幅広く解説します。
- もくじ
1.デグレード(デグレ)とは
デグレードとは、ソフトウェアの変更が予期せぬ影響を及ぼし、結果的に変更前よりも品質が低下してしまうことです。英語のdegrade(退化させる)に由来する言葉で、多くの場合は「デグレ」と略して呼ばれます。ここではデグレードの定義や、関連する言葉との違いを解説します。
デグレードの定義
デグレードを定義づけるとすれば、「ソフトウェアに対して行った変更が、意図せず他の箇所に影響を及ぼし、品質低下を引き起こすこと」といえるでしょう。「変更」には、機能の追加や修正に加えて、関連ソフトウェアの更新といった環境の移行も含まれます。
デグレードの例としては以下が挙げられます。
- 検索機能を変更した結果、既存のログイン機能が正しく動作しなくなった
- 検索ボタンを追加した結果、既存ボタンの表示が見切れてしまった
- データベース管理システムをバージョンアップした結果、検索速度が著しく低下した
いずれの例においても、「何らかの変更」が「意図せず」に「品質低下」を招いています。
デグレードとリグレッションの違い
デグレードに代わって、リグレッションという言葉が使われる場合もあります。リグレッションは英語のregression(退化、後戻り)に由来する言葉で、基本的にデグレードと意味に違いはありません。
ただし英語圏の国だと、デグレードよりもリグレッションのほうが使われやすいでしょう。実際、国際ソフトウェアテスト資格認定委員会(ISTQB)は、グローバル標準の観点からリグレッションを使っています。
デグレードとリグレッションに意味上の大きな違いはないため、併せて覚えておくとよいでしょう。なお、リグレッションを検出するために行うテストを「リグレッションテスト」と呼びます。リグレッションテストについて詳しくは、次の記事を参照してください。
2.デグレードすることで生じる問題
デグレードが発生すると、さまざまな問題につながりかねません。デグレードすることで生じる3つの問題について、具体的に解説します。
工数・コストの増加
デグレードに対応するには多くの労力が必要になり、工数・コストが増加します。たとえ軽微な表示のずれであっても、本来の要件・仕様と変わってしまえばデグレードといえます。デグレードが発生した場合、意図せず生じた影響に対応しなければなりません。
たとえばテスト時にデグレードが判明した場合、原因調査から対応方針検討、修正、再テストまで多くの作業が生じます。デグレードがなければ全く不要だった作業と考えれば、想定外の工数・コスト増加は大きな問題といえます。
顧客・エンドユーザーからの信頼失墜
デグレードに気づかずソフトウェアをリリースした場合、顧客やエンドユーザーのもとで問題が生じるでしょう。そうなれば、積み重ねてきた信頼の失墜につながる可能性があります。信用失墜の原因として、1つデグレードが見つかると「他にもあるのではないか」という疑心暗鬼につながる、といったことが考えられます。
システムダウンにつながるような重大なデグレードの場合、損害賠償を請求されることも起こりうるでしょう。デグレードは開発チームだけでなく企業全体、さらには顧客やエンドユーザーにも悪影響を及ぼすリスクがある問題です。
開発メンバーのモチベーション低下
デグレードへの対応に多くの労力を費やすことになれば、開発メンバーは疲弊するでしょう。また立場によっては、顧客やエンドユーザーからのクレームを直接受け止めなければなりません。結果として、開発メンバーのモチベーション低下につながることもあります。
モチベーションの低下は、生産性の低下や人間関係の悪化など、さまざまな問題に波及する可能性があります。最悪の場合、開発メンバーの退職につながることも考えられるため、決して軽視できない問題です。
3.デグレードの主な6つの原因
さまざまな問題の引き金となるデグレードを防ぐためには、原因を把握することが重要です。ここでは、デグレードの主な原因を6つ解説します。
① 影響範囲の考慮不足
デグレードの多くは、ソフトウェアの変更が及ぼす影響範囲の考慮が足りないことで発生します。たとえば、機能Aと機能Bで共用しているデータがあった場合、機能Aの変更により機能Bに影響が及ぶこともあるでしょう。こうした機能間の関係性などを十分に考慮できないと、思わぬ機能にデグレードが生じてしまうのです。
ソフトウェアの規模が大きくなるほどソースコード量が増え、機能間の関係性も複雑になります。既存のソフトウェアに変更を加える場合は、影響範囲の考慮を慎重に行うことが重要です。
② プログラマーのケアレスミス
プログラマーのケアレスミスによってデグレードが生じることも考えられます。どれだけ熟練したプログラマーでも、絶対にケアレスミスしないとは言い切れません。多くの仕事を抱えていたり、急ぎ対応だったりすれば、意図しない変更を加えてしまうケースはあるでしょう。
わかりやすい例は、「==」とイコールを2つ書くべきところを「=」と1つしか書かないケースです。正しく書くつもりだったとしても、書き間違えれば結果的にデグレードにつながってしまいます。内容によっては問題がすぐに顕在化しない場合もあるため、開発経験を問わず注意が必要です。
③ 開発メンバー同士の連携ミス
複数人のチームで開発する場合、連携ミスがデグレードにつながる場合があります。たとえば、複数のプログラマーが同一箇所に変更を行い、不整合が生じることは珍しくありません。
また、設計者が正しい変更内容を伝達できず、プログラマーが誤った変更を加えるケースもあるでしょう。デグレードの原因は、単独の開発メンバーとは限らないことに注意が必要です。
④ バージョン管理の不備
チーム開発に欠かせないバージョン管理に不備がある場合も、デグレードにつながる可能性があります。たとえば、古いファイルと新しいファイルを取り違えた場合、古いファイルに変更を加えてしまうケースがあります。
最悪の場合、新しいファイルに入っていた直近の変更がなかったことになるでしょう。過去の不具合が再発する場合、バージョン管理の不備が原因となっているケースが考えられます。
⑤ 環境の変化による影響
チームで開発しているソースコードへの変更だけでなく、環境の変化がデグレードにつながる場合もあります。たとえば、ソフトウェアの稼働に必要なOSやミドルウェアをバージョンアップしたことで、既存の機能が正しく動作しなくなるケースなどです。
開発しているソフトウェアと関わる要素が変化すれば、少なからず影響を受けます。あらかじめ環境の変化による影響を想定し、対応策を検討することが重要です。
⑥ 要件変更への対応にともなう副作用
ソフトウェアに対する要件が変更された場合、要件に対応するために新しいソースコードの追加が必要となることがあります。このようなソースコードが副作用を引き起こし、既存機能やシステム全体の安定性などに影響を与えるケースも少なくありません。
単純に新規機能を追加するのであれば、既存のプログラムと区別した方が開発しやすいでしょう。一方で要件変更への対応は、往々にして既存プログラムへの大きな影響をともないます。また、求められる要件のハードルが高かった場合、場当たり的な対応にせざるを得ないケースも考えられます。
結果として、影響範囲の拡大やプログラムの複雑化といった事態を招き、デグレードにつながるのです。要件変更への対応にあたっては、デグレードの発生に細心の注意が求められます。
4.デグレードを防ぐ方法
デグレードはさまざまな原因によって起こるため、対策もさまざまな角度から行うべきです。ここでは、デグレードを防ぐ方法を4つ紹介します。
デグレードテスト(リグレッションテスト・回帰テスト)の徹底
デグレードを防ぐには、デグレードテスト(リグレッションテスト・回帰テスト)の徹底が欠かせません。デグレードテストは前述のリグレッションテストと同様、デグレードを検出するためのテストです。具体的には、変更が影響しうる既存機能に対して、既存のテストケースを再実施します。
たとえコーディングの過程でデグレードが生じたとしても、デグレードテストが徹底されていれば検出可能です。ただし、デグレードテストの対象範囲を誤ると、混入された問題を見落とすケースがあります。変更が影響しうる機能に対して、確実にデグレードテストを実施しましょう。
管理ルールの徹底
デグレードテストで問題を検出できても、修正の対応は避けられません。工数・コストを浪費しないためにも、デグレードの発生を予防できるのがベストです。
デグレードの予防策として、変更管理や構成管理などの管理ルールを開発に関わるメンバーに周知し、徹底しましょう。全ての開発メンバーが適切な方法で管理することで、不正な管理による誤解などの発生を抑制できます。
開発体制の見直し
開発体制にデグレードを誘発する要素があれば、見直しましょう。たとえば、開発メンバーのレベルに対して難しすぎる仕事を割り振れば、ケアレスミスが発生しやすくなります。この場合は、レベルに合わせたアサインに調整する、先輩メンバーをサポートに付ける、などの対策が考えられます。
ただし、大規模な体制変更は開発メンバーの負担も増えやすいため、慎重な検討が必要です。
開発チーム内での情報共有・指導
開発チーム内での情報共有や指導も、デグレード対策には欠かせません。ソフトウェアの内部構造といったナレッジの共有を徹底することで、開発メンバー間での誤解を防ぎやすくなります。
また、影響範囲を意識したソースコードの変更方法など、適切なノウハウを経験の浅いメンバーへ伝えることも重要です。情報共有の問題を改善したい場合は、グループウェアの導入などシステム面の見直しも必要でしょう。
まとめ:ソフトウェアの品質向上にはデグレード対策が不可欠
デグレードとは、ソフトウェアに対する変更が意図せず他の箇所に影響を及ぼし、品質低下を引き起こすことです。デグレードすると工数・コストの増加はもちろん、顧客からの信頼失墜や開発メンバーのモチベーション低下といった問題にもつながります。
影響範囲の考慮不足や連携ミスなど、さまざまな原因によりデグレードが発生します。ソフトウェアの品質向上を実現するのであれば、デグレードテストや管理ルールの徹底など、正しい対策を実施しましょう。