Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Технология программирования.Стр 1 из 10Следующая ⇒
Технология программирования.
Качество программных систем.
Основные требования к программам, входящим в программную систему: 1. Правильность (функционирует в соответствии с техническим заданием). 2. Точность (результаты имеют допустимые отклонения от аналогичных результатов расчётов по идеальным математическим моделям). 3. Совместимость (программа работает должным образом не только автономно, но и как составная часть всей программной системы). 4. Надёжность (программа при всех условиях обеспечивает полную повторяемость результата). 5. Универсальность (правильно работает при любых допустимых вариантах исходных данных, предусматриваются средства защиты от неправильных данных). 6. Защищённость (сохраняет работоспособность при возникновении сбоев, защита от несанкционированного доступа). 7. Полезность (решаемая задача представляет практическую ценность). 8. Эффективность (объём требуемых ресурсов не превышает допустимых пределов). 9. Проверяемость (качество программы могут быть продемонстрированы на практике). 10. Адаптируемость (допускает быструю модификацию для приспособления к новым условиям).
Аспекты качества оценки программных систем.
Качество программы определяется с разных точек зрения: 1. Среда пользователей: качества программы должны проявляться для тех, кто с ними работает, то есть программный продукт должен быть ориентирован на нужды пользователя. Поэтому при проектировании программных систем надо вовлекать пользователей в процесс создания программы. Соответственно выделяют: а) служащие, подготавливающие документацию на компьютере; б) инженеры, выполняющие научно-технические расчёты; в) работники вспомогательного персонала, отвечающие за ввод информации, контролирующие правильность и точность данных. 2. Вычислительная среда, с которой взаимодействует программа. Проще создать хорошую программу, располагая эффективными вспомогательными средствами. Таким образом, рекомендуется максимально использовать сервисные средства автоматизации проектирования. 3. Среда заказчиков. Официальному заключению договора предшествует проработка вопросов, где необходимо прояснить: а) реальную потребность в такой системе; б) оценить возможности программной системы, её разработки и примерный объём затрат; в) оценить ожидаемый эффект от её внедрения.
После завершения предварительных исследований составляется список требований, предъявляемых к системе: 1. Совокупность условий, при которых эксплуатируется система (аппаратные и программные ресурсы; внешние условия функционирования – состав людей и работ, имеющих к ней отношение). 2. Описание выполняемых системой функций. 3. Ограничения, которые надо учитывать при проектировании (сроки завершения отдельных этапов, имеющиеся ресурсы, мероприятия по сохранности информации). ВЫВОД: Необходимо всесторонне анализировать эффекты, связанные с внедрением в систему.
Внедрение: Ø Подготовка передачи программ и документации для сопровождения. Разработка спецификаций.
Спецификация – это достаточно полное и точное описание задачи, которую надо решить, она занимает промежуточное положение между требованиями и готовой программой. В процессе проектирования может значительно меняться. Выделяет две части: 1. Функциональная спецификация: описывает объекты, участвующие в задаче, деление задачи на подзадачи, входные и выходные данные, связи между ними, процессы и действия, реакции на исключительные ситуации. 2. Эксплуатационная спецификация: определяет скорость работы программы или используемые ею ресурсы, характеристики аппаратуры, на которой программа должна выполняться, специальные требования к надёжности и безопасности, и т.д. Спецификации пишутся с использованием специальных языков: ü графических; ü текстовых. Графический язык – спецификация в виде графов (точки и стрелки) и диаграмм. Текстовый язык – это псевдокод.
Методы разработки данных. Чтобы продемонстрировать связи, существующие между отдельными компонентами системы, используют графические схемы. 1. Графические диаграммы (граф-диаграммы) Граф имеет вершины и рёбра. Рёбра изображаются в виде стрелок, указывающие направление передачи управления. В вершинах могут быть записаны значения переменных. Графы бывают плоские и трёхмерные. Граф-диаграммы отображают прохождение потоков данных между процессами. Поэтому их ещё называют графами потоков данных (пример предыдущей темы – граф-диаграмма). Такой тип схемы можно использовать как на системном уровне для описания внешних входов и выходов, так и при проектировании самих программ для описания перемещения данных между отдельными модулями. Физические носители данных здесь не указываются.
2. Диаграммы Варнье-Орра. Здесь в иерархической структуре системы выделяются её основные элементарные составные части, которые отражают носители информации (схематичный рисунок). Сначала система делится на ряд отдельных процессов. Это 1-й уровень. На следующем уровне указываются потоки данных для каждого процесса. 3-й уровень: перечисляются наборы данных. 4-й уровень6 перечисляются соответствующие носители информации. Направление потоков данных отмечаются стрелками.
Система сопровождения данных:
Примечания к диаграмме: Наборы данных, используемые одновременно в нескольких процессах связаны между собой и имеют одинаковые имена. Этот метод применяется при разработке программ.
3. Функциональные схемы. Состоят из одного или нескольких прямоугольных блоков, содержащих название программ. Блоки соединяются входящими в них стрелками с источниками и исходящими из них стрелками с приёмниками данных. Источники и приёмники данных – это физические носители информации (условные изображения). При построение функциональных схем внешние носители помещаются по бокам листа. Процессы и наборы данных должны чередоваться вдоль линии передачи. Процессы могут сообщаться друг с другом только с помощью наборов данных. Всякая пересылка данных из одного набора в другой осуществляется соответствующими процессами. Пример:
- не поток данных, а указывает на то, что оба файла являются логически одним и тем же.
Проектирование программ. Проектирование программ подобно проектированию всей системы. В отличии от системы каждая программа имеет единственное функциональное назначение и не может быть разбито на части, используемые в различные моменты времени. Сходство программы с системой заключается в наличии внешних и внутренних потоков данных, областей хранения данных, возможность разделения её на независимые модули, которые можно обрабатывать и настраивать отдельно. Модуляризация программы – это разделение её на части по некоторым правилам. Этими частями могут быть: внутренние или внешние процедуры, программные секции. Преимущества модульности: 1. Упрощение разработки и реализации программ. 2. Облегчение чтения программ. 3. Упрощение настройки и модификации программ. 4. облегчение работы с данными, имеющие сложную структуру. 5. Возможность избежать чрезмерной детализации алгоритма. 6. Обеспечение более выгодного размещения программ в памяти ЭВМ.
Группы методов проектирования программ: 1. Методы нисходящего проектирования. 2. Методы расширения ядра. 3. Методы восходящего проектирования. 4. Методы объектно-ориентированного проектирования.
1. Метод нисходящего проектирования. 1-й шаг: формулируется предложение, описывающее функцию всей программы. 2-й шаг: определяются подфункции программы. Эта процедура является рекурсивной, т.е. каждая из подфункций может расчленяться до тех пор, пока её составные части не будут окончательно уточнены. Здесь широко применяется стратегия пошагового уточнения. Пошаговое уточнение. На каждом следующем этапе декомпозиции определяются программы очередного более низкого уровня. Для этого используются процедурные языки программирования. Пример: 1-й шаг: Процедура! обработка_пакетов; 2-й шаг: Процедура! обработка_пакетов; сортировать записи по управляющим полям; отделить правильные записи от неправильных и обработать; ВСЁ – Процедура!
С помощью расширения шагов процедуры выполняется дальнейшее уточнение программы. На некоторых шагах уточнения появляется необходимость в использовании управляющих структур. Пример: Процедура! обработка пакетов; сортировать записи по управляющим полям; взять первую запись; Цикл – пока не конец входного файла; Повторять взять правую управляющую группу; обработать группу записей; ВСЁ – цикл; обработать неправильные управляющие группы; ВСЁ – Процедура!
Операцию сортировки надо написать и оформить в виде независимого модуля. Разбиение на модули осуществляется эвристическим способом. На каждом этапе проектирования по возможности не уточняются операции с данными. Эти вопросы откладываются на более поздние сроки. На этапе, когда принимается решение о прекращение дальнейшего уточнения, оставшиеся неопределёнными подфункции становятся вызываемыми функциями или процедурами, а проектируемый модуль – управляющим модулем. 1. Заставляет сформулировать программу. 2. Разбить программу на проблемы. Преимущества метода пошагового уточнения: Преимущество состоит в том, что основное внимание при его использовании обращается на проектирование корректной программы, а не только на детальное понимание задачи. Т.к. 1-й этап проектирования – корректен, а каждый последующий этап является уточнением предыдущего лишь с небольшими изменениями, то легко может быть выполнена проверка корректности процесса разработки на всех этапах. Недостаток метода: Недостаток состоит в том, что на поздних стадиях проектирования может обнаружиться необходимость в структурных изменениях, требующих пересмотра более ранних конструкций.
Модульная структура программ. Модульная структура программ разрабатывается на стадии технического проекта, когда определяется состав программных модулей и устанавливаются связи между ними по управлению и данным. Виды модульных структур: Анализ. Отвечают на вопрос: что должна делать будущая система. Необходимо учитывать полноту и точность в определении требований к программной системе; Синтез. Отвечают на вопрос каким образом система будет реализовывать предъявляемые к ней требования. Три этапа синтеза: a) Проектирование; b) Кодирование; c) Тестирование.
Информационные потоки процесса синтеза программной системы.
Информационная модель описывает информацию, которую должна обрабатывать ПС. Функциональная модель определяет перечень функций обработки. Поведенческая модель фиксирует режимы работы ПС. Разработка данных – результат преобразования информационной модели анализа в структуры данных. Разработка архитектуры выделяет основные структурные компоненты и фиксирует связи между ними. Процедурная разработка описывает последовательность действий структурных компонентов(их содержание). На проектирование, кодирование и тестирование приходится более 75% стоимости конструирования ПС. Решение, принимаемое в ходе проектирования, делают его стержневым этапом процесса синтеза. Особенности этапа проектирования. Выделяют две ступени: 1. Предварительное. 2. Детальное. 1. Предварительное проектирование обеспечивает : 1) Идентификацию подсистем; 2) Определение основных принципов управления подсистема-ми, взаимодействие подсистем. Предварительное проектирование включает три типа деятельности: Ø I .Структурирование системы (система разбивается на несколько подсистем – независимых программных компонентов. Определяется взаимодействие подсистем); Ø II .Моделирование управления.(Определяется модель связей управления между подсистемами); Ø III .Декомпозиция подсистем на модули.(Определение типов модулей и межмодульных соединений) Информационные связи процесса проектирования.
Требования Архитектура Структура программ и данных и данных алгоритм
Характеристики , формы человеко-машинного взаимодействия на выход I.Структурирование систем.
Известны 4 модели системного структурирования: I. Модель хранилища данных.
В данной модели подсистемы разделяют данные находящиеся в общей памяти. Как правило данные образуют базы данных.Предусматривается система управления этой базой. II.Модель клиент – сервер.
Данная модель используется для распределения систем,где данные распределены по серверам. III.
Уровень графического интерфейса запускается на машине клиента. Бизнес – логику образуют модули осуществляющие функциональные обязанности подсистемы. Этот уровень запускается на сервере приложения. Реляционная СУБД хранит данные необходимые уровню бизнес – логики. Этот уровень запускается на втором уровне - сервере базы данных(БД). Преимущества трёхуровневой модели: Ø Упрощается такая модификация уровня, которая не влияет на другие уровни; Ø Отделение прикладных функций от функций управления БД, упрощает оптимизацию всей системы. IV. Модель абстрактной машины. Это многослойная система, при этом каждый текущий слой реализуется с использованием средств обеспечиваемых слоем фундамента.
II.Моделирование управления.
Известно два типа моделей управления: I. Модель централизованного управления. II. Модель событийного управления. I. В этой модели одна подсистема выделяется как системный контроллер. Ёе обязанности – руководить работой других систем. Две разновидности: Ø Модель вызов – возврат.
Ø Модель менеджера. Она используется в системах параллельной обработки.
II. Здесь системой управляют внешние события. Две разновидности: Ø Широковещательная модель. Каждая подсистема уведомляет обработчика о своём интересе к конкретным событиям. Когда событие происходит, обработчик пересылает его подсистеме, которая может обработать это событие. Функции управления в обработчик не встраиваются.
Ø Модель управляемая прерываниями. Здесь все прерывания разбиты на группы – Типы прерываний, которые образуют вектор прерываний. Для каждого типа прерывания есть свой обработчик.Каждый обработ- чик реагирует на свой тип прерывания и запускает свой процесс.
Прерывания
Вектор В
III .Декомпозиция подсистем на модули. Модульность. Известны два типа моделей модульной декомпозиции: 1) Модель потока данных(в основе лежит разбиение по функциям); 2) Модель объектов.(Эта модель основана на слабо сцеплённых единицах имеющих собственные наборы данных состояния и наборы операций). Выбор типа декомпозиции зависит от сложности разбиваемой подсисте-мы.
Модуль – фрагмент программного текста являющийся строительным блоком для физической структуры системы. Модуль состоит из интер-фейсной части и части реализации. Модульность – свойство системы, ко- торая может подвергаться декомпозиции на ряд внутренне связанных и слабо зависящих друг от друга модулей.
X – Проблема C(X) – Сложность решения проблемы X T(X) – Затраты на решение X Пусть p1,p2 – Проблемы C(p1) > C(p2) => T(p1) > T(p2) C(p1+p2) > C(p1) + C(p2) -из практики решения проблем человека T(p1+p2) > T(p1) + T(p2) Таким образом сложную проблему легче решить разделив её на управляемые части. Это аргумент в пользу модульности. В данном случае не учитываются затраты на межмодульный интерфейс.
Стоимость
Стоимость Общая стоимость интерфейса
Стоимость одного модуля
Количество Область min стоимости модулей
Нет корректного критерия для гарантированного предсказания точки оптимума. Оптимальный модуль должен удовлетворять двум критериям: 1) Снаружи он проще чем внутри; 2) Его проще использовать чем построить. Информационная закрытость. Принцип информационной закрытости. Содержание модулей должно быть скрыто друг от друга. 1) Информационная закрытость означает все модули независимы, об-мениваются только информацией необходимой для работы; 2) Доступ к операциям и структурам данных модуля ограничен.
Достоинства инф.закрытости: 1)Обеспечивается возможность разработки модулей различными независимыми коллективами. 2)Обеспечивается лёгкая модификация системы.
Характеристики модуля. 1. Связность модуля(внутренняя характеристика модуля) – это мера независимости его частей. Чем выше связность модуля, тем выше результат проектирования. Для обозначения связности модуля используют понятие силы связности модуля. Связность-это внутренняя характеристика модуля.
Функциональная связность. Этот модуль не может быть разбит на два других, имеющих связность того же типа. Критерий для формирования функциональной связности: возможность формулировки назначения модуля в виде одного предложения в повелительном наклонение, без запятых и слов: если, затем, тогда. Пример: Проверить строку символов. Выделить однотипные поля данных. Оптимизировать группу команд.
2. Последовательная или информационная связность. Этот модуль может быть разбит на последовательные части, выполняющие независимые функции, но совместно реализующие единственную функцию. Пример: Если модуль используется для оценки, потом для обработки данных, то он имеет последовательную связность. Он реализуется как последовательность операций (циклов). При этом данные на выходе какой-либо функции целиком являются входными для следующей функции.
Сопровождать модули с информационной связностью также легко, как и с функциональной, но возможности повторного использования модуля ниже, чем в 1-м случае, т.к. совместное применение действия модуля с информационной связностью полезно не всегда.
3. Коммуникативная связность. Части модуля связаны по данным (работают с одной же структурой данных). Пример: Правило выбора имён. Имена должны обладать мнемоничностью, т.е. отражать сущность описываемых объектов. В связи с ограничениями на длину имен переменных при выборе имён идентификаторов сокращению подлежат не более 3-х первых слов. Абревиатура всегда включает начальные буквы слов. Согласные всегда важнее гласных. Начало слова всегда важнее его конца. Абревиатура включает 4-5 букв. Тестирование элементов. Цель: индивидуальная проверка каждого модуля. Используется стратегия белого ящика. Тестирование интеграций. Цель: тестирование сборки модулей в программную систему. Используется стратегия чёрного ящика. Тестирование правильности. Цель: проверить реализацию в программной системе всех функциональных и поведенческих требований, а также эффективности. Используется чёрный ящик. Системное тестирование. Цель: проверка правильности объединения и взаимодействия всех элементов компьютерной системы, реализацию всех системных функций.
Тестирование элементов. Объект тестирования – наименьшая единица проектирования программной системы – модуль. Тестированию подвергаются: ü интерфейс модуля; ü внутренние структуры данных; ü независимые пути развития алгоритма; ü пути обработки ошибок; ü граничные условия.
Наиболее общие ошибки в вычислениях: ü не правильный или не понятный приоритет арифметических операций; ü смешанная форма операций; ü некорректная инициализация; ü несогласованность в представлении точности; ü некорректное символическое представление выражения. Источники ошибок сравнения и не правильных потоков управления. 1. Сравнение различных типов данных. 2. Некорректные логические операции и приоритетность. 3. Ожидание эквивалентности в условиях, когда ошибки точности делают эквивалентность невозможной. 4. Некорректное сравнение переменных. 5. Не правильное прекращение цикла. 6. Отказ в выходе при отклонении итерации. 7. Не правильное изменение переменных цикла. Тестирование интеграций поддерживает сборку цельной программы. Цель сборки и тестирования интеграций: взять модули, протестированные как элементы, и построить программную структуру, требуемую проектом. Тесты проводятся для обнаружения ошибок интерфейса. Категории ошибок интерфейса: потеря данных при прохождении через интерфейс; отсутствие в модуле необходимой ссылки; неблагоприятное влияние одного модуля на другой; подфункции при объединении не образуют требуемую главную функцию; отдельные допустимые неточности при интеграции выходят за допустимый уровень; проблемы при работе с глобальными структурами данных. Существует 2 варианта тестирования, поддерживающих процесс интеграции: Ø нисходящее; Ø восходящее. Нисходящее тестирование интеграций. Здесь модули объединяются сверху вниз по управляющей иерархии, подчиненные модули добавляются в структуру или в результате поиска в глубину, или в результате поиска в ширину.
М1-М2-М5-М6-М8…– в глубину; М1-М2-М3-М4-М5…– в ширину.
Возможные шаги процесса нисходящей интеграции: 1. Главный управляющий модуль используется как тестовый драйвер, если непосредственно подчинённые ему модули временно замещаются заглушками. 2. Одна из заглушек заменяется реальным модулем. Модуль выбирается поиском в ширину или в глубину. 3. После подключения каждого модуля и установки на нём заглушек проводится набор тестов, проверяющих полученную структуру. 4. Если в модуле-драйвере уже нет заглушек, производится смена модуля-драйвера поиском в ширину или в глубину. 5. Возврат к п.2 до тех пор, пока не будет построена целая структура. Достоинство: Ошибки в главной управляющей части системы выявляются в первую очередь. Недостаток: Трудности в ситуациях, когда для полного тестирования на верхнем уровне нужны результаты обработки с нижних уровней иерархии.
Восходящие тестирования интеграций. Сборка и тестирование системы начинается с модулей атомов, располагаемых на нижнем уровне иерархии. Модули подключаются снизу вверх, подчиненные модули всегда доступны, заглушки не нужны.
Шаги методики восходящей интеграции: 1. Модули нижнего уровня объединяются в кластеры (группы или блоки), выполняющие определенные программные подфункции. 2. Для координации вводов-выводов тестового варианта имеется драйвер, управляющий тестированием кластеров. 3. Тестируется кластер. 4. Драйверы удаляются, а кластеры объединяются в структуру движениями вверх.
Сравнение нисходящего и восходящего тестирования. Нисходящее тестирование основной недостаток: необходимость заглушек и связанных с ними трудностей. Достоинство: возможность раннего тестирования главных управляющих функций.
Восходящее тестирование основной недостаток: система не существует как объект до тех пор, пока не будет добавлен последний модуль. Достоинство: упрощается разработка тестовых вариантов, отсутствуют заглушки. Замечание: возможен комбинированный подход: для верхних уровней иерархии применяют нисходящую стратегию, а для нижних уровней – восходящую стратегию. При проведении тестирования интеграций важно выявить критические модули. Признаки критического модуля: 1. Реализует несколько требований к программной системе. 2. Имеет высокий уровень управления (находится достаточно высоко в программной структуре). 3. Имеет высокую сложность или склонность к ошибкам. 4. Имеет определенные требования производительности обработки. Такие модули должны тестироваться как можно раньше. К ним должны применяться регрессивное тестирование (повторение выполненных тестов в полном или частичном объёме).
Тестирование правильности. Цель: подтвердить, что функции, описанные в спецификациях требований к программной системе, соответствуют ожиданиям заказчика. Используется метод чёрного ящика. Важнейшим элементом является проверка конфигурации программной системы. Конфигурацией программной системы называют совокупность всех элементов информации, вырабатываемых в процессе конструирования программной системы (ПС). Базовые элементы конфигурации ПС: 1. Системная спецификация. 2. План программного проекта. 3. Спецификация требований к ПС. 4. Предварительное руководство пользователя. 5. Спецификация проектирования. 6. Листинги исходных тестов программ. 7. План и методика тестирования, тестовые варианты и полученные результаты. 8. Руководства по работе и инсталляции. 9. Exe-код выполняемой программы. 10. Описание базы данных. 11. Руководство пользователя по настройке. 12. Документы сопровождения, отчёты о проблемах ПС, запросы сопровождения, отчёты о конструкторских изменениях. 13. Стандарты и методики конструирования. Разработчик не может предугадать, как заказчик будет реально использовать ПС. Для обнаружения ошибок, которые будут найдены только конечным пользователем, используется процесс, включающий альфа и бетта-тестирования. Альфа-тестирование проводится заказчиком в организации разработчика. Исполнитель фиксирует все выявленные заказчиком ошибки и проблемы использования. Бетта-тестирование проводится конечным пользователем в организации заказчиков. Это реальное ПС в среде, которая не управляется разработчиком. Заказчик сам записывает все обнаруженные проблемы и сообщает о них разработчику. Бетта-тестирование проводится в течение фиксированного срока (примерно - год).
Системное тестирование. Системное тестирование подразумевает выход за рамки области действия программного проекта и проводится не только программным разработчиком. Проблема системного тестирования – указание причины. Она возникает, когда разработчик одного системного элемента обвиняет разработчика другого элемента в причине возникновения дефекта. Для защиты от обвинений разработчик программного элемента должен: 1. Предусмотреть средства обработки ошибок, которые тестируют все вводы информации от других элементов системы. 2. Провести тесты, моделирующие неудачные данные или другие потенциальные ошибки интерфейса ПС. 3. Записать результаты тестов, чтобы использовать их как доказательства невиновности в случае указания причины. 4. Принятие участия в планировании и проектировании системных тестов, чтобы гарантировать адекватное тестирование программной системы. В конечном итоге тесты должны проверять, что все элементы правильно объединены и выполняют назначенные функции. Технология программирования.
|
Последнее изменение этой страницы: 2019-04-10; Просмотров: 252; Нарушение авторского права страницы