stringtranslate.com

Тестирование программного обеспечения

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

Тестирование программного обеспечения может предоставить пользователям или спонсорам объективную независимую информацию о качестве программного обеспечения и риске его сбоя. [1]

Тестирование программного обеспечения может определить правильность программного обеспечения при допущении некоторых конкретных гипотез (см. Иерархию сложности тестирования ниже), но тестирование не может выявить все сбои в программном обеспечении. [2] Вместо этого он представляет собой критику или сравнение , сравнивающее состояние и поведение продукта с тестовыми оракулами — принципами или механизмами, с помощью которых кто-то может распознать проблему. Эти предсказания могут включать (но не ограничиваться ими) спецификации, контракты , [3] сопоставимые продукты, прошлые версии того же продукта, выводы о предполагаемом или ожидаемом назначении, ожидания пользователей или клиентов, соответствующие стандарты, применимые законы или другие критерии.

Основная цель тестирования — обнаружить сбои программного обеспечения, чтобы можно было обнаружить и исправить дефекты. Тестирование не может установить, что продукт работает должным образом при всех условиях, а только то, что он не работает должным образом при определенных условиях. [4] Объем тестирования программного обеспечения может включать в себя проверку кода, а также выполнение этого кода в различных средах и условиях, а также изучение аспектов кода: делает ли он то, что должен делать, и делает ли он то, что ему нужно. делать. В современной культуре разработки программного обеспечения организация тестирования может быть отделена от команды разработчиков. Существуют различные роли членов команды тестирования. Информация, полученная в результате тестирования программного обеспечения, может использоваться для корректировки процесса разработки программного обеспечения. [5] : 41–43 

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

Неисправности и неудачи

Сбои программного обеспечения возникают в результате следующего процесса: Программист допускает ошибку (ошибку), в результате чего возникает сбой (дефект, ошибка) в исходном коде программного обеспечения . Если эта ошибка выполняется, в определенных ситуациях система будет выдавать неверные результаты, что приведет к сбою . [6] : 31 

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

Не все сбои программного обеспечения вызваны ошибками кодирования. Одним из распространенных источников дорогостоящих дефектов являются пробелы в требованиях, то есть нераспознанные требования, которые приводят к ошибкам, упущенным разработчиком программы. [5] : 426  Пробелы в требованиях часто могут быть нефункциональными требованиями, такими как тестируемость , масштабируемость , ремонтопригодность , производительность и безопасность .

Входные комбинации и предварительные условия

Фундаментальная проблема тестирования программного обеспечения заключается в том, что тестирование при всех комбинациях входных данных и предварительных условий (начальное состояние) невозможно даже для простого продукта. [4] : 17–18  [8] Это означает, что количество ошибок в программном продукте может быть очень большим и дефекты, возникающие нечасто, трудно обнаружить при тестировании и отладке. Что еще более важно, нефункциональные аспекты качества (каким оно должно быть в сравнении с тем, что оно должно делать ) — удобство использования , масштабируемость , производительность , совместимость и надежность — могут быть весьма субъективными; то, что представляет собой достаточную ценность для одного человека, может быть невыносимо для другого.

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

Экономика

Исследование, проведенное NIST в 2002 году, показало, что ошибки в программном обеспечении обходятся экономике США в 59,5 миллиардов долларов ежегодно. Более трети этих затрат можно было бы избежать, если бы было проведено более качественное тестирование программного обеспечения. [10] [ сомнительно ]

Аутсорсинг тестирования программного обеспечения из-за затрат очень распространен, причем предпочтительными направлениями являются Китай, Филиппины и Индия. [11]

Роли

Тестирование программного обеспечения может проводиться специальными тестировщиками программного обеспечения; до 1980-х годов термин «тестировщик программного обеспечения» использовался вообще, но позже он стал рассматриваться и как отдельная профессия. Что касается периодов и различных целей в тестировании программного обеспечения, [12] были установлены различные роли, такие как менеджер по тестированию , руководитель тестирования , аналитик тестирования , дизайнер тестов , тестировщик , разработчик автоматизации и администратор тестирования . Тестирование программного обеспечения также может выполняться неспециализированными тестировщиками программного обеспечения. [13]

История

Гленфорд Дж. Майерс впервые представил разделение отладки и тестирования в 1979 году. [14] Хотя его внимание было сосредоточено на тестировании на поломку («Успешный тестовый пример — это тот, который обнаруживает еще не обнаруженную ошибку». [14] : 16  ), это проиллюстрировало желание сообщества разработчиков программного обеспечения отделить фундаментальную деятельность по разработке, такую ​​​​как отладка, от проверки.

Подход к тестированию

Статическое, динамическое и пассивное тестирование

Существует множество подходов к тестированию программного обеспечения. Обзоры , пошаговые руководства или проверки называются статическим тестированием, тогда как выполнение программного кода с заданным набором тестовых случаев называется динамическим тестированием . [15] [16]

Статическое тестирование часто является неявным, например корректура, а также когда инструменты программирования/текстовые редакторы проверяют структуру исходного кода или компиляторы (прекомпиляторы) проверяют синтаксис и поток данных в ходе статического анализа программы . Динамическое тестирование происходит при запуске самой программы. Динамическое тестирование может начаться до того, как программа будет завершена на 100%, чтобы протестировать отдельные разделы кода и применить их к отдельным функциям или модулям. [15] [16] Типичными методами для этого являются либо использование заглушек /драйверов, либо выполнение из среды отладчика . [16]

Статическое тестирование включает в себя проверку , тогда как динамическое тестирование также включает в себя проверку . [16]

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

Исследовательский подход

Исследовательское тестирование — это подход к тестированию программного обеспечения, который кратко описывается как одновременное обучение, проектирование тестов и их выполнение. Джем Канер , придумавший этот термин в 1984 году, [18] определяет исследовательское тестирование как «стиль тестирования программного обеспечения, который подчеркивает личную свободу и ответственность отдельного тестировщика за постоянную оптимизацию качества его/ее работы путем обучения, связанного с тестированием». , проектирование тестов, выполнение тестов и интерпретация результатов тестов как взаимодополняющие действия, которые выполняются параллельно на протяжении всего проекта». [19]

Предустановленное тестирование против адаптивного тестирования

Тип стратегии тестирования, которую необходимо выполнить, зависит от того, следует ли определять тесты, которые будут применяться к ТР, до начала выполнения плана тестирования (предварительно заданное тестирование [20] ) или каждый входной сигнал, который будет применяться к ТР, может быть динамически изменен. зависит от результатов, полученных в ходе применения предыдущих тестов (адаптивное тестирование [21] [22] ). Хотя планы адаптивного тестирования сложнее определить, было показано, что они предоставляют больше информации о правильности или неправильности IUT с меньшими усилиями по тестированию, даже если возможные правильные и неправильные поведения IUT, которые необходимо разделить, просто перечисляются. одним. [23] Принимая во внимание результаты предыдущих взаимодействий, выбранные последующие тесты могут сосредоточиться на отработке взаимодействий, которые с большей вероятностью выявят в каждом конкретном случае разницу между правильностью и неправильностью.

«Коробочный» подход

Методы тестирования программного обеспечения традиционно делятся на тестирование «белого ящика» и «черного ящика». Эти два подхода используются для описания точки зрения, которую придерживается тестировщик при разработке тестовых случаев. Гибридный подход, называемый тестированием серого ящика, также может быть применен к методологии тестирования программного обеспечения. [24] [25] С ростом популярности концепции тестирования «серого ящика», которое разрабатывает тесты на основе конкретных элементов дизайна, это «произвольное различие» между тестированием «черного и белого ящика» несколько исчезло. [26]

Тестирование белого ящика

Схема тестирования белого ящика
Схема тестирования белого ящика

Тестирование белого ящика (также известное как тестирование прозрачного ящика, тестирование стеклянного ящика, тестирование прозрачного ящика и структурное тестирование) проверяет внутреннюю структуру или работу программы, а не функциональность, доступную конечному пользователю. При тестировании «белого ящика» для разработки тестовых примеров используется внутренняя перспектива системы (исходный код), а также навыки программирования. Тестер выбирает входные данные для проверки путей прохождения кода и определения соответствующих выходных данных. [24] [25] Это аналогично тестированию узлов в цепи, например, внутрисхемному тестированию (ICT).

Хотя тестирование «белого ящика» может применяться на уровне модуля , интеграции и системы процесса тестирования программного обеспечения, обычно оно выполняется на уровне модуля. [26] Он может тестировать пути внутри модуля, пути между модулями во время интеграции и между подсистемами во время тестирования на уровне системы. Хотя этот метод проектирования тестов может выявить множество ошибок или проблем, он может не выявить нереализованные части спецификации или отсутствующие требования.

Методы, используемые при тестировании «белого ящика», включают: [25] [27]

Инструменты покрытия кода могут оценить полноту набора тестов, созданного любым методом, включая тестирование «черного ящика». Это позволяет команде разработчиков программного обеспечения исследовать части системы, которые редко тестируются, и гарантирует, что наиболее важные функциональные точки были протестированы. [28] Покрытие кода как метрика программного обеспечения может быть представлена ​​в процентах для: [24] [28] [29]

  • Покрытие функций , которое сообщает о выполненных функциях.
  • Покрытие операторов , которое сообщает о количестве строк, выполненных для завершения теста.
  • Покрытие решений , которое сообщает о том, были ли выполнены как ветвь True, так и False данного теста.

100%-ное покрытие операторов гарантирует, что все пути или ветви кода (с точки зрения потока управления ) будут выполнены хотя бы один раз. Это полезно для обеспечения правильной функциональности, но недостаточно, поскольку один и тот же код может правильно или неправильно обрабатывать разные входные данные. [30]

Тестирование «черного ящика»

Диаграмма черного ящика

Тестирование «черного ящика» (также известное как функциональное тестирование) рассматривает программное обеспечение как «черный ящик», проверяя функциональность без каких-либо знаний о внутренней реализации и без просмотра исходного кода. Тестировщикам известно только то, что должно делать программное обеспечение, а не то, как оно это делает. [31] Методы тестирования «черного ящика» включают в себя: разделение эквивалентности , анализ граничных значений , всепарное тестирование , таблицы перехода состояний , тестирование таблицы решений , нечеткое тестирование , тестирование на основе моделей , тестирование вариантов использования , исследовательское тестирование и тестирование на основе спецификаций. . [24] [25] [29]

Тестирование на основе спецификаций направлено на проверку функциональности программного обеспечения в соответствии с применимыми требованиями. [32] Этот уровень тестирования обычно требует, чтобы тестировщику были предоставлены подробные тестовые примеры , которые затем могут просто проверить, что для данного входного значения выходное значение (или поведение) либо «является», либо «не совпадает» с ожидаемое значение, указанное в тестовом примере. Тестовые примеры строятся вокруг спецификаций и требований, т. е. того, что приложение должно делать. Для создания тестовых примеров он использует внешние описания программного обеспечения, включая спецификации, требования и проекты. Эти тесты могут быть функциональными и нефункциональными , но обычно функциональными.

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

Одним из преимуществ метода черного ящика является то, что не требуется никаких знаний программирования. Какие бы предубеждения ни были у программистов, у тестировщика скорее всего другой набор и он может подчеркивать разные области функциональности. С другой стороны, тестирование «черного ящика» похоже на «прогулку по темному лабиринту без фонарика». [34] Поскольку они не исследуют исходный код, бывают ситуации, когда тестировщик пишет множество тестовых примеров, чтобы проверить что-то, что можно было бы протестировать только одним тестовым примером, или оставляет некоторые части программы непроверенными.

Этот метод тестирования можно применять на всех уровнях тестирования программного обеспечения: модульном , интеграционном , системном и приемочном . [26] Обычно оно включает в себя большую часть, если не все, тестирование на более высоких уровнях, но также может доминировать и над модульным тестированием.

Тестирование интерфейса компонентов

Тестирование интерфейса компонента — это вариант тестирования «черного ящика» , в котором основное внимание уделяется значениям данных, а не только связанным действиям компонента подсистемы. [35] Практика тестирования интерфейсов компонентов может использоваться для проверки обработки данных, передаваемых между различными блоками или компонентами подсистемы, помимо тестирования полной интеграции между этими блоками. [36] [37] Передаваемые данные можно рассматривать как «пакеты сообщений», а диапазон или типы данных могут быть проверены на предмет данных, сгенерированных одним устройством, и проверены на достоверность перед передачей в другое устройство. Одним из вариантов тестирования интерфейса является ведение отдельного файла журнала передаваемых элементов данных, часто с регистрируемой временной меткой, что позволяет анализировать тысячи случаев передачи данных между устройствами в течение дней или недель. Тесты могут включать проверку обработки некоторых экстремальных значений данных, в то время как другие переменные интерфейса передаются как нормальные значения. [36] Необычные значения данных в интерфейсе могут помочь объяснить неожиданную производительность в следующем модуле.

Визуальное тестирование

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

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

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

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

Тестирование серого ящика

Тестирование серого ящика (американское написание: тестирование серого ящика) предполагает знание внутренних структур данных и алгоритмов для целей разработки тестов при выполнении этих тестов на уровне пользователя или черного ящика. Тестер часто имеет доступ как к «исходному коду, так и к исполняемому двоичному файлу». [41] Тестирование «серого ящика» может также включать обратное проектирование (с использованием динамического анализа кода) для определения, например, граничных значений или сообщений об ошибках. [41] Манипулирование входными данными и форматирование выходных данных не квалифицируются как «серый ящик», поскольку входные и выходные данные явно находятся за пределами «черного ящика», который мы называем тестируемой системой. Это различие особенно важно при проведении интеграционного тестирования между двумя модулями кода, написанными двумя разными разработчиками, когда тесту подвергаются только интерфейсы.

Зная основные концепции работы программного обеспечения, тестировщик делает более обоснованный выбор при тестировании при внешнем тестировании программного обеспечения. Обычно тестировщику «серого ящика» разрешается создать изолированную среду тестирования с такими действиями, как заполнение базы данных . Тестер может наблюдать за состоянием тестируемого продукта после выполнения определенных действий, таких как выполнение операторов SQL для базы данных, а затем выполнение запросов, чтобы убедиться, что ожидаемые изменения были отражены. Тестирование «серого ящика» реализует интеллектуальные сценарии тестирования, основанные на ограниченной информации. Это особенно применимо к обработке типов данных, обработке исключений и т. д. [42]

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

