Lava flow (інколи — lava seca; ) — це антипатерн у програмуванні, який описує ситуацію, коли в програмному коді з часом накопичуються фрагменти, призначення яких більше ніхто точно не знає, але які не видаляють через страх порушити роботу системи.

Такі фрагменти зазвичай з'являються внаслідок експериментів, термінових виправлень або змін вимог, а згодом стають частиною коду, яку розробники бояться змінювати або прибирати.

Антипатерн lava flow був описаний у класичних працях з програмної інженерії.

Походження назви Назва lava flow походить від аналогії з потоками лави під час виверження вулкану. Коли лава застигає, вона перетворюється на тверду масу, форма і внутрішня структура якої можуть бути незрозумілими. Подібним чином у програмному забезпеченні код «застигає» і з часом втрачає зрозуміле призначення.

Опис антипатерну Антипатерн lava flow зазвичай виникає у великих або довготривалих програмних проєктах. Початково код може бути написаний як тимчасове рішення або прототип, але з часом він залишається в системі й починає взаємодіяти з іншими частинами програми.

Основна проблема полягає в тому, що:

немає документації або коментарів; первинні автори коду більше не працюють над проєктом; відсутнє розуміння, чи використовується цей код насправді.

У результаті будь-яка спроба видалити або змінити такий код сприймається як ризик.

Причини виникнення До основних причин появи lava flow належать:

розробка без чіткої архітектури; часті зміни вимог; відсутність рефакторингу; тиск термінів; недостатнє тестування.

Код, написаний «на швидку руку», з часом може стати критично важливою частиною системи, хоча його функціональність ніхто не може чітко пояснити.

Наслідки Наявність lava flow у коді призводить до:

ускладнення підтримки програмного забезпечення; зростання технічного боргу; зниження якості коду; страху перед змінами; збільшення кількості помилок.

Крім того, новим розробникам стає складно зрозуміти систему, що збільшує час адаптації.

Приклад У коді антипатерн може проявлятися у такому вигляді:

Як уникати Для запобігання появі «потоків лави» рекомендується: проводити регулярний рефакторинг коду; підтримувати актуальну технічну документацію; впроваджувати практику код-рев'ю (code review); видаляти застарілий або непотрібний код одразу після того, як він стає неактуальним; забезпечувати покриття коду тестами, щоб мати впевненість при видаленні фрагментів.

Див. також Антипатерни програмування Технічний борг Рефакторинг Мертвий код

Примітки

Джерела Settas, D. «An Anti-Pattern Driven Knowledge Based System for Software Quality Prediction». — 2008.