Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Структурность управляющих конструкций

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

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

 

Оператор варианта

Структурированная программа не должна содержать операторы перехода в произвольную точку текста, композиционно не связанную с текущей точкой. В версии языков программирования (например, Турбо Паскаль 7.0) включаются дополнительные операторы (например, Exit, Continue и Break), способствующие созданию структурных управляющих конструкций без применения операторов перехода.

 

Надежное программирование

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

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

 

Понятия и средства надежного программирования

Надежность является частью более общего понятия - "качество". Качественная программа не только надежна, но и компактна, совместима с другими программами, эффективна, удобна в сопровождении и вполне понятна.

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

1. Надежный стиль программирования обеспечивается применением способов надежного программирования. Эти способы представляют собой совокупность приемов программирования. Каждый из них состоит в применении определенных языковых средств и композиций в конкретных ситуациях, алгоритмах, схемах вычислений и представлениях структур данных.
Основная цель наших лекций - изложение таких приемов с иллюстрацией их применения для конкретных алгоритмов, схем вычислений и представлений данных.

 

2. Разработаны (и применяются в крупных программных продуктах) методы защиты от ошибок. Они позволяют создавать программы, работающие при наличии ошибок (ошибок пользователя, программной среды, сбоев аппаратуры).

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

 

3. Большое внимание в надежном программировании уделяется вопросам тестирования программ. Отметим здесь лишь некоторые специальные программные инструментальные средства, которые рекомендуется применять при тестировании.
- Генератор данных для тестирования, создающий тесты, удовлетворяющие заданным требованиям.
- Диспетчер тестирования. При нисходящем методе разработки и тестирования программ частями такого диспетчера являются заглушки модулей. При восходящем методе диспетчер тестирования разрабатывается как совокупность программ, каждая из которых тестирует один или несколько разрабатываемых модулей проекта.
- Имитатор внешней среды (в противоположность диспетчеру тестирования) используется как средство тестирования программы в целом. Имитаторы, как правило, очень сложны. Они особенно полезны при разработке программ, работающих в реальном масштабе времени - проверяется взаимодействие с внешними устройствами (космическими аппаратами, самолетами, датчиками от производственных процессов).

Разнообразие внешних воздействий и взаимодействие с внешней средой описывается с помощью сценариев имитации окружающей среды.

 

Требования к надежным программам

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

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

При построении устойчивой (безотказной) программы возникают два вопроса:

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

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

Отсюда следует, что один из важнейших принципов надежного программирования - определение (подтверждение) области допустимых значений данных на основе анализа и тестирования программы.

Ответ на второй вопрос заключается в применении приемов надежного программирования.

Вся совокупность таких приемов естественным образом разбивается на две группы:

- как нужно представлять данные,
- какие применять средства и способы обработки данных.

Программа, построенная с применением приемов надежного программирования, должна:

1) сообщать пользователю об области допустимых значений исходных данных при формулировке задачи или при вводе данных;

2) контролировать значения исходных данных при их вводе, сообщать о невозможности выполнения вычислений для недопустимых значений;

3) обеспечивать для каждой из подобластей допустимых значений соответствующие ей вычисления, которые могут отличаться:
- типами данных, участвующих в вычислениях,
- алгоритмами, схемами вычислений;

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


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




 

Комментарии:


Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru