Основное требование, предъявляемое в настоящее время к программе, — надежность. Под надежностью подразумевается способность программы работать в полном соответствии со спецификацией и адекватно реагировать на любые действия пользователя.
Программа должна также обладать расширяемостью, т. е. допускать оперативное внесение необходимых изменений и дополнений. Может показаться странным, зачем с самого начала думать о будущих изменениях программы, но ведь для любого сколько-нибудь удачного коммерческого продукта выход новых версий — единственный способ не потерять популярность среди пользователей.
Кроме того, программа должна быть выпущена к заявленному сроку. Это значит, что весь процесс производства программы должен четко планироваться и контролироваться.
В результате быстрого развития отрасли и жесткой конкуренции отходят на второй план такие критерии качества программы, как эффективность и требуемые ресурсы, например объем внешней и оперативной памяти. Однако это не означает, что этим критериям вообще не следует уделять внимание.
Рассматривая характеристики качества более подробно, известный специалист Стив Макконнелл разделяет их на внешние, значимые для пользователя программного обеспечения, и внутренние, важные для разработчика.
Внешними характеристиками качества программного обеспечения являются:
- ? корректность (наличие/отсутствие дефектов в спецификации, проекте и реализации);
- ? практичность (легкость изучения и использования);
- ? эффективность (степень использования системных ресурсов);
- ? надежность (способность системы выполнять необходимые функции; интервал между отказами);
- ? целостность (способность предотвращать неавторизованный или некорректный доступ);
- ? адаптируемость (возможность использования в других областях и средах);
- ? правильность (степень безошибочности данных, выдаваемых системой);
- ? живучесть (способность продолжать работу при недопустимых данных или в напряженных условиях).
К внутренним характеристикам качества относятся такие, как удобство сопровождения, тестируемость, удобочитаемость, гибкость, портируемость, возможность повторного использования и понятность.
Между многими из характеристик существуют сложные зависимости: улучшение одних аспектов ведет к ухудшению других и улучшению третьих.