ScholarGate
Ассистент

Реинжиниринг программного обеспечения

Реинжиниринг программного обеспечения — это исследование и изменение существующей системы с целью её восстановления в новой, улучшенной форме, как правило, для модернизации устаревшего унаследованного программного обеспечения при сохранении его основных функций.

Найти тему в PaperMindСкороFind papers & topics
Tools & resources
Скачать слайды
Learn & explore
ВидеоСкоро

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

В чём разница между рефакторингом и реинжинирингом?
Рефакторинг вносит небольшие, сохраняющие поведение улучшения в исходный код, обычно как часть текущей разработки; реинжиниринг — это более масштабная деятельность, которая может восстанавливать дизайн и мигрировать целую систему на новую платформу или архитектуру, при этом рефакторинг может быть одной из техник.
Почему бы просто не переписать унаследованную систему с нуля?
Унаследованные системы часто воплощают годы накопленных, плохо документированных бизнес-правил; переписывание с нуля рискует потерей этих знаний и обычно приводит к перерасходу средств, поэтому инкрементальный реинжиниринг часто является менее рискованным путём, несмотря на его более медленный темп.

Methods for this concept

Related concepts