Разница между тестированием программного обеспечения и обеспечением качества. Подходы к интеграционному тестированию

Небольшое вступление о том, что побудило написать эту статью.

  • Так сложилось, что за несколько лет довелось и собеседовать и общаться с довольно многими коллегами по цеху разработки ПО. На собеседованиях – чаще, в общении – меньше, но упоминался вопрос «В чем разница между QA и тестированием?», или его вариант «В чем разница между Quality Assurance и Quality Control?». Интересно, но очень немногие смогли объяснить разницу. Вы не подумайте, что я умничаю, несколько лет назад я и сам не смог бы внятно ответить:).
  • Еще один побуждающий фактор в том, что в большинстве случаев объявление вакансий на тестировщика звучит: «Требуется QA» или «QA Tester». Может показаться как придирка, но «QA Tester» это как? Тот, который тестирует того, кто делает QA?
  • Но главное, в большинстве случаев мы перекладываем ответственность за качество продукта на плечи тестировщиков (зачастую это хрупкие плечи девушек ИТ-шниц). Т.е. надеемся что (внимание, ключевые слова большими буквами) ОНИ, ПОТОМ, ЭТО протестируют и будет нам КАЧЕСТВО.
    • ОНИ – не мы все вместе, а кто-то другой.
    • ПОТОМ – реактивно, поздно. Аспекты качества не планируется изначально.
    • ЭТО – какие именно результаты поставки и критерии приемки?
    • КАЧЕСТВО – понятие растяжимое, может определяться по-разному к разным результатам поставки, к взаимодействию между участниками проекта, и у тех же участников ожидания по качеству разные.

Захотелось внести ясность. Скромно полагаю, что могу быть достаточно авторитетен, все-таки, ИТ-шного опыта 15 лет, серьезно участвовал во внедрении CMMI, интересуюсь разнообразными стандартами в области управления качеством различных объектов и систем, и т.п. В общем, некоторый опыт и знания имеются.

Для начала давайте посмотрим, что такое тестирование, или Quality Control (в дальнейшем QC). QC это применение техник контроля качества определенных артефактов. Это проверки соответствия того, что мы УЖЕ СДЕЛАЛИ некоторым ожиданиям. Например:

  • Проверка соответствия функционала спецификации.
  • Инспекция (review) документов относительно требований к их написанию, содержанию и формату. Документом может быть спецификация, календарный план проекта, тестовая документация и т.п.
  • Инспекция (review) кода относительно стандарта кодирования, архитектурной документации, требованиям безопасности и т.п.
  • Верификация проверяет артефакт на соответствие требованиям, описанным-оговоренным РАНЕЕ, т.е. смотрит в прошлое. Например, заказчик, читающий и утверждающий спецификацию, по которой уже были обсуждения делает верификацию.
  • Валидация же проверяет артефакт на возможность его ДАЛЬНЕЙШЕГО использования, т.е. смотрит в будущее. Например, тестировщик, «идущий» по тестовым сценариям, которые составлены на базе спецификации, делает верификацию. Но если ту же спецификацию инспектирует тестировщик на предмет тестируемости, а разработчик на предмет реализуемости, то это уже валидация.

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

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

