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

Разработка программного обеспечения
Активность ядер
Парадигмы и модели
Методологии и рамки
Вспомогательные дисциплины
Практики
Инструменты
Стандарты и свод знаний
Глоссарии
Контуры

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

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

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

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

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

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

Обзор

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

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

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

Дефекты и сбои

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

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

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

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

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

Экономика

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

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

Роли

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

История

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

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

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

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

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

Статическое тестирование включает проверка, тогда как динамическое тестирование также включает Проверка.[15]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интеграционные тесты обычно включают в себя большой объем кода и дают более крупные трассировки, чем те, которые создаются модульными тестами. Это влияет на простоту локализации неисправности в случае сбоя интеграционного теста. Чтобы решить эту проблему, было предложено автоматически разрезать большие тесты на более мелкие части, чтобы улучшить локализацию неисправностей.[49]

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

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

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

Обычно этот уровень приемочного тестирования включает следующие четыре типа[46]:

  • Приемочное тестирование пользователей
  • Операционные приемочные испытания
  • Контрактные и нормативные приемочные испытания
  • Альфа и бета-тестирование

Приемочное тестирование пользователей, а также альфа- и бета-тестирование описаны ниже. # Типы тестирования раздел.

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

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

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

Типы, техники и тактика тестирования

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

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

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

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

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

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

Дым и проверка на вменяемость

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Программное обеспечение часто локализуют путем перевода списка струны вне контекста, и переводчик может выбрать неправильный перевод для неоднозначной исходной строки.
  • Техническая терминология может стать непоследовательной, если проект переводят несколько человек без должной координации или если переводчик неосторожен.
  • Дословный дословный перевод может показаться неуместным, искусственным или слишком техническим для целевого языка.
  • Непереведенные сообщения на языке оригинала могут быть оставлены жестко закодированный в исходном коде.
  • Некоторые сообщения могут создаваться автоматически на время выполнения и результирующая строка может быть грамматически неверной, функционально неверной, вводящей в заблуждение или сбивающей с толку.
  • Программное обеспечение может использовать Сочетание клавиш не имеет функции на исходном языке раскладка клавиатуры, но используется для набора символов в раскладке целевого языка.
  • Программное обеспечение может не поддерживать кодировка символов целевого языка.
  • Шрифты и размеры шрифтов, подходящие для исходного языка, могут не подходить для целевого языка; Например, CJK персонажи может стать нечитаемым, если шрифт слишком мелкий.
  • Строка на целевом языке может быть длиннее, чем может обработать программа. Это может сделать строку частично невидимой для пользователя или вызвать сбой или сбой программного обеспечения.
  • В программном обеспечении может отсутствовать надлежащая поддержка чтения или записи. двунаправленный текст.
  • Программное обеспечение может отображать изображения с нелокализованным текстом.
  • Локализованные операционные системы могут иметь другое название system файлы конфигурации и переменные среды и разные форматы даты и валюта.

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

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

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

A / B тестирование

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

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

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

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

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

Тестирование сравнения выходов

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

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

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

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

  • после разработки функциональности, но до ее отправки заказчику.[66] Эта практика часто приводит к тому, что фаза тестирования используется как проект буфер, чтобы компенсировать задержки проекта, тем самым снижая время, затрачиваемое на тестирование.[13]:145–146
  • в этот же момент начинается разработка проекта, как непрерывный процесс, пока проект не будет завершен.[67]

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

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

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

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

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

Образец цикла тестирования

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Класс I: существует конечный полный набор тестов.
  • Класс II: любая частичная степень различения (т.е. любая неполная способность отличать правильные системы от неправильных) может быть достигнута с помощью конечного набора тестов.
  • Класс III: существует счетный полный набор тестов.
  • Класс IV: существует полный набор тестов.
  • Класс V: все случаи.

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

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

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

