Листинг 1. Упрощение условия

-- Сложное условие

if not (A > В and (С < D or not (E > F)))...

-- Упрощенное условие

if А <= В and (С <= D or Е > F)...


Доказано, что любую программу можно переписать с помощью простых условных операторов if-then-else и циклов while-loop, при этом можно исключить все безусловные операторы перехода. Эта теорема является основой автоматической ре­структуризации программ. Этапы такого преобразования программ показаны на рис. 6. Сначала программа представляется в виде ориентированного граф, после чего создается структурированная программа без использования операторов перехода.

Рис.6. Автоматическая реструктуризация программ

Созданный ориентированный граф показывает поток передачи управления в про­грамме. К этому графу применяются методы упрощения и преобразования, в результате чего находятся и устраняются неиспользуемые части кода. После этого генерируется но­вая программа, при этом операторы безусловного перехода заменяются циклами и услов­ными операторами. Такая программа может быть написана как на исходном языке, так и на любом другом (например, программу на языке FORTRAN можно конвертировать в про­грамму на С).

Автоматизированный способ реструктуризации программ имеет свои проблемы.

1. Потеря комментариев. Если в программе есть встроенные комментарии, они будут утеряны в процессе реструктуризации.

2. Утрата документации. По той же причине обычно нарушается соответствие между новой программой и документацией на исходную программу. Однако в большинстве случаев это не так уж важно, поскольку документация и комментарии уже устарели.

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

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

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

• интенсивность сбоев в работе программы;

• процентное соотношение кода, измененного на протяжении года;

• сложность компонентов.

При преобразовании структуры программ также следует учитывать степень соответст­вия программ или системных компонентов существующим стандартам.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: