33
ЭФФЕКТИВНОЕ ОО-ПРОЕКТИРОВАНИЕ И СТРУКТУРНОЕ КАЧЕСТВО ПРИЛОЖЕНИЙ Алексей ПЕТРОВ

STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

Embed Size (px)

Citation preview

Page 1: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ЭФФЕКТИВНОЕ ОО-ПРОЕКТИРОВАНИЕ И СТРУКТУРНОЕ КАЧЕСТВО ПРИЛОЖЕНИЙ

Алексей ПЕТРОВ

Page 2: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

О ЧЕМ ПОЙДЕТ РЕЧЬ?

1

2

3

4

Что такое «структурное качество» приложений?

Как соотносятся шаблоны ОО-проектирования и

показатели качества?

Что такое «анти-шаблоны»?

Какую помощь в обеспечении структурного качества

могут оказать современные языки?

Какие мероприятия могут помочь в обеспечении

структурного качества?

Реально ли повысить структурное качество уже написанных

приложений?

Page 3: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

НЕФОРМАЛЬНОЕ ВВЕДЕНИЕ

1

2

3

4

Качество — это…

… «степень соответствия присущих характеристик <…>

изделия или продукта потребностям, ожиданиям»

(ГОСТ Р ИСО 9000). Различают качество программного

обеспечения (ПО) и исходного кода.

Основная задача

… планировать и осуществлять мероприятия по анализу и

повышению структурного качества исходного программного

кода как артефакта в процессах разработки ПО

Актуальность

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

обеспечения и контроля качества на все этапы разработки

ПО; распространение методов ОО-анализа, проектирования

и разработки; применение UML и CASE-средств.

Первые результаты

Повышение качества управления рисками и затратами на

всех этапах жизненного цикла ПО

Page 4: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

МОДЕЛИ КАЧЕСТВА ПО

Модели качества ПО — это упорядоченные системы атрибутов, значимых для заинтересованных сторон проекта разработки ПО

Общий принцип — числовое выражение фактора: линейная комбинация взвешенных влияющих метрик

4,8𝒇𝒊 = 𝒘𝒊𝒋𝒎𝒋𝒋

Критерии

точка зрения разработчика

точка зрения пользователя

Факторы

Метрики а

тр

иб

ут

ы

мо

де

ли

Дж. МакКол

Б. Боэм

ISO 9126

20 стр.

Page 5: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ВОПРОС #1

Что такое «качественное ПО»?

1

2

Что такое «качественное ПО»?

– Ответьте, используя не более шести слов.

Какие характеристики ПО, на ваш взгляд, можно

назвать структурными?

– Ответьте, используя не более шести слов.

20 стр.

Page 6: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

МОДЕЛЬ КАЧЕСТВА ISO / IEC 9126

1991 2001

6 целей

ожидание от ПО

21 атрибут

близость к достижению

цели

ISO / IEC 9126

ISO 25000:2005

SQuaRE — Software product Quality Requirements and

Evaluation

5 структурных

характеристик ПО

❶Надежность прочность, устойчивость; степень риска, сопряженного с использованием системы

❷Эффективность

производительность операций; управление ресурсами; правила кодирования

❸Безопасность правила кодирования; обработка ошибок и исключений

документация в коде; удобство чтения кода; отсутствие «грязных» техник;

переносимость кода

❹Удобство сопровождения

оценка трудозатрат в ретроспективе и перспективе

❺Размер кода

Page 7: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

МЕТРИКИ КАЧЕСТВА В МОДЕЛИ ISO / IEC 9126

1991 2001

6 целей

ожидание от ПО

21 атрибут

близость к достижению

цели

ISO / IEC 9126

SQuaRE — Software product Quality Requirements and

Evaluation

ISO 9126-2, ISO 9126-3

Метрики качества

Полнота и корректность реализации функций

Отношение числа найденных дефектов к прогнозному

Отношение числа проведенных тестов к общему их числу

В трактовке ISO 9126, качество ПО можно повысить,

не внося в него изменений

Page 8: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ЛАНДШАФТ МЕТОДОВ ОЦЕНКИ КАЧЕСТВА ПО

1

2

3

Необходим «запуск» объекта

исследования?

По анализируемым

артефактам

По способу

изучения

статические динамические

формальные модели

исходный программный код объектный код документация

инструментальный анализ

целенаправленная инспекция (desk-checking)

рефакторинг

Page 9: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ВОПРОС #2

Ограничения статического анализа

Возможно ли путем статического анализа установить

степень реализации следующих атрибутов качества

ПО? Ответьте «да» или «нет»

– Защищенность ________________________

– Понятность ________________________

– Правильность, точность ________________________

– Привлекательность ________________________

– Работоспособность ________________________

– Удобство анализа ________________________

– Удобство обучения ________________________

20 стр.