План тестирования
А план тестирования - это документ, в котором подробно описывается подход, который будет использоваться для предполагаемых действий по тестированию. План может включать такие аспекты, как цели, объем, процессы и процедуры, требования к персоналу и планы действий в чрезвычайных ситуациях.[43] План тестирования может иметь форму единого плана, который включает все типы тестирования (например, план приемки или тестирования системы) и соображения планирования, или он может быть выпущен в виде основного плана тестирования, который предоставляет обзор более чем одного подробного теста. план (план плана).[43] В некоторых случаях план тестирования может быть частью широкого "стратегия тестирования "который документирует общие подходы к тестированию, который сам по себе может быть основным планом тестирования или даже отдельным артефактом.
Матрица прослеживаемости
А матрица прослеживаемости представляет собой таблицу, которая сопоставляет требования или проектные документы с тестовыми документами. Он используется для изменения тестов при изменении связанных исходных документов, для выбора тестовых примеров для выполнения при планировании регрессионных тестов с учетом покрытия требований.
Прецедент
А прецедент обычно состоит из уникального идентификатора, ссылок на требования из проектной спецификации, предварительных условий, событий, последовательности шагов (также известных как действия), которые необходимо выполнить, ввода, вывода, ожидаемого результата и фактического результата. С клинической точки зрения тестовый пример - это исходные данные и ожидаемый результат.[73] Это может быть кратко, например «для условия x полученный результат y», хотя обычно тестовые примеры более подробно описывают входной сценарий и ожидаемые результаты. Иногда это может быть серия шагов (но часто шаги содержатся в отдельной тестовой процедуре, которую можно проводить с несколькими тестовыми примерами из соображений экономии), но с одним ожидаемым результатом или ожидаемым результатом. Необязательные поля - это идентификатор тестового примера, шаг теста или номер порядка выполнения, связанные требования, глубина, категория теста, автор и флажки, указывающие, является ли тест автоматическим и автоматизированным. Более крупные тестовые примеры могут также содержать предварительные состояния или шаги и описания. Тестовый пример также должен содержать место для фактического результата. Эти шаги можно сохранить в документе текстового процессора, электронной таблице, базе данных или других общих репозиториях. В системе баз данных вы также можете увидеть результаты прошлых тестов, кто их создал, и какая конфигурация системы использовалась для получения этих результатов. Эти прошлые результаты обычно хранятся в отдельной таблице.
Тестовый сценарий
А тестовый сценарий представляет собой процедуру или программный код, который копирует действия пользователя. Первоначально термин был получен от продукта работы, созданного инструментами автоматического регрессионного тестирования. Тестовый пример будет базовым для создания тестовых сценариев с использованием инструмента или программы.
Тестирование
Наиболее распространенный термин для набора тестовых примеров - это тестирование. Набор тестов часто также содержит более подробные инструкции или цели для каждого набора тестовых примеров. В нем определенно есть раздел, в котором тестировщик определяет конфигурацию системы, используемую во время тестирования. Группа тестовых примеров также может содержать предварительные состояния или шаги и описания следующих тестов.
Испытательное приспособление или тестовые данные
В большинстве случаев несколько наборов значений или данных используются для проверки одной и той же функциональности определенной функции. Все тестовые значения и изменяемые компоненты окружающей среды собираются в отдельные файлы и хранятся как тестовые данные. Также полезно предоставить эти данные клиенту и вместе с продуктом или проектом. Есть методы создания данные испытаний.
Испытательная привязь
Программное обеспечение, инструменты, образцы ввода и вывода данных и конфигурации все вместе именуются тестовая привязь.
Тестовый забег
Отчет о результатах выполнения тестового примера или набора тестов

Сертификаты

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

Полемика

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

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

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

Стоимость устранения дефектаВремя обнаружено
ТребованияАрхитектураСтроительствоСистемный тестПост-релиз
Время введеноТребования5–10×10×10–100×
Архитектура10×15×25–100×
Строительство10×10–25×

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

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

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

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

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

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

  • Проверка: правильно ли мы создали программное обеспечение? (т.е. выполняет ли он требования).
  • Проверка: правильно ли мы создали программное обеспечение? (т.е. удовлетворяют ли результаты поставки заказчика).

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

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

