Главная цель этой проблемно-постановочной статьи – обращение к теоретическим основам Тестирования ПО, т.е. чёткое построение оригинальных базовых понятий или определений и поиск смыслов. Основная проблема, с которой приходилось бороться при написании,- соскальзывание из изложения теоретических аспектов в плоскость практической методологии.

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

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

Определение_2. Тестирование – это способ сбора измеряемых характеристик Объекта, включая информацию о его способностях изменять своё состояние в зависимости от начальных условий и воздействия.

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

Определение_4. Требование – это часть или совокупность статических и динамических атрибутов и свойств, которые обобщены в критерии оценки способности Объекта выполнять определённое предназначение в соответствующих условиях эксплуатации.

Примечание_2. Архитектурно, ПО разделяется на функциональные модули, из которых складываются отдельные подсистемы, которые объединяются в системы и программные комплексы, физически (или виртуально) работающие на распределённом оборудовании. Обычно здесь имеет место декомпозиция, когда для достижения конкретной(ых) цели(ей) решается совокупность задач, результат каждой получается на основе конкретного алгоритма, в котором можно выделить ветви, для прохода по которым требуется выполнять команды, управляя потоком исполнения и инициируя исполнение операций, которые, соответственно доступу, способны обрабатывать/изменять сущности. К упомянутым целям добавим обеспечение гибкого, отказоустойчивого, тестопригодного построения с минимизацией изменений при смене/добавлении требований.

Определение_5. Тестопригодность — это наличие у Объекта (см. Примечание_3) таких важных свойств, как управляемость, наблюдаемость и покрываемость.

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

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

Определение_8. Покрываемость — это свойство Объекта быть проверенным конечным множеством Эквивалентных тестов.

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

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

Определение_10. Дефект (defect) — это факт отклонения конкретной характеристики/поведения разработанного ПО от предъявляемых требований, их описания в рабочей документации; объективная несовместимость решения с предметной областью; отклонение от действующих локальных Стандартов и Законов; несоответствие корпоративным требованиям разработки ПО; субъективные замечания, относящиеся к негативным прецедентам (см. Примечание_4).

Примечание_4. Практически невозможно подробно описать в рабочей документации всё, что должно и не должно делать ПО. Поэтому на разных стадиях жизненного цикла имеют место наблюдения/ситуации, которые непонятно как трактовать. Когда такое выявляется впервые – это Инцидент (incident), а после того, когда согласованно принимается решение, дефект это или нет, тогда это «нечто» становится Прецедентом (рrecedent) для идентификации повторных подобных случаев. Т.о. формируется практика прецедентов, закрывающая “дыры” документации.

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

Определение_11. Задача на тестирование ПО – это артефакт (элемент регламента), содержащий: цели тестирования; необходимые стадии решения и выделенные на них сроки и ресурсы; краткое описание тестового ландшафта и данных доступа к его компонентам (со ссылкой на Задачу по его подготовке для Администратора); описание Объекта тестирования с подлежащими проверке требованиями (со ссылками на соответствующие разделы рабочей документации и Задачи Разработчикам, выполнение которых будет проверяться); условий неудовлетворительного состояния Объекта тестирования, при которых решение задачи прерывается; требуемого формата для отчета о результатах проведённых работ, включая необходимые метрики и статистику, которые необходимо собрать/предоставить.

Определение_12. Тестирование ПО – это процесс решения поставленной Задачи на тестирование ПО. Его начало – это момент получения в работу задачи на тестирование. Окончание тестирования определено сроками из поставленной задачи (или по условиям). Этот процесс состоит из стадий: обследования (см. Примечание_6); планирования (см. Примечание_7); испытаний (включая регистрацию Дефектов, Проблем, предложений Усовершенствования, см. Определение_21..23); оформления результатов (составление отчета и выделение подпокрытия для регрессии, и для приёмо-сдаточных испытаний в будущем).

Примечание_6. Обследование в тестировании – это стадия экспертизы задания и углубленного погружения в его контекст, в результате чего формируются ранжированный по важности, рискам и взаимозависимости полный спектр того, что надо проверить, понимание о методике (что/где/когда/каким образом делать и наблюдать), представление о подходящем инструментарии, с помощью которого можно испытывать или измерять конкретные характеристики или собирать статистику. Замечание: Важность и Риски (см. Определение_19, 20) — это атрибуты, оценки которых должны быть близки к объективным, они согласовываются с компетентными специалистами (или ими предоставляются).

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

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

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

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

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

