2_общие принципы и подходы к разработке по

advertisement
Общие принципы и
подходы к разработке ПО
Модели разработки ПО
Водопадная
Каскадная модель
Спиральная
Экстремальное программирование
UI Prototyping
Инкрементальная
W-Model Testing
Унифицированный процесс разработки
программного обеспечения (USDP)
Методология MSF
Водопадная модель
Анализ
требований
Составляется
спецификация продукта
Проектирование
Составляется архитектура продукта
Реализация
Разработка
исходного кода
Интеграция
Интеграция отдельных
частей исходного кода
Тестирование
Тестирование и
устранение дефектов
Каскадная модель
Спиральная модель
Экстремальное
программирование
Анализ исходных
требований
Проектирование
Интеграция
Реализация
Тестирование
Новые
требования
Анализ/Утвержде
ние/модификация
плана разработки
Выпуск
продукта
UI Prototyping
Выпуск продукта
Разработка ПО с
учетом изменений
Уточнение требований
и спецификации
Изменение прототипа и
доработка некоторой
функциональности
Базовая функциональность
Прототип интерфейса
Предварительная
спецификация
Инкрементальная разработка
Итерация 1 Итерация 2 ….
Анализ требований
Проектирование
Реализация
Компонентное
тестирование
Интеграция
Тестирование
единого целого
Итерация N
Унифицированный процесс
разработки программного
обеспечения (USDP)
 Модель вариантов использования, описывает случаи,
в которых приложение будет использоваться.
 Аналитическая модель описывает базовые классы
для приложения.
 Модель проектирования описывает связи и
отношения между классами и выделенными объектами
 Модель развертывания описывает распределение
программного обеспечения по компьютерам.
 Модель реализации описывает внутреннюю
организацию программного кода.
 Модель тестирования состоит из тестирующих
компонентов, тестовых процедур и различных
вариантов тестирования
Унифицированный процесс
разработки программного
обеспечения (USDP)
Сбор требований
Итер 1…. Итер N
Проектирование
Итер 1…. Итер N
Реализация
Итер 1…. Итер N
Конструирование
Итер 1…. Итер N
Тестирование
Итер 1…. Итер N
W-Model Testing
Методология MSF
Модель процесса MSF
Каскадная модель
Спиральная модель
Типичные компоненты архитектуры
программного продукта и типичные
требования к ПО













Организация программы
Основные классы системы
Организация данных
Бизнес–правила
Пользовательский интерфейс
Управление ресурсами
Безопасность
Производительность
Масштабируемость
Взаимодействие с другими системами (интеграция)
Интернационализация, локализация
Ввод-вывод данных
Обработка ошибок
Типичные компоненты архитектуры
программного продукта и типичные
требования к ПО
Отказоустойчивость – совокупность свойств системы, повышающая
ее надежность путем обнаружения ошибок, восстановления и локализации
плохих последствий для системы. При разработке любой реальной системы
для обеспечения отказоустойчивости необходимо предусматривать
всевозможные ситуации, которые могут привести к сбою системы и
разработать механизмы обработки сбоев.
Надежность – способность системы противостоять различным
отказам и сбоям. Отказ – это переход системы в результате ошибки в
полностью неработоспособное состояние. Сбой – ошибка в работе системы,
которая не приводит к выходу системы из строя. Чем меньше отказов и
сбоев за какой-то определенный интервал времени, тем система
считается надежнее.
Типичные компоненты архитектуры
программного продукта и типичные
требования к ПО
Кривая надежности
N
t1
t
Чем дальше, тем тяжелее будет найти ошибку.
Чем сложнее система, тем больше вероятность отказов и сбоев.
Типичные компоненты архитектуры
программного продукта и типичные
требования к ПО
 Возможности реализации
разрабатываемой архитектуры.
 Избыточная функциональность.
 Принятие решение о приобретении
готовых компонент ПО.
 Стратегия изменений.
Контрольный список вопросов,
который позволяет сделать вывод
о качестве архитектуры:
 Ясно ли описана общая организация программы;






