Помощь в написании студенческих работ
Антистрессовый сервис

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

РефератПомощь в написанииУзнать стоимостьмоей работы

Консеквенты продукционных правил условных операторов полностью идентичны друг другу. Если антецеденты продукционных правил второго и последующего операторов не содержат переменных, значения которых могут меняться на всем промежутке программы между операторами, включая консеквенты их продукционных правил, то такие операторы можно объединить в один условный оператор путем дизъюнкции антецедентов… Читать ещё >

Обзор проблемных ситуаций в коде программ (реферат, курсовая, диплом, контрольная)

В процессе тестирования, отладки или анализа программ самого разного уровня не редки ситуации, когда в их коде встречаются операторы, которые полностью идентичны и при этом либо следуют друг за другом, либо повторяются через некоторое число операторов. Такие операторы следует трактовать, какповторяющиеся, но нет однозначного ответа на вопрос, что с ними требуется сделать. Необходимо прежде проанализировать содержимое (структуру, составные элементы) таких операторов и только потом принимать решение об их дальнейшем использовании, объединении или удалении [1].

Рассмотрим часто встречающиеся проблемные ситуации в коде программ. Для упрощения понимания все примеры программ приведены на языке Pascal.

1) переменная (логического или числового типа) многократно (n раз) инициализируется на некотором участке (фрагменте) программы без использования ее значения в каком-либо выражении (логическом или функциональном). Например,.

a := 5;

b := 7;

a := 8;

a := 9;

В такой ситуации возможны следующие варианты:

  • а) переменная не связана с каким-либо внешним по отношению к программе параметром и/или базой данных. В данном случае можно утверждать, что первые n-1 инициализаций избыточны и следует оставить лишь последнюю (n) инициализацию данной переменной;
  • б) переменная связана с каким-либо внешним параметром и/или базой данных. В данном случае невозможно точно утверждать, что какая-либо другая переменная, используемая в выражениях между инициализациями данной переменной, не зависит от ее значения в те или иные моменты времени. Чтобы установить истину надо определить функциональные связи, или зависимости, между всеми переменными на данном участке программы при их объявлении;
  • в) операторы инициализации следуют один за другим без каких-либо других операторов между ними. В данном случае следует поступить так же, как в п. 1, а), т. е. удалить первые n -1 инициализаций, т. к. иметь вес будет лишь последняя.
  • 2) антецеденты продукционных правил условных операторов полностью идентичны друг другу. Например,

if a > 5 then inc (b);

if a > 5 then dec (c);

В этой ситуации возможны следующие варианты:

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

Если операторы, приведенные выше, являются взаимодополняющими, то их объединение будет иметь вид.

if a > 5 then.

begin.

inc (b);

dec (c);

end;

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

  • б) между условными операторами находится n других операторов. Для того чтобы отнести данные операторы к п. 2, а) необходимо выполнение следующих условий:
    • — переменные, включенные в антецеденты правил обоих условных операторов, не должны менять свои значения на всем участке программы между операторами;
    • — переменные, включенные в консеквенты правил второго и последующего операторов, не должны использоваться на протяжении всего участка программы между операторами.
    • 3) консеквенты продукционных правил условных операторов полностью идентичны друг другу. Если антецеденты продукционных правил второго и последующего операторов не содержат переменных, значения которых могут меняться на всем промежутке программы между операторами, включая консеквенты их продукционных правил, то такие операторы можно объединить в один условный оператор путем дизъюнкции антецедентов. pascal оператор компиляция

Например, операторы.

if a > 5 then inc (b);

if a < 9 then inc (b);

можно объединить в один условный оператор

if (a > 5) or (a < 9) then inc (b);

4) предусловия, постусловия или параметры операторов цикла полностью идентичны друг другу. Например,.

while a > 5 do (или for i := 0 to 5 do).

begin.

end;

while a > 5 do (или for i := 0 to 5 do).

begin.

end;

В этой ситуации варианты будут аналогичны п. 2, а) и б).

5) переменные, значения которых изменяются в теле операторов цикла [3], одновременно используются в качестве их параметров (оператор for), в предусловиях или постусловиях (операторы while … do и do … while соответственно).

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

В подобной ситуации необходим строгий контроль над возможными вариантами значений переменных, способных дать начало бесконечному циклу, как, например, в случае.

for i := 0 to 10 do.

begin.

dec (i);

end;

где переменная i на каждой итерации цикла одновременно увеличивает и уменьшает (в процессе выполнения оператора декремента dec (i)) свое значение на единицу.

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

Некоторые из описанных выше ситуаций можно избежать, используя современные версии компиляторов и сред разработки программ. Так, разработчики Pascal ABC и Embarcadero Delphi XE3 установили запрет по умолчанию на компиляцию программы при изменении в теле операторов цикла их параметров, как в примере, приведенном в п. 5.

В то же время следующий код в Pascal ABC (версия 2.0, сборка 529) и Embarcadero Delphi XE3 (version 17.0.4770.56 661) был откомпилирован без ошибок:

i := -1;

while i < 0 do.

begin.

i := i — 0;

end;

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

Все перечисленные ситуации объединяет одно — это необходимость в разработке методов и/или правил, которых необходимо придерживаться для создания семантически верного программного кода. Автором предлагается использовать в процессе разработки программ методику анализа структуры многомерного интервально-логического регулятора (МИЛР), отличительной особенностью которого является [4, 5] строгое задание на начальном этапе проектирования системы автоматического регулирования интервалов значений, которые могут принимать переменные-параметры в процессе эксплуатации, что дает возможность просчитать все возможные ситуации и выявить повторяющиеся, взаимодополняющие или противоречащие друг другу операторы. Семантический анализ программ МИЛР при этом выполняется автоматически при помощи специального программного обеспечения [6].

Библиографический список

  • 1. Антипин А. Ф. Вопросы автоматизации семантического анализа программ // Автоматизация, телемеханизация и связь в нефтяной промышленности. 2014. № 7. С. 26−30.
  • 2. Антипин А. Ф. Сравнительный анализ быстродействия дискретно-логического регулятора // Программные продукты и системы. 2010. № 1. С. 75−77.
  • 3. Степашина Е. В., Мустафина Е. А. Численный алгоритм уточнения механизма химической реакции DRGEP-методом // Журнал Средневолжского математического общества. 2011. Т. 12. № 3. С. 122.
  • 4. Антипин А. Ф. Способ анализа программного кода автоматизированной системы управления технологическими процессами // Автоматизация, телемеханизация и связь в нефтяной промышленности. 2013. № 10. С. 21−25.
  • 5. Антипин А. Ф. Системы управления технологическими процессами на базе многомерных логических регуляторов // Автоматизация и современные технологии. 2014. № 1. С. 12−18.
  • 6. Антипин А. Ф. Об одном способе анализа структуры многомерного четкого логического регулятора // Прикладная информатика. 2012. № 5. С. 30−36.
Показать весь текст
Заполнить форму текущей работой