Page 10: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

СТАТИЧЕСКИЙ АНАЛИЗ И СТРУКТУРНЫЕ ПОКАЗАТЕЛИ КАЧЕСТВА

1

2

3

Статический

анализ:

Нефункциональные

требования:

Оценка качества:

удобство чтения низкая сложность

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

полнота краткость

понятность надежность структурированность

удобство сопровождения

компонентная структура

платформа архитектура исходный код схема БД

Page 11: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

МЕТРИКИ В АРТЕФАКТАХ

1

2

3

4

Архитектура

Соблюдение стандартов разработки архитектуры;

реализация шаблонов проектирования разного уровня;

показатели связности и повторного использования компонентов

Транзакции и алгоритмы

Сложность транзакций и алгоритмов;

сложность приемов программирования и отсутствие «грязных» техник

Исходный код

Соблюдение правил оформления кода;

обработка ошибок и исключений;

соответствие выбранной парадигме

Техническая документация

Удобство чтения и структурированность;

объем документации

Page 12: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

БОРЬБА СО СЛОЖНОСТЬЮ: РАУНД 1

1

2

3

4

Сложность — это…

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

Снижению сложности способствуют…

…предварительное проектирование архитектуры в соответствии с заданными критериями качества с учетом ее реализуемости на выбранном языке

«Несложный» код:

«Несложный» код обеспечивает…

…снижение совокупной стоимости владения ПО

лаконичность модульность

использование шаблонов

слабая связанность соблюдение правил оформления кода

систематическая обработка ошибок

20 стр.

Page 13: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

БОРЬБА СО СЛОЖНОСТЬЮ: РАУНД 2

1

2

3

4

Самодокументируемость кода

Обеспечивает понятность кода без обращения к документации;

способствует соответствию исходного кода «внутренней программной документации»

Композиция объектов компонентная разработка

Не порождает сильной связи суперклассов с подклассами;

не вызывает проблемы «хрупких» базовых классов (fragile base class)

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

Принцип «корректность по построению»

Подразумевает применение методов проектирования, автоматически гарантирующих корректность получаемого продукта

Page 14: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ВОПРОС #3

«Контракты» в коде и качество ПО

1

2

Что вы знаете о контрактном программировании?

– Предложите свое определение контрактного

программирования, содержащее не более пяти слов.

Какие структурные показатели качества улучшает

применение «контрактов» в исходном коде?

– Ответьте, используя не более четырех слов.

20 стр.

Page 15: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ЗНАКОМЬТЕСЬ: ПРАКТИЧЕСКИЕ ПРИМЕРЫ

1

2

3

Стандарты и стили кода

Открытые: Google C++ Style Guide, Code Conventions for the Java Programming Language;

частные: корпоративные, командные и т.д.

Шаблоны проектирования

Фундаментальные (базовые);

GoF, Gang of Four (Э. Гамма и др.);

GRASP (К. Ларман);

PoEAA (М. Фаулер)

Автоматическая генерация, рефакторинг, комментирование и документирование кода

CASE- и ALM-средства (в составе Microsoft Visual Studio, Eclipse IDE, IntelliJ IDEA и т.д.);

Doxygen, javadoc и т.д.

Page 16: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ФУНДАМЕНТАЛЬНЫЕ ШАБЛОНЫ ОО-ПРОЕКТИРОВАНИЯ. ШАБЛОНЫ GOF И GRASP

1

2

3

Цель ОО-проектирования

Разработка архитектуры согласно выбранным критериям качества и с учетом ее реализуемости на выбранном языке

Типичные компромиссы

Соответствие дизайна задаче общность дизайна;

доступность элементов системы безопасность;

удобство вызова возможность тонкой настройки

Шаблоны (паттерны) проектирования —это…

…типовые архитектурные решения задач, в том числе:

фундаментальные шаблоны: наследование, делегирование и др.;

шаблоны «банды четырех» (GoF): стратегия, адаптер и др.;

шаблоны GRASP, PoEAA и др.

Page 17: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ПРИМЕР #1: ШАБЛОНЫ ОО-ПРОЕКТИРОВАНИЯ (UML)

Делеги-рование

Адаптер объекта

Page 18: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ПРИМЕР #2: ШАБЛОНЫ ОО-ПРОЕКТИРОВАНИЯ (JAVA)

public class Singleton {

private static final Singleton instance =

new Singleton();

private Singleton() {

// …

}

public static Singleton getInstance() {

return instance;

}

}

Page 19: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ВОПРОС #4

Проблемы архитектуры и качество ПО

20 стр.

Какие показатели качества ПО страдают от наличия

следующих проблем в архитектуре системы? Ответьте

полно, насколько это возможно. Время на ответ —

3 минуты.

– Наличие «божественных» классов или объектов

_______________________________________________

– Сильная связанность классов или объектов