включает ли спецификация обзор архитектуры и ее
обоснование.
Адекватно ли определены основные компоненты
программы, их области ответственности и
взаимодействие с другими компонентами.
Все ли функции, указанные в спецификации требований,
реализованы разумным количеством компонентов
системы.
Приведено ли описание самых важных классов и их
обоснование.
Приведено ли описание организации БД.
Определены ли все бизнес правила.
Описано ли их влияние на систему.
Контрольный список вопросов,
который позволяет сделать вывод
о качестве архитектуры:
Описана ли стратегия проектирования пользовательского
интерфейса.
Сделан ли пользовательский интерфейс модульным,
чтобы его изменения не влияли на оставшуюся часть
системы.
Приведено ли описание стратегии ввода-вывода данных.
Проведен ли анализ производительности системы,
которая будет реализовываться с использованием данной
архитектуры.
Проведен ли анализ надежности проектируемой системы.
Проведен ли анализ вопросов масштабируемости и
расширяемости системы.
Рефакторинг ПО
Рефакторинг предполагает адаптацию программного обеспечения
к новому аппаратному обеспечению и к новым ОС, новым средствам
разработки, новым требованиям, а также архитектуре и
функциональности ПО. Это изменение внутренней структуры ПО без
изменения его внешнего поведения, призванное обеспечить
модификацию ПО. Разумные причины проведения рефакторинга:
Код повторяется;
реализация метода слишком велика;
слишком большая вложенность циклов, или же сам цикл
очень большой;
класс имеет плохую связность (свойства и методы класса
должны описывать только 1 объект);
интерфейс класса не формирует согласованную
абстракцию;
метод принимает слишком много параметров. Необходимо
стараться, чтобы количество параметров было разумно
минимальным;
отдельные части класса изменяются независимо от других
частей класса;
Рефакторинг ПО
при изменении программы требуется параллельное
изменение нескольких классов. При возникновении такой
ситуации необходимо провести реорганизацию классов с
целью минимизации в будущем мест возможных
изменений;
приходиться параллельно изменять несколько иерархий
наследования;
приходиться изменять несколько блоков case.
Необходимо провести модификацию программы таким
образом, чтобы сделать реализацию блока case, а
вызывать ее в нужном количестве раз в программе;
родственные элементы данных, используемые вместе, не
организованы в классы. Если вы неоднократно
используете один и тот же набор элементов данных, то
целесообразно рассмотреть объединение этих данных и
выполняемые над ними операции поместить в отдельный
класс;
Рефакторинг ПО
метод использует больше элементов другого класса,
чем собственного. Это означает, что метод нужно
переместить в другой класс и вызывать его из старого;
элементарный тип данных перегружен. Для описания
сущности реального мира лучше использовать какойлибо класс, чем перегружать какой-либо существующий
тип данных;
класс имеет слишком ограниченную функциональность.
Лучше от этого класса избавиться, перенеся его
функциональность в другой класс;
по цепи методов передаются «бродячие» данные.
Данные, передаваемые в метод только для того, чтобы
он их передал другому методу, называются
«бродячими». При возникновении таких ситуаций
постарайтесь изменить архитектуру классов и методов,
чтобы от них избавиться.
Рефакторинг ПО
объект-посредник ничего не делает. Если роль класса
сводится к перенаправлению вызовов методов в другие
классы, то лучше всего такой объект-посредник
устранить и выполнять вызовы других классов
непосредственно;
один класс слишком много знает о другом классе. В этой
ситуации необходимо сделать инкапсуляцию более
строгой, чтобы обеспечить минимальное знание
наследника о своем родителе;
метод имеет неудачное имя;
данные-члены являются открытыми. Это стирает грань
между интерфейсом и реализацией, неизбежно
нарушает инкапсуляцию, и ограничивает гибкость
программы;
размещать комментарии в исходном коде;
Рефакторинг ПО
подкласс использует только малую долю методов своих
предков. Такая ситуация возникает тогда, когда новый
класс создается только лишь для наследования
нескольких методов из базового класса, а не для того,
чтобы описать какую-либо новую сущность. Для того,
чтобы этого избежать, необходимо преобразовать
базовый класс, таким образом, чтобы он давал доступ
новому классу только к необходимым ему методам;
код содержит глобальные переменные. Глобальными
должны быть только те переменные, которые в
действительности используются всей программной. Все
остальные переменные должны быть либо локальными,
либо должны стать свойствами каких-либо объектов;
программа содержит код, который может когда-нибудь
понадобиться. При разработке системы целесообразно
предусмотреть места, куда в будущем может быть
добавлен исходный код.
Download