logologo
エンジニアにとって恐怖のディグレーションの原因と対策を徹底解説
ハルマゲドン

エンジニアにとって恐怖のディグレーションの原因と対策を徹底解説

アンドエンジニア編集部
2021.03.28
この記事でわかること
1.ディグレーションはエンジニアとしては絶対に避けなければならない致命的障害
2.ディグレーションの原因はほぼ人的な不注意やミスにある
3.ディグレーションを起こさないためにルールづくりとその遵守が大切

ディグレーションとは

障害

エンジニアの方は"デグレ"というと分かると思います。「デグレ」(ディグレーションの略語)は、プログラムの改修の際に引き起こされる性能劣化や品質劣化のことですね。

ディグレーションによって、パフォーマンスが低下することもあれば、バグが発生して品質劣化することもあります。

大抵の場合は、ユーザーの変更要求仕様は満たしたものの、後工程のプログラムなどで不具合を生じて、ディグレーションとなるケースが多く見受けられます。

いずれにしても、改修の結果、性能劣化を招いたのなら、一旦元に戻し、その原因究明と正常化を図らなくてはなりません。

リグレッションとの違い

「ディグレーション」とよく似た用語に「リグレッション」があります。正確には「リグレッションテスト」ですが、この違いをよく認識しておきまょう。

そもそもディグレーションはディグレード(degrade)の名詞で、「悪化」とか「退化」を意味します。プログラムの改修をした際に、予期せぬ新たな不具合が出てくることをディグレーションといいます。品質や性能が改修前よりも悪くなることです。

プログラムの改修によってディグレーションが起きていないかどうかを検証するためのテストが「リグレッションテスト」です。リグレッションテストには「ノンディグレードテスト」や「回帰検証」という呼び方もあります。

ディグレーションの発生のパターン

ディグレーションは主にプログラムの改修で起きますが、それ以外にもディグレーションは発生します。主に以下のパターンで発生します。

1.プログラムの改修ミス ユーザーからの変更要求に従って当該プログラムを修正し、単体テストや連結テストにも問題が無かったのに、別のタスクに影響を及ぼすのが、このパターンです。このタスク内では問題がなくとも、別タスクのプログラムがこの改修されたプログラムを呼び出し、正しい応答が無かったために呼び出した側のプログラムに悪影響を及ぼすというような事例もあります。

2.ミドルウェアなどの設定誤り ディグレーションの大半はプログラムミスで起きますが、利用しているミドルウェアのバージョンアップミスなどでも起きます。ミドルウェアにバグがあり、その改修版が提供されているにもかかわらず、アップデートを忘れていた結果、ある日突然システムダウンが起きるというようなパターンです。システム担当者はメーカーからの通知で、ミドルウェアのバージョンアップの必要性を認識していましたが、本番業務で特に問題が起きていなかったので、しばらく様子を見ようと考え、その内にバージョンアップを失念していたのです。

3.ドキュメントの記述誤り これは1.のプログラム改修ミスの原因でもあるのですが、改修対象プログラムの影響対象プログラムがドキュメントに正しく記されていれば、防げたディグレーションです。ドキュメントを作成した人のミスですが、ドキュメント作成者には「プログラマーが分かっているだろう」という思い込みがあり、プログラマーにはドキュメントを盲信し、自ら影響範囲を確認しなかった責任があります。

ディグレーションの原因

失敗

前述のディグレーションが起きるパターンから、おおよそ発生原因は分かりますが、根本的な原因について整理しておきましょう。

人の思い込みや怠慢

システム開発やシステム改修の際には仕様書や指示書などのドキュメントがあり、プログラマーやシステムエンジニアはドキュメントに従って作業を行います。しかし、ドキュメントが100%正しい、完全であるという保証はありません。人が作成しているのですから、その人の性格やスキルに影響されます。漏れや不備もあるという前提で、改修時には影響範囲の調査をしなければなりませんが、これをシステムエンジニアもプログラマーも怠っていたことがディグレーションを招いたのです。こうした「思い込み」や「怠慢」という人的ミスがディグレーションの主な原因なのです。

ルールの不備

人が行動をする際は、行動指針や行動ルールが必要です。「ミドルウェアの設定誤り」のパターンでは、「ミドルウェアのバージョンアップ」に対する対応指針やルールが定められていなかった事、担当者が勝手に判断したのがディグレーションの原因でした。判断を必要とし、判断が人によって変わる可能性があるものは基準やルールを設けておかなければなりません。そして、その基準やルールは関係者に周知徹底し、その遵守を義務化すべきです。また判断に迷うケース、ドキュメントに記述されていない事象が起きた時には誰に判断を仰ぐのかについても明記しておく必要があります。

情報共有の漏れ

人はミスを犯しやすい生き物です。しかし、他者とコミュニケーションを取り、互いに意見を交換し、力を合わせ、相互にチェックしあってミスを防ぐ知恵があります。仮にドキュメントに不備があっても、情報共有を徹底しておけばミスの多くは防げます。プログラム改修やミドルウェアの変更などは、関係者全員に共有し、全員が影響確認を行えば、ディグレーションを防げた可能性は高いです。システム開発にかかわらず、情報共有の重要性を再認識しておく必要があります。

ディグレーションの影響

事故