Теперь давайте посмотрим на Quality Assurance (QA), оригинальные определения.

  • CMMI. Quality Assurance – planned and systematic means for assuring management that the defined standards, practices, procedures, and methods of the process are applied.
  • PMBOK. Perform Quality Assurance – The process of auditing the quality requirements and the results from quality control measurements to ensure appropriate quality standards and operational definitions are used.
  • Wikipedia. Software quality assurance (SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality. The methods by which this is accomplished are many and varied, and may include ensuring conformance to one or more standards, such as ISO 9000 or a model such as CMMI.

Если сказать в двух словах, то QA отвечает за качество процессов , которые в свою очередь применяются для создания артефактов (продуктов). Инструментарий оценки качества процессов – аудит (см.

Но и это еще не все, на самом деле QA в свою очередь является элементом Управления Качеством (Quality Management — QM). Существуют немного отличающиеся определения о составе QM, приведу важнейшие из них:

  • Планирования качества – о качестве продукта, услуг начинают думать с самого начала. Определяются процессы, методологии, стандарты, критерии приемки, контрактные обязательства, целевая среда функционирования продукта и т.д.
  • Обеспечения качества – собственно отвечает за качество процессов и их применение
  • Контроль качества – техники контроля качества артефактов (продуктов)
  • Улучшения качества – постоянные, измеримые улучшения процессов с целью сокращения расходов (деньги, время, материалы), оптимизации работы, улучшения качества продукта и т.п.
  • Ответственность руководства (Management Commitment/Responsibility) по отношению к QM – причем это означает вполне конкретные действия, т.е. заинтересованность (лидирование, инициирование) элементов QM, выделение ресурсов (люди, время, деньги), обучение, внутреннее и внешнее «продвижение» отношения к качеству, контроль элементов QM.

В среде разработки программного обеспечения мы часто сталкиваемся с путаницей в понятиях «обеспечение качества ПО» и «тестирование». Из-за этой путаницы руководители молодых компаний пытаются улучшить качество продукта, ограничиваясь внедрением тестирования. Попробуем разобраться и понять, в чем состоит существенная разница между тестированием ПО (Testing) и обеспечением его качества (QA).

Почему это важно

Когда-то я работала в стартапе среднего размера. В нем не было процессных менеджеров, сертифицированных консультантов и высококлассных управленцев. Но было другое – команда энтузиастов с горящими глазами, амбициозными планами, и зарядом позитива. Мы мечтали о создании потрясающего продукта, польза, новаторство и качество которого переплюнут все известные человечеству программные разработки. И мы потихоньку начали наступать на все грабли начинающего стартапа.

«Разработчики все безответственные… Этот тестировщик неквалифицированный… Я нахожу баги через минуту использования продукта… Да вы кроме чаепитий там вообще что-то делаете?!» – выслушивали мы от директора после каждого релиза. Дальше последовало решение руководства о наборе команды опытных тестировщиков вместе с руководителем отдела. Всё это сопровождалось многочисленными разговорами о том, каким должен быть качественный продукт.

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

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

Отличия тестирования и обеспечения качества

В соответствии с глоссарием ISTQB, Тестирование – это процесс, содержащий в себе все активности жизненного цикла, как динамические, так и статические, касающиеся планирования, подготовки и оценки программного продукта и связанных с этим результатов работ, с целью определить, что они соответствуют описанным требованиям, показать, что они подходят для заявленных целей и для определения дефектов. Только вдумайтесь! Оценка продукта и результатов работ… Разве может оценка улучшить качество? Качество же – это способность ПО при заданных условиях удовлетворять установленным или предполагаемым потребностям.

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

Качество продукта улучшилось? Нет, конечно. В рамках процесса тестирования мы работаем с готовым продуктом – заботимся о том, чтобы вовремя найти и устранить критичные дефекты, снижая уровень риска. У нас появляется ценнейшая информация о работе продукта и его слабых местах, и мы можем передать ее заинтересованным лицам. Те, в свою очередь, смогут использовать ее как опорную точку для организации комплексных мероприятий, направленных на работу с процессами постановки задач, разработки, тестирования и анализа результатов.

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

Что делает QA-специалист:

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

В идеальном мире с идеальными процессами тестировщики вообще не нужны! Специалисты QA примут превентивные меры, и на долю тестировщика останется так мало работы, и она будет настолько примитивная, что каждый участник процесса сможет отвечать за выполнение необходимых критериев на вверенном ему участке функционала. На тему современного обеспечения качества без бюрократии и простоев очень советую прочитать потрясающую книгу «Как тестируют в Google» . Описанные в ней идеи просты и понятны, и в то же время от них веет масштабностью и результативностью.

Что могут сделать тестировщики для улучшения качества продукта

Многие ли компании себе целый отдел обеспечения качества? Задумаемся: действительно ли тестировщики – такие ограниченные в правах, замкнутые в оковы регламентов и инструкций люди, которые не в состоянии повлиять на качество продукта? Чаще всего, это не так. Все, кто хочет изменить мир к лучшему, начинают с себя, со своей работы над продуктом. Например, руководители в тестировании – с работы своей команды, ведь качественная организация процесса позволяет повысить эффективность тестирования.

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

Например, если есть жалобы на пропускаемые дефекты, то мы начинаем их фиксировать для анализа причин пропуска. Допустим, после пары итераций станет понятно, что причина в недостаточном покрытии функционала тестами. Отлично! Начинаем фиксировать процент покрытия. Ага, у нас недостаточно тестов. Почему? Да потому, что сроки на подготовку и тестирование слишком сжатые, и мы не успеваем писать тесты в требуемом для полного покрытия объеме. Оценка сроков адекватная, только вот передача версии в тестирование происходит позже запланированной даты, а сроки релиза отодвигать нельзя. В чем проблема? Разработчики не успевают – их оценка на разработку всегда оказывается на 2-3 дня меньше фактического времени на реализацию. Почему? Допустим, менеджер подбрасывает незапланированные задачи в середине итерации. Зачем? Заказчик требует – он не видит разницы между разработкой сайта-каталога и сайта-магазина.

Всё, корень проблемы ясен, и можно действовать. Само собой, решение этой проблемы не ляжет на плечи отдела тестирования, а вот менеджеру проекта будет гораздо проще объяснить клиенту важность стабилизации задач версии, имея красивые таблички статистики и графики влияния незапланированных задач на качество продукта на выходе. За чашечкой чая заказчик и менеджер решат: либо стоит развивать продукт итеративно, стараясь соблюдать поставленные сроки – и тогда придется умерить желания заказчика; либо любое изменение в составе версии будет сопровождаться повторной оценкой и откладыванием срока релиза.

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

Влияние процесса тестирования на качество ПО

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

Независимо от типа проекта, будь то вебсайт, SaaS платформа или же мобильное приложение, Вы должны определиться какой же тип тестирования выбрать - ручное или автоматизированное тестирование? Английская версия статьи manual testing vs automated testing . Существует огромное количество разных типов тестирования, которые относятся как к ручному (мануальное), так и автоматическому. Но сперва давайте узнаем, что такое ручное тестирование в веб-разработке.

Что такое автоматизированное тестирование?

Автоматизированное тестирование это процессы, которые запускают программы и скрипты для тестирования отдельных модулей, используя повторяющиеся действия. Фактически, это значит, что программа запускает определенные скрипты, чтобы проверить все составляющие проекта и оценить его. Для того, чтобы создать программу тестирования требуются определенные ресурсы.

В автоматизированном тестировании должен присутствовать тестировщик, который создаст программу и затем будет ее запускать. Наиболее популярной программой тестирования является Selenium Web Driver IDE. Используя язык Java или Python Вы можете начать тестирование. Кстати, если эти два языка входят в список программных языков 2019 года .

Плюсы автоматизированного тестирования:

1. Качество. Точность результатов тестирования напрямую зависит от уровня разработчика. Однако по большей части, точность результатов близка к 99.9%. Практически все возможные варианты, к примеру, валидации формы, можно охватить написав 5 строчек кода.

2. Автозапуск. Технологии не стоят на месте. И если ранее программист должен был написал программу тестирования и запускать ее вручную - то сейчас это можно полностью автоматизировать. Общеизвестный факт, что в период с 2 до 5 утра нагрузка на сервер минимальная. Это является наиболее оптимальным временем запуска тестов. Но ведь не приходить же тестировщику в 3 утра в офис, или вовсе ночевать и жить там?

3. Выгодный. Большие проекты, особенно с высокой нагрузкой очень нуждаются в повышенном внимании и качестве. В долгосрочной перспективе, только автоматизированное тестирование будет выгодным и для финансового проекта, и для ecommerce сайта, и для веб проекта казино. Обратите внимание, на ecommerce тренды 2019 . Более того, по статистике, чтобы заменить одного автоматизированного тестировщика требуется от 3 до 8 ручных тестировщиков. Средняя стоимость автоматизированного тестировщика составляет $25 в час. При условии работы с Восточно-Европейской компанией. Агентства из США берут от $55 в час.

4. Захватывающее. В отличии, от ручного тестирования, автоматизированное считается креативным. Потому что, тестировщик в этой роли выступает как программист.

5. Видимость результатов. Ручное тестирование в основе своей субъективное. Видимость результатов, эффективности, и статистика перед каждым релизом это важные особенности автоматизированного тестирования. Отчеты генерируются также в автоматическом режиме.

6. Расширенный функционал. Автоматизированное тестирование связано напрямую с вебсайтом. Это можно назвать его скрытой темной стороной. Вы имеете доступ к бекэнд и можете оценить практически любые параметры. Нагрузка, проходимость сервера, строить прогнозы. Работая с аналитиками, и data science инженерами представляется огромная польза для компании.

Минусы автоматизированного тестирования

1. Стоимость тестировщика. Обращая внимание на тот факт, что в данном случае тестировщик является программистом - значит и его цена выше.

2. Время. Время запуска тестов, как и их продолжительность очень высоки. Однако требуется некоторое время чтобы написать те самые тесты. В таком случае в фазы веб разработки входит тестирование, и идет в буквальном смысле бок-о-бок с программированием. Тем временем тестировщик пишет автотесты, чтобы покрыть работающие части кода.

3. Тестирование глазами пользователя. Вы никогда не сможете протестировать сайт глазами пользователя используя автоматизированное тестирование. Все просто, ведь программа создает отчеты. А тестировщик, всего лишь управляет ею и контролирует работу.

4. Ограничения. Ограничения в невозможности тестировать цвета, гамму, и UX. Эти пункты, хоть и являются второстепенными, но без должного внимания к ним, Ваши пользователи вряд ли смогут наслаждаться платформой на 100%.

Что такое ручное тестирование в разработке?

Ручное тестирование, это процессы через которые разработчики, или manual QA тестировщик тестируют продукт: вебсайт, платформу, SaaS, что угодно чтобы найти дефекты и ошибки. Ручное тестирование идеально подходит для тех проектов с малым бюджетом, либо же краткосрочных (до 2 месяцев). Ручное тестирование проходит от лица тестировщика, который выступает как конечный пользователь системы.

Проверяет все функции, ссылки, пункты меню и т.д. Чтобы избежать поломанных ссылок, или не рабочего функционала. Часто тестировщик также использует несколько браузеров, чтобы охватить как можно больше пользователей, и само собой мобильную версию. К примеру, наиболее популярны Chrome, Firefox, Safari, IE11, Edge. С мобильными устройствами все несколько проще - всего лишь Google Chrome и Safari для iOS устройств. Но постает вопрос - стоит ли начать с вебсайта или мобильного приложения ? Или же оба одновременно?

Какие же плюсы ручного тестирования?

1. Низкие затраты. В краткосрочной перспективе, это финансово выгодное решение.

2. Позволяет увидеть сайт глазами пользователя. Тестировщик, это в первую очередь программист. Имея знания в проектировании интерфейсов, графическом интерфейсе, бэкенд части, фреймворков и их взаимодействия. Он ходит по сайту имея за спиной все эти навыки, и конечно же навыки «пользователя».

3. Гибкость. Если проект проектируется и программируется по методологии Agile, возможно это наибольшее преимущество. Если Вы быстро внедряете новые функции, и хотите быть уверенными, что они работают правильно - ручное тестирование позволяет сделать это быстро.

Минусы ручного тестирования

1. Ограничения. К сожалению, нельзя проверить в ручном режиме все угодно. К примеру, нагрузочное тестировании практически нереально. Чтобы узнать какую веб-сервер сможет выдержать нагрузку - нужно фактически дать такую нагрузку.

2. Скучное. По больше части касается непосредственно самого тестировщика, однако повторение одних и тех же действий, может быть несколько скучными для человека.

3. Качество. На больших проектах ручное тестирование теряет свое качество. Нехватка времени, и рассеивание внимания стоят на первых местах.

Автоматизированное или ручное тестирование?

Прежде всего к Вам, как к владельцу проекта, несколько вопросов:

  1. Какой срок и объем Вашего проекта?
  2. Имеет ли значение поддержка платформы?
  3. Ищите ли Вы выгодное и доступное решение в области тестирования?

Если хоть бы на один из вопросов Вы ответили положительно, значит Вам скорее всего подойдет автоматизированное тестирование. В нашем опыте, достижение наилучшего результата возможно только объединив оба типа тестирования. Это позволит минимизировать риски, смягчить затраты и выпустить желаемый продукт очень быстро. Тем более, что Вы также решите визуальную составляющую, тренды веб дизайна 2019 помогут Вам в этом.

Кому нужно автоматизированное или ручное тестирование?

В первую волну попадают SaaS платформы, и те которые «делают деньги» со своего сайта. Онлайн казино, игровые площадки. Высоко нагруженные проекты из любой отрасли также нуждаются в автоматизированном тестировании. Ручное тестирование идеально подходит для вебсайтов для малого бизнеса, персональных сайтов и других маленьких веб проектов.

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

Но попробуем разобраться, чем же опросник отличается от теста?

Опросник - разновидность психологических тестов?

В "Энциклопедическом словаре: Психология труда, управления, инженерная психология и эргономика" , изданном в 2005 году, читаем:

Опросник одна из разновидностей психологических тестов .

А вот учебник "Введение в психолого-педагогическую деятельность" сообщает о том, что опросник - это вид анкеты, которая составлена для изучения и оценки различных проявлений и свойств личности. То есть получается, что опросник похож и на тест, и на анкету.

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

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

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

Чтобы повысить правдоподобность ответов, некоторые опросники предлагают ответить на такие вопросы, смысл и цель которых завуалирована.

Какая разница?

Теперь, когда мы имеем представление о том, что собой представляют опросники, разберёмся с тестами. Читая определение, мы сразу увидим разницу. Если опросник сравнивают с тестом и анкетой, то тест сравнить не с чем, потому что он представляет собой систему заданий, которые позволяют измерять уровень развития различных психологических качеств.

То есть главным отличием опросника является следующее:

Опросник изучает черты характера.

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

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

И последнее очень важное отличие опросника от теста:

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

Результатом проведения теста является сравнение полученного результата с некоторой установленной нормой, которая присуща конкретному типу людей. То есть у каждого теста есть так называемая шкала значений, позволяющая сразу же получить вполне определённый результат, который расскажет о человеке достаточно.

В качестве примеров опросников можно назвать следующие:

  • опросник потребности в достижении Ю.М. Орлова;
  • опросник Шмишека, позволяющий определить тип акцентуаций личности;
  • опросник Е.А. Климова, определяющий направленность личности, чтобы помочь определиться с предпочтительным типом профессии, и многие другие.

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

  • Tutorial

Доброго времени суток!

Хочу собрать всю самую необходимую теорию по тестирвоанию, которую спрашивают на собеседованиях у trainee, junior и немножко middle. Собственно, я собрал уже не мало. Цель сего поста в том, чтобы сообща добавить упущенное и исправить/перефразировать/добавить/сделатьЧтоТоЕщё с тем, что уже есть, чтобы стало хорошо и можно было взять всё это и повторить перед очередным собеседованием про всяк случай. Вообщем, коллеги, прошу под кат, кому почерпнуть что-то новое, кому систематизировать старое, а кому внести свою лепту.

В итоге должна получиться исчерпывающая шпаргалка, которую нужно перечитать по дороге на собеседование.

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

В теме: определение тестирования, качество, верификация / валидация, цели, этапы, тест план, пункты тест плана, тест дизайн, техники тест дизайна, traceability matrix, tets case, чек-лист, дефект, error/deffect/failure, баг репорт, severity vs priority, уровни тестирования, виды / типы, подходы к интеграционному тестированию, принципы тестирования, статическое и динамическое тестирование, исследовательское / ad-hoc тестирование, требования, жизненный цикл бага, стадии разработки ПО, decision table, qa/qc/test engineer, диаграмма связей.

Поехали!

Тестирование программного обеспечения - проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом. В более широком смысле, тестирование - это одна из техник контроля качества, включающая в себя активности по планированию работ (Test Management), проектированию тестов (Test Design), выполнению тестирования (Test Execution) и анализу полученных результатов (Test Analysis).

Качество программного обеспечения (Software Quality) - это совокупность характеристик программного обеспечения, относящихся к его способности удовлетворять установленные и предполагаемые потребности.

Верификация (verification) - это процесс оценки системы или её компонентов с целью определения удовлетворяют ли результаты текущего этапа разработки условиям, сформированным в начале этого этапа. Т.е. выполняются ли наши цели, сроки, задачи по разработке проекта, определенные в начале текущей фазы.
Валидация (validation) - это определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе .
Также можно встретить иную интерпритацию:
Процесс оценки соответствия продукта явным требованиям (спецификациям) и есть верификация (verification), в то же время оценка соответствия продукта ожиданиям и требованиям пользователей - есть валидация (validation). Также часто можно встретить следующее определение этих понятий:
Validation - ’is this the right specification?’.
Verification - ’is the system correct to specification?’.

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

Этапы тестирования:
1. Анализ
2. Разработка стратегии тестирования
и планирование процедур контроля качества
3. Работа с требованиями
4. Создание тестовой документации
5. Тестирование прототипа
6. Основное тестирование
7. Стабилизация
8. Эксплуатация

Тест план (Test Plan) - это документ, описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.
Отвечает на вопросы:
Что надо тестировать?
Что будете тестировать?
Как будете тестировать?
Когда будете тестировать?
Критерии начала тестирования.
Критерии окончания тестирования.

Основные пункты тест плана
В стандарте IEEE 829 перечислены пункты, из которых должен (пусть - может) состоять тест-план:
a) Test plan identifier;
b) Introduction;
c) Test items;
d) Features to be tested;
e) Features not to be tested;
f) Approach;
g) Item pass/fail criteria;
h) Suspension criteria and resumption requirements;
i) Test deliverables;
j) Testing tasks;
k) Environmental needs;
l) Responsibilities;
m) StafÞng and training needs;
n) Schedule;
o) Risks and contingencies;
p) Approvals.

