
- •Лекция 1.Надежное программное средство как продукт технологии программирования
- •1.1.Программа как формализованное описание процесса обработки данных. Программное средство.
- •1.2.Неконструктивность понятия правильной программы.
- •1.3.Надежность программного средства.
- •1.4.Технология программирования как технология разработки надежных программных средств.
- •1.5. Технология программирования и информатизация общества.
- •Лекция 2.Источники ошибок в программных средствах
- •2.1.Интеллектуальные возможности человека.
- •2.2.Неправильный перевод как причина ошибок в программных средствах.
- •2.3.Модель перевода.
- •2.4.Основные пути борьбы с ошибками.
- •Лекция 3.Общие принципы разработки программных средств
- •3.1. 3.1. Специфика разработки программных средств.
- •3.2.3.2. Жизненный цикл программного средства.
- •3.3. Понятие качества программного средства.
- •3.4.Обеспечение надежности основной мотив разработки программных средств.
- •3.5. Методы борьбы со сложностью.
- •3.6. Обеспечение точности перевода.
- •3.7.Преодоление барьера между пользователем и разработчиком.
- •3.8.Контроль принимаемых решений.
- •Лекция 4.Внешнее описание программного средства
- •4.1.Назначение внешнего описания программного средства и его роль в обеспечении качества программного средства.
- •4.2.Определение требований к программному средству.
- •4.3.Спецификация качества программного средства.
- •4.4.Функциональная спецификация программного средства.
- •4.5.Методы контроля внешнего описания программного средства.
- •Лекция 5.Методы спецификации семантики функций
- •5.1.Основные подходы к спецификации семантики функций.
- •5.2.Метод таблиц решений.
- •5.3.Операционная семантика.
- •5.4.Денотационная семантика.
- •5.5.Аксиоматическая семантика.
- •5.6.Языки спецификаций.
- •Лекция 6.Архитектура программного средства
- •6.1.Понятие архитектуры программного средства.
- •6.2.Основные классы архитектур программных средств.
- •6.3.Архитектурные функции.
- •6.4.Контроль архитектуры программных средств.
- •Лекция 7.Разработка структуры программы и модульное программирование
- •7.1.Цель модульного программирования.
- •7.2.Основные характеристики программного модуля.
- •7.3.Методы разработки структуры программы.
- •7.4. Контроль структуры программы.
- •Лекция 8.Объектный подход к разработке
- •8.1.Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств.
- •8.2.Особенности объектного подхода к разработке внешнего описания программного средства.
- •8.3.Особенности объектного подхода на этапе конструирования программного средства.
- •Лекция 9.Разработка программного модуля
- •9.1.Порядок разработки программного модуля.
- •9.2.Структурное программирование.
- •9.3.Пошаговая детализация и понятие о псевдокоде.
- •9.4.Контроль программного модуля.
- •Лекция 10.Доказательство свойств программ
- •10.1.Обоснования программ. Формализация свойств программ.
- •10.2. Свойства простых операторов.
- •10.3.Свойства основных конструкций структурного программирования.
- •10.4.Завершимость выполнения программы.
- •10.5.Пример доказательства свойства программы.
- •Лекция 11.Тестирование и отладка программного средства
- •11.1.Основные понятия.
- •11.2.Принципы и виды отладки программного средства.
- •11.3.Заповеди отладки программного средства.
- •11.4.Автономная отладка программного средства.
- •11.5.Комплексная отладка программного средства.
- •Лекция 12.Обеспечение функциональности и надежности программного средства
- •12.1.Функциональность и надежность как обязательные критерии качества программного средства.
- •12.2.Обеспечение завершенности программного средства.
- •12.3.Обеспечение точности программного средства.
- •12.4.Обеспечение автономности программного средства.
- •12.5.Обеспечение устойчивости программного средства.
- •12.6.Обеспечение защищенности программных средств.
- •12.6.1. Защита от сбоев аппаратуры.
- •12.6.2.Защита от влияния «чужой» программы.
- •12.6.3.Защита от отказов «своей» программы.
- •12.6.4.Защита от ошибок пользователя.
- •12.6.5.Защита от несанкционированного доступа.
- •12.6.6.Защита от защиты.
- •Лекция 13.Обеспечение качества программного средства
- •13.1.Общая характеристика процесса обеспечения качества программного средства.
- •13.2.Обеспечение легкости применения программного средства.
- •13.3.Обеспечение эффективности программного средства.
- •13.4.Обеспечение сопровождаемости программного средства.
- •13.5. Обеспечение мобильности.
- •Лекция 14.Документирование программных средств
- •14.1.Документация, создаваемая и используемая в процессе разработки программных средств.
- •14.2.Пользовательская документация программных средств.
- •14.3.Документация по сопровождению программных средств.
- •Лекция 15.Управление разработкой и аттестация программного средства.
- •15.1.Назначение и процессы управления разработкой программного средства.
- •15.2.Структура управления разработкой программных средств.
- •15.3.Планирование и составление расписаний по разработке пс.
- •Лекция 16.Компьютерная поддержка разработки и сопровождения программных средств
- •16.1.Инструменты разработки программных средств.
- •16.2. Инструментальные среды разработки и сопровождения программных средств и принципы их классификации.
- •16.3.Основные классы инструментальных сред разработки и сопровождения программных средств.
- •16.4. Инструментальные среды программирования.
- •16.5.Понятие компьютерной технологии разработки программных средств и ее рабочие места.
- •16.6.Инструментальные системы технологии программирования.
10.2. Свойства простых операторов.
Для пустого оператора справедлива теорема
Теорема 9.1. Пусть P предикат над информационной средой. Тогда имеет место свойство {P}{P}.
Доказательство этой теоремы очевидно: пустой оператор не изменяет состояние информационной среды (в соответствии со своей семантикой), поэтому его предусловие сохраняет истинность и после его выполнения.
Для оператора присваивания справедлива теорема
Теорема 9.2. Пусть информационная среда IS состоит из переменной X и остальной части информационной среды RIS:
IS = (X, RIS).
Тогда имеет место свойство
{Q(F(X, RIS), RIS)} X:= F(X, RIS) {Q(X, RIS)} ,
где F(X, RIS) некоторая однозначная функция, Q предикат.
Доказательство. Пусть (X0, RIS0) некоторое произвольное состояние информационной среды IS, и пусть перед выполнением оператора присваивания предикат Q(F(X0, RIS0), RIS0) является истинным. Тогда после выполнения оператора присваивания будет истинен предикат Q(X, RIS), так как X получит значение F(X0, RIS0), а состояние RIS не изменяется данным оператором присваивания, и, следовательно, после выполнения этого оператора присваивания в этом случае
Q(X, RIS)=Q(F(X0, RIS0), RIS0).
В силу произвольности выбора состояния информационной среды теорема доказана.
Примером свойства оператора присваивания может служить пример 9.1.
10.3.Свойства основных конструкций структурного программирования.
Рассмотрим теперь свойства основных конструкций структурного программирования: следования, разветвления и повторения.
Свойство следования выражает следующая
Теорема 9.3. Пусть P, Q и R предикаты над нформационной средой, а S1 и S2 обобщенные операторы, обладающие соответственно свойствами
{P}S{Q}
и
{Q}S2{R}.
Тогда для составного оператора
S1; S2
имеет место свойство {P} S1; S2 {R} .
Доказательство. Пусть для некоторого состояния информационной среды перед выполнением оператора S1 истинен предикат P. Тогда в силу свойства оператора S1 после его выполнения будет истинен предикат Q. Так как по семантике составного оператора после выполнения оператора S1 будет выполняться оператор S2, то предикат Q будет истинен и перед выполнением оператора S2. Следовательно, после выполнения оператора S2 в силу его свойства будет истинен предикат R, а так как оператор S2 завершает выполнение составного оператора (в соответствии с его семантикой), то предикат R будет истинен и после выполнения данного составного оператора, что и требовалось доказать.
Например, если имеют место свойства (9.2) и (9.3), то имеет место и свойство
{n<m} n:= n + k; n:= 3n {n<3(m + k)}.
Свойство разветвления выражает следующая
Теорема 9.4. Пусть P, Q и R предикаты над информационной средой, а S1 и S2 обобщенные операторы, обладающие соответственно свойствами
{P,Q} S1{R} и {P,Q} S2 {R}.
Тогда для условного оператора
ЕСЛИ P ТО S1ИНАЧЕ S2 ВСЕ ЕСЛИ
имеет место свойство
{Q} ЕСЛИ P ТО S1ИНАЧЕ S2 ВСЕ ЕСЛИ {R} .
Доказательство. Пусть для некоторого состояния информационной среды перед выполнением условного оператора истинен предикат Q. Если при этом будет истинен также и предикат P, то выполнение условного оператора в соответствии с его семантикой сводится к выполнению оператора S1. В силу же свойства оператора S1 после его выполнения (а в этом случае и после выполнения условного оператора) будет истинен предикат R. Если же перед выполнением условного оператора предикат P будет ложен (а Q, по-прежнему, истинен), то выполнение условного оператора в соответствии с его семантикой сводится к выполнению оператора S2. В силу же свойства оператора S2 после его выполнения (а в этом случае и после выполнения условного оператора) будет истинен предикат R. Тем самым теорема полностью доказана.
Прежде чем переходить к свойству конструкции повторения следует отметить полезную для дальнейшего
Теорему 9.5. Пусть P, Q, P1 и Q1 предикаты над информационной средой, для которых справедливы импликации
P1 P и Q Q1,
и пусть для оператора S имеет место свойство {P}S{Q}.Тогда имеет место свойство {P1}S{Q1} .
Эту теорему называют еще теоремой об ослаблении свойств.
Доказательство. Пусть для некоторого состояния информационной среды перед выполнением оператора S истинен предикат P1. Тогда будет истинен и предикат P (в силу импликации P1 P). Следовательно, в силу свойства оператора S после его выполнения будет истинен предикат Q, а значит и предикат Q1 (в силу импликации Q Q1). Тем самым теорема доказана.
Свойство повторения выражает следующая
Теорема 9.6. Пусть I, P, Q и R предикаты над информационной средой, для которых справедливы импликации
P I и (I,Q) R ,
и пусть S обобщенный оператор, обладающий свойством {I}S{I}.
Тогда для оператора цикла
ПОКА Q ДЕЛАТЬ S ВСЕ ПОКА
имеет место свойство
{P} ПОКА Q ДЕЛАТЬ S ВСЕ ПОКА {R} .
Предикат I называют инвариантом оператора цикла.
Доказательство. Для доказательства этой теоремы достаточно доказать свойство
{I} ПОКА Q ДЕЛАТЬ S ВСЕ ПОКА {I,Q}
(по теореме 9.5 на основании имеющихся в условиях данной теоремы импликаций). Пусть для некоторого состояния информационной среды перед выполнением оператора цикла истинен предикат I. Если при этом предикат Q будет ложен, то оператор цикла будет эквивалентен пустому оператору (в соответствии с его семантикой) и в силу теоремы 9.1 после выполнения оператора цикла будет справедливо утверждение (I,Q). Если же перед выполнением оператора цикла предикат Q будет истинен, то оператор цикла в соответствии со своей семантикой может быть представлен в виде составного оператора
S; ПОКА Q ДЕЛАТЬ S ВСЕ ПОКА
В силу свойства оператора S после его выполнения будет истинен предикат I, и возникает исходная ситуация для доказательства свойства оператора цикла: предикат I истинен перед выполнением оператора цикла, но уже для другого (измененного) состояния информационной среды (для которого предикат Q может быть либо истинен либо ложен). Если выполнение оператора цикла завершается, то, применяя метод математической индукции, мы за конечное число шагов придем к ситуации, когда перед его выполнением будет справедливо утверждение (I,Q). А в этом случае, как было доказано выше, это утверждение будет справедливо и после выполнения оператора цикла. Теорема доказана.
Например, для оператора цикла из примера (9.4) имеет место свойство
{n>0, p=1, m=1} ПОКА m <> n ДЕЛАТЬ
m:=m+1; p:= pm
ВСЕ ПОКА {p= n!}.
Это следует из теоремы 9.6, так как инвариантом этого оператора цикла является предикат p= m! и справедливы импликации
(n>0, p=1, m=1) p= m! и (p= m!, m= n) p= n!