Методы структурного программирования
Структурное программирование — это программирование в соответствии с заранее определенным набором правил и принципов, облегчающих восприятие и отладку программ, повышающих их надежность, гибкость и эффективность.
Методы структурного программирования
1. Проектирование и кодирование сверху вниз. Если проект большой, то он разбивается на части, которые представляют собой древовидную структуру. Сначала задача описывается на естественном языке, в дальнейшем проект постепенно уточняется, и на каждом таком шаге выявляются детальные функции. Таким образом, задача разбивается на подзадачи до тех пор, пока они не станут настолько простыми, что каждой из них будет соответствовать один программный модуль.
Достоинства:хорошая комплексная отладка, заказчик участвует в проектировании, промежуточные результаты можно показать заказчику.
Недостатки:слабая автономная отладка модулей, наличие программ‑заглушек.
Обычно для простых проектов применяется метод «сэндвича». Для одних частей используется метод нисходящего, а для других — метод восходящего проектирования.
2. Модульное программирование ‑процесс разбиения программы на отдельные модули. Модуль ‑ это последовательность логически связанных фрагментов, оформленных как отдельная часть программы.
Свойства модуля: возникает в результате отдельной компиляции; вызывается по его имени; возвращает управление тому, кто его вызывал; может обращаться к другим модулям, непосредственно нижестоящим в схеме иерархии; должен быть небольшого размера; должен иметь один вход и один выход; не должен сохранять историю своих вызовов для управления своим функционированием; обладает единственной функцией; должен быть независимым от других модулей; должен содержать тесно связанные элементы; должен проверять аргументы; при возникновении в модуле ошибок управление должно возвращаться обратно; должен быть замкнутым.
3. Защитное программирование. Это такой стиль написания программ, при котором появляющиеся ошибки легко обнаруживаются и идентифицируются программистом. Средства защитного программирования: все входные данные или действия пользователя подлежат обязательной проверке; принцип немедленного обнаружения ошибок; изолирование последствий ошибок. Для предотвращения ошибок в программе рекомендуется не применять непроверенные способы программирования. Не используйте принцип умолчания (когда при отсутствии некоторого параметра программа принимает некоторое определенное значение этого параметра). Не допускайте зависимости программ от недостоверности данных. Стремитесь минимизировать число обращений к пользователю.
Тестирование‑ процесс обнаружения ошибок программы. Тестовые примеры разрабатываются постановщиком на этапе разработки алгоритма. Обычно вместо одного теста готовится целая серия тестов. С целью выявления ошибок организуется сквозной структурный контроль (просмотр). В этом случае собираются 4‑6 специалистов, которые получают необходимые материалы за 5-7 дней до начала совещания. Время совещания ограничивается двумя часами. Ведущий совещание обеспечивает составление полного списка обнаруженных ошибок. В начале совещания эксперты характеризуют степень завершенности и качества проекта. Разработчик делает обзор проделанной работы, результаты подвергаются групповому анализу. По окончании совещания председатель вручает каждому члену совещания список ошибок и проблем, требующих решения. Разработчик обязан устранить ошибки, донести до сведения эксперта. Рекомендуется тестирование сверху вниз. Первый тест должен быть простым, так как он должен показывать работу этой программы вообще. Следующие тесты, предназначенные для проверки общей организации программы, обеспечивают обнаружение грубых ошибок. Повторно тестируйте исправленный код. Ведите журнал обнаруженных ошибок и изменений программы.
Этапы тестирования
- Проверка в нормальных условиях, т.е. программа выдает нормальные результаты для характерной совокупности данных.
- Проверка в экстремальных условиях, т.е. проверка в приграничных областях допустимых изменений (минимальные, максимальные допустимые значения, нулевые данные, пустые циклы, массивы, файлы).
- Проверка в исключительных ситуациях.
4. Наглядность исходных текстов программ.Стиль программирования ‑ это набор приемов программирования, которые позволяют получать правильные, эффективные, удобные для применения и легко читаемые программы. Стиль связан с удобочитаемостью программы. Необходимо стандартизировать свой стиль программирования. Если существует более одного способа сделать что‑либо, то вы должны остановиться на одном из них и придерживаться его всегда. Рекомендации.Вводный комментарий объясняет назначение и условие применения. Пояснительные комментарии сопровождают те части программы, которые трудно понять. Пробелы вставляют повсюду, где это приводит к улучшению читабельности программы. Имя переменной формируют на основе хранящейся информации. Переменные следует явно объявлять. Имена должны отображать смысл содержания. Допускается префиксная или венгерская нотация (предложенная венгром Шарле Симони в начале 80‑х годов), которая отражает тип переменной или объекта (п. 5.1). Составные имена следует писать через знак подчеркивания или начинать с прописных букв. Используйте общепринятые имена (Get,Put,Calcи др.), которые описывают действия. Правила сокращения имен:в сокращение всегда должны входить начальные буквы; согласные важнее гласных; начало слова важнее его конца; длина сокращения ограничивается числом 15; списки имен в командах объявления упорядочиваются по алфавиту. Используйте общепринятые сокращения. Отступы от начала строки:при записи операторов и для указания связи между ними делаются одинаковые отступы от начала строки в размере трех позиций, т.е. отступами выделяются структуры вложенности отдельных фрагментов программы. 5. Гибкость и эффективность программ.Выносите часто изменяемые константы, адреса и имена файлов, баз в отдельные файлы настройки, ресурсов или регистрации. Оптимизируйте программу после ее отладки. Используйте именованные константы вместо обычных. Минимизируйте применение глобальных переменных, вложенных структур и команд переходаGoto. Ограничивайте действия над параметрами подпрограмм (ByVal,ByRef,Optional) (п. 2.10.2). Общие рекомендации программисту.Помните: программы читаются людьми! Не нужно делать комментариев больше, чем это необходимо. Используйте вводные комментарии. Располагайте комментарии в программе таким образом, чтобы это не делало ее менее наглядной. Одного оператора в строке достаточно. Для выделения структуры используйте отступы. Фиксируйте соответствие букв кириллицы и букв латинского алфавита. Стремитесь к простоте и к универсальности. Используйте постоянные приемы программирования. Унифицируйте форматы ввода и вывода информации. Обеспечивайте максимально удобный интерфейс пользователю. Интересуйтесь, как эксплуатируется программа. Устанавливайте более скромные цели (работающие программы гораздо полезнее и важнее незаконченных громадных проектов). Уменьшайте сложность путем разбиения программы на отдельные части (модули, подпрограммы). Сложность возрастает квадратично размеру программы. Упрощение достигается методом структурного программирования. Замена циклов или вложенных конструкций на функции упрощает модуль. Общая схема упрощения — разбиение программы на модули и оформление каждого модуля в виде процедуры, функции, класса., компонента илиActiveX‑элемента.