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

Материал из ПИЭ.Wiki

Перейти к: навигация, поиск

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. сообщать пользователю об области допустимых значений исходных данных при формулировке задачи или при вводе данных;
  2. контролировать значения исходных данных при их вводе, сообщать о невозможности выполнения вычислений для недопустимых значений;
  3. обеспечивать для каждой из подобластей допустимых значений соответствующие ей вычисления, которые могут отличаться:
    • типами данных, участвующих в вычислениях;
    • алгоритмами, схемами вычислений.
  4. контролировать промежуточные результаты вычислений, прекращать вычисления или изменять их порядок при обнаружении недопустимых ситуаций.

Литература

  1. М.М. Бежанова, Л.А. Москвина. Практическое программирование. Приемы создания программ на языке Паскаль. М.: Научный Мир, 2000, 270 с. ISBN 5-89176-112-2
Просмотры
Инструменты

Besucherzahler russian mail order brides
счетчик посещений
Rambler's Top100
Лингафонные кабинеты  Интерактивные доски  Интерактивная приставка Mimio Teach