Качество программного обеспечения можно определить массой способов. Здесь я хочу представить определение, прошедшее самое долгое испытание временем.
Под качеством в индустрии ПО понимают совокупность семи свойств,которыми должен обладать программный продукт: переносимости (portability), надежности (reliability), эффективности (efficiency), удобства в использовании (usability, или учета человеческого фактора), тестируемости(testability), понятности (understandability) и модифицируемости (modifiability). Разные специалисты дают этим свойствам не совсем одинаковые названия, но данный список принят подавляющим большинством и существует почти тридцать лет.
Каков же смысл этих свойств?
- Переносимость означает, что программный продукт можно без труда перенести на другую платформу.
- Надежность – это свойство программного продукта надлежащим образом выполнять свои функции.
- Под эффективностью программного продукта понимают экономное расходование им времени и занимаемого места.
- Принятие в расчет человеческого фактора (что называют также словом «юзабилити») подразумевает, что с программным продуктом легко и удобно работать.
- Тестируемость ПО есть не что иное, как свойство, характеризующее легкость его тестирования.
- Понятность ПО – это свойство, характеризующее, насколько легко
- (или трудно) специалисту, сопровождающему программный продукт, понять его работу.
- Модифицируемым называют ПО, изменение которого не вызывает трудностей.
Порядок перечисления этих признаков качества не соответствует каким-либо приоритетам. Да это и нельзя сделать каким-либо эффективным способом. Другими словами, нет общепринятой, корректной последовательности, в какой надо было бы пытаться обеспечить их наличие у ПО.
Однако нельзя также сказать, что их не следует упорядочивать. Жизненно важно установить такую последовательность с самого начала для каждого отдельно взятого проекта. Так, если программный продукт создается для рынка, где он будет эксплуатироваться на разных платформах, то переносимость расположится если и не в самой голове списка, то где-то неподалеку от нее. Если от успешного исхода операций, которые выполняет инструмент, управляемый программно, зависят человеческие жизни, то первой в списке свойств ПО должна стоять надежность. Если предполагается,
что продукту предстоит долгая, насыщенная жизнь, то весьма вероятно, что ближе к началу списка окажутся свойства, затрагивающие сопровождение, – понятность и модифицируемость (интересно отметить, что два свойства из семи непосредственно относятся к сопровождению). Если же продукт будет работать в условиях дефицита ресурсов, то в верхней части списка мы увидим эффективность.
Например, обычные приоритеты для среднестатистического продукта могли бы быть такими:
- Надежность (если продукт не работает надлежащим образом, то остальные его свойства не имеют большого значения).
- Учет человеческого фактора (огромное внимание, уделяемое графическим интерфейсам пользователя в настоящее время, лучше всяких слов говорит о большом значении удобства работы с продуктом).
- Понятность и модифицируемость (любое ПО, стoящее затраченного на него труда, вероятно, будет долго сопровождаться и поддерживаться).
- Эффективность (сам удивлен, что поместил это свойство на столь низкую позицию; для некоторых приложений оно будет на первом месте).
- Тестируемость (предпоследнее свойство, но это не уменьшает его важность, поскольку оно может самым прямым путем привести к надежности ПО, а надежность я поставил на первое место).
- Переносимость (для многих приложений это свойство вообще не имеет значения, а для других может иметь первостепенную важность).
Не удивляйтесь, если приведенный мною порядок не совпадет с вашим.
(с) Роберт Гласс. Факты и заблуждения профессионального программирования. Факт #46.