Тест дизайн - это этап процесса тестирования ПО, на котором проектируются и создаются тестовые случаи (тест кейсы), в соответствии с определёнными ранее критериями качества и целями тестирования.
Роли, ответственные за тест дизайн:
Тест аналитик - определяет «ЧТО тестировать?»
Тест дизайнер - определяет «КАК тестировать?»

Техники тест дизайна

Эквивалентное Разделение (Equivalence Partitioning - EP) . Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала - 0.

Анализ Граничных Значений (Boundary Value Analysis - BVA) . Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.

Причина / Следствие (Cause/Effect - CE) . Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как «Имя», «Адрес», «Номер Телефона» а затем, нажать кнопку «Добавить» - эта «Причина». После нажатия кнопки «Добавить», система добавляет клиента в базу данных и показывает его номер на экране - это «Следствие».

Исчерпывающее тестирование (Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.

Traceability matrix - Матрица соответствия требований - это двумерная таблица, содержащая соответсвие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases). В заголовках колонок таблицы расположены требования, а в заголовках строк - тестовые сценарии. На пересечении - отметка, означающая, что требование текущей колонки покрыто тестовым сценарием текущей строки.
Матрица соответсвия требований используется QA-инженерами для валидации покрытия продукта тестами. МСТ является неотъемлемой частью тест-плана.

