Сергей Бобровский

 

После обучения программистов методологии PSP...

...в фирме Union Switch and Signal на этапах внедрения и промышленного использования пяти заказных КИС не встретилось ни одной ошибки. Все работы были выполнены точно в срок;

...в фирме Motorola в 18 проектах общим размером около 25 тыс. строк была обнаружена только одна ошибка;

...в фирме AIS время тестирования выпускаемых продуктов сократилось с 2 месяцев до 5 дней.

Согласно статистике, внедрение PSP снижает число ошибок в программах в среднем на 73%, точность оценки объема предстоящих работ возрастает на 26%, точность оценки времени работы над проектом - на 40%. При этом производительность труда программистов (число строк кода в час) увеличивается на 21%.    

Уотс Хамфрей находит источник ошибок

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

Как сегодня выполняется крупный программный проект? Составляется календарный план, разработчикам (программы, функциональной модели, схемы базы) выдается задание, назначается руководитель, периодически проверяющий творчество подчиненных в рамках цикла “написал - протестировал - выявил ошибки - исправил”. Чем больше таких циклов за время проекта удастся прокрутить, тем больше ошибок можно выявить и устранить. Ни о каком целенаправленном управлении качеством продукта речь не идет. Все так же тратятся бесконечные часы на отлов одних и тех же ошибок 30-летней давности. Немудрено, что главным достоинством хорошего менеджера проекта становится прежде всего способность организовать авральную работу программистов по ночам.

Может показаться, что управлять количеством ошибок в коде невозможно и их число зависит только от способностей конкретного человека. Это не совсем так. В конце 80-х - начале 90-х годов в программной индустрии был проведен ряд серьезных исследований эффективности труда программистов. Вот данные американского института программной инженерии SEI. Профессиональные программисты со стажем 10 и более лет на 1000 строк кода (СК, строка исходного текста, которая содержит программную инструкцию) допускают в среднем 131,3 ошибки. Следовательно, большая система размером миллион СК содержит 100 тыс. ошибок! Из них до 50% выявляется на этапе компиляции (если транслятор имеет развитую систему предупреждений). На этапе тестирования отдельных модулей (типичный программный модуль по определению SEI содержит от 5 до 5 тыс. СК) обнаруживается половина оставшихся ошибок. Получается, что перед этапами внедрения и комплексного тестирования в продукте еще скрывается 25 тыс. ошибок. Для их устранения на заключительных этапах тратится от 10 до 40 человеко-часов на ошибку, т. е. на доведение продукта до идеального состояния потребуется 125 лет работы.

Другая статистика. Типичный американский проект имеет объем 50 тыс. СК. Его создают 5 программистов, делая при этом 100 ошибок на тысячу СК. 50% ошибок выявляется на этапе компиляции с незначительными расходами времени, устранение ошибок на этапе тестирования занимает 90% времени. Стоимость устранения одной ошибки в готовом продукте оценивается в 4 тыс. долл. (по данным IBM, одна ошибка в ее продуктах обходится в 20 тыс. долл.).

Корень зла кроется в неправильных акцентах при управлении качеством ПО. Корреляция между числом ошибок, обнаруженных при тестировании отдельных модулей, и числом ошибок, найденных пользователями в готовом продукте, равна 0,91! Отсюда вывод - если на тестирование поступит некачественный продукт, он таким и будет выпущен в продажу.

Уотс Хамфрей, сотрудник SEI, активно участвовавший в разработке модели CMM (Capability Maturity Model), разработал технологию PSP (Personal Software Process), которая дает возможность программистам значительно повысить качество создаваемого ПО. PSP позволяет выявить максимальное число ошибок (в среднем 76,5%) именно на этапе тестирования модулей.

Хамфрей считает, что самый верный путь повысить качество ПО - улучшить процесс создания и сопровождения программы. Каждый программист применяет собственный, персональный процесс разработки ПО (ППР), который всегда отличается от ППР другого программиста. Поэтому практически невозможно научить человека программировать без ошибок. Но можно научить тому, что надо делать, чтобы улучшать свой ППР. Для этого предназначен курс PSP, который состоит из 7 этапов. Каждый этап - своего рода неформальный уровень сертификации программиста.

PSP 0. Понятие ППР. Измерение базовых характеристик работы - числа ошибок и затраченного времени.

PSP 0.1. Измерение объема проекта.

