Переписывание в компьютерном программировании — это действие или результат повторной реализации значительной части существующей функциональности без повторного использования ее исходного кода . Когда переписывание вообще не использует существующий код, принято говорить о переписывании с нуля .
Программное обеспечение обычно переписывается, если выполняется одно или несколько из следующих условий:
Несколько инженеров-программистов, таких как Джоэл Спольски [1], предостерегали от полного переписывания, особенно в условиях ограничений по графику или конкурентного давления. Хотя разработчики изначально могут приветствовать возможность исправить исторические ошибки дизайна, переписывание также отбрасывает те части дизайна, которые работают так, как требуется. Переписывание обязывает команду разработчиков предоставлять не только новые функции, но и все те, которые существуют в предыдущем коде, при этом потенциально внося новые ошибки или регрессии ранее исправленных ошибок. [2] [3] Переписывание также мешает отслеживанию неисправленных ошибок в старой версии. [4]
Инкрементальное переписывание — это альтернативный подход, при котором разработчики постепенно заменяют существующий код вызовами в новую реализацию, расширяя эту реализацию до тех пор, пока она полностью не заменит старую. Этот подход позволяет избежать значительной потери функциональности во время переписывания. Программная инженерия Cleanroom — это другой подход, который требует от команды работать с исчерпывающей письменной спецификацией функциональности программного обеспечения без доступа к его коду. [5]
Проект Netscape по улучшению HTML-разметки в Navigator 4 был приведен в качестве примера неудачной переписывания. Новый движок разметки ( Gecko ) был разработан независимо от Navigator и не интегрировался легко с кодом Navigator; поэтому сам Navigator был переписан вокруг нового движка, сломав многие существующие функции и задержав выпуск на несколько месяцев. Тем временем Microsoft сосредоточилась на постепенных улучшениях Internet Explorer и не столкнулась с теми же препятствиями. [3] [6] По иронии судьбы, сам Navigator был успешной чистой перепиской NCSA Mosaic под контролем разработчиков этой программы. См. Войны браузеров .
Некоторые проекты, упоминающие о крупных переписываниях в своей истории: