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

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

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

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

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

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

— 412.02 Кб (Скачать)

Контроль  качества - процесс раздельной систематической и полной проверки всех артефактов (начинаться вместе с запуском каждого проекта). В функции контроля качества входят: проверки, инспектирование и тестирование.

Методы  контроля качества:

  • Метод «черного ящика»: приложение (его законченная часть) анализируется как целое. Этот метод используется для проверки того, что приложение (его часть) отвечает предъявляемым требованиям.
  • Метод «белого (стеклянного) ящика»: осуществляется на уровне компонентов, из которых построено тестируемое приложение (его часть).

Инспектирование и обзоры

Инспектирование — это техника «белого ящика» для обеспечения качества: проверка частей проекта (требований, результатов проектирования, программного кода) на наличие дефектов.

Правила инспектирования:

  • Вскрытие дефектов, при этом исключается исправление найденных дефектов.
  • Участие коллег (проводится внутри группы разработчиков).
  • Распределение ролей.
    • Ведущий ответственен за правильное проведение инспектирования.
    • Автор несет ответственность за свою работу и за исправление всех найденных в ней дефектов.
    • Секретарь отвечает за учет описания и классификацию дефектов.
  • Тщательная подготовка участников и автора перед инспектированием.

Помимо инспектирования, применяются обзоры.

Обзор — это собрание, на котором обсуждается завершенная или текущая работа.

Верификация, валидация и системное  тестирование

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

Валидация - правильность результата (удовлетворяет ли продукт требованиям). Это проверяется с помощью системного тестирования.

Системное тестирование – это тестирование всей системы в целом.

  • Контекстное модульное тестирование (тестирование модулей в контексте системы).
  • Тестирование интерфейсов (повторная валидация интерфейсов между модулями).
  • Регрессионное тестирования - проверка, что добавление модуля к системе не уменьшило ее возможностей.
  • Нагрузочное тестирование (тестирование скорости работы и использование ресурсов).
  • Тестирование удобства и простоты использования.
  • Тестирование инсталляции.
  • Приемосдаточные испытания (валидация приемлемости программы).

Сопровождение и продолжающаяся разработка

Сопровождение программного продукта включает в себя все действия, выполняемые с

приложением после  поставки продукта заказчику.

Сопровождение программы – это процесс изменения программной системы (компонента) после поставки с целью исправления ошибок, повышения производительности, а также для адаптации к изменившимся условиям. Сопровождение программы составляет от 40% до 90% стоимости всего жизненного цикла приложения.

Продолжающаяся  разработка – это разработка новых и переработка имеющихся функций программы в процессе эксплуатации.

Проблемы  сопровождения программ:

  • Проблемы управления: трудность выявления прибыли на инвестированный капитал.
  • Проблемы обработки: для обслуживания потока запросов на сопровождение требуется жесткая координация.
  • Проблемы технического характера: трудность учета всех результатов изменений; высокая стоимость тестирования по сравнению с пользой от отдельных изменений.

Работы  по сопровождению:

  • устранение дефектов
  • усовершенствование приложения (60–80% работ).
 

12.     Дисциплина программирования, Парадигмы программирования, Циклы повышения  продуктивности 

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

Программирование можно рассматривать как:

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

 Парадигмы программирования

Парадигма программирования — это собрание основополагающих принципов, которые

служат методической основой конкретных технологий и  инструментальных средств программирования.

Структурное программирование

Исторически первая оформленная парадигма - структурное программирование (Э.Дейкстрой): любая структура управления может быть функционально выражена суперпозицией последовательного выполнения, ветвления по условию и цикла с предусловием.

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

Все системы  программирования поддерживают понятие  модуля (подпрограмма, функция, класс, модуль, компонента). Модульность - средство преодоления количественных ограничений. Модульное программирование является непосредственной реализацией принципа "разделяй и властвуй" в программировании.

Программирование  сверху вниз – модульное программирование методом пошагового уточнения: задача разлагается на подзадачи до тех пор, пока подзадача не станет столь простой, что ее реализация становится очевидной.

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

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

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

Логическое  программирование

Модель  вычислимости — это формальное определение понятия вычислимой функции,

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

Во всех распространенных системах программирования имеются  два фундаментальных понятия, индуцированные архитектурой машины:

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

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

Программирование, в котором используется явное  понятие управления, называется императивным, в противоположность декларативному программированию. Логическое программирование является декларативным.

Продукционное программирование тесно связано с нормальными алгоритмами Маркова.

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

Функциональное  программирование тесно связано с λ-исчислением Чёрча. Функциональная программа является композицией функционалов (т.е. функций, аргументами и результатами которых могут быть функционалы). В функциональной программе нет ни явного управления, ни явных переменных, а следовательно, нет и явного присваивания.

 Объектно-ориентированное программирование

Центральной идеей  парадигмы ОО программирования является инкапсуляция, т.е. структурирование программы на модули особого вида, объединяющего данные и процедуры их обработки, причем внутренние данные модуля не могут быть обработаны иначе, кроме как предусмотренными для этого процедурами. Каждый такой модуль имеет внутреннюю часть, называемую реализацией и внешнюю часть, называемую интерфейсом. Доступ к реализации возможен только через интерфейс. В интерфейсе различают свойства (переменные) и методы (процедуры или функции).  Эту структуру называют объект. С ОО ассоциируются также понятия наследование и полиморфизм.

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

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