PSP 1. Оценка объема проекта.

PSP 1.1. Оценка времени и других ресурсов, которые планируется затратить на проект. Составление календарного плана.

PSP 2. Управление качеством. Обзоры проекта и кода.

PSP 2.1. Проектирование программы.

PSP 3. Совершенствование ППР. Циклическая разработка.

В заключение программист обучается навыкам коллективной работы, знакомится с принципами конфигурационного управления и т. д. Хамфрей считает, что пока программисты не научатся качественно писать небольшие программы, они не смогут хорошо работать в группе над сложными системами. Он недавно приступил к созданию методологии Team Software Process (TSP), которая будет применяться, если все члены команды прошли курс PSP. С помощью TSP небольшая команда программистов сможет очень эффективно организовать свою деятельность.

Что дает методология PSP разработчику? Она помогает ему значительно (нередко в десятки раз) уменьшить число ошибок в своих программах, управлять качеством ПО и точно оценивать свою производительность. А умение составить хороший календарный план и способность выполнить работу с высоким качеством и в срок может сыграть ключевую роль в профессиональном росте, положительно сказаться на зарплате, отношениях с руководством и т. д.    

Семь шагов самосовершенствования

Для применения PSP нужен набор из 76 форм, стандартов и инструкций, составленных SEI, на которых основываются формальные методы ведения работы и составляется план улучшения ППР. В России, насколько мне известно, курсов по обучению PSP нет, но даже простое знакомство с PSP способно принести программисту очень большую пользу, в чем я быстро убедился на собственном опыте.

Шаг 1 - PSP 0. Обучение основным способам измерения своей работы.

Программист знакомится с понятием ППР, в которое входят: сценарий работы, итоговая форма, календарный план проекта, протоколы затраченного времени и обнаруженных ошибок.

Сценарий ППР состоит из трех этапов:

1) готовится календарный план, оценивается время на каждый этап;

2) создается программа;

3) составляется отчет о затраченном времени и найденных ошибках.

Работа осуществляется с помощью методов проектирования и разработки, характерных для конкретного программиста. Эти методы совершенствуются на следующих уровнях PSP.

Второй этап сценария более детально выглядит так:

1) составляется проект программы;

2) исходные тексты компилируются, выявленные ошибки устраняются;

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

4) составляется протокол работы с фиксацией затраченного времени и описанием найденных ошибок.

В каждой строке временного протокола записывается время начала и конца очередного этапа, время на перерывы и комментарий. В каждой строке протокола ошибок записывается число ошибок на данном этапе работ, тип каждой ошибки, время ее устранения, краткое описание, а также характеристика “внесенная/обнаруженная”.

Ошибка, по терминологии PSP, - все, что должно быть изменено в программе, чтобы ее можно было в дальнейшем нормально разрабатывать, улучшать или использовать. Внесенная ошибка - та, которая была внесена и выявлена до ближайшей компиляции; обнаруженная - выявленная при тестировании. В PSP считается, что число обнаруженных (после компиляции) ошибок должно стремиться к нулю.

PSP использует типизацию ошибок, разработанную IBM.

Коды и типы ошибок:

10 - ошибки документации (неверные комментарии, неправильные описания программных частей);

20 - синтаксические ошибки;

30 - ошибки сборки (неправильное использование библиотек, сборка программы из объектных модулей разных версий);

40 - ошибки присваивания (неверные описания переменных, использование совпадающих имен, выход за границы значений);

50 - ошибки программного интерфейса (некорректные вызовы внешних процедур, неправильная работа инструкций ввода-вывода, неверный формат данных);

60 - ошибки проверки (пропуск предупреждающих сообщений компилятора, появление неопределенных сообщений);

70 - ошибки данных (неверная структура или содержание данных);

80 - функциональные ошибки (логические ошибки, неправильная работа с указателями, неверные вызовы функций, реализации циклов, рекурсий);

90 - системные ошибки (неправильная настройка ОС, нехватка памяти);

100 - ошибки окружения, связанные с неправильным функционированием среды разработки.

Шаг 2 - PSP 0.1. Измерение объема программы и ее отдельных модулей.

PSP рекомендует измерять объем программы в СК. Этот параметр хорошо коррелирует с усилиями, затрачиваемыми на создание программы. Его преимущество в том, что число СК позволяет точно оценить размер программы и использовать автоматические средства учета.

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

Окончание следует

Версия для печати