Вообще говоря, существует как минимум три уровня тестирования: модульное тестирование, интеграционное тестирование и системное тестирование. [43] [44] [45] [46] Однако разработчики могут включить четвертый уровень — приемочное тестирование. Это может быть в форме эксплуатационного приемочного тестирования или простого (бета-тестирования) конечного пользователя, проверки соответствия программного обеспечения функциональным ожиданиям. [47] [48] [49] Согласно программе ISTQB Certified Test Foundation Level, уровни тестирования включают эти четыре уровня, а четвертый уровень называется приемочным тестированием. [50] Тесты часто группируются в один из этих уровней в зависимости от того, где они добавляются в процессе разработки программного обеспечения, или по уровню специфичности теста.

Модульное тестирование

Модульное тестирование — это тесты, которые проверяют функциональность определенного раздела кода, обычно на функциональном уровне. В объектно-ориентированной среде это обычно происходит на уровне класса, а минимальные модульные тесты включают конструкторы и деструкторы. [51]

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

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

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

Интеграционное тестирование

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

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

Тестирование системы

Системное тестирование проверяет полностью интегрированную систему, чтобы убедиться, что система соответствует ее требованиям. [6] : 74  Например, системный тест может включать тестирование интерфейса входа в систему, затем создание и редактирование записи, а также отправку или печать результатов с последующей суммарной обработкой или удалением (или архивированием) записей и выходом из системы.

Приемочное тестирование

Приемочные испытания обычно включают в себя следующие четыре типа: [50]

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

Эксплуатационная приемка используется для проведения эксплуатационной готовности (предварительного выпуска) продукта, услуги или системы в рамках системы менеджмента качества . OAT — это распространенный тип нефункционального тестирования программного обеспечения, используемый в основном в проектах разработки и сопровождения программного обеспечения . Этот тип тестирования фокусируется на эксплуатационной готовности системы, которая будет поддерживаться или станет частью производственной среды. Следовательно, оно также известно как тестирование эксплуатационной готовности (ORT) или тестирование эксплуатационной готовности и обеспечения (OR&A). Функциональное тестирование в рамках OAT ограничивается теми тестами, которые необходимы для проверки нефункциональных аспектов системы.

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

Договорное приемочное тестирование проводится на основе договорных критериев приемки, определенных при заключении договора, а нормативное приемочное тестирование проводится на основе соответствующих нормативных актов к программному продукту. Оба этих двух тестирования могут выполняться пользователями или независимыми тестировщиками. Приемочные испытания по правилам иногда включают в себя проверку результатов испытаний регулирующими органами. [50]

Виды, методы и тактика тестирования

Различные ярлыки и способы группировки тестирования могут быть типами тестирования, тактиками или методами тестирования программного обеспечения. [54]

TestingCup — Чемпионат Польши по тестированию программного обеспечения, Катовице , май 2016 г.

Тестирование установки

Большинство программных систем имеют процедуры установки, которые необходимы, прежде чем их можно будет использовать по своему основному назначению. Тестирование этих процедур для получения установленной программной системы, которую можно использовать, называется установочным тестированием . [55] : 139  Эта процедура может включать полное или частичное обновление, а также процессы установки/удаления.

  • Пользователь должен выбрать множество опций.
  • Зависимые файлы и библиотеки должны быть выделены, загружены или расположены.
  • Должны присутствовать действительные конфигурации оборудования.
  • Программным системам может потребоваться возможность подключения к другим программным системам. [55] : 145 

Тестирование совместимости

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

Тестирование на дым и здравомыслие

Проверка работоспособности определяет, целесообразно ли продолжать дальнейшее тестирование.

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

Регрессионное тестирование

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

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

Приемочное тестирование

Приемочное тестирование может означать одно из двух:

  1. Дымовой тест используется в качестве приемочного теста сборки перед дальнейшим тестированием, например, перед интеграцией или регрессией .
  2. Приемочное тестирование, выполняемое клиентом, часто в своей лабораторной среде на собственном оборудовании, известно как пользовательское приемочное тестирование (UAT). Приемочное тестирование может выполняться как часть процесса передачи между любыми двумя этапами разработки. [ нужна цитата ]

Альфа-тестирование

Альфа-тестирование — это моделируемое или фактическое эксплуатационное тестирование, проводимое потенциальными пользователями/заказчиками или независимой группой тестирования на площадке разработчиков. Альфа-тестирование часто используется для готового программного обеспечения как форма внутреннего приемочного тестирования перед тем, как программное обеспечение перейдет на бета-тестирование. [57]

Бета-тестирование

Бета-тестирование проводится после альфа-тестирования и может рассматриваться как форма приемочного тестирования внешним пользователем . Версии программного обеспечения, известные как бета-версии , выпускаются для ограниченной аудитории за пределами группы программистов, известной как бета-тестеры. Программное обеспечение предоставляется группам людей, чтобы дальнейшее тестирование могло гарантировать, что в продукте мало сбоев или ошибок . Бета-версии могут быть доступны для широкой публики, чтобы расширить поле обратной связи до максимального числа будущих пользователей и принести пользу раньше, в течение длительного или даже неопределенного периода времени ( бессрочная бета-версия ). [58]

Функциональное и нефункциональное тестирование

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

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

Непрерывное тестирование

Непрерывное тестирование — это процесс выполнения автоматических тестов в рамках конвейера доставки программного обеспечения для получения немедленной информации о бизнес-рисках, связанных с кандидатом на выпуск программного обеспечения. [59] [60] Непрерывное тестирование включает проверку как функциональных , так и нефункциональных требований ; Объем тестирования простирается от проверки восходящих требований или пользовательских историй до оценки системных требований, связанных с общими бизнес-целями. [61] [62]

Разрушающий контроль

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

Тестирование производительности программного обеспечения

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

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

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

Программные системы реального времени имеют строгие временные ограничения. Чтобы проверить, соблюдаются ли временные ограничения, используется тестирование в реальном времени .

Юзабилити-тестирование

Юзабилити-тестирование предназначено для проверки простоты и понимания пользовательского интерфейса. В основном это касается использования приложения. Это не тот тип тестирования, который можно автоматизировать; необходимы реальные пользователи-люди, за которыми следят опытные дизайнеры пользовательского интерфейса .

Тестирование доступности

Тестирование доступности проводится для обеспечения доступности программного обеспечения для людей с ограниченными возможностями. Некоторые из распространенных тестов веб-доступности:

Общие стандарты соответствия

Тестирование безопасности

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

Международная организация по стандартизации (ISO) определяет это как «тип тестирования, проводимый для оценки степени, в которой объект тестирования и связанные с ним данные и информация защищены так, что неуполномоченные лица или системы не могут их использовать, читать или изменять, и авторизованным лицам или системам не отказано в доступе к ним». [63]

Интернационализация и локализация

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

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

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

Тестирование разработки

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

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

А/Б тестирование

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

Параллельное тестирование

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

Тестирование на соответствие или типовое тестирование

При тестировании программного обеспечения тестирование на соответствие проверяет, что продукт работает в соответствии с установленными стандартами. Например, компиляторы тщательно проверяются на предмет соответствия признанным стандартам данного языка.

Сравнительное тестирование выходных данных

