Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диссертация_Иванов.docx
Скачиваний:
9
Добавлен:
23.09.2019
Размер:
1.18 Mб
Скачать
  1. Анализ возможных решений

Первый способ эффективен, если объем изменений внутри компоненты досгаючно велик и трудно локализуем. Если же изменения локальны, (например, затрагивают одну строчку кода или одну процедуру), то затраты на их учет таким способом становятся слишком велики, а надежность - слишком мала. Все изменения кода, которые иначе были бы внесены автоматически путем перегенерации, в такой ситуации разработчику придется вносить «вручную».

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

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

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

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

текстовых файлов, но все они демонстрируют неудовлетворительный результзт при попытке проводить этот процесс полностью автоматически.

Наш опыт показывает, что на практике первый способ обычно сочетается со вторым или третьим: первый способ используется для крупных модификаций компонент, последние два — для внесения небольшого количества хорошо локализуемых изменений. При этом второй способ целесообразно использовать при небольшом суммарном количестве модификаций, а третий - если таких модификаций оказывается много. Трудоемкость первою способа растет линейно от числа изменений, а третьего — как C+log(N), где С — константа, а N — число изменений, причем С достаточно велико.