Тестовый случай (Test Case) - это артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
Пример:
Action Expected Result Test Result
(passed/failed/blocked)
Open page «login» Login page is opened Passed

Каждый тест кейс должен иметь 3 части:
PreConditions Список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
Test Case Description Список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям
PostConditions Список действий, переводящих систему в первоначальное состояние (состояние до проведения теста - initial state)
Виды Тестовых Случаев:
Тест кейсы разделяются по ожидаемому результату на позитивные и негативные:
Позитивный тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.
Негативный тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций (срабатывание валидаторов), а также проверяет, что вызываемая приложением функция не выполняется при срабатывании валидатора.

Чек-лист (check list) - это документ, описывающий что должно быть протестировано. При этом чек-лист может быть абсолютно разного уровня детализации. На сколько детальным будет чек-лист зависит от требований к отчетности, уровня знания продукта сотрудниками и сложности продукта.
Как правило, чек-лист содержит только действия (шаги), без ожидаемого результата. Чек-лист менее формализован чем тестовый сценарий. Его уместно использовать тогда, когда тестовые сценарии будут избыточны. Также чек-лист ассоциируются с гибкими подходами в тестировании.

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

Error - ошибка пользователя, то есть он пытается использовать программу иным способом.
Пример - вводит буквы в поля, где требуется вводить цифры (возраст, количество товара и т.п.).
В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message), с красным крестиком которые.
Bug (defect) - ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так как планировалось и программа выходит из-под контроля. Например, когда никак не контроллируется ввод пользователя, в результате неверные данные вызывают краши или иные «радости» в работе программы. Либо внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
Failure - сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы. То есть, существуют такие дефекты, которые приводят к сбоям (A defect caused the failure) и существуют такие, которые не приводят. UI-дефекты например. Но аппаратный сбой, никак не связанный с software, тоже является failure.