Создание ожидаемого результата отображения, будь то сравнение данных текста или снимков экрана пользовательского интерфейса, [4] : 195  иногда называют тестированием моментальных снимков или Золотым мастер-тестированием, в отличие от многих других форм тестирования, оно не может обнаруживать сбои автоматически и вместо этого требует, чтобы человек оценить результат на наличие несоответствий.

Тестирование недвижимости

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

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

Тестирование свойств также иногда называют «генеративным тестированием» или «тестированием QuickCheck», поскольку оно было представлено и популяризировано библиотекой Haskell QuickCheck . [65]

Метаморфические испытания

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

Тестирование видеомагнитофона

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

Этот метод был популяризирован в веб-разработке благодаря библиотеке Ruby vcr.

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

Традиционная модель развития водопада

Обычной практикой каскадной разработки является то, что тестирование выполняется независимой группой тестировщиков. Это может произойти:

Однако даже в каскадной модели разработки модульное тестирование часто выполняется командой разработчиков программного обеспечения, даже если дальнейшее тестирование выполняется отдельной командой. [68]

Модель разработки Agile или XP

Напротив, некоторые новые дисциплины программного обеспечения, такие как экстремальное программирование и движение за гибкую разработку программного обеспечения , придерживаются модели « разработки программного обеспечения на основе тестирования ». В этом процессе модульные тесты сначала пишутся разработчиками программного обеспечения (часто с использованием парного программирования в экстремальной методологии программирования). Ожидается, что тесты поначалу пройдут неудачно. За каждым неудачным тестом пишется ровно столько кода, чтобы он прошел. [69] Это означает, что наборы тестов постоянно обновляются по мере обнаружения новых условий отказа и крайних случаев, и они интегрируются со всеми разрабатываемыми регрессионными тестами. Модульные тесты поддерживаются вместе с остальной частью исходного кода программного обеспечения и обычно интегрируются в процесс сборки (при этом интерактивные тесты по своей сути отводятся к частично ручному процессу приемки сборки).

Конечная цель этого процесса тестирования — поддержка непрерывной интеграции и снижение уровня дефектов. [70] [69]

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

Пример цикла тестирования

Хотя между организациями существуют различия, существует типичный цикл тестирования. [2] Приведенный ниже пример часто встречается в организациях, использующих модель разработки «Водопад» . Те же методы обычно встречаются и в других моделях разработки, но они могут быть не такими ясными и явными.

Автоматизированное тестирование

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

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

Инструменты тестирования

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

Некоторые из этих функций могут быть включены в один составной инструмент или интегрированную среду разработки (IDE).

Захват и воспроизведение

Тестирование с захватом и воспроизведением заключается в сборе сценариев сквозного использования при взаимодействии с приложением и превращении этих сценариев в тестовые примеры. Возможные применения захвата и воспроизведения включают создание регрессионных тестов. Инструмент SCARPE [71] выборочно фиксирует подмножество исследуемого приложения по мере его выполнения. JRapture фиксирует последовательность взаимодействий между исполняемой программой Java и компонентами хост-системы, такими как файлы или события в графических пользовательских интерфейсах. Эти последовательности затем можно воспроизвести для тестирования на основе наблюдений. [72] Саиева и др. предлагают создавать специальные тесты, которые воспроизводят записанные следы выполнения пользователя, чтобы проверить возможные исправления на наличие критических ошибок безопасности. [73]

Измерения при тестировании программного обеспечения

Меры качества включают такие темы, как правильность , полнота, безопасность и требования ISO/IEC 9126 , такие как возможности, надежность , эффективность , переносимость , ремонтопригодность , совместимость и удобство использования .

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

Иерархия сложности тестирования

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

Доказано, что каждый класс строго входит в следующий. Например, тестирование, когда мы предполагаем, что поведение тестируемой реализации может быть обозначено детерминированным конечным автоматом для некоторых известных конечных наборов входных и выходных данных и с некоторым известным числом состояний, принадлежит классу I (и всем последующим классам). ). Однако если количество состояний неизвестно, то оно принадлежит только всем классам, начиная с класса II. Если тестируемая реализация должна быть детерминированным конечным автоматом, не удовлетворяющим спецификации для одной трассы (и ее продолжений), и количество ее состояний неизвестно, то она принадлежит только классам, начиная с класса III. Тестирование темпоральных машин, в которых переходы срабатывают, если входные данные производятся в пределах некоторого действительно ограниченного интервала, принадлежит только классам, начиная с класса IV, тогда как тестирование многих недетерминированных систем принадлежит только классу V (но не всем, а некоторые даже принадлежат классу I). ). Включение в класс I не требует простоты предполагаемой модели вычислений, поскольку было доказано, что некоторые тестовые случаи, включающие реализации, написанные на любом языке программирования, и тестовые реализации, определяемые как машины, зависящие от непрерывных величин, относятся к классу I. Другие разработанные случаи, такие как среда тестирования Мэтью Хеннесси с обязательной семантикой и темпоральные машины с рациональными тайм-аутами, относятся к классу II.

Тестирование артефактов

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

План испытаний

План тестирования — это документ, подробно описывающий подход, который будет применяться к намеченным действиям по тестированию. План может включать такие аспекты, как цели, объем, процессы и процедуры, требования к персоналу и планы действий в чрезвычайных ситуациях. [47] План тестирования может иметь форму единого плана, включающего все типы тестирования (например, план приемочного или системного тестирования) и соображения по планированию, или он может быть выпущен в виде генерального плана тестирования, который обеспечивает обзор более чем один подробный план испытаний (план плана). [47] В некоторых случаях план тестирования может быть частью широкой « стратегии тестирования », которая документирует общие подходы к тестированию, что само по себе может быть генеральным планом тестирования или даже отдельным артефактом.

Матрица прослеживаемости

В разработке программного обеспечения матрица прослеживаемости (TM) [76] : 244  представляет собой документ, обычно в форме таблицы, используемый для помощи в определении полноты взаимосвязи путем сопоставления любых двух базовых документов с использованием отношения «многие ко многим». сравнение отношений. [76] : 3–22  Он часто используется с требованиями высокого уровня (они часто состоят из маркетинговых требований) и подробными требованиями к продукту с соответствующими частями высокоуровневого проектирования , детального проектирования, плана тестирования и тестовых примеров .

Прецедент

Тестовый пример обычно состоит из уникального идентификатора, ссылок на требования из спецификации проекта, предварительных условий, событий, серии шагов (также известных как действия), которые необходимо выполнить, ввода, вывода, ожидаемого результата и фактического результата. С клинической точки зрения тестовый пример — это входные данные и ожидаемый результат. [77] Это может быть так же кратко, как «для условия x ваш полученный результат равен y», хотя обычно тестовые примеры более подробно описывают входной сценарий и ожидаемые результаты. Иногда это может быть серия шагов (но часто шаги содержатся в отдельной процедуре тестирования, которую из соображений экономии можно проводить на нескольких тестовых примерах), но с одним ожидаемым результатом или ожидаемым результатом. Необязательными полями являются идентификатор тестового набора, шаг теста или номер порядка выполнения, связанные требования, глубина, категория теста, автор и флажки, указывающие, является ли тест автоматизированным и был ли он автоматизирован. Более крупные тестовые примеры могут также содержать обязательные состояния или шаги, а также описания. Тестовый пример также должен содержать место для фактического результата. Эти шаги можно сохранить в документе текстового процессора, электронной таблице, базе данных или других распространенных репозиториях. В системе базы данных вы также можете увидеть результаты прошлых тестов, узнать, кто сгенерировал результаты, и какая конфигурация системы использовалась для получения этих результатов. Эти прошлые результаты обычно хранятся в отдельной таблице.