_______________________________________________

– Невозможность замены способа выполнения операции

(запроса)

_______________________________________________

Page 20: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

КАК СООТНОСЯТСЯ ШАБЛОНЫ ПРОЕКТИРОВАНИЯ И КАЧЕСТВО ПРИЛОЖЕНИЙ? (1 / 3)

Проблема Пример шаблона

Чрезмерное количество используемых

классов, объектов или глобальных

переменных системы

Наследование, прототип,

одиночка, посредник,

приспособленец

«Хрупкие» базовые классы Композиция

«Божественные» объекты Декоратор, состояние,

стратегия

Слабая инкапсуляция (локализация) имен

или зависимость от имен

Абстрактная фабрика,

прототип, фабричный метод,

фасад, шаблонный метод

Слабая инкапсуляция (локализация) кода

или структур данных

Итератор, мост, наблюдатель

(менеджер), состояние,

стратегия, строитель, фасад,

шаблонный метод

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

20 стр.

Page 21: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

Проблема Пример шаблона

Дублирование кода Наследование, композиция,

мост, шаблонный метод

Невозможность замены способа

выполнения запроса, сложность сочетания

поведений или динамического

конфигурирования системы

Декоратор, делегирование

(композиция), наблюдатель,

посредник, прототип,

состояние, стратегия

Потребность в универсальном или

альтернативном способе доступа (системе

запросов), абстрактном типе данных (ADT)

Адаптер, интерфейс, итератор,

компоновщик, наблюдатель,

посетитель

Потребность в глобальной точке доступа Одиночка

Потребность в константном объекте Неизменяемый объект

Зависимость системы от программной или

аппаратной платформы Абстрактная фабрика, мост

Зависимость клиента от алгоритмов,

представления или реализации объекта Итератор, мост

КАК СООТНОСЯТСЯ ШАБЛОНЫ ПРОЕКТИРОВАНИЯ И КАЧЕСТВО ПРИЛОЖЕНИЙ? (2 / 3)

20 стр.

Page 22: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

КАК СООТНОСЯТСЯ ШАБЛОНЫ ПРОЕКТИРОВАНИЯ И КАЧЕСТВО ПРИЛОЖЕНИЙ? (3 / 3)

Проблема Пример шаблона

Сильная связанность классов или объектов Команда, мост, посредник,

фасад

Чрезмерное использование наследования Декоратор, композиция

Недостаточная скорость выполнения

инициализирующих операций

Заместитель, отложенная

инициализация

Необходимость широковещательных

коммуникаций Наблюдатель

Недостаточная расширяемость,

переносимость и безопасность

Заместитель, команда, мост,

фасад

Сложность архитектуры и компрометация

уровней многоуровневой системы Наблюдатель, фасад

20 стр.

Page 23: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ЧТО ТАКОЕ «АНТИ-ШАБЛОНЫ»…?

Загадочный код (Cryptic code)

умышленное или неумышленное несоблюдение принципа

самодокументируемости исходного кода

Божественный объект (God object)

монолитный артефакт большого размера в исходном коде

Жесткий код (Hard code)

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

Магические числа (Magic numbers)

константы с трудно постижимой семантикой

Page 24: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

… И ЧТО ТАКОЕ «ГРЯЗНЫЕ ТЕХНИКИ»?

«Мертвый» или пустой код

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

Архитектурно необоснованные заглушки

методы или функции, не выполняющие роль пустых неабстрактных методов, шаблонных методов (GoF) или операций-«зацепок» (hook operations)

Код с непредсказуемым поведением

обращение к неинициализированным переменным, «трюки» в управлении памятью, неконтролируемое переполнение буферов и т.д.

Page 25: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ВОПРОС #5

Языки ООП и качество исходного кода

20 стр.

1

2

Какие «внеязыковые» возможности современных

сред разработки могут помочь в обеспечении

структурного качества исходного кода?

Какие возможности языков ОО-программирования

вносят свой вклад в обеспечение структурного

качества кода?

– Ответьте полно, насколько это возможно. Время на ответ —

2 минуты.

Page 26: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

КАКУЮ ПОМОЩЬ МОГУТ ОКАЗАТЬ СОВРЕМЕННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ? (1 / 2)

C++ Java

Исполнение управляемого кода в

защищенной программной среде

быстро,

небезопасно

медленно,

безопасно

«Родные» методы (выполняют код вне защищенной среды,

имеют доступ ко всем системным

ресурсам)

быстро, небезоп.,

непереносимо

Строгая типизация

Запрет автоматического приведения

(преобразования) типов

част., особ. в C++11

Средства динамической идентификации

типов времени выполнения (RTTI)

dynamic_cast,

typeid

instanceof

Отладочные утверждения (assertions)

времени компиляции (исполнения)

Автоматическая сборка мусора

эмулируется