Баг Репорт (Bug Report) - это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
Шапка
Короткое описание (Summary) Короткое описание проблемы, явно указывающее на причину и тип ошибочной ситуации.
Проект (Project) Название тестируемого проекта
Компонент приложения (Component) Название части или функции тестируемого продукта
Номер версии (Version) Версия на которой была найдена ошибка
Серьезность (Severity) Наиболее распространена пятиуровневая система градации серьезности дефекта:
S1 Блокирующий (Blocker)
S2 Критический (Critical)
S3 Значительный (Major)
S4 Незначительный (Minor)
S5 Тривиальный (Trivial)
Приоритет (Priority) Приоритет дефекта:
P1 Высокий (High)
P2 Средний (Medium)
P3 Низкий (Low)
Статус (Status) Статус бага. Зависит от используемой процедуры и жизненного цикла бага (bug workflow and life cycle)

Автор (Author) Создатель баг репорта
Назначен на (Assigned To) Имя сотрудника, назначенного на решение проблемы
Окружение
ОС / Сервис Пак и т.д. / Браузера + версия /… Информация об окружении, на котором был найден баг: операционная система, сервис пак, для WEB тестирования - имя и версия браузера и т.д.

Описание
Шаги воспроизведения (Steps to Reproduce) Шаги, по которым можно легко воспроизвести ситуацию, приведшую к ошибке.
Фактический Результат (Result) Результат, полученный после прохождения шагов к воспроизведению
Ожидаемый результат (Expected Result) Ожидаемый правильный результат
Дополнения
Прикрепленный файл (Attachment) Файл с логами, скриншот или любой другой документ, который может помочь прояснить причину ошибки или указать на способ решения проблемы.

