Программная инженерия до коллоквиума (набранные рукописные_ спасибо Дане и Денису) (1133619), страница 2
Текст из файла (страница 2)
кто-что делает)
на не очень большой срок
Метафора
системы
версия
тесты
разработка
Сценарий исп. для
Основная задача для системы – определить архитектурный стиль системы
Выброс решения
Техники в XP
1) мы пытаемся спланировать операции, на которых настроен пользователь, и, если у нас есть проблема с выполнением плана, то план нужно менять.
2) Частая смена версий, много релизов.
Пользователь быстро получает хоть что-то
3) Использование метафор(несколько емких предложений)
4) Простые решения(не нужно наворотов, делай то, что хочет пользователь)
5) Постоянная переработка для улучшения када
6) Разработка на основе тестов
Сначала делаем тесты, потом код
7) Парное программирование
один – прогает
второй – под руку советует (кто, что делает решают сами динамически)
8) Коллективное владение кодом
то есть нету областей ответственности
9
-
Постоянная интеграция – как только появляется новый кусок кода, его нужно вставить в систему.
-
Код – основное средство коммуникации.
-
40-часовая рабочая неделя, переработка не приветствуется (т. к. означает, что не вошли в график и теперь делается наспех и некачественно).
-
Включение заказчика в систему (всегда должен отвечать на вопросы «Что вы хотите».
-
Открытое рабочее пространство.
-
Изменение правил по необходимости.
C3-system проект
Задача – сделать систему, которая контролирует все о работниках некоторой компании. Через год стало ясно, что проект не удался. Потом сделали на 10 тыс. человек, но дальнейшего расширения так и не добились. Но именно тогда были написаны многие книги по основам программной инженерии.
Работа с требованиями
Нужды, потребности, ограничения системы. Также нужно иметь в виду концептуальную бизнес-модель.
Разработанная система решает некоторую проблему => изобретение наборов функций (абстрактных характеристик) для решения проблемы – обычно именно об этом разговаривают с заказчиком («пользовательские требования») => детализация требований (каждую функцию преобразовать в отдельный документ, детально описывающий характеристики).
IEEE-830 – стандарт на требования к ПО.
IEEE-1233 – стандарт на требования к программно-аппаратной системе.
Свойства IEEE-830
-
Корректность, адекватность
-
Полнота
-
Согласованность (непротиворечивость)
-
Ранжирование по важности
-
Ранжирование по стабильности (т. е. при выполнении требований нужно учитывать вероятность, что они могут измениться)
-
Проверяемость (т. е. всегда должен существовать человек, который может сказать, правильно или неправильно работает система)
-
Прослеживаемость (требования можно привязать к каким-то элементам системы)
-
Удобство внесения изменений (должны оформляться таким образом + они описаны систематически)
-
Однозначность
Набор деятельностей
(Порядок может быть сдвинут)
-
Выделение требований
-
Нужно выделить все возможные источники (документы / люди (пользователи, эксперты))
-
Извлечение требований из источников:
-
Аналитические методы (думаешь сам)
-
Коммуникационные методы (пристаешь к тем, кто знает):
-
опросы
-
демонстрационные
-
когнитивные (пытаемся максимально отвлечься от предметной области)
-
-
-
Согласование
Описание и систематизация требований
Описываются варианты использования – основной сценарий и некоторый набор альтернатив + описание результатов на выходе.
Абстрактные варианты использования – абстрактные решения задачи.
Детализированные варианты использования – конкретные сценарии решения задачи.
Связи – по использованию – т. е. один сценарий использует другой сценарий.
Любой процесс можно описать диаграммой, но более детально.
DFD – диаграммы потоков данных – процессы + потоки данных + хранилища + внешние сущности.
ERD – сущности + связи + атрибуты.
Сущности – некоторые понятия, например, товар, заказ, клиент.
Связи – обязательно / не обязательно (один к одному / один ко многим / многие ко многим).
ISO-9116 – набор характеристик качества по:
-
функциональности
-
надежности (как часты ошибки и как дорого устраняются)
-
производительности
-
переносимости
-
удобству использования
-
удобству сопровождения
Другой способ системаизации – фото 13, таблица сверху.
Также бывают позитивные/негативные требования, требования при сбоях.
-
Валидация и верификация
Ошибки в ПО и борьба с ними
Ошибки есть, так как система сложная.
Основные причины ошибок
-
Неправильное понимание того, что нужно сделать.
-
Придумали неправильное решение.
-
Опечатки и прочее.
Способы борьбы
-
Много думать, проверять и перепроверять свое понимание.
-
Стандартные методы контроля качества.
Defect – ошибка любого рода (любой природы).
Failure – сбой (система себя не так повела).
Fault – ошибка в коде, которая не всегда себя проявляет.
Error – ошибка, происходящая у разработчика в голове.
Чаще всего ошибки группируются в неясных и «темных» местах.
Методы контроля качества
-
Валидация – проверка, то ли делает система с точки зрения пользователя.
-
Верификация – проверка, делает ли система то, что записано в документации
-
Экспертиза – человек смотрит в код и ТЗ и сравнивает
-
Статический анализ – без выполнения кода
-
Динамический анализ – с выполнением кода
-
Формальные методы – строгое доказательство корректности математически
-
Инспекция по Фагону
Есть два документа, нужно проверить, соответствуют ли они друг другу (первичный и вторичный).
-
Вводятся роли
-
Ведущий (организатор)
-
Инспектор (ищет несоответствия)
-
Автор (отвечает за первичную документацию)
-
Интерпретатор (отвечает за вторичную документацию)
-
Вводится последовательность ходов
-
Планирование (проверка готовности документации, набор людей, планирование совещаний и т. д.)
-
Обзор – ознакомление с первичной документацией (в формате совещания)
-
Подготовка – инспекторы сами анализируют
-
Совместная инспекция – совещание, где каждый рассказывает про найденные несоответствия и задает еще вопросы
-
Исправление
-
Контроль – проверка, что все хорошо
Статический анализ
-
Находим стандартное место, где делают ошибки (проблема – много ложных срабатываний)
-
Наборы эвристик (накладываются поверх пункта 1)
В основном ошибки двух видов:-
false positive – ложное срабатывание
-
false negative – не нашли ошибку
-
Динамический анализ
Ориентированный на особенности выполнения анализа. Самое популярное: тестирование + профилирование.
-
«Дедуктивная» верификация
Основывается на сборе трасс и построении модели, основанной на булевых выражениях (системных вызовов или данных и т. д.)
Проблема с циклами (для борьбы с этим в циклах выделяются инварианты, не влияющие на выход из цикла).
Другая проблема – пользовательский ввод и взаимодействие с другими программами. -
Проверка моделей
Работа модели описывается автоматной моделью. Модели бывают ложными и долгими, но зато большая точность + возможность контрпримеров.
Еще можно тестировать модель, а потом проверять соответствие ей системы.
Тестирование
Проверка соответствия требованиям, выполнение при реальной работе системы, на конечном наборе заранее выбранных ситуаций.
Особенности:
-
Тесты собираются по спецификации, и чем она лучше, тем тесты лучше.
-
Проверка при реальной работе системы.
-
При тестировании проверяются заранее выбранные ситуации.
Хочется уметь выбирать тесты, чтобы их минимальное количество максимально проверяло систему.
Критерий полноты
Тесты нужно выбрать так, чтобы покрывалось все поведение относительно некоторого критерия для системы.
Критерии могут основываться на:
-
Структуре данных
-
Структуре программы
-
Структуре требований
-
Гипотезах об ошибках
-
Мутациях программы
Архитектура ПО
Функции -> Сценарии <-> Модули / компоненты <-> Сценарии развития.
Структура системы
Набор модулей и связей между ними.
Архитектура
Общие правила (концепция).
Функциональная декомпозиция
Смотрим на функции, которые нужны от системы, и делаем, как можем. Потом пытаемся предугадать изменения системы и переделать структуру так, чтобы потом было проще менять систему.
Когда в системе очень много разнообразных событий, и в будущем их типов станет еще больше, то делают архитектуру в стиле «репозиторий» – суть в том, что существует репозиторий событий, а множество других модулей над ним работают.
От структуры зависят
-
Свойства системы
-
Распределение работ
-
Демонстрация сценария работы (общение с пользователем)
-
Конфигурации (определение того, что все модули друг с другом работают)
Software Architecture Analysis Module (SAAM)
Берется архитектура и рассматривается с точки зрения дальнейшего расширения.
Этапы:
-
Описать сценарии развития системы
-
Описать сценарии развития архитектуры
-
Оценить сценарии (можно ли внести модификации без добавления модулей)
-
Оценить архитектуру (если есть модуль, который мешается во всех сценариях, то надо что-то делать)
Оценка зависит от использованных сценариев (т. е. фактически от цели использования).
В системах реального времени, где нужно обрабатывать события, часто используется замкнутый цикл управления.
Широко распространенные стили архитектуры
-
Конвейер
-
Вывод – возврат
-
Процедурная декомпозиция
-
Абстрактные типы данных
-
Многоуровневая система
-
Интерактивная система
Model – View – Controller (MVC)
Presentation – Abstraction – Control (PAC) – нет View контроллеров – то же, что и MVC, но иерархическая
Интерфейс состоит из агентов. Пользователь видит Presentation. У каждого агента свои данные.
Хранилища
-
Репозиторий
-
Blackboard – обычно используется в системах с искусственным интеллектом








