Общие принципы и подходы к разработке ПО Модели

Download Report

Transcript Общие принципы и подходы к разработке ПО Модели

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

Модели разработки ПО

Водопадная Каскадная модель Спиральная Экстремальное программирование 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, а вызывать ее в нужном количестве раз в программе; родственные элементы данных, используемые вместе, не организованы в классы. Если вы неоднократно используете один и тот же набор элементов данных, то целесообразно рассмотреть объединение этих данных и выполняемые над ними операции поместить в отдельный класс;

Рефакторинг ПО

метод использует больше элементов другого класса, чем собственного. Это означает, что метод нужно переместить в другой класс и вызывать его из старого; элементарный тип данных перегружен. Для описания сущности реального мира лучше использовать какой либо класс, чем перегружать какой-либо существующий тип данных; класс имеет слишком ограниченную функциональность. Лучше от этого класса избавиться, перенеся его функциональность в другой класс; по цепи методов передаются «бродячие» данные. Данные, передаваемые в метод только для того, чтобы он их передал другому методу, называются «бродячими». При возникновении таких ситуаций постарайтесь изменить архитектуру классов и методов, чтобы от них избавиться.

Рефакторинг ПО

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

Рефакторинг ПО

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