Severity vs Priority
Серьезность (Severity) - это атрибут, характеризующий влияние дефекта на работоспособность приложения.
Приоритет (Priority) - это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Можно сказать, что это инструмент менеджера по планированию работ. Чем выше приоритет, тем быстрее нужно исправить дефект.
Severity выставляется тестировщиком
Priority - менеджером, тимлидом или заказчиком

Градация Серьезности дефекта (Severity)

S1 Блокирующая (Blocker)
Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее ключевыми функциями становится невозможна. Решение проблемы необходимо для дальнейшего функционирования системы.

S2 Критическая (Critical)
Критическая ошибка, неправильно работающая ключевая бизнес логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, без возможности решения проблемы, используя другие входные точки. Решение проблемы необходимо для дальнейшей работы с ключевыми функциями тестируемой системой.

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

S4 Незначительная (Minor)
Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.

S5 Тривиальная (Trivial)
Тривиальная ошибка, не касающаяся бизнес логики приложения, плохо воспроизводимая проблема, малозаметная посредствам пользовательского интерфейса, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.

Градация Приоритета дефекта (Priority)
P1 Высокий (High)
Ошибка должна быть исправлена как можно быстрее, т.к. ее наличие является критической для проекта.
P2 Средний (Medium)
Ошибка должна быть исправлена, ее наличие не является критичной, но требует обязательного решения.
P3 Низкий (Low)
Ошибка должна быть исправлена, ее наличие не является критичной, и не требует срочного решения.

