Разделы портала

Онлайн-тренинги

.
Записная книжка тест-дизайнера, часть 5: Характеристики качества
11.03.2020 01:00

Автор: Рикард Эдгрен (Rikard Edgren)
Оригинал
Перевод: Ольга Алифанова

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

Это общие характеристики, служащие богатым источником триггеров для идей по тестированию любого приложения. Некоторые из них вам не подходят, некоторые легко удовлетворить, а некоторые очень важны и сложны. См. материал для печати на следующих страницах для подробного списка вдохновляющих концепций в областях Возможностей, Надежности, Удобства использования, Харизмы, Безопасности, Производительности, IT-руемости, Совместимости, Поддерживаемости, Тестируемости, Ремонтопригодности, Портируемости. Никаких чисел к этим описаниям не дается, метрики опасны, так как скрывают то, что на самом деле важно.

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

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

Характеристики качества ПО

Пройдитесь по списку и подумайте о вашем продукте/функциях. Добавьте специфики в ваш контекст, и трансформируйте лист под свои нужды.

Возможности. Может ли продукт выполнять ценные функции?

  • Полнота: все важные, желаемые конечными пользователями функции доступны.
  • Точность: любой вывод или расчет в продукте верны и представлены значимыми цифрами.
  • Эффективность: выполняет свои действия эффективно (не делая того, чего не должен делать).
  • Интероперабельность: различные функциональности взаимодействуют наилучшим образом.
  • Многопоточность: способность выполнять несколько параллельных задач и работать одновременно с другими процессами.
  • Агностицизм данных: поддерживает все возможные форматы данных, и умеет обращаться с шумом.
  • Расширяемость: третьи лица или заказчики могут добавлять функциональность или менять поведение.

Надежность. Можете ли вы доверять продукту в различных и сложных ситуациях?

  • Стабильность: продукт не должен вызывать падения, необработанные исключения или ошибки сценариев.
  • Отказоустойчивость: продукт достойно справляется со всеми предвиденными и непредвиденными ошибками.
  • Стрессоустойчивость: как система справляется с превышением различных пределов?
  • Восстанавливаемость: возможно ли восстановиться и продолжить использование продукта после фатальной ошибки.
  • Целостность данных: все типы данных остаются неприкосновенными во всех областях продукта.
  • Безопасность: продукт не будет вредить людям или их ценностям.
  • Восстановление после катастрофы: что будет, если произойдет что-то очень, очень плохое?
  • Добросовестность: является ли поведение продукта понятным, предсказуемым, достойным доверия?

Удобство использования. Легко ли использовать продукт?

  • Предоставление возможности: продукт приглашает раскрыть свои возможности.
  • Интуитивность: то, что продукт может сделать, легко понять и объяснить.
  • Минимализм: в содержании и внешнем виде продукта нет ничего избыточного.
  • Изучаемость: научиться пользоваться продуктом можно быстро и легко.
  • Запоминаемость: если вы научились что-то делать, вы не забудете, как это делается.
  • Открытость: информацию о продукте и его возможности можно изучить, исследуя пользовательский интерфейс.
  • Операбельность: опытный пользователь может очень быстро выполнять распространенные действия.
  • Интерактивность: состояния продукта и возможности взаимодействия с приложением (через графический интерфейс или API) просты для понимания.
  • Контролируемость: пользователь чувствует, что работа продукта у него под контролем.
  • Ясность: все указано явно, детально, на понятном языке, и не оставляет места сомнениям.
  • Ошибки: сообщения об ошибках информативны, ошибку сложно совершить и легко исправить, если она совершена.
  • Соответствие: поведение и дизайн одинаковы во всем продукте.
  • Настраиваемость: настройки и поведение по умолчанию можно изменять ради большей гибкости.
  • Доступность: продукт может использовать максимально возможное количество людей, и он соответствует применимым стандартам доступности.
  • Документация: есть "Помощь", которая действительно может помочь и соответствует функциональности.

Харизма. Есть ли она у продукта?

  • Уникальность: продукт выделяется, в нем есть что-то, чего больше нет ни у чего.
  • Удовлетворенность: как вы себя ощущаете после использования продукта?
  • Профессионализм: есть ли у продукта необходимый налет профессионализма и ощущение соответствия своей задаче?
  • Привлекательность: все ли типы аспектов продукта привлекательны для глаз и прочих органов чувств?
  • Любопытство: заинтересуются ли пользователи, будут ли пробовать сделать то, что можно сделать при помощи продукта?
  • Завороженность: "подсядут" ли пользователи на продукт, будет ли им весело, войдут ли они в состояние потока, уделят ли ему максимум внимания в ходе использования?
  • Хайп: должен ли продукт использовать новейшие и наилучшие технологии и идеи?
  • Ожидания: продукт превосходит ожидания и отвечает нуждам, о существовании которых вы даже не знали.
  • Настроение: правильное ли настроение у продукта и информации в нем, говорит ли он с вами на правильном языке и в нужной стилистике?
  • Прямота: сильны ли (первые) впечатления?
  • История: есть ли захватывающие истории о зарождении, создании или использовании продукта?

Безопасность. Защищен ли продукт от нежелательного использования?

  • Аутентификация: идентификация продуктом пользователей.
  • Авторизация: как продукт обращается с тем, что могут видеть и делать авторизованные пользователи.
  • Приватность: способность не демонстрировать защищенные данные неавторизованным пользователям.
  • Дыры безопасности: продукт не должен приглашать воспользоваться уязвимостями социальной инженерии.
  • Секретность: продукт ни при каких условиях не должен раскрывать информацию о базовых системах.
  • Неуязвимость: способность выдерживать попытки взлома.
  • Чистота от вирусов: продукт не будет передавать вирусы или казаться вирусом.
  • Устойчивость к пиратству: невозможность нелегально копировать и распространять продукт или код.
  • Соответствие: стандарты безопасности, которых придерживается продукт.