И, согласно стандарту 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 г.). «Тестирование программного обеспечения» (курсовая работа). Университет Карнеги Меллон. Получено Двадцать первое ноября, 2017.
  3. ^ Лейтнер, Андреас; Чупа, Илинка; Ориоль, Мануэль; Мейер, Бертран; Фива, Арно (сентябрь 2007 г.). Разработка, управляемая контрактом = Разработка через тестирование - Написание тестовых примеров (PDF). ESEC / FSE'07: Европейская конференция по разработке программного обеспечения и симпозиум ACM SIGSOFT по основам программной инженерии 2007. Дубровник, Хорватия. Получено 8 декабря, 2017.
  4. ^ а б c Канер, Джем; Фальк, Джек; Нгуен, Хунг Куок (1999). Тестирование компьютерного программного обеспечения, 2-е изд.. Нью-Йорк и др .: John Wiley and Sons, Inc. ISBN  978-0-471-35846-6.
  5. ^ а б Колава, Адам; Хейзинга, Дорота (2007). Автоматизированное предотвращение дефектов: передовой опыт управления программным обеспечением. Пресса компьютерного общества Wiley-IEEE. ISBN  978-0-470-04212-0.
  6. ^ а б «Программа для сертифицированных тестеров базового уровня» (pdf). Международная квалификационная комиссия по тестированию программного обеспечения. 31 марта 2011 г. Раздел 1.1.2.. Получено 15 декабря, 2017.
  7. ^ «Программа для сертифицированных тестеров базового уровня» (PDF). Международная квалификационная комиссия по тестированию программного обеспечения. 1 июля 2005 г. Принцип 2, раздел 1.3. Получено 15 декабря, 2017.
  8. ^ Рамлер, Рудольф; Копецкий, Теодорих; Платц, Вольфганг (17 апреля 2012 г.). Комбинаторный дизайн тестов в TOSCA Testsuite: извлеченные уроки и практическое применение. Пятая международная конференция IEEE по тестированию и проверке программного обеспечения (ICST). Монреаль, Квебек, Канада. Дои:10.1109 / ICST.2012.142.
  9. ^ «Экономические последствия неадекватной инфраструктуры для тестирования программного обеспечения» (PDF). Национальный институт стандартов и технологий. Май 2002 г.. Получено 19 декабря, 2017.
  10. ^ Шарма, Бхарадвадж (апрель 2016 г.). «Технологии Ardentia: предоставление передовых программных решений и комплексных услуг по тестированию». CIO Обзор (Издание Индии). Получено 20 декабря, 2017.
  11. ^ Гельперин, Давид; Хетцель, Билл (1 июня 1988 г.). «Рост тестирования программного обеспечения». Коммуникации ACM. 31 (6): 687–695. Дои:10.1145/62959.62965. S2CID  14731341.
  12. ^ Грегори, Джанет; Криспин, Лиза (2014). Более гибкое тестирование. Эддисон-Уэсли Профессионал. С. 23–39. ISBN  9780133749564.
  13. ^ а б c Майерс, Гленфорд Дж. (1979). Искусство тестирования программного обеспечения. Джон Уайли и сыновья. ISBN  978-0-471-04328-7.
  14. ^ а б Graham, D .; Van Veenendaal, E .; Эванс, И. (2008). Основы тестирования программного обеспечения. Cengage Learning. С. 57–58. ISBN  9781844809899.
  15. ^ а б c d Оберкампф, W.L .; Рой, Си-Джей (2010). Проверка и проверка в научных вычислениях. Издательство Кембриджского университета. С. 154–5. ISBN  9781139491761.
  16. ^ Ли, Д .; Netravali, A.N .; Sabnani, K.K .; Sugla, B .; Джон, А. (1997). «Пассивное тестирование и приложения для управления сетью». Труды Международной конференции 1997 г. по сетевым протоколам. IEEE Comput. Soc: 113–122. Дои:10.1109 / icnp.1997.643699. ISBN  081868061X. S2CID  42596126.
  17. ^ Джем Канер "Учебное пособие по исследовательскому тестированию ", стр.2
  18. ^ Джем Канер, Учебное пособие по исследовательскому тестированию, п. 36.
  19. ^ а б c d Лимай, М. (2009). Тестирование программного обеспечения. Тата Макгроу-Хилл Образование. С. 108–11. ISBN  9780070139909.
  20. ^ а б c d Салех, К.А. (2009). Программная инженерия. Издательство Дж. Росс. С. 224–41. ISBN  9781932159943.
  21. ^ а б c Ammann, P .; Оффутт, Дж. (2016). Введение в тестирование программного обеспечения. Издательство Кембриджского университета. п. 26. ISBN  9781316773123.
  22. ^ Everatt, G.D .; Маклеод младший, Р. (2007). «Глава 7: Функциональное тестирование». Тестирование программного обеспечения: тестирование на протяжении всего жизненного цикла разработки программного обеспечения. Джон Вили и сыновья. С. 99–121. ISBN  9780470146347.
  23. ^ а б Корнетт, Стив (ок. 1996). «Анализ покрытия кода». Технология тестирования "яблочко". Вступление. Получено Двадцать первое ноября, 2017.
  24. ^ а б Блэк, Р. (2011). Прагматичное тестирование программного обеспечения: стать эффективным и действенным профессионалом в области тестирования. Джон Вили и сыновья. С. 44–6. ISBN  9781118079386.
  25. ^ В качестве простого примера C функция int ж(int Икс){возвращаться Икс*Икс-6*Икс+8;} состоит всего из одного утверждения. Все тесты соответствуют спецификации ж(Икс)>=0 будет успешным, кроме случаев, когда Икс=3 оказывается выбранным.
  26. ^ Вера-Перес, Оскар Луис; Данглот, Бенджамин; Монперрус, Мартин; Бодри, Бенуа (2018). «Комплексное исследование псевдопроверенных методов». Эмпирическая разработка программного обеспечения. 24 (3): 1195–1225. arXiv:1807.05030. Bibcode:2018arXiv180705030V. Дои:10.1007 / s10664-018-9653-2. S2CID  49744829.
  27. ^ Паттон, Рон (2005). Тестирование программного обеспечения (2-е изд.). Индианаполис: Издательство Сэмс. ISBN  978-0672327988.
  28. ^ Лэйкок, Гилберт Т. (1993). Теория и практика тестирования программного обеспечения на основе спецификаций (PDF) (диссертация). Департамент компьютерных наук, Университет Шеффилда. Получено 2 января, 2018.
  29. ^ Бах, Джеймс (Июнь 1999 г.). «Тестирование на основе рисков и требований» (PDF). Компьютер. 32 (6): 113–114. Получено 19 августа, 2008.
  30. ^ Савенков, Роман (2008). Как стать тестировщиком программного обеспечения. Роман Савенков Консультации. п. 159. ISBN  978-0-615-23372-7.
  31. ^ Матур, А.П. (2011). Основы тестирования программного обеспечения. Pearson Education India. п. 63. ISBN  9788131759080.
  32. ^ а б Клапп, Джудит А. (1995). Контроль качества программного обеспечения, анализ ошибок и тестирование. п. 313. ISBN  978-0815513636. Получено 5 января, 2018.
  33. ^ Матур, Адитья П. (2007). Основы тестирования программного обеспечения. Pearson Education India. п. 18. ISBN  978-8131716601.
  34. ^ Лённберг, янв (7 октября 2003 г.). Визуальное тестирование программного обеспечения (PDF) (MSc). Хельсинкский технологический университет. Получено 13 января, 2012.
  35. ^ Чима, Распал. «Визуальное тестирование». Журнал ТЕСТ. Архивировано из оригинал 24 июля 2012 г.. Получено 13 января, 2012.
  36. ^ а б c Льюис, W.E. (2016). Тестирование программного обеспечения и постоянное улучшение качества (3-е изд.). CRC Press. С. 68–73. ISBN  9781439834367.
  37. ^ а б Ransome, J .; Мисра, А. (2013). Базовая безопасность программного обеспечения: безопасность у источника. CRC Press. С. 140–3. ISBN  9781466560956.
  38. ^ «Инструменты тестирования SOA для черного, белого и серого ящиков» (белая бумага). Перекрестная проверка сетей. Архивировано из оригинал 1 октября 2018 г.. Получено 10 декабря, 2012.
  39. ^ Бурк, Пьер; Фэрли, Ричард Э., ред. (2014). «Глава 5». Руководство к своду знаний по программной инженерии. 3.0. Компьютерное общество IEEE. ISBN  978-0-7695-5166-1. Получено 2 января, 2018.
  40. ^ Bourque, P .; Fairley, R.D., eds. (2014). «Глава 4: Тестирование программного обеспечения» (PDF). SWEBOK v3.0: Руководство по сводам знаний по программной инженерии. IEEE. С. 4–1–4–17. ISBN  9780769551661. Получено 13 июля, 2018.
  41. ^ Дули, Дж. (2011). Разработка программного обеспечения и профессиональная практика. АПресс. С. 193–4. ISBN  9781430238010.
  42. ^ Вигерс, К. (2013). Создание культуры программной инженерии. Эддисон-Уэсли. С. 211–2. ISBN  9780133489293.
  43. ^ а б c Льюис, W.E. (2016). Тестирование программного обеспечения и постоянное улучшение качества (3-е изд.). CRC Press. С. 92–6. ISBN  9781439834367.
  44. ^ Machado, P .; Винченци, А .; Мальдонадо, Дж. К. (2010). «Глава 1: Тестирование программного обеспечения: обзор». In Borba, P .; Cavalcanti, A .; Sampaio, A .; Woodcook, J. (ред.). Методы тестирования в программной инженерии. Springer Science & Business Media. С. 13–14. ISBN  9783642143342.
  45. ^ Clapp, J.A .; Stanten, S.F .; Peng, W.W .; и другие. (1995). Контроль качества программного обеспечения, анализ ошибок и тестирование. Nova Data Corporation. п. 254. ISBN  978-0815513636.
  46. ^ а б c "Программа ISTQB CTFL 2018". ISTQB - Международная квалификационная комиссия по тестированию программного обеспечения.
  47. ^ Биндер, Роберт В. (1999). Тестирование объектно-ориентированных систем: объекты, шаблоны и инструменты. Эддисон-Уэсли Профессионал. п.45. ISBN  978-0-201-80938-1.
  48. ^ Байзер, Борис (1990). Методы тестирования программного обеспечения (Второе изд.). Нью-Йорк: Ван Ностранд Рейнхольд. С. 21, 430. ISBN  978-0-442-20672-7.
  49. ^ Сюань, Цзифэн; Монперрус, Мартин (2014). «Очистка тестовых примеров для улучшения локализации неисправностей». Материалы 22-го Международного симпозиума ACM SIGSOFT по основам программной инженерии - FSE 2014: 52–63. arXiv:1409.3176. Bibcode:2014arXiv1409.3176X. Дои:10.1145/2635868.2635906. ISBN  9781450330565. S2CID  14540841.
  50. ^ IEEE (1990). Стандартный компьютерный словарь IEEE: Сборник стандартных компьютерных глоссариев IEEE. Нью-Йорк: IEEE. ISBN  978-1-55937-079-0.
  51. ^ Вудс, Энтони Дж. (5 июня 2015 г.). «Эксплуатационная приемка - применение стандарта тестирования программного обеспечения ISO 29119» (Белая бумага). Capgemini Австралия. Получено 9 января, 2018.
  52. ^ Канер, Джем; Бах, Джеймс; Петтихорд, Брет (2001). Уроки, извлеченные при тестировании программного обеспечения: контекстно-зависимый подход. Вайли. стр.31 –43. ISBN  9780471081128.
  53. ^ Амманн, Пауль; Оффатт, Джефф (28 января 2008 г.). Введение в тестирование программного обеспечения. Издательство Кембриджского университета. п. 215. ISBN  978-0-521-88038-1. Получено 29 ноября, 2017.
  54. ^ Данглот, Бенджамин; Вера-Перес, Оскар Луис; Бодри, Бенуа; Монперрус, Мартин (2019). «Улучшение автоматического тестирования с DSpot: исследование с десятью зрелыми проектами с открытым исходным кодом». Эмпирическая разработка программного обеспечения. 24 (4): 2603–2635. arXiv:1811.08330. Дои:10.1007 / s10664-019-09692-у. S2CID  53748524.
  55. ^ Данглот, Бенджамин; Вера-Перес, Оскар; Юй Чжунсин; Зайдман, Энди; Монперрус, Мартин; Бодри, Бенуа (ноябрь 2019 г.). «Растущее число литературных исследований по усилению тестов» (PDF). Журнал систем и программного обеспечения. 157: 110398. arXiv:1705.10692. Дои:10.1016 / j.jss.2019.110398. S2CID  20959692.
  56. ^ «Стандартный глоссарий терминов, используемых при тестировании программного обеспечения» (PDF). Версия 3.1. Международная квалификационная комиссия по тестированию программного обеспечения. Получено 9 января, 2018.
  57. ^ О'Рейли, Тим (30 сентября 2005 г.). «Что такое Web 2.0». O’Reilly Media. Раздел 4. Окончание цикла выпуска программного обеспечения. Получено 11 января, 2018.
  58. ^ Ауэрбах, Адам (3 августа 2015 г.). «Часть конвейера: почему так важно непрерывное тестирование». TechWell Insights. TechWell Corp. Получено 12 января, 2018.
  59. ^ Филипп-Эдмондс, Кэмерон (5 декабря 2014 г.). «Взаимосвязь между риском и непрерывным тестированием: интервью с Уэйном Ариолой». Stickyminds. Получено 16 января, 2018.
  60. ^ Ариола, Уэйн; Данлоп, Синтия (октябрь 2015 г.). DevOps: вы быстрее сообщаете клиентам ошибки? (PDF). Конференция по качеству программного обеспечения Тихоокеанского Северо-Запада. Получено 16 января, 2018.
  61. ^ Тарун, Нагар (7 июля 2020 г.). «DevOps и QA: какова реальная цена качества?». Devtechnosys.com.
  62. ^ Ауэрбах, Адам (2 октября 2014 г.). "Сдвиг влево и поставь качество на первое место". TechWell Insights. TechWell Corp. Получено 16 января, 2018.
  63. ^ «Раздел 4.38». ISO / IEC / IEEE 29119-1: 2013 - Разработка программного обеспечения и систем - Тестирование программного обеспечения - Часть 1 - Понятия и определения. Международная организация по стандартизации. Получено 17 января, 2018.
  64. ^ «Пошаговая глобализация: готовый к использованию подход к тестированию. Сеть разработчиков Microsoft». Msdn.microsoft.com. Получено 13 января, 2012.
  65. ^ Канер, Джем; Фальк, Джек; Нгуен, Хунг К. (26 апреля 1999 г.). Тестирование компьютерного программного обеспечения. Джон Вили и сыновья. ISBN  9780471358466.
  66. ^ «Жизненный цикл тестирования программного обеспечения». etestinghub. Этап тестирования при тестировании программного обеспечения. Получено 13 января, 2012.
  67. ^ Дастин, Эльфриде (2002). Эффективное тестирование программного обеспечения. Эддисон-Уэсли Профессионал. п. 3. ISBN  978-0-201-79429-8.
  68. ^ Браун, Крис; Кобб, Гэри; Калбертсон, Роберт (12 апреля 2002 г.). Введение в быстрое тестирование программного обеспечения.
  69. ^ а б "Что такое разработка через тестирование (TDD)?". Agile Alliance. 5 декабря 2015 г.. Получено 17 марта, 2018.
  70. ^ «Разработка через тестирование и непрерывная интеграция мобильных приложений». msdn.microsoft.com. Получено 17 марта, 2018.
  71. ^ Родригес, Исмаэль; Ллана, Луис; Рабанал, Пабло (2014). «Общая теория тестируемости: классы, свойства, сложность и сокращения тестирования». IEEE Transactions по разработке программного обеспечения. 40 (9): 862–894. Дои:10.1109 / TSE.2014.2331690. ISSN  0098-5589. S2CID  6015996.
  72. ^ Родригес, Исмаэль (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.
  73. ^ IEEE (1998). Стандарт IEEE для документации по тестированию программного обеспечения. Нью-Йорк: IEEE. ISBN  978-0-7381-1443-9.
  74. ^ Стром, Дэвид (1 июля 2009 г.). «Мы все - часть истории». Совместное тестирование программного обеспечения и производительность. Архивировано из оригинал 31 августа 2009 г.
  75. ^ Гриффитс, М. (2005). «Обучение гибкому управлению проектами в PMI». Конференция по гибкой разработке (ADC'05). ieee.org. С. 318–322. Дои:10.1109 / ADC.2005.45. ISBN  0-7695-2487-7. S2CID  30322339.
  76. ^ Уиллисон, Джон С. (апрель 2004 г.). «Гибкая разработка программного обеспечения для гибкой силы». CrossTalk. STSC (апрель 2004 г.). Архивировано из оригинал 29 октября 2005 г.
  77. ^ Примером может служить Марк Фьюстер, Дороти Грэм: Автоматизация тестирования программного обеспечения. Эддисон Уэсли, 1999, ISBN  0-201-33140-3.
  78. ^ "stop29119". commonsensetesting.org. Архивировано из оригинал 2 октября 2014 г.
  79. ^ Пол Крилл (22 августа 2014 г.). «Тестировщики программного обеспечения возражают против предложения стандартов ISO 29119». InfoWorld.
  80. ^ Канер, Джем (2001). «Предложение о предоставлении гранта NSF, чтобы заложить основу для значительного улучшения качества академических и коммерческих курсов по тестированию программного обеспечения.'" (PDF).
  81. ^ Канер, Джем (2003). Измерение эффективности тестировщиков программного обеспечения (PDF). СТАР Восток. Получено 18 января, 2018.
  82. ^ МакКоннелл, Стив (2004). Код завершен (2-е изд.). Microsoft Press. п.29. ISBN  978-0735619678.
  83. ^ Боссавит, Лоран (20 ноября 2013 г.). Лепреконы программной инженерии: как фольклор превращается в факт и что с этим делать. Глава 10: Leanpub.CS1 maint: location (связь)
  84. ^ Тран, Eushiuan (1999). «Проверка / Подтверждение / Сертификация» (курсовая работа). Университет Карнеги Меллон. Получено 13 августа, 2008.

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

внешняя ссылка