- •Надёжность программного обеспечения.
- •Показатели надёжности.
- •Принципиальная схема разработки программных средств. (Технология, процесс создания).
- •Способы описания алгоритмов.
- •Описание алгоритма с помощью таблиц решения.
- •Виды программных документов.
- •Эксплуатационные документы.
- •Классификация документов.
- •Работы, выполняемые на стадии «Эскизный проект».
- •Простейшие пути повышения качества программ.
- •Классификация ошибок.
- •Сквозной структурный контроль.
- •Стиль программирования и качества программ.
- •Графическая иерархическая документация. Наглядная таблица содержания. Обзорные диаграммы. Детальные диаграммы. Верификация программ. Последовательность этапов верификации. Выводы.
- •Терминология и обозначения.
- •Очевидно, что g и h являются простыми программами, иначе f была бы не простой.
- •Число управляющих линий в блоке h удовлетворяет соотношению:
- •Общая структура case средств. Технология структурного программирования. Общая структура коллектива. Трудовые затраты.
- •Современные методы и средства разработки прикладных программных средств. Особенности case технологий. Общая характеристика технологии создания прикладных программных средств.
- •Классификация программного обеспечения.
- •Языки программирования.
- •Методология объектно-ориентированного программирования. Понятие объекта, понятие класса, характеристики объекта, характеристики класса. Языки объектно-ориентированного программирования.
- •Особенности рабочего интерфейса
- •Разработка диаграммы классов в среде
- •Диаграмма классов
- •Разработка диаграммы вариантов использования в среде Rational Rose.
- •Разработка диаграммы последовательности в среде Rational Rose.
- •Разработка диаграммы состояний в среде Rational Rose.
Сквозной структурный контроль.
Развитием методов ручной проверки является разработанный и широко применяющийся фирмой IBM способ организации коллективной проверки получившей название сквозного структурного контроля.
Суть метода: при планировании работы коллектива над проектом в каждый этап разработки системы включается несколько контрольных сессий.
Пример: рассмотрим организацию сессии по проверке результатов работы программиста.
Примерно за неделю до сессии проверяемый подбирает контролеров (число которых обычно невелико). Одновременно с приглашением на сессию проверяемый вручает контролерам копии подлежащих проверке материалов (ТЗ, блок-схемы программ, структуру данных, описание, спецификации, тексты). Контролеры изучают полученный материал. Сессия начинается с определения целей сессии и вопросов по изученному материалу. Проверяемый дает объяснение, после чего переходит к предмету обсуждения.
Основные задачи контролеров состоят в том, чтобы найти ошибки упущенные отклонениями. Проверяющие ведут работы по накоплению и систематизации ошибок во время сессии по всему пакету.
Эта работа служит двум целям:
Позволяет совершенствовать работу контролеров;
Дает хороший материал для повышения квалификации программиста.
Стиль программирования и качества программ.
Программы пишут для чтения. Многократно ее читает сам программист во время написания и отладки, транслятор - при переводе программы на машинный язык. В процессе сопровождения программы читает множество людей. И если транслятору безразлично, каким стилем написана программа, а важно, чтобы в ней не было ошибок, то для человека стиль существенно облегчает прочтение и понимание программы.
Но главное, что в ясно написанной программе меньше ошибок, такую программу проще использовать, сопровождать, объединить с другими программами, на нее проще составлять документацию.
Не следует думать, что структурное программирование и использование языков высокого уровня сами по себе гарантируют хороший стиль. Необходимо вырабатывать умение писать просто и ясно.
Структура данных играет важнейшую роль при написании удобно читаемой программы. Поэтому она должна выбираться не менее тщательно, чем алгоритм решения задачи. Имена и метки должны выбираться так, чтобы большую смысловую нагрузку и тем самым облегчить чтение программы. Программисты не всегда уделяют достаточно внимания выбору идентификатора.
В мировой практике получил широкое распространение способ идентификации, объединяющий в одно слово начальные отрезки слов, описывающих переменную, метку и т.д. При этом длина отрезка должна быть такая, чтобы представляемое ею слово довольно легко восстанавливалось подготовленными читателями и автором программы.
Комментарий должен содержать максимум информации. Также целесообразно помечать цель использованных переходов и каждую ветвь в разветвлении вычислительного процесса.
Графическая иерархическая документация. Наглядная таблица содержания. Обзорные диаграммы. Детальные диаграммы. Верификация программ. Последовательность этапов верификации. Выводы.
Расширение круга задач, решаемых на ЭВМ, выдвигает потребность в средстве отображения не только логики программы, но и её функций.
В процессе проектирования важно точно выразить, что должна делать проектируемая программа. Такую информацию лучше всего представлять в наглядной графической форме.
Один из вариантов подобного инструмента является ГИД, применяемая фирмой IBM. Методика ГИД позволяет документировать именно функции системы. Полный комплект ГИД состоит из последовательности диаграмм, описывающих в текстово-графической форме функции системы, начиная о самых общих и заканчивая весьма детальными.
Сначала выделяются и описываются важнейшие функции системы. Затем каждая из этих функций подразделяется на ряд подфункций нижнего уровня, каждая из которых также описывается и т.д. Это позволяет представить структуру функций системы в иерархической упрощённой форме на различных уровнях детализации, так что функции нижнего уровня в совокупности реализуют функцию верхнего уровня, из которых они выделены.
Типичный пакет ГИД содержит три вида документов:
наглядная таблица содержания (рис.1);
обзорная диаграмма (рис.2);
детальная диаграмма (рис.3).
1. наглядная таблица содержания содержит имена и цифровые индексы всех обзорных и детальных диаграмм пакета, а также в графической форме показывает взаимосвязь отдельных функций разрабатываемой программы. Основное назначение этой таблицы заключается в том, чтобы облегчить поиск информации нужной степени подробности непосредственно по индексу без перелистывания всего пакета.
Рис.1.
2. обзорная диаграмма – это диаграмма высокого уровня, описывающая важнейшие функции и ссылающиеся на диаграммы более низкого уровня – детальные диаграммы, необходимые для описания функции до нужной степени подробности. На обзорной диаграмме в обобщённой форме показаны разделы «Вход», «Обработка», «Выход».
Раздел «Обработка» представляет собой последовательность пронумерованных шагов, описывающих реализуемые функции.
Раздел «Вход» содержит элементы данных, используемых в процессе обработки. Элементы входных (выходных) данных и шаги обработки, на которых эти данные используются, соединяются стрелками.
Вход
Обработка
Выход
1
2
3
4
5
6
7
8
4.0
3.0
2.0
Рис.2.
3. детальная диаграмма – это вид документов, представляющих собой информацию об основных базовых элементах всего пакета ГИД. Детальная диаграмма содержит раздел «Расширенное описание», который уточняет, детализирует шаги раздела «Обработка» и ссылается на программы, связанные с шагами обработки.
Особенностью программного продукта является практическая невозможность не в тривиальных случаях произвести всестороннее и полное его испытание с целью выявления ошибок.
Известное высказывание Дейкстры говорит о том, что экспериментальное тестирование программ может служить доказательством наличия в них ошибок, но никогда не докажет их отсутствие. Поэтому естественно стремление программистов найти возможность формулировать и доказывать некоторые утверждения, касающиеся правильности созданной программы подобно тому, как в математике формулируются и доказываются теоремы и решения.
Верификация – идея математического доказательства корректности программ.
Верификация обычно сводится к доказательству того факта, что программа является корректной, относительно её входной и выходной спецификаций.
Наиболее известный метод называется методом индуктивных утверждений.
В этом методе первый шаг состоит в записи утверждений, относительно свойств входных и выходных данных программы, а также результатов в ряде промежуточных точек, называемых точками разреза. Эти утверждения формулируются в некоторой формально-логической системе. На основе этих утверждений и семантики операторной схемы программы путем определённых преобразований формулируются верификационные условия, а затем эти условия доказываются.
Если они оказываются истинными, то программа корректна относительно входных и выходных данных.
Если доказать истинность условий невозможно, то либо в программе есть ошибки, либо ошибки есть в процедуре доказательства (например, неверное утверждение в некоторой точке разреза).
Если программист хочет написать правильную программу, ему необходимо выполнить следующие этапы:
написать программу;
определить входные и выходные условия для этой программы;
разрезать циклы и снабдить каждую точку разреза индуктивным утверждением;
получить верификационные условия;
доказать истинность верификационных условий. Если это не удается, то не исключено, что какое-то индуктивное утверждение записано не верно или программа содержит ошибку.
Очевидно, что методы верификации найдут широкое применение в практике в том случае, если удастся их формировать настолько явно, что можно будет осуществлять верификацию программ с помощью ЭВМ.
Выводы:
Использование в практике программирования систем доказательства правильности программ эффективно лишь при помощи ЭВМ.
Методы математического доказательства теорем в настоящее время интенсивно развиваются и совершенствуются. Их применение в программировании способствует дальнейшему прогрессу в этой области.
Идеи доказательства правильности программ оказывают свое влияние на общую культуру программирования. Необходимость формального описания входных и выходных данных побуждает программиста четко определять интерфейсы между модулями программы. Механизм утверждений представляет собой превосходное средство спецификаций модулей. Далее, пытаясь изобрести индуктивные утверждения, программист вынужден более тщательно и глубоко анализировать свою программу и таким образом обнаруживать в ней ошибки.
Структурное программирование. Понятие, основные положения. Фундамент структурного программирования. Терминология и математические обозначения, используемые в структурном программировании. Функция состояния программы.
В настоящее время структурное программирование – это целая дисциплина, объединяющая несколько взаимосвязанных способов создания ясных, лёгких для понимания программ. Другое направления совершенствования процесса разработки программ – развитие программно-инструментальных средств программирования (СУБД, Excel).