たとえるなら
家のリフォームで新しい棚を取り付けたら、隣のドアが棚にぶつかって開かなくなった——そんな出来事です。新しくした場所そのものは問題なくても、まわりの「今まで普通に使えていた場所」に思わぬ影響が出てしまうことがあるのです。
もう少しくわしく
デグレは「デグレード(degrade: 品質が下がる)」を略した和製の現場用語で、修正や機能追加のせいで、これまで正しく動いていた機能が壊れてしまうことを指します。「先祖返り」と呼ばれることもあり、英語圏ではリグレッション(regression: 後戻り)という言葉が同じ意味で使われます。
なぜこんなことが起きるのでしょうか。プログラムの部品は互いに影響し合っていて、一見関係なさそうな場所同士が裏でつながっていることが珍しくないからです。ログイン画面を直したつもりが、同じ部品を使っていた会員登録画面まで動かなくなる——コードのつながりをすべて覚えておくことは誰にもできないため、経験豊富なエンジニアでもデグレを完全には避けられません。
そこで現場では、デグレを仕組みで捕まえる工夫をしています。代表が、修正のたびに既存機能が壊れていないかを確かめ直すリグレッションテスト(回帰テスト)です。このテストをプログラムで自動化しておけば、修正のたびに何百項目もの確認を機械が数分でやってくれます。ほかにも、変更内容を別のエンジニアが確認するコードレビューや、変更履歴の記録(Git)で「いつから壊れたか」をさかのぼれるようにしておくことが、デグレ対策の定番です。
現場での使われ方
「この修正、デグレってないよね?」
直した箇所以外の機能が巻き添えで壊れていないか、確認したかを問う定番のやりとりです。「デグレる」と動詞化して使われます。
「デグレが見つかったので、リリースは延期です」
公開前の最終確認で、以前は動いていた機能の不具合が見つかった状況。品質を守るための苦渋の判断としてよくある場面です。
よくある質問
デグレとバグの違いは何ですか?
デグレもバグの一種です。バグはプログラムの誤り全般を指し、そのうち「前は正しく動いていたのに、修正や機能追加のせいで壊れたもの」を特にデグレと呼びます。新機能が最初から動かないのは単なるバグで、デグレとは呼びません。
デグレとリグレッションは同じ意味ですか?
ほぼ同じ意味です。デグレは日本の現場で定着した略語、リグレッションは英語圏でも通じる言い方です。既存機能が壊れていないか確かめるテストは、日本でも「リグレッションテスト(回帰テスト)」と呼ぶのが一般的です。