Примечание_10. Ошибка может быть свойственна не только Исполнителю ПО, но и Заказчику или Пользователю.

Определение_15. Баг (bug) – это факт непреднамеренного некорректно выполненного кодирования программы, заключенный в её тексте, вызывающий (после сборки и развертывания программы в рабочем ландшафте) отклонение от требований к работе ПО.

Примечание_11. Парадоксальная и очень нежелательная ситуация, когда два Бага в программе могут друг друга компенсировать, не выявляясь.

Примечание_12. Тестировщик по методике «Белый ящик» находит Баги, а тестируя «Чёрным ящиком», обнаруживает Дефекты.

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

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

Определение_17. Авария (accident) — это факт выхода из строя аппаратных средств или серьёзных нарушений в работе системного или прикладного ПО (например, завершился срок действия лицензии или сертификата) на Серверной стороне или сети/связи или на стороне Пользователя, т.е. ситуация при которой ПО объективно не работоспособно.

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

Примечание_14. В случае Аварии или глобального Сбоя, действительно, ПО может быть объективно не работоспособно. Но! Принцип суперпозиции позволяет выделять модули, которые можно резервировать или применять специальные технологии отказоустойчивости.

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

Определение_19. Риск (risk) – это количественная оценка последствий выбора альтернативы решения в условиях неопределённости.

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

Определение_21. Описание Дефекта (bug-report) — это зарегистрированное сообщение, основным содержанием которого является информация о сути наблюдаемого у Объекта тестирования отклонения от эталона (ожидаемой реализации) и чёткое описание условий и действий для его повторного наблюдения, по возможности, дополненное локализацией Бага в программе.

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

Определение_23. Описание Усовершенствования (enhancement) — это зарегистрированное сообщение, содержащее предложение о необходимости изменения/дополнения ПО (и соответственно требования в рабочей документации) для его удобной и эффективной эксплуатации/администрирования.

Примечание_16. Детали формата и содержания для сущностей из Определений_21..23 регламентируется отдельно.

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