ディグレーションが恐ろしいのは、一度正常に稼働していたシステムが停止や性能劣化を招くことです。リリース前のエラーであれば影響は大きくなりませんが、リリース後ということで顧客に直接被害が及ぶということです。

顧客からの信用が失墜する

ディグレーションは軽微の影響で済む場合もありますが、最悪の場合は企業の存亡危機に至るケースもあります。例えば、銀行オンラインシステムが何年も正常に稼働していながら、軽微なシステム改修によってディグレーションが起き、オンライン業務が全て停止し、顧客に甚大な被害を及ぼしたという例もあります。この営業損失は計り知れません。金銭的な実害以外に企業ブランドの失墜という大きな影響を及ぼし、顧客からの信用が一気に失墜します。一度信用が失墜すると、それをとり戻すためには大変なエネルギーと時間が必要です。この事は関係者が予め十二分に認識しておく必要があります。

本来不要な工数、コストが余分にかかる

システム開発に対して対価がありますが、ディグレーションによって発生する工数やコストに対する対価はありません。すべて開発側の自己責任、自己負担です。ディグレーションが重大な場合には、システム開発に伴う利益が全て吹き飛んでしまい、タダ働きと同じ結果になることも珍しくありません。それでころか、最悪の場合には損害賠償請求を受けるリスクもあります。

多重事故を招き、負の連鎖に陥る

ディグレーションが起きると、その対応に時間的猶予は許されません。特にオンラインシステムや業務スケジュールに直接影響するシステムはできる限り速やかな対応が求められます。悠長に原因究明している場合ではありませんので、動けるエンジニアをかき集め、徹夜で復旧に当たります。こうした時に2次障害を招きがちです。ディグレーションの対応をした結果、また別のタスクに影響を及ぼし、別タスクで大規模障害を招くことすらあります。こうして負のスパイラルに陥り、障害が長期化することすらあります。ディグレーションの恐ろしさは、予期せぬ時に予期せぬことが起きるというところにあります。

ディグレーションを起こさないために

対策

以上、ディグレーションの原因や影響について述べてきましたが、経験したことがあるエンジニアは、ディグレーションは思い出したくもないトラウマになっている方もいらっしゃると思います。

ディグレーションは野球で例えるなら、好投していたピッチャーが野手の連係ミスから突然乱調になり、あれよあれよという間に失点を重ねて、わけも分からず降板させられるようなものです。この事で、ピッチャーとしての自信を喪失し、ボールを投げられなくなる人もいます。名投手の呼び声が高かったのに、登板機会を失い、2軍に落ちて、そのまま消えていったピッチャーもいます。システムの世界でもディグレーションのせいで、このピッチャーと同じ道を辿るエンジニアもいます。百害あって一利なしのディグレーション、何としても避けたいものです。これから、その忌むべきディグレーションを避ける方法について述べていきます。

影響範囲の調査を着実に行う

ディグレーションの多くがプログラミングのミスで起きますが、そのプログラムミスを防ぐには、プログラム改修の影響範囲を徹底的に調べておく事です。自ら担当したプログラムを修正するのは比較的たやすいため、改修依頼を受けるとプログラマーは簡単に修正作業に着手しがちです。単体テストで修正指示書通りの結果も得られ、そこで安心しがちです。

それが他タスクに重大な影響があるとも知らず、既に自分の仕事は終わったと解放感に包まれます。

プログラム修正作業に着手する前に、全員に改修内容について情報共有し、影響調査をしっかり行っておけば、ディグレーションを回避できたのです。

イレギュラー時の自己判断は厳禁

組織で動く時に、マニュアルなどに載っていない事象に直面した際は、自己判断は厳禁です。上司の判断を仰ぐ、上司が判断できな時は組織で共有し、組織として意思決定することです。また、マニュアルやドキュメントの不備も必ず追記、修正をしましょう。「自分はマニュアルの担当者ではない」と言うようなエンジニアは失格です。便宜上、マニュアル担当者は決まっていますが、マニュアルのオーナーは関係者全員です。マニュアルは全員が担当者だという意識を持って、逐次改定していくことが求められます。またマニュアルに記されていな事が起きた時の対応ルールはきちんと決めておきましょう。

リグレッションテストの範囲を広げてテストする

ディグレーションを回避するためにリグレッションテストがありますが、リグレッションテストは可能な限り広い範囲で実施すべきです。例えば、日次処理の改修だったため、日次処理範囲だけリグレッションテストを行い、月次処理でディグレーションが発生したという事例があります。これも影響調査の漏れが原因ですが、リグレッションテストでは、システム全体図を見て繋がっている関連システムは一通りテスト対象とすべきです。これをすることによって、影響調査の漏れもカバーできます。

システム開発はリスクマネジメントも忘れずに

システムは経営向上や業務改善を目的に行われますが、ディグレーションが生じると、それらの目的がすべて吹き飛んでしまいます。そのディグレーションによる損失を回避、最小限にするためのプロセスがリスクマネジメントです。

リスクマネジメントと経営とは一体ですが、システムも経営の一部です。そのためシステム開発にはリスクマネジメントの視点が欠かせません。エンジニアの皆さんは、常にこの視点を忘れず、ディグレーションとは無縁のシステム開発を心がけてください。

運用テストってどんなテスト?目的や内容、注意すべきポイントとは?
気になる人のXをフォローしよう!
公式LINE
公式YouTube
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供

カテゴリー

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

logologo
Powered by マイナビ AGENT