Уровни Тестирования

1. Модульное тестирование (Unit Testing)
Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).

2. Интеграционное тестирование (Integration Testing)
Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.

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

4. Операционное тестирование (Release Testing).
Даже если система удовлетворяет всем требованиям, важно убедиться в том, что она удовлетворяет нуждам пользователя и выполняет свою роль в среде своей эксплуатации, как это было определено в бизнес моделе системы. Следует учесть, что и бизнес модель может содержать ошибки. Поэтому так важно провести операционное тестирование как финальный шаг валидации. Кроме этого, тестирование в среде эксплуатации позволяет выявить и нефункциональные проблемы, такие как: конфликт с другими системами, смежными в области бизнеса или в программных и электронных окружениях; недостаточная производительность системы в среде эксплуатации и др. Очевидно, что нахождение подобных вещей на стадии внедрения - критичная и дорогостоящая проблема. Поэтому так важно проведение не только верификации, но и валидации, с самых ранних этапов разработки ПО.

5. Приемочное тестирование (Acceptance Testing)
Формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью:
определения удовлетворяет ли система приемочным критериям;
вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.

Виды / типы тестирования

Функциональные виды тестирования
Функциональное тестирование (Functional testing)
Тестирование безопасности (Security and Access Control Testing)
Тестирование взаимодействия (Interoperability Testing)

Нефункциональные виды тестирования
Все виды тестирования производительности:
o нагрузочное тестирование (Performance and Load Testing)
o стрессовое тестирование (Stress Testing)
o тестирование стабильности или надежности (Stability / Reliability Testing)
o объемное тестирование (Volume Testing)
Тестирование установки (Installation testing)
Тестирование удобства пользования (Usability Testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing)
Конфигурационное тестирование (Configuration Testing)

Связанные с изменениями виды тестирования
Дымовое тестирование (Smoke Testing)
Регрессионное тестирование (Regression Testing)
Повторное тестирование (Re-testing)
Тестирование сборки (Build Verification Test)
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)

Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.

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

Тестирование взаимодействия (Interoperability Testing) - это функциональное тестирование, проверяющее способность приложения взаимодействовать с одним и более компонентами или системами и включающее в себя тестирование совместимости (compatibility testing) и интеграционное тестирование

Нагрузочное тестирование - это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе.

Стрессовое тестирование (Stress Testing) позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом цели стрессового тестирования могут пересекаться с целями тестирования производительности.

Объемное тестирование (Volume Testing) . Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения

Тестирование стабильности или надежности (Stability / Reliability Testing) . Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.

Тестирование установки направленно на проверку успешной инсталляции и настройки, а также обновления или удаления программного обеспечения.

Тестирование удобства пользования - это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Сюда также входит:
Тестирование пользовательского интерфейса (англ. UI Testing) - это вид тестирования исследования, выполняемого с целью определения, удобен ли некоторый искусственный объект (такой как веб-страница, пользовательский интерфейс или устройство) для его предполагаемого применения.
User eXperience (UX) - ощущение, испытываемое пользователем во время использования цифрового продукта, в то время как User interface - это инструмент, позволяющий осуществлять интеракцию «пользователь - веб-ресурс».

Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.

Конфигурационное тестирование (Configuration Testing) - специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.)

Дымовое (Smoke) тестирование рассматривается как короткий цикл тестов, выполняемый для подтверждения того, что после сборки кода (нового или исправленного) устанавливаемое приложение, стартует и выполняет основные функции.

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

