Реинжиниринг программного обеспечения
Реинжиниринг программного обеспечения — это исследование и изменение существующей системы с целью её восстановления в новой, улучшенной форме, как правило, для модернизации устаревшего унаследованного программного обеспечения при сохранении его основных функций.
Definition
Реинжиниринг программного обеспечения — это процесс изучения предметной системы для её понимания, а затем её повторной реализации или реструктуризации для улучшения её формы или платформы при существенном сохранении её функциональности.
Scope
Эта тема охватывает обратную разработку и восстановление дизайна; реструктуризацию кода и данных; миграцию на новые платформы, языки и архитектуры; обёртывание и стратегии инкрементальной модернизации унаследованных систем; тестирование для сохранения поведения во время трансформации; а также критерии принятия решений о реинжиниринге в сравнении с продолжением поддержки или заменой.
Core questions
- Как восстанавливается дизайн унаследованной системы из её кода и данных?
- Какие стратегии позволяют мигрировать или реструктурировать систему с приемлемым риском?
- Как сохраняется поведение при трансформации реализации?
- Когда реинжиниринг превосходит продолжение поддержки или полную замену?
Key theories
- Обратная разработка и восстановление дизайна
- Чикофски и Кросс определили таксономию, различающую обратную разработку (восстановление представлений более высокого уровня из системы) от редокументирования, реструктуризации и прямой разработки, формируя деятельность по восстановлению дизайна.
- Инкрементальная модернизация унаследованных систем
- Вместо рискованных масштабных переписываний, унаследованные системы модернизируются инкрементально путём внедрения тестов вокруг существующего кода, изоляции точек изменения и постепенной реструктуризации или замены компонентов.
Clinical relevance
Реинжиниринг позволяет организациям продлить срок службы и ценность критически важных унаследованных систем с меньшим риском, чем переписывание с нуля; надёжная стратегия и методы сохранения поведения имеют решающее значение, поскольку унаследованные системы часто содержат незаменимые, недокументированные бизнес-знания.
History
По мере старения крупных систем, созданных в 1960-х — 1980-х годах, обратная разработка и реинжиниринг стали отдельными направлениями в конце 1980-х и 1990-х годов, формализованными таксономией Чикофски и Кросса; практические методы для работы с непроверенным унаследованным кодом позднее были кодифицированы Фезерсом.
Debates
- Инкрементальный реинжиниринг против полной переработки
- Вопрос о том, следует ли модернизировать унаследованную систему инкрементально или переписывать её полностью, является спорным; переписывание обещает чистый лист, но часто приводит к перерасходу средств и потере встроенных знаний, в то время как инкрементальный реинжиниринг безопаснее, но медленнее.
Key figures
- Elliot Chikofsky
- James Cross
- Michael Feathers
Related topics
Seminal works
- chikofsky1990
- feathers2004
- sommerville2015
Frequently asked questions
- В чём разница между рефакторингом и реинжинирингом?
- Рефакторинг вносит небольшие, сохраняющие поведение улучшения в исходный код, обычно как часть текущей разработки; реинжиниринг — это более масштабная деятельность, которая может восстанавливать дизайн и мигрировать целую систему на новую платформу или архитектуру, при этом рефакторинг может быть одной из техник.
- Почему бы просто не переписать унаследованную систему с нуля?
- Унаследованные системы часто воплощают годы накопленных, плохо документированных бизнес-правил; переписывание с нуля рискует потерей этих знаний и обычно приводит к перерасходу средств, поэтому инкрементальный реинжиниринг часто является менее рискованным путём, несмотря на его более медленный темп.