20 стр.

Page 27: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

КАКУЮ ПОМОЩЬ МОГУТ ОКАЗАТЬ СОВРЕМЕННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ? (2 / 2)

C++ Java

Обобщенное программирование с

поддержкой безопасности типов данных

шаблоны

обобщения

Элементы рефлексии в исходном коде

характеристики

типов

аннотации

Расширенная поддержка ОО-парадигмы

(абстрактные классы, «листовые» классы /

методы, «удаленные» методы)

особ. в C++11

Обработка исключительных ситуаций.

Стандартные и пользовательские классы-

исключения

Спецификация типов исключений,

возбуждаемых методами классов

на усмотрение

разработчика

существуют

непроверяемые

Алгоритмы и структуры данных в составе

стандартных библиотек

20 стр.

Page 28: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ЭЛЕМЕНТЫ РЕФЛЕКСИИ В ИСХОДНОМ КОДЕ

1

2

3

4

Предотвращают…

…некорректное использование библиотек, ошибки при выборе (типов) фактических параметров, непреднамеренные ошибки в сигнатурах методов (архитектуре классов) и пр.

Выделяют и принуждают…

… к отказу от использования устаревающих элементов архитектуры

Упрощают…

… работу с атомарными характеристиками типов и позволяют предельно оптимизировать специализированные версии универсальных функций и методов

Сопровождают…

… намеренно сохраненные в итоговой сборке кода предупреждения при компиляции

Page 29: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

АЛГОРИТМЫ И КОНТЕЙНЕРЫ В СОСТАВЕ СТАНДАРТНЫХ БИБЛИОТЕК

1

Позволяют…

работать с эффективным готовым исходным кодом;

ускорить процессы разработки;

снизить издержки на сопровождение продукта

2

Предоставляют…

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

широкие возможности повторного использования кода;

расширяемые, удобные, взаимозаменяемые программные модули с унифицированными интерфейсами

3

Обеспечивают…

вариативность решения задачи с учетом предпочтений разработчика;

структурную несовместимость контейнеров и алгоритмов, неэффективных при совместной работе

𝑂 𝑁

Page 30: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

ПРИМЕР #3: СТАНДАРТНЫЕ АЛГОРИТМЫ СОРТИРОВКИ (STD. TEMPLATE LIBRARY, C++)

1

std::sort (вариант quicksort)

нестабильная сортировка на месте;

среднее время — 𝑶 𝑵 log𝑵 ;

наибольшее время — 𝑶 𝑵𝟐

2

std::partial_sort (вариант heapsort)

нестабильная сортировка на месте;

допускает получение отсортированного поддиапазона длины 𝒌 < 𝑵;

наибольшее время — 𝑶 𝑵 log𝑵 или 𝑶 𝑵 log𝒌

3

std::stable_sort (вариант mergesort)

стабильная сортировка на месте;

адаптируется к ограничениям памяти (оптимальный объем памяти — под 𝑵 𝟐 элементов);

наибольшее время — от 𝑶 𝑵 log𝑵 до 𝑶 𝑵 log𝑵 𝟐

Page 31: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

КАКИЕ ОРГАНИЗАЦИОННЫЕ МЕРОПРИЯТИЯ МОГУТ ПОМОЧЬ В ОБЕСПЕЧЕНИИ КАЧЕСТВА?

Выбор и внедрение модели качества ПО Выбор модели и атрибутов качества, определение метрик

качества и их сравнительной значимости («весов»);

принятие модели качества в «обязывающей» форме;

утверждение и внедрение регламента регулярной оценки качества

Программа повышения квалификации (Принятая) модель и атрибуты структурного качества ПО;

расширенные возможности языков моделирования (UML), запросов к БД (SQL) и языков программирования;

поддержка качественного проектирования и разработки CASE-средствами, языками и инструментами

Соглашения о проектировании, моделировании, кодировании

Активное применение языков моделирования и CASE-технологий; автоматическая генерация исходного кода и технической документации по нему

1

2

3

4 Аудит наличной архитектуры и кодовой базы

Разработка и реализация плана рефакторинга архитектуры системы и ее исходного программного кода

Page 32: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

РЕАЛЬНО ЛИ ПОВЫСИТЬ СТРУКТУРНОЕ КАЧЕСТВО УЖЕ НАПИСАННЫХ ПРИЛОЖЕНИЙ?

Да!

❶ Провести комплекс организационных мероприятий

❷ Запустить систематический рефакторинг архитектуры и исходного кода

❸ Провести дополнительное тестирование приложения

❹ На регулярной основе пересматривать и ужесточать требования действующей модели качества приложения

❺ Держаться курса, чего бы это ни стоило!

Page 33: STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Software Applications [RUS]

СПАСИБО! ВОПРОСЫ?

Алексей ПЕТРОВ [email protected]