Повторное тестирование - тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
В чем разница между regression testing и re-testing?
Re-testing - проверяется исправление багов
Regression testing - проверяется то, что исправление багов не повлияло на другие модули ПО и не вызвало новых багов.

Тестирование сборки или Build Verification Test - тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования. По своим целям является аналогом Дымового Тестирования, направленного на приемку новой версии в дальнейшее тестирование или эксплуатацию. Вглубь оно может проникать дальше, в зависимости от требований к качеству выпущенной версии.

Санитарное тестирование - это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям. Является подмножеством регрессионного тестирования. Используется для определения работоспособности определенной части приложения после изменений произведенных в ней или окружающей среде. Обычно выполняется вручную.

Предугадывание ошибки (Error Guessing - EG) . Это когда тест аналитик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «пользователь должен ввести код». Тест аналитик, будет думать: «Что, если я не введу код?», «Что, если я введу неправильный код? », и так далее. Это и есть предугадывание ошибки.

Подходы к интеграционному тестированию:

Снизу вверх (Bottom Up Integration)
Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.

Сверху вниз (Top Down Integration)
Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами. Таким образом мы проводим тестирование сверху вниз.

Большой взрыв («Big Bang» Integration)
Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.

Принципы тестирования

Принцип 1 - Тестирование демонстрирует наличие дефектов (Testing shows presence of defects)
Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.

Принцип 2 - Исчерпывающее тестирование недостижимо (Exhaustive testing is impossible)
Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.

Принцип 3 - Раннее тестирование (Early testing)
Чтобы найти дефекты как можно раньше, активности по тестированию должны быть начаты как можно раньше в жизненном цикле разработки программного обеспечения или системы, и должны быть сфокусированы на определенных целях.

Принцип 4 - Скопление дефектов (Defects clustering)
Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.

Принцип 5 - Парадокс пестицида (Pesticide paradox)
Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот «парадокс пестицида», тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения, или системы, и найти как можно больше дефектов.

Принцип 6 - Тестирование зависит от контекста (Testing is concept depending)
Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.

Принцип 7 - Заблуждение об отсутствии ошибок (Absence-of-errors fallacy)
Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.

Cтатическое и динамическое тестирование
Статическое тестирование отличается от динамического тем, что производится без запуска программного кода продукта. Тестирование осуществляется путем анализа программного кода (code review) или скомпилированного кода. Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к статическому тестирвоанию относится тестирования спецификации и прочей документации.

Исследовательское / ad-hoc тестирование
Простейшее определение исследовательского тестирования - это разработка и выполнения тестов в одно и то же время. Что является противоположностью сценарного подхода (с его предопределенными процедурами тестирования, неважно ручными или автоматизированными). Исследовательские тесты, в отличие от сценарных тестов, не определены заранее и не выполняются в точном соответствии с планом.

Разница между ad hoc и exploratory testing в том, что теоретически, ad hoc может провести кто угодно, а для проведения exploratory необходимо мастерство и владение определенными техниками. Обратите внимание, что определенные техники это не только техники тестирования.

Требования - это спецификация (описание) того, что должно быть реализовано.
Требования описывают то, что необходимо реализовать, без детализации технической стороны решения. Что, а не как.

Требования к требованиям:
Корректность
Недвусмысленность
Полнота набора требований
Непротиворечивость набора требований
Проверяемость (тестопригодность)
Трассируемость
Понимаемость

Жизненный цикл бага

Стадии разработки ПО - это этапы, которые проходят команды разработчиков ПО, прежде чем программа станет доступной для широко круга пользователей. Разработка ПО начинается с первоначального этапа разработки (стадия «пре-альфа») и продолжается стадиями, на которых продукт дорабатывается и модернизируется. Финальным этапом этого процесса становится выпуск на рынок окончательной версии программного обеспечения («общедоступного релиза»).

Программный продукт проходит следующие стадии:
анализ требований к проекту;
проектирование;
реализация;
тестирование продукта;
внедрение и поддержка.

Каждой стадии разработки ПО присваивается определенный порядковый номер. Также каждый этап имеет свое собственное название, которое характеризует готовность продукта на этой стадии.

Жизненный цикл разработки ПО:
Пре-альфа
Альфа
Бета
Релиз-кандидат
Релиз
Пост-релиз

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

QA/QC/Test Engineer


Таким образом, мы можем построить модель иерархии процессов обеспечения качества: Тестирование - часть QC. QC - часть QA.

Диаграмма связей - это инструмент управления качеством, основанный на определении логических взаимосвязей между различными данными. Применяется этот инструмент для сопоставления причин и следствий по исследуемой проблеме.