Производительность. Достаточно ли быстро продукт работает?

  • Мощность: множество продуктовых ограничений в разных обстоятельствах (к примеру, медленная связь).
  • Использование ресурсов: грамотное использование памяти, хранилища и других ресурсов.
  • Время отклика: скорость, с которой (по ощущениям) выполняются действия.
  • Доступность: система доступна для использования, когда должна быть доступной.
  • Скорость обработки: способность продукта обрабатывать множество операций.
  • Выносливость: может ли продукт долго выдерживать нагрузку?
  • Обратная связь: хороша ли обратная связь от системы или пользователя?
  • Масштабируемость: насколько хорошо продукт расширяется, уменьшается и масштабируется горизонтально?

IT-руемость. Легко ли установить, поддерживать и вести продукт?

  • Системные требования: способность запускаться на поддерживаемых конфигурациях и справляться с различными окружениями или отсутствующими компонентами.
  • Инсталлируемость: продукт можно установить на желаемых платформах с необходимыми объемами доступного пространства.
  • Обновления: простота обновления на новую версию без потери конфигурации и настроек.
  • Деинсталляция: все ли файлы (кроме пользовательских или системных) и прочие ресурсы удаляются при деинсталляции?
  • Конфигурация: можно ли конфигурировать инсталляцию различными способами или путями для удобства пользователя?
  • Возможность развертывания: продукт может выкатываться отделом IT для различных (ограниченных) типов пользователей и окружений.
  • Поддерживаемость: легко ли обеспечить пользовательскую поддержку продукта и его артефактов?
  • Тестируемость: насколько эффективно продукт может быть протестирован пользователями в релизе?

Совместимость. Насколько хорошо продукт взаимодействует с ПО и окружениями?

  • Совместимость с оборудованием: продукт можно использовать совместно с применимыми конфигурациями компонентов оборудования.
  • Совместимость с операционной системой: продукт может запускаться на желаемых версиях операционной системы, и его поведение типично для нее.
  • Совместимость с приложениями: продукт и его данные работают с другими приложениями, которыми, скорее всего, будут пользоваться потребители.
  • Конфигурационная совместимость: способность продукта подстраиваться под конфигурации окружения.
  • Обратная совместимость: может ли продукт делать все то, что могла делать предыдущая версия?
  • Прямая совместимость: сможет ли продукт использовать артефакты или интерфейсы будущих версий?
  • Устойчивость: влияние на окружение, к примеру, энергоэффективность, отключения, режим энергосбережения, дистанционный доступ.
  • Удовлетворение стандартам: продукт удовлетворяет применимым стандартам, нормативам, законам или этике.

Внутренние характеристики качества ПО

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

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

  • Идентификаторы: легко ли определить части продукта и их версии, или специфичные ошибки?
  • Диагностика: можно ли получить детали происходящих с пользователями ситуаций?
  • Разрешение проблем: легко ли выявить проблему (к примеру, через лог) и получить помощь?
  • Дебаг: можете ли вы наблюдать внутренние состояния ПО при необходимости?
  • Гибкость: возможность использовать продукт большим количеством способов, нежели это было задумано изначально.

Тестируемость. Легко ли проверять и тестировать продукт?

  • Отслеживаемость: продукт логирует действия на подходящих уровнях и в удобном формате.
  • Контролируемость: возможность независимо устанавливать состояния, объекты или переменные.
  • Наблюдаемость: возможность наблюдать за тем, что нужно протестировать.
  • Отслеживаемость: может ли продукт сообщать, что он делает и как у него дела?
  • Изолируемость: возможность тестировать часть продукта отдельно.
  • Стабильность: изменения в ПО контролируются, и не слишком часты.
  • Автоматизация: есть ли в продукте публичные или скрытые программные интерфейсы, которыми можно пользоваться?
  • Информация: тестировщики могут изучить то, что должно быть изучено.
  • Аудитопригодность: можно ли валидировать продукт и его результаты?

Поддерживаемость. Можно ли незатратно поддерживать и расширять продукт?

  • Гибкость: возможность изменять продукт согласно требованиям заказчиков.
  • Расширяемость: легко ли будет добавлять функциональность в будущем?
  • Простота: код не сложнее необходимого и не мешает тест-дизайну, прогону тестов и оценке.
  • Читабельность: код адекватно документирован, его легко читать и понимать.
  • Прозрачность: легко ли разобраться в базовых структурах?
  • Модулярность: код разделен на управляемые блоки.
  • Способность к рефакторингу: довольны ли вы юнит-тестами?
  • Анализируемость: возможность искать причины дефектов или другой важный код.

Портируемость. Разрешено ли перемещать продукт в различные окружения и языки?

  • Переиспользуемость: можно ли повторно использовать части продукта в других проектах?
  • Адаптивность: легко ли заставить продукт поддерживать другое окружение?
  • Совместимость: удовлетворяет ли продукт распространенным интерфейсам или официальным стандартам?
  • Интернационализация: продукт легко переводить.
  • Локализация: все ли части продукта подогнаны под нужды целевой культуры/страны?
  • Устойчивость пользовательского интерфейса: будет ли продукт хорошо выглядеть после перевода?

Обсудить в форуме