Методы системного проектирования

Автор: Пользователь скрыл имя, 24 Января 2011 в 16:00, курс лекций

Описание работы

Основные темы.

Работа содержит 1 файл

Ответы (МСП).docx

— 412.02 Кб (Скачать)
  1. Образцы проектирования

Образцы проектирования – это сравнительно новая форма обмена программистским опытом и удачными проектными решениями, реализующая принципиальную идею повышения продуктивности – увеличение объема повторного использования кода.

Образец проектирования — это типичное решение типичной проблемы в данном контексте.

Элементы:

  • Имя. Ссылаясь на имя образца, можно кратко описать проблему проектирования, ее решения и их последствия.
  • Задача. Описание контекста применения образца проектирования, т. е. описание конкретной проблемы проектирования и перечня условий, при выполнении которых имеет смысл

применять данный образец.

  • Решение. Описание элементов проектирования, отношений между ними, функции каждого элемента.
  • Результаты. Здесь описываются следствия применения образца: влияние на степень эффективности, гибкости, расширяемости и переносимости системы.
  1. Доказательное программирование (автоматической верификации)

Один из приемов, связанных с идеей верификации, целесообразно использовать, даже если полная верификация программы и  не проводится. А именно, при верификации  в текст программы вставляются  промежуточные утверждения (assert), которые должны удовлетворяться при выполнении правильной программы. Утверждения представляют собой эффективно вычислимые предикаты над значениями переменных (условия, ограничивающие область допустимых значений входных аргументов функции, инварианты цикла, ограничители числа итераций плохо сходящихся процедур). Если программист знает какое-либо (достаточно сильное) условие на значения переменных в данной точке программы, то настоятельно рекомендуется перенести это знание в код программы. Существуют три основных формы использования утверждений:

  • Запись утверждения в виде комментария. Систематическое выписывание в комментариях нетривиальных утверждений о текущих значениях переменных резко увеличивает читабельность программы.
  • Запись утверждения в формальном синтаксисе. Вставленное в текст программы формальное утверждение проверяется и, в случае невыполнения, возбуждается указанный сигнал (signal) или исключительная ситуация (exception).
  • Запись утверждения в виде ловушки. Ловушка – это фрагмент кода, предназначенный для перехвата и обработки ошибок (исключительных ситуаций).
  1. Программирование вширь

Код пишется  не по горизонтали (по слоям приложения), а по вертикали (по функциям приложения), т.е. путем последовательного наращивания  услуг в службах всех слоев.

Преимущества:

  • быстрое появление работающей версии приложения, которую можно регулярно демонстрировать заказчику (наращивая постепенно функциональность);
  • отсутствие стадии автономной отладки и, как следствие, более тщательное и дисциплинированное оформление программистами кода с самого начала;
  • частичное совмещение по времени комплексной отладки с кодированием и, как следствие,

Программирование  вширь оказывается особенно естественным, если используется стандартная трехслойная  архитектура приложения и службы реализуются в объектно-ориентированной  среде. В этом случае расширение функциональности сводится к доопределению классов  и кодирование становится консервативным и предсказуемым: код только добавляется  и добавленный на каждом шаге код  всегда нужный и правильный.

  1. Форматирование кода

В случае использования  традиционной системы программирования с линейным языком, большое значение имеет оформление текста программы.  Хорошо оформленный текст читать легко и приятно, и это существенно  повышает продуктивность.

Для повышения  читабельности программы используются следующие приемы:

  • синтаксически ориентированный текстовый редактор (текстовый редактор, который "знает" синтаксис языка программирования и позволяет ускорить ввод и редактирование программы);
  • комментарии;
  • дисциплина имен – правила формирования идентификаторов, которые знает автор программы и читающий.
  • расположение текста (отступы, пробелы, пустые строки, ширина строки).

Тестирование  и отладка

Основная часть  затраченного времени и ресурсов приходится на непроизводительные потери и на косвенные трудозатраты, связанные  с выявлением и исправлением ошибок. Процесс, имеющий целью выявление ошибок в программе, называется тестирование, а процесс исправления ошибок называется отладка.

Направления программирования ориентированные на повышение продуктивности:

  • совершенствование инструментальных систем программирования с целью сокращения непроизводительных потерь рабочего времени программистов;
  • совершенствование методов тестирования и отладки с целью снижения трудозатрат на этот процесс (при заданном объеме);
  • совершенствование самого программирования с целью уменьшения объема тестирования и отладки.

Наибольший  прогресс достигнут в развитии инструментальных средств программирования: воплощение программистской мысли в машинно-читаемую форму на всех стадиях и фазах  программирования может выполняться  быстро и эффективно. Визуальное моделирование, рисование интерфейса, эффективный  ввод и редактирование текста программы, получение справочной информации о  повторно используемых компонентах, управление версиями и проектами надежно  обеспечиваются практически любой  инструментальной системой программирования и соответствующими утилитами. От технологов и руководителей программных  проектов требуется только выбрать подходящие инструментальные средства и обеспечить их освоение и использование.

Таким образом, следует исходить из того, что в  рассматриваемом типичном случае разработки приложения типа информационной системы  программа, полученная на фазах проектирования и реализации, неизбежно содержит ошибки. Вопрос заключается в количестве и качестве ошибок.

Целью тестирования и отладки, выполняемых на фазе стабилизации, является выполнение определенных мероприятий, направленных на снижение количества ошибок, имеющихся в программе, до уровня, приемлемого для заказчика.