Комментарии (27)


  1. eandr_67
    07.09.2017 12:32

    1. Наука — это доказательство правильности ПО: логика Хоара и более поздние формальные системы.

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


    1. testopatolog Автор
      07.09.2017 14:18

      1. Наука — это синтез знаний об Объекте изучения, систематизированных понятий, законов и гипотез. Объект изучения может быть один, Вы его назвали — ПО, а наук, его изучающих, много. Различаются эти науки предметом своего изучения.
      2. В тексте статьи содержится утверждение, цитирую: «что идеального ПО не существует». Раскрывая понятие тестопригодность, подразумевал, что покрываемость ПО – это свойство, необходимое для его корректной проверки. Противоречий с Вашим утверждением не наблюдается.


      1. eandr_67
        07.09.2017 15:43

        Я назвал??? Назвали Вы. Я всего лишь воспользовался Вашим термином.

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


        1. testopatolog Автор
          07.09.2017 16:11

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


          1. eandr_67
            07.09.2017 17:54

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


            1. testopatolog Автор
              07.09.2017 18:14

              Замечу, программы с прикладным математическим обеспечением требуют особого тестирования.


  1. tundrawolf_kiba
    07.09.2017 17:09

    Определением базовых понятий занимается, к примеру, ISTQB. А для сравнения — какие проблемы может решить ваш подход, которые не решает ISTQB?


    1. testopatolog Автор
      07.09.2017 17:47
      -1

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


      1. tundrawolf_kiba
        07.09.2017 20:22
        +1

        Я к тому, что если один стандарт на данный момент успешно решает какие-то проблемы, то может не стоит плодить стандарты без необходимости?


        1. Vkuvaev
          08.09.2017 00:01

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


          1. Vkuvaev
            08.09.2017 10:51

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


            1. testopatolog Автор
              08.09.2017 13:24

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


              1. Vkuvaev
                08.09.2017 19:24

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


                1. testopatolog Автор
                  08.09.2017 21:10

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


                  1. testopatolog Автор
                    08.09.2017 21:40

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


                    1. Vkuvaev
                      09.09.2017 10:34

                      Добро пожаловать в новый чудесный мир:) Сходите, если возможно и если Вы в Москве, на две конференции, ITSМF вот уже скоро, и на Гайзенбаг в декабре. Просто послушайте, любой разговор базируется на специфическом профессиональном языке, как только встречается отклонение в терминологии, в глаза бросается снижение эффективности коммуникации. Если Вы используете придуманные термины для себя, не вопрос, но будте готовы, что никто не станет их использовать кроме Вас, поскольку нет внятного описания чем это подход лучше существующих. Напротив, явно видны минусы. Устраните минусы, обозначьте плюсы, тогда это вызовет интерес.


                    1. testopatolog Автор
                      09.09.2017 10:42

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


                  1. Vkuvaev
                    09.09.2017 10:22

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


                1. testopatolog Автор
                  09.09.2017 13:25

                  Пожалуйста, синтезируйте два моих определения из статьи: «Определение_16. Проблема (problem)» и артефакта её регистрации «Определение_22. Описание Проблемы (issue)», затем попробуйте указать на противоречия с ITIL.


  1. testopatolog Автор
    07.09.2017 21:07

    Земля стоит на панцире гигантской Черепахи. Черепаха эта лежит на спинах трёх Слонов. А Слоны стоят на трёх Китах, плавающих во Всемирном океане…
    ВОПРОС: похоже, что я спорю, что Слонов четыре?!


    1. Vkuvaev
      07.09.2017 23:56

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


    1. tundrawolf_kiba
      08.09.2017 12:54

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


      1. testopatolog Автор
        08.09.2017 15:49

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


  1. CoreTeamTech
    08.09.2017 15:55

    Мне кажется, что вы немного запутались в понимании разницы между Наукой и Технологией. Простого чтения определений в Вики достаточно. Но я бы хотел указать на то, что при попытке свести тестирование к науке, вы сведете его сначала к набору наук составляющих Computer Science, а потом, вдруг, осознаете, что все несовершенство идет от конкретной формализации требований. В попытках найти «Священный Грааль» правильных спецификаций и документации, вы осознаете, что для того, чтобы убрать субъективность автора спецификации и возможные лингвистические ловушки, необходимо иметь некий формальный язык описания требований. Который, внезапно, будет иметь в основе науки из того же набора что и Computer Science. И более того, процесс написания формализованных спецификаций окажется неотличимым от процесса, собственно, кодирования. И вроде как, его результаты тоже надо тестировать. Так или иначе, но тестирование — это воспроизведение уже проделанной работы, в идеале с меньшими затратами. Теория теста всегда содержится в формализации задачи (тестовый набор данных выведенный из теории алгоритма, сценарий поведения пользователя из постановки задачи, и т.п.).


    1. testopatolog Автор
      09.09.2017 21:12

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


  1. lxsmkv
    10.09.2017 03:35

    Вот если бы вы для каждого определения указали какие авторы придерживаются этого определения… а так, это ненаучный подход ;)
    Я видел такие книги по тестированию, которые придерживаются академической манеры, но они бесполезны когда нужно ответить себе на вопрос «а что нужно протестировать (а что не нужно)» и «а как мoжно это протестироватъ».
    Это также бесполезно как дискуссии на тему «Что мы делаем за тестирование?», юнит, системное или интеграционное. Да, называй как хочешь — ты качество давай. Программа или соответствует ожиданиям пользователя или нет. Определения не добавляют качества в продукт.
    Ну и кроме того, теоретическую базу по методологии проведения тестирования хорошо дает Design of Experiments (DoE), как мне кажется. На пользу этих знаний для тестировщика например J.Bach указывал.


    1. testopatolog Автор
      10.09.2017 11:30

      1. Здесь, стараясь не умничать, ратую (в своей статье и комментариях) за абстрактное мышление, системный подход и научные методы в Тестировании ПО, и на «вход» читателю предлагаю свои мысли или точку зрения, а не рекламу литературы с мыслями других авторов.
      2. Согласен с вами, что книги бывают разные, каждая полезна для ума, редкая оказывается настольной. Только в статье поднимается немного другая проблема, не типа «посоветуйте, что почитать…»