Тестовый скрипт

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

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

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

Тестовое приспособление или тестовые данные

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

Тестовый жгут

Программное обеспечение, инструменты, примеры ввода и вывода данных, а также конфигурации — все вместе называется « тестовым оборудованием» .

Тестовый забег

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

Сертификаты

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

Споры

Некоторые из основных противоречий в тестировании программного обеспечения включают в себя:

Agile против традиционного
Должны ли тестировщики учиться работать в условиях неопределенности и постоянных изменений или им следует стремиться к «зрелости» процесса ? Движение гибкого тестирования получает растущую популярность с 2006 года, главным образом в коммерческих кругах, [79] [80] , тогда как государственные и военные [81] поставщики программного обеспечения используют эту методологию, а также традиционные модели «тест-последний» (например, в модели «Водопад »). [ нужна цитата ]
Ручное и автоматизированное тестирование
Некоторые авторы считают, что автоматизация тестирования настолько дорога по сравнению с ее ценностью, что ее следует использовать с осторожностью. [82] Тогда автоматизацию тестирования можно рассматривать как способ сбора и реализации требований. Как правило, чем больше система и чем выше ее сложность, тем выше окупаемость инвестиций в автоматизацию тестирования. Кроме того, инвестиции в инструменты и опыт можно амортизировать в рамках нескольких проектов при правильном уровне обмена знаниями внутри организации.
Оправдано ли существование стандарта тестирования программного обеспечения ISO 29119 ?
В рядах школы контекстно-ориентированного тестирования программного обеспечения сформировалась значительная оппозиция стандарту ISO 29119. Профессиональные ассоциации тестирования, такие как Международное общество тестирования программного обеспечения, пытались отменить стандарт. [83] [84]
Некоторые практики заявляют, что поле тестирования не готово к сертификации.
[85] Никакая предлагаемая в настоящее время сертификация фактически не требует от заявителя подтверждения своей способности тестировать программное обеспечение. Ни одна сертификация не основана на широко признанном массиве знаний. Сертификация сама по себе не может измерить производительность человека, его навыки или практические знания и не может гарантировать его компетентность или профессионализм в качестве тестировщика. [86]
Исследования, используемые для демонстрации относительных затрат на устранение дефектов.
Существуют противоположные взгляды на применимость исследований, призванных показать относительную стоимость устранения дефектов в зависимости от их появления и обнаружения. Например:

Принято считать, что чем раньше обнаружен дефект, тем дешевле его устранить. В следующей таблице указана стоимость устранения дефекта в зависимости от стадии его обнаружения. [87] Например, если проблема в требованиях обнаруживается только после выпуска, то ее исправление будет стоить в 10–100 раз дороже, чем если бы она уже была обнаружена в ходе проверки требований. С появлением современных методов непрерывного развертывания и облачных сервисов стоимость повторного развертывания и обслуживания может со временем снизиться.

Данные, на основе которых экстраполируется эта таблица, скудны. Лоран Боссавит говорит в своем анализе:

Кривая «меньших проектов» оказывается полученной только от двух групп студентов-первокурсников, а размер выборки настолько мал, что экстраполяция на «меньшие проекты в целом» совершенно неоправданна. Исследование GTE не объясняет свои данные, за исключением того, что они получены из двух проектов: большого и маленького. В документе, цитируемом для проекта Bell Labs «Safeguard», прямо отрицается сбор детальных данных, которые предполагают данные Боэма. Исследование IBM (статья Фэгана) содержит утверждения, которые, кажется, противоречат графику Бома, и не содержит числовых результатов, которые явно соответствовали бы его данным.

Бём даже не цитирует документ, подтверждающий данные TRW, за исключением статьи для «Making Software» в 2010 году, где он цитирует оригинальную статью 1976 года. Существует большое исследование, проведенное в TRW как раз в то время, когда Бем мог его процитировать, но эта статья не содержит данных, подтверждающих утверждения Бема. [88]

Связанные процессы

Верификация и валидация программного обеспечения

Тестирование программного обеспечения используется в сочетании с проверкой и проверкой : [89]

Термины «верификация» и «валидация» обычно используются в отрасли как синонимы; Также часто можно увидеть, что эти два термина имеют противоречивые определения. Согласно Стандартному глоссарию терминологии программной инженерии IEEE : [6] : 80–81. 

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

И, согласно стандарту ISO 9000:

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

Противоречие вызвано использованием понятий требования и заданных требований, но имеющих разное значение.

В случае стандартов IEEE указанные требования, упомянутые в определении валидации, представляют собой набор проблем, потребностей и желаний заинтересованных сторон, которые программное обеспечение должно решить и удовлетворить. Такие требования документированы в Спецификации требований к программному обеспечению (SRS). А продукты, упомянутые в определении верификации, являются результатом каждого этапа процесса разработки программного обеспечения. Эти продукты, по сути, являются спецификациями, такими как Спецификация архитектурного проектирования, Детальная спецификация проектирования и т. д. SRS также является спецификацией, но ее невозможно проверить (по крайней мере, в том смысле, который используется здесь, подробнее об этом ниже).

Но для ISO 9000 указанные требования представляют собой набор спецификаций, как только что упоминалось выше, которые должны быть проверены. Спецификация, как объяснялось ранее, является продуктом этапа разработки программного обеспечения, который получает на вход другую спецификацию. Спецификация считается успешной, если она правильно реализует свою входную спецификацию. Все спецификации можно проверить, кроме SRS, поскольку она первая (хотя ее можно проверить). Примеры: Спецификация проекта должна реализовывать SRS; и артефакты этапа строительства должны соответствовать Спецификации проекта.

Итак, когда эти слова определяются в общих чертах, кажущееся противоречие исчезает.

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

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

Гарантия качества программного обеспечения

Тестирование программного обеспечения можно рассматривать как часть процесса обеспечения качества программного обеспечения (SQA). [4] : 347  В SQA специалисты по процессам разработки программного обеспечения и аудиторы занимаются процессом разработки программного обеспечения, а не просто такими артефактами, как документация, код и системы. Они исследуют и изменяют сам процесс разработки программного обеспечения , чтобы уменьшить количество ошибок, возникающих в поставляемом программном обеспечении: так называемый уровень дефектов. Что представляет собой приемлемый уровень дефектов, зависит от характера программного обеспечения; видеоигра-симулятор полета будет иметь гораздо более высокую устойчивость к дефектам, чем программное обеспечение для реального самолета. Хотя существуют тесные связи с SQA, отделы тестирования часто существуют независимо, и в некоторых компаниях функция SQA может отсутствовать. [ нужна цитата ]

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

Смотрите также