Критерии  приемлемости

Тестирование  может обнаружить ошибку в программе, но не может достоверно установить отсутствие ошибок. Не существует объективного достоверного критерия (основанного  исключительно на результатах тестирования), позволяющего сделать вывод о  достижении приемлемого для пользователя уровня ошибочности программы. Выводы о количестве ошибок, оставшихся не выявленными в программе, являются сугубо приближенными и делаются на основании различных статистических, вероятностных и эмпирических соображений:

  1. Представительное тестирование

Представительным называется набор тестов, при прогоне которых выполняется определенный объективный критерий, связанный с самой тестируемой программой (все исполнимые операторы кода прорабатывают хотя бы один раз). Если при прогоне представительного набора тестов ошибки не выявляются, то программа считается приемлемой.

  1. Регрессионное тестирование

Используются  различные статистические методы выходного  контроля (например, измеряется количество известных ошибок как функция  продолжительности тестирования). Если производная по времени отрицательна, то тестирование называется сходящимся. Программа объявляется приемлемой, если тестирование сходится, и в течение заданного интервала времени t количество известных ошибок не превышает пороговой величины n (обычно полагают n=0). Такой подход к управлению тестированием, применяет, например, Microsoft. Регрессионное тестирование наиболее целесообразно использовать в больших проектах и в проектах, связанных с разработкой горизонтальных приложений.

  1. Тестирование по соглашению

Заранее известен набор тестов, прогон которых без  выявления ошибок означает, что программа

приемлема для  заказчика по соглашению. При этом вполне возможно, что в программе даже остались известные разработчику и не устраненные ошибки, но контрольные примеры, удовлетворяющие заказчика, выполняются успешно и этого достаточно. Конкретного заказчика интересует в первую очередь эффект, который вертикальное приложение оказывает на его (заказчика) бизнес, и только во вторую очередь "правильность" приложения

Виды  комплексного тестирования:

  • Тестирование устойчивости. Цель: выявление не перехватываемых ошибок времени выполнения, т.е. тесты устойчивости нацелены на то, чтобы "сломать" приложение. Типичными приемами, применяемыми при тестировании устойчивости, являются ввод данных, выходящих за пределы области допустимых значений, нарушение порядка действий, предусмотренных сценарием, создание ситуаций, нарушающих количественные ограничения.
  • Тестирование функциональности . Цель: проверка того, что для допустимых (правильных) входных данных получаются допустимые (соответствующие спецификациям) результаты. Ожидаемые правильные результаты для каждого теста функциональности должны быть получены заранее независимо от тестируемого приложения. Типичным приемом является ввод предельных (находящихся на границе области допустимых значений) данных.
  • Тестирование применимости. Цель: проверка того, что предусмотренные способы использования приложения являются удовлетворительными для пользователя при выполнении типичных сценариев работы. При тестировании применимости проверяются, например, следующие параметры: реактивность, защищенность данных, способность к восстановлению после ошибки, понятность интерфейса.

Обязательным  требованием дисциплины программирования является наличие плана тестирования, регламентирующего порядок проведения тестирования по видам тестов и критериям приемлемости.

Ход тестирования, выявленные ошибки и приятые меры по их исправлению фиксируются в  базе данных тестирования.

Методы  отладки

Отладка:

  1. Локализация ошибок(более трудоемка).

 Тест обнаруживает внешнее проявление ошибки в форме несоответствия результата спецификациям, причем это несоответствие может быть очень отдаленным следствием истинной причины, которая и является ошибкой, подлежащей исправлению. Самым распространенным приемом локализации является просмотр программистом протокола выполнения программы с целью обнаружения того места, где поведение программы, демонстрируемое протоколом, расходится с ожидаемым поведением. Протокол может иметь различные формы: это может быть действительно файл или база данных, в которой фиксируются сведения о ходе выполнения программы, или это может быть динамически изменяемое состояние программы, ход выполнения которой воспроизводится в интерактивном отладчике. Отладчик удобен тем, что позволяет легко и просто проследить ход выполнения программы и изменение значений ее переменных. Прослеживание хода работы программы по шагам – это крайнее средство, которое стоит применять, только если более эффективные приемы не позволили локализовать ошибку достаточно точно.

Другим распространенным приемом получения протокола  является трассировка, которая

также доступна в большинстве систем программирования. Трассировка – это автоматизированная генерация статического протокола. Как минимум, в трассу включается протокол потока управления с точностью до функций, иногда добавляется и дополнительная информация об изменении состояния. Трассировка имеет перед отладчиком то преимущество, что трассу можно просматривать в любом порядке, а не только от начала к концу. Иногда просмотр трассы с конца позволяет быстрее локализовать ошибку. Отладочный стенд - заводится специальная базу данных и в коде расставляются ловушки и "отладочные печати", которые протоколируют в этой базе семантически важную информацию о ходе выполнения программы. Эффективным методом отладки является "структурная экспертиза", когда автор программы публично читает код программы вслух перед аудиторией из коллег по разработке. Присутствующие могут задавать вопросы и делать замечания, автор должен их фиксировать, но не должен отвечать. При этом очень важно, чтобы чтение велось именно вслух (это задает правильный темп информационного обмена), чтобы это было именно чтение готового текста (это исключает добавление исправлений и фантазий по ходу чтения) и чтобы вопросы и замечания (в том числе и прежде всего самого автора) тщательно фиксировались.

Информация о работе Методы системного проектирования