Оценка качества процессов создания программного обеспечения

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

1. Короткий цикл обратной связи (Fine scale feedback)

– Разработка через тестирование (Test driven development) – техника программирования, при которой модульные тесты для программы или её фрагмента пишутся до самой программы (англ. test-first development) и, по существу, управляют её разработкой. Является одной из основных практик экстремального программирования;

– Игра в планирование (Planning game)

– Заказчик всегда рядом (Whole team, Onsite customer)

– Парное программирование (Pair programming)

2. Непрерывный, а не пакетный процесс

– Непрерывная интеграция (Continuous Integration) – это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем;

– Рефакторинг (Design Improvement, Refactor) – процесс полного или частичного преобразования внутренней структуры программы при сохранении её внешнего поведения.

– Частые небольшие релизы (Small Releases)

3. Понимание, разделяемое всеми

– Простота (Simple design)

– Метафора системы (System metaphor)

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

– Стандарт кодирования (Coding standard or Coding conventions) – набор правил и соглашений, используемых при написании исходного кода на некотором языке программирования

4. Социальная защищенность программиста (Programmer welfare):

– 40-часовая рабочая неделя (Sustainable pace, Forty hour week)

1. Стандарты ISO 9000-9004. Необходимые условия для достижения минимального уровня организации процесса ППО.

2. CMM (Capability Maturity Model) – модель зрелости процессов создания ПО. Включает 5 уровней: начальный, повторяемый, определённый, управляемый, оптимизирующий.

3. SPICE (Software Process Improvement and Capability dEtermination) (ISO/IES 15504) – определение возможностей и улучшение процесса создания программного обеспечения.

2.6. Проектирование надёжного программного средства

Одним из основных показателей программного продукта является его надёжность. Надёжность определяется количеством ошибок, содержащихся в программном продукте. При этом под ошибкой следует понимать не только отказы программы, приводящие к её аварийному завершению, но и неправильные с точки зрения пользователя результаты работы, даже если с точки зрения разработчика эти результаты верны.

Согласно Майерсу, «В программном обеспечении имеется ошибка, если оно не выполняет того, что пользователю разумно от него ожидать», т.е. ошибки в ПО не являются внутренним его свойством, наличие ошибок зависит как от самого программного обеспечения, так и от ожиданий пользователя.

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

Почему техника надёжнее программ?

1. Большее разнообразие входных данных.

2. Отношение к возможным применениям.

3. Различная природа компонент.

Макромодель перевода. проектирование программного обеспечения состоит из ряда этапов.

Рис 2.1 - Макромодель перевода

На каждом из этапов возможны ошибки по взаимодействию исполнителей.

Микромодель перевода.

Чтение à Запоминание à анализ à распространение

Причины ошибок:

- чтение между строк à всё, что непонятно, требуется уточнять у автора документа;

- непонимание;

- нечёткое выражение мыслей.

Четыре подхода к надёжности.

1. Предупреждение ошибок.

2. Обнаружение ошибок.

3. Исправление ошибок.

4. Устойчивость к ошибкам.

- динамическая избыточность (неприменимо);

- отступление (обработка исключений try – throw – catch);

- изоляция ошибок (задача ОС).

Основным подходом повышения надёжности является предупреждение ошибок, т.е. их исключение на этапе разработки ПС. Это достигается следованием существующих технологий программирования.

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

- независимость компонент – компоненты должны быть максимально независимы;

- иерархическая структура компонент.