Рекомендации

  1. Канер, Джем (17 ноября 2006 г.). Исследовательское тестирование (PDF) . Всемирная ежегодная конференция Института обеспечения качества по тестированию программного обеспечения. Орландо, Флорида . Проверено 22 ноября 2014 г.
  2. ^ Аб Пан, Цзяньтао (весна 1999 г.). «Тестирование программного обеспечения» (курсовая работа). Университет Карнеги Меллон . Проверено 21 ноября 2017 г.
  3. ^ Лейтнер, Андреас; Чупа, Илинка; Ориоль, Мануэль; Мейер, Бертран ; Фива, Арно (сентябрь 2007 г.). Разработка через контракт = Разработка через тестирование – написание тестовых примеров (PDF) . ESEC/FSE'07: Европейская конференция по разработке программного обеспечения и симпозиум ACM SIGSOFT по основам программной инженерии 2007. Дубровник, Хорватия . Проверено 8 декабря 2017 г.
  4. ^ abcd Канер, Джем ; Фальк, Джек; Нгуен, Хунг Куок (1999). Тестирование компьютерного программного обеспечения (2-е изд.). Нью-Йорк: Джон Уайли и сыновья. ISBN 978-0-471-35846-6.
  5. ^ аб Колава, Адам; Хейзинга, Дорота (2007). Автоматизированное предотвращение дефектов: лучшие практики управления программным обеспечением. Издательство компьютерного общества Wiley-IEEE. ISBN 978-0-470-04212-0.
  6. ^ abc Стандартный глоссарий терминологии разработки программного обеспечения IEEE, IEEE, 1990, doi : 10.1109/IEESTD.1990.101064, ISBN 978-1-55937-067-7
  7. ^ «Программа базового уровня сертифицированного тестера» . Международный квалификационный совет по тестированию программного обеспечения . 31 марта 2011 г. Раздел 1.1.2. Архивировано из оригинала (pdf) 28 октября 2017 года . Проверено 15 декабря 2017 г.
  8. ^ «Программа базового уровня для сертифицированных тестировщиков» (PDF) . Международный квалификационный совет по тестированию программного обеспечения . 1 июля 2005 г. Принцип 2, раздел 1.3. Архивировано из оригинала (PDF) 17 декабря 2008 года . Проверено 15 декабря 2017 г.
  9. ^ Рамлер, Рудольф; Копецкий, Теодорих; Платц, Вольфганг (17 апреля 2012 г.). Комбинаторный дизайн тестов в наборе тестов TOSCA: извлеченные уроки и практические последствия . Пятая международная конференция IEEE по тестированию и валидации программного обеспечения (ICST). Монреаль, Квебек, Канада. дои : 10.1109/ICST.2012.142.
  10. ^ «Экономические последствия неадекватной инфраструктуры для тестирования программного обеспечения» (PDF) . Национальный институт стандартов и технологий . Май 2002 года . Проверено 19 декабря 2017 г.
  11. ^ Шарма, Бхарадвадж (апрель 2016 г.). «Ardentia Technologies: предоставление передовых программных решений и комплексных услуг по тестированию». Обзор CIO (изд. Индии) . Проверено 20 декабря 2017 г.
  12. ^ Гельперин, Дэвид ; Хетцель, Билл (1 июня 1988 г.). «Рост тестирования программного обеспечения». Коммуникации АКМ . 31 (6): 687–695. дои : 10.1145/62959.62965 . S2CID  14731341.
  13. ^ Грегори, Джанет; Криспин, Лиза (2014). Больше гибкого тестирования . Аддисон-Уэсли Профессионал. стр. 23–39. ISBN 978-0-13-374956-4.
  14. ^ abc Майерс, Гленфорд Дж. (1979). Искусство тестирования программного обеспечения. Джон Уайли и сыновья. ISBN 978-0-471-04328-7.
  15. ^ Аб Грэм, Д.; Ван Винендал, Э.; Эванс, И. (2008). Основы тестирования программного обеспечения. Cengage Обучение. стр. 57–58. ISBN 978-1-84480-989-9.
  16. ^ abcd Оберкампф, WL; Рой, CJ (2010). Верификация и валидация в научных вычислениях. Издательство Кембриджского университета. стр. 154–5. ISBN 978-1-139-49176-1.
  17. ^ Ли, Д.; Нетравали, АН; Сабнани, КК; Сугла, Б.; Джон, А. (1997). «Пассивное тестирование и приложения для управления сетью». Материалы Международной конференции по сетевым протоколам 1997 года . IEEE-компьютер. Соц. стр. 113–122. дои : 10.1109/icnp.1997.643699. ISBN 978-0-8186-8061-8. S2CID  42596126.
  18. ^ Джем Канер, «Учебное пособие по исследовательскому тестированию, заархивировано 12 июня 2013 г. в Wayback Machine », стр. 2
  19. ^ Джем Канер, Учебное пособие по исследовательскому тестированию, заархивировано 12 июня 2013 г. в Wayback Machine , стр. 36.
  20. ^ Ли, Д.; Яннакакис, М. (1996). «Принципы и методы тестирования конечных автоматов-обзор». Труды IEEE . 84 (8): 1090–1123.
  21. ^ Петренко, А.; Евтушенко, Н. (2011). «Адаптивное тестирование детерминированных реализаций, заданных недетерминированными автоматами». Тестирование программного обеспечения и систем: 23-я Международная конференция IFIP WG 6.1, ICTSS 2011, Париж, Франция, 7-10 ноября. Шпрингер Берлин Гейдельберг. стр. 162–178.
  22. ^ Петренко, А.; Евтушенко, Н. (2014). «Адаптивное тестирование недетерминированных систем с помощью автомата». В 2014 году прошел 15-й Международный симпозиум IEEE по системной инженерии высокой надежности. IEEE. стр. 224–228.
  23. ^ Родригес, И.; Рубио, Д.; Рубио, Ф. (2023). «Сложность адаптивного тестирования в сценариях, определенных экстенсионально». Границы информатики . 17 (3): 1–18.
  24. ^ abcd Лимайе, М.Г. (2009). Тестирование программного обеспечения. Тата МакГроу-Хилл Образование. стр. 108–11. ISBN 978-0-07-013990-9.
  25. ^ abcd Салех, Калифорния (2009). Программная инженерия. Издательство Дж. Росс. стр. 224–41. ISBN 978-1-932159-94-3.
  26. ^ abc Амманн, П.; Оффатт, Дж. (2016). Введение в тестирование программного обеспечения. Издательство Кембриджского университета. п. 26. ISBN 978-1-316-77312-3.
  27. ^ Эвератт, Джорджия; Маклеод-младший, Р. (2007). «Глава 7: Функциональное тестирование». Тестирование программного обеспечения: тестирование на протяжении всего жизненного цикла разработки программного обеспечения . Джон Уайли и сыновья. стр. 99–121. ISBN 978-0-470-14634-7.
  28. ^ аб Корнетт, Стив (около 1996 г.). «Анализ покрытия кода». Технология тестирования «яблочко». Введение . Проверено 21 ноября 2017 г.
  29. ^ Аб Блэк, Р. (2011). Прагматическое тестирование программного обеспечения: стать эффективным и действенным специалистом по тестированию. Джон Уайли и сыновья. стр. 44–6. ISBN 978-1-118-07938-6.
  30. ^ Простой пример: функция C состоит только из одного оператора. Все тесты на соответствие спецификации будут успешными, за исключением случаев, когда они выбраны.int f(int x){return x*x-6*x+8;}f(x)>=0x=3
  31. ^ Паттон, Рон (2005). Тестирование программного обеспечения (2-е изд.). Индианаполис: Издательство Sams. ISBN 978-0-672-32798-8.
  32. ^ Лэйкок, Гилберт Т. (1993). Теория и практика тестирования программного обеспечения на основе спецификаций (PDF) (диссертация). Кафедра компьютерных наук Шеффилдского университета . Проверено 2 января 2018 г.
  33. ^ Бах, Джеймс (июнь 1999 г.). «Тестирование на основе рисков и требований» (PDF) . Компьютер . 32 (6): 113–114 . Проверено 19 августа 2008 г.
  34. ^ Савенков, Роман (2008). Как стать тестировщиком программного обеспечения . Роман Савенков Консалтинг. п. 159. ИСБН 978-0-615-23372-7.
  35. ^ Матур, AP (2011). Основы тестирования программного обеспечения. Пирсон Образовательная Индия. п. 63. ИСБН 978-81-317-5908-0.
  36. ^ аб Клапп, Джудит А. (1995). Контроль качества программного обеспечения, анализ ошибок и тестирование. Уильям Эндрю. п. 313. ИСБН 978-0-8155-1363-6. Проверено 5 января 2018 г.
  37. ^ Матур, Адитья П. (2007). Основы тестирования программного обеспечения. Пирсон Образовательная Индия. п. 18. ISBN 978-81-317-1660-1.
  38. Лённберг, Январь (7 октября 2003 г.). Визуальное тестирование программного обеспечения (PDF) (магистерская диссертация). Хельсинкский технологический университет . Проверено 13 января 2012 г.
  39. ^ Чима, Распал. «Визуальное тестирование». Журнал ТЕСТ . Архивировано из оригинала 24 июля 2012 года . Проверено 13 января 2012 г.
  40. ^ abc Льюис, МЫ (2016). Тестирование программного обеспечения и постоянное улучшение качества (3-е изд.). ЦРК Пресс. стр. 68–73. ISBN 978-1-4398-3436-7.
  41. ^ Аб Рэнсом, Дж.; Мисра, А. (2013). Основная безопасность программного обеспечения: безопасность в источнике. ЦРК Пресс. стр. 140–3. ISBN 978-1-4665-6095-6.
  42. ^ «Инструменты тестирования SOA для черного, белого и серого ящика» (информационный документ). Перекрестная проверка сетей. Архивировано из оригинала 1 октября 2018 года . Проверено 10 декабря 2012 г.
  43. ^ Бурк, Пьер; Фэрли, Ричард Э., ред. (2014). «Глава 5». Руководство к своду знаний по программной инженерии . 3.0. Компьютерное общество IEEE. ISBN 978-0-7695-5166-1. Проверено 2 января 2018 г.
  44. ^ Бурк, П.; Фэрли, Р.Д., ред. (2014). «Глава 4: Тестирование программного обеспечения» (PDF) . SWEBOK v3.0: Руководство по своду знаний по программной инженерии . IEEE. стр. 4–1–4–17. ISBN 978-0-7695-5166-1. Архивировано из оригинала (PDF) 19 июня 2018 года . Проверено 13 июля 2018 г.
  45. ^ Дули, Дж. (2011). Разработка программного обеспечения и профессиональная практика. Пресс. стр. 193–4. ISBN 978-1-4302-3801-0.
  46. ^ Вигерс, К. (2013). Создание культуры разработки программного обеспечения. Аддисон-Уэсли. стр. 211–2. ISBN 978-0-13-348929-3.
  47. ^ abc Льюис, МЫ (2016). Тестирование программного обеспечения и постоянное улучшение качества (3-е изд.). ЦРК Пресс. стр. 92–6. ISBN 978-1-4398-3436-7.
  48. ^ Мачадо, П.; Винченци, А.; Мальдонадо, Джей Си (2010). «Глава 1: Тестирование программного обеспечения: обзор». В Борбе, П.; Кавальканти, А.; Сампайо, А.; Вудкук, Дж. (ред.). Методы тестирования в программной инженерии . Springer Science & Business Media. стр. 13–14. ISBN 978-3-642-14334-2.
  49. ^ Клапп, Дж.А.; Стантен, Сан-Франциско; Пэн, WW; и другие. (1995). Контроль качества программного обеспечения, анализ ошибок и тестирование. Корпорация Нова Дата. п. 254. ИСБН 978-0-8155-1363-6.
  50. ^ abc «Программа обучения ISTQB CTFL 2018» (PDF) . ISTQB — Международная квалификационная комиссия по тестированию программного обеспечения . Архивировано (PDF) из оригинала 24 марта 2022 г. Проверено 11 апреля 2022 г.
  51. ^ Биндер, Роберт В. (1999). Тестирование объектно-ориентированных систем: объекты, шаблоны и инструменты. Аддисон-Уэсли Профессионал. п. 45. ИСБН 978-0-201-80938-1.
  52. ^ Бейзер, Борис (1990). Методы тестирования программного обеспечения (второе изд.). Нью-Йорк: Ван Ностранд Рейнхольд. стр. 21, 430. ISBN. 978-0-442-20672-7.
  53. Вудс, Энтони Дж. (5 июня 2015 г.). «Эксплуатационная приемка – применение стандарта тестирования программного обеспечения ISO 29119» (информационный документ). Капгемини Австралия . Проверено 9 января 2018 г.
  54. ^ Канер, Джем; Бах, Джеймс; Петтикорд, Брет (2001). Уроки, извлеченные из тестирования программного обеспечения: контекстно-ориентированный подход . Уайли. стр. 31–43. ISBN 978-0-471-08112-8.
  55. ^ аб Майерс, Г. (2004). Сэндлер, К; Бэджетт, Т; Томас, М. (ред.). Искусство тестирования программного обеспечения (2-е изд.). Уайли. ISBN 9780471469124.
  56. ^ Амманн, Пол; Оффатт, Джефф (28 января 2008 г.). Введение в тестирование программного обеспечения. Издательство Кембриджского университета . п. 215. ИСБН 978-0-521-88038-1. Проверено 29 ноября 2017 г.
  57. ^ «Стандартный глоссарий терминов, используемых при тестировании программного обеспечения» (PDF) . Версия 3.1. Международный квалификационный совет по тестированию программного обеспечения . Проверено 9 января 2018 г.
  58. ^ О'Рейли, Тим (30 сентября 2005 г.). «Что такое Веб 2.0». О'Рейли Медиа. Раздел 4. Окончание цикла выпуска программного обеспечения . Проверено 11 января 2018 г.
  59. Ауэрбах, Адам (3 августа 2015 г.). «Часть конвейера: почему необходимо непрерывное тестирование». Аналитика TechWell . Компания TechWell . Проверено 12 января 2018 г.
  60. Филипп-Эдмондс, Кэмерон (5 декабря 2014 г.). «Взаимосвязь между риском и непрерывным тестированием: интервью с Уэйном Ариолой». Прилипчивые умы . Проверено 16 января 2018 г.
  61. ^ Ариола, Уэйн; Данлоп, Синтия (октябрь 2015 г.). DevOps: вы быстрее сообщаете клиентам об ошибках? (PDF) . Тихоокеанская северо-западная конференция по качеству программного обеспечения . Проверено 16 января 2018 г.
  62. Ауэрбах, Адам (2 октября 2014 г.). «Сдвиньте влево и поставьте качество на первое место». Аналитика TechWell . Компания TechWell . Проверено 16 января 2018 г.
  63. ^ «Раздел 4.38». ISO/IEC/IEEE 29119-1:2013 – Программное обеспечение и системная инженерия – Тестирование программного обеспечения – Часть 1 – Концепции и определения. Международная Организация Стандартизации . Проверено 17 января 2018 г.
  64. ^ «Шаг за шагом к глобализации: готовый к использованию во всем мире подход к тестированию. Сеть разработчиков Microsoft» . Сеть разработчиков Microsoft. Архивировано из оригинала 23 июня 2012 года . Проверено 13 января 2012 г.
  65. ^ Классен, Коэн; Хьюз, Джон (2000). "Быстрая проверка". Материалы пятой международной конференции ACM SIGPLAN по функциональному программированию . МЦФП '00. стр. 268–279. дои : 10.1145/351240.351266. ISBN 978-1-58113-202-1. S2CID  5668071.{{cite book}}: CS1 maint: date and year (link)
  66. ^ «Жизненный цикл тестирования программного обеспечения» . etestinghub . Фаза тестирования в тестировании программного обеспечения . Проверено 13 января 2012 г.
  67. ^ Дастин, Эльфрида (2002). Эффективное тестирование программного обеспечения. Аддисон-Уэсли Профессионал. п. 3. ISBN 978-0-201-79429-8.
  68. ^ Браун, Крис; Кобб, Гэри; Калбертсон, Роберт (12 апреля 2002 г.). Введение в быстрое тестирование программного обеспечения.
  69. ^ ab «Что такое разработка через тестирование (TDD)?». Гибкий Альянс . 5 декабря 2015 года . Проверено 17 марта 2018 г.
  70. ^ «Разработка через тестирование и непрерывная интеграция мобильных приложений». msdn.microsoft.com . 14 января 2009 года . Проверено 17 марта 2018 г.
  71. ^ Джоши, Шринивас; Орсо, Алессандро (октябрь 2007 г.). «SCARPE: метод и инструмент для выборочного захвата и воспроизведения выполнения программ». 2007 Международная конференция IEEE по сопровождению программного обеспечения . стр. 234–243. дои : 10.1109/ICSM.2007.4362636. ISBN 978-1-4244-1255-6. S2CID  17718313.
  72. ^ Стивен, Джон; Чандра, Правир; Флек, Боб; Подгурски, Энди (сентябрь 2000 г.). «jRapture: инструмент захвата/воспроизведения для тестирования на основе наблюдений». Заметки по разработке программного обеспечения ACM SIGSOFT . 25 (5): 158–167. дои : 10.1145/347636.348993 . ISSN  0163-5948.
  73. ^ Саиева, Энтони; Сингх, Шириш; Кайзер, Гейл (сентябрь 2020 г.). «Генерация специальных тестов посредством двоичного переписывания». 20-я Международная рабочая конференция IEEE по анализу и манипулированию исходным кодом (SCAM) , 2020 г. Аделаида, Австралия: IEEE. стр. 115–126. doi : 10.1109/SCAM51674.2020.00018. ISBN 978-1-7281-9248-2. S2CID  219618921.
  74. ^ Родригес, Исмаэль; Ллана, Луис; Рабанал, Пабло (2014). «Общая теория проверяемости: классы, свойства, сложность и сокращение тестирования». Транзакции IEEE по разработке программного обеспечения . 40 (9): 862–894. дои : 10.1109/TSE.2014.2331690. ISSN  0098-5589. S2CID  6015996.
  75. ^ Родригес, Исмаэль (2009). «Общая теория проверяемости». CONCUR 2009 - Теория параллелизма, 20-я Международная конференция, CONCUR 2009, Болонья, Италия, 1–4 сентября 2009 г. Труды . стр. 572–586. дои : 10.1007/978-3-642-04081-8_38. ISBN 978-3-642-04080-1.
  76. ^ аб Готель, Орлена; Клеланд-Хуанг, Джейн ; Хейс, Джейн Хаффман; Зисман, Андреа; Эгед, Александр; Грюнбахер, Пауль; Дехтяр, Алекс; Антониоль, Джулиано; Малетик, Джонатан (1 января 2012 г.). Клеланд-Хуанг, Джейн; Готель, Орлена; Зисман, Андреа (ред.). Отслеживание программного обеспечения и систем . Спрингер Лондон. дои : 10.1007/978-1-4471-2239-5_1. ISBN 9781447122388.
  77. ^ IEEE (1998). Стандарт IEEE для документации по тестированию программного обеспечения . Нью-Йорк: IEEE. ISBN 978-0-7381-1443-9.
  78. ^ Пинто, Леандро Сейлс; Синха, Саураб; Орсо, Алессандро (11 ноября 2012 г.). «Понимание мифов и реалий эволюции тестовых наборов». Материалы 20-го Международного симпозиума ACM SIGSOFT по основам программной инженерии . Ассоциация вычислительной техники. стр. 1–11. дои : 10.1145/2393596.2393634. ISBN 9781450316149. S2CID  9072512.
  79. Стром, Дэвид (1 июля 2009 г.). «Мы все часть истории». Совместная работа по тестированию программного обеспечения и производительности. Архивировано из оригинала 31 августа 2009 года.
  80. ^ Гриффитс, М. (2005). «Обучение гибкому управлению проектами в PMI». Конференция по гибкому развитию (ADC'05) . ieee.org. стр. 318–322. дои : 10.1109/ADC.2005.45. ISBN 978-0-7695-2487-0. S2CID  30322339.
  81. ^ Уиллисон, Джон С. (апрель 2004 г.). «Гибкая разработка программного обеспечения для гибких сил». Перекрестный разговор . СТСЦ (апрель 2004 г.). Архивировано из оригинала 29 октября 2005 года.
  82. ^ Пример: Марк Фьюстер, Дороти Грэм: Автоматизация тестирования программного обеспечения. Аддисон Уэсли, 1999, ISBN 978-0-201-33140-0
  83. ^ "stop29119". commonsensetesting.org . Архивировано из оригинала 2 октября 2014 года.
  84. Пол Крилл (22 августа 2014 г.). «Тестировщики программного обеспечения отказываются принять предложение по стандарту ISO 29119». Инфомир .
  85. ^ Канер, Джем (2001). «Предложение о гранте NSF, чтобы «заложить основу для значительного улучшения качества академических и коммерческих курсов по тестированию программного обеспечения»» (PDF) . Архивировано из оригинала (PDF) 27 ноября 2009 г. Проверено 13 октября 2006 г.
  86. ^ Канер, Джем (2003). Измерение эффективности тестировщиков программного обеспечения (PDF) . ЗВЕЗДА Востока. Архивировано из оригинала (PDF) 26 марта 2010 г. Проверено 18 января 2018 г.
  87. ^ МакКоннелл, Стив (2004). Код завершен (2-е изд.). Майкрософт Пресс. п. 29. ISBN 978-0-7356-1967-8.
  88. Боссавит, Лоран (20 ноября 2013 г.). «Цена дефектов: иллюстрированная история». Лепреконы программной инженерии: как фольклор превращается в реальность и что с этим делать . постный паб.
  89. ^ Тран, Юшиуань (1999). «Верификация/Валидация/Сертификация» (курсовая работа). Университет Карнеги Меллон . Проверено 13 августа 2008 г.

дальнейшее чтение

Внешние ссылки