Файл: Программа, комплекс программ, программное средство, программное обеспечение, программный продукт. Концепция программного изделия непосредственная производительная сила,.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 314
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
На практике целесообразно использовать функциональную, последовательную и информационную связности.
Библиотеки ресурсов. Различают библиотеки ресурсов двух типов: библиотеки подпрограмм
и библиотеки классов.
Библиотеки подпрограмм реализуют функции, близкие по назначению, например, библиотека графического вывода информации. Связность подпрограмм между собой в такой библиотеке - логическая, а связность самих подпрограмм - функциональная, так как каждая из них обычно реализует одну функцию.
Библиотеки классов реализуют близкие по назначению классы. Связность элементов класса -информационная, связность классов между собой может быть функциональной - для родственных
или ассоциированных классов и логической - для остальных.
В качестве средства улучшения технологических характеристик библиотек ресурсов в
настоящее время широко используют разделение тела модуля на интерфейсную часть и область
реализации. Интерфейсная часть в данном случае содержит совокупность объявлений ресурсов
(заголовков подпрограмм, имен переменных, типов, классов и т. п.), которые данная библиотека
предоставляет другим модулям. Ресурсы, объявление которых в интерфейсной части отсутствует,
извне не доступны. Область реализации содержит тела подпрограмм и, возможно, внутренние
ресурсы (подпрограммы, переменные, типы), используемые этими подпрограммами.
-
Нисходящий и восходящий подход к разработке программного обеспечения, средства описания структурных алгоритмов: базовые и дополнительные алгоритмические структуры, псевдокоды, Flow-формы, диаграммы Насси-Шнейдермана.
При проектировании, реализации и тестировании компонентов структурной иерархии, полученной при декомпозиции, применяют два подхода:
• восходящий;
• нисходящий.
В литературе встречается еще один подход, получивший название «расширение ядра». Он
предполагает, что в первую очередь проектируют и разрабатывают некоторую основу- ядро
программного обеспечения, например, структуры данных и процедуры, связанные с ними. В
дальнейшем ядро наращивают, комбинируя восходящий и нисходящий методы.
Восходящий подход. Сначала реализуются модули нижнего уровня, они отвечают за обработку информации, за ввод информации.
+ по мере реализации нижних модулей есть время для отладки и тестирования;
- созданные первоначально модули нижнего уровня при сборке в единое целое проявляются ошибки интерфейсов;
- модули верхних уровней являются интерфейсными и может получится, что интерфейс может не устраивать и придется переделывать большой объем работы.
Для массового программирования такой подход не применим.
Нисходящий подход. вначале проектируют модули верхних уровней, затем следующих и так далее до самых нижних уровней. При этом в процессе программирования компоненты нижних, еще не реализованных уровней заменяют специально разработанными «заглушками» - программы ни чего не выполняющие, что позволяет тестировать и отлаживать уже реализованную часть.
Нисходящий подход может быть реализован 3 способами:
Иерархический методпредполагает выполнение разработки строго по уровням. Основной проблемой данного метода является большое количество достаточно сложных заглушек. Кроме того, при использовании данного метода основная масса модулей разрабатывается и реализуется в конце работы над проектом, что затрудняет распределение человеческих ресурсов.
Операционный методсвязывает последовательность выполнения при запуске программы.
Применение метода усложняется тем, что порядок выполнения модулей может зависеть от данных. Кроме того, модули вывода результатов, несмотря на то, что они вызываются последними, должны разрабатываться одними из первых, чтобы не проектировать сложную заглушку, обеспечивающую вывод результатов при тестировании.
Комбинированный методучитывает следующие факторы, влияющие на последовательность разработки:
• достижимость модуля - наличие всех модулей в цепочке вызова данного модуля;
• зависимость по данным - модули, формирующие некоторые данные, должны создаваться
раньше обрабатывающих;
• обеспечение возможности выдачи результатов - модули вывода результатов должны
создаваться раньше обрабатывающих;
• готовность вспомогательных модулей - вспомогательные модули, например, модули закрытия
файлов, завершения программы, должны создаваться раньше обрабатывающих;
• наличие необходимых ресурсов.
Кроме того, при прочих равных условиях сложные модули должны разрабатываться прежде
простых, так как при их проектировании могут выявиться неточности в спецификациях, а чем раньше это произойдет, тем лучше.
Нисходящий подход обеспечивает:
• максимально полное определение спецификаций проектируемого компонента и
согласованность компонентов между собой;
• раннее определение интерфейса пользователя, демонстрация которого заказчику позволяет
уточнить требования к создаваемому программному обеспечению:
• возможность нисходящего тестирования и комплексной отладки
Базовые алгоритмические структуры:
• следование - обозначает последовательное выполнение действий;
• ветвление - соответствует выбору одного из двух вариантов действий;
• цикл-пока - определяет повторение действий, пока не будет нарушено некоторое условие,
выполнение которого проверяется в начале цикла.
Дополнительные алгоритмические структуры (можно составить из базовых):
• выбор - обозначает выбор одного варианта из нескольких в зависимости от значения
некоторой величины;
• цикл-do - обозначает повторение некоторых действий до выполнения заданного условия,
проверка которого осуществляется после выполнения действий в цикле;
• цикл с заданным числом повторений (счетный цикл) - обозначает повторение некоторых
действий указанное количество раз.
Псевдокоды- формализованное текстовое описание алгоритма (текстовая нотация).
Flow-формыпредставляют собой графическую нотацию описания структурных
алгоритмов, которая иллюстрирует вложенность структур. Каждый символ Flow-формы
соответствует управляющей структуре и изображается в виде прямоугольника. Для демонстрации
вложенности структур символ Flow-формы может быть вписан в соответствующую область
прямоугольника любого другого символа. В прямоугольниках символов содержится текст на
естественном языке или в математической нотации. Размер прямоугольника определяется длиной
вписанного в него текста и размерами вложенных прямоугольников.
Диаграммы Насси-Шнейдермана.
Диаграммы Насси-Шнейдермана являются развитием
Flow-форм. Основное их отличие от Flow-форм заключается в том, что область обозначения
условий и вариантов ветвления изображают в виде треугольников. Такое обозначение
обеспечивает большую наглядность представления алгоритма.
Также, как при использовании псевдокодов, описать неструктурный алгоритм, применяя Flow-
формы или диаграммы Насси-Шнейдермана, невозможно (для неструктурных передач управления
в этих нотациях просто отсутствуют условные обозначения). В то же время, являясь
графическими, эти нотации лучше отображают вложенность конструкций, чем псевдокоды.
Общим недостатком Flow-форм и диаграмм Насси-Шнейдермана является сложность
построения изображений символов, что усложняет практическое применение этих нотаций для
описания больших алгоритмов.
-
Программирование с защитой от ошибок: проверка выполнения операций, контроль промежуточных результатов, снижение погрешностей результатов, обработка исключений; сквозной структурный контроль.
Любая из ошибок программирования, которая не обнаруживается на этапах компиляции и
компоновки программы, в конечном счете может проявиться тремя способами: привести к выдаче
системного сообщения об ошибке, «зависанию» компьютера и получению неверных результатов.
Однако до того, как результат работы программы становится фатальным, ошибки обычно
много раз проявляются в виде неверных промежуточных результатов, неверных управляющих
переменных, неверных типах данных, индексах структур данных и т. п. А это значит, что часть ошибок можно попытаться обнаружить и нейтрализовать, пока они еще не привели к тяжелым последствиям.
Программирование, при котором применяют специальные приемы раннего обнаружения и
нейтрализации ошибок, было названо защитным или программированием с защитой от ошибок.
При его использовании существенно уменьшается вероятность получения неверных результатов.
Детальный анализ ошибок и их возможных ранних проявлений показывает, что целесообразно
проверять:
• правильность выполнения операций ввода-вывода;
• допустимость промежуточных результатов (значений управляющих переменных, значений
индексов, типов данных, значений числовых аргументов и т. д.).
Проверки правильности выполнения операций ввода-вывода. Причинами неверного
определения исходных данных могут являться, как внутренние ошибки-ошибки устройств ввода-
вывода или программного обеспечения, так и внешние ошибки - ошибки пользователя.
При этом принято различать:
• ошибки передачи -аппаратные средства, например, вследствие неисправности, искажают данные;
• ошибки преобразования - программа неверно преобразует исходные данные из входного формата во внутренний;
• ошибки перезаписи -пользователь ошибается при вводе данных, например, вводит лишний или другой символ;
• ошибки данных - пользователь вводит неверные данные.
Для защиты от ошибок преобразования данные после ввода обычно сразу демонстрируют
пользователю («эхо»). При этом выполняют сначала преобразование во внутренний формат, а
затем обратно. Однако предотвратить все ошибки преобразования на данном этапе обычно крайне
сложно, поэтому соответствующие фрагменты программы тщательно тестируют, используя методы эквивалентного разбиения и граничных значений.
Обнаружить и устранить ошибки перезаписи можно только, если пользователь вводит
избыточные данные, например контрольные суммы. Если ввод избыточных данных по каким-либо
причинам нежелателен, то следует по возможности проверять вводимые данные, хотя бы
контролировать интервалы возможных значений, которые обычно определены в техническом
задании, и выводить введенные данные для проверки пользователю.
Неверные данные обычно может обнаружить только пользователь.