Для чего нужен тест: Тесты в образовательном процессе. Зачем они нужны и как их применять на уроке.
Тесты в образовательном процессе. Зачем они нужны и как их применять на уроке.
Тестовая форма контроля на сегодняшний день является самой востребованной: она используется на ГИА и ЕГЭ. А потому, чем раньше мы начнем приобщать детей к такой форме проверки знаний, тем лучше они будут подготовлены к итоговой аттестации и различного рода испытаниям в тестовой форме.
Сейчас обучение в любом классе начинается с входного тестирования, сопровождается текущим контролем с помощью заданий в тестовой форме и заканчивается объективным тестированием учебных достижений.
Кроме того, тесты позволяют наладить самоконтроль — самую полезную для обучения и гуманную форму контроля знаний, а также организовать рейтинг — эффективное средство повышения учебной мотивации.
Немного истории…
Что такое задание в тестовой форме?
Педагогический тест – это система заданий специфической формы, определенного содержания, возрастающей трудности, позволяющая качественно оценить структуру и эффективно измерить уровень знаний, умений, навыков и представлений по любой учебной дисциплине.
Главные преимущества заданий в тестовой форме, по сравнению с задачами и вопросами, проявляются в краткости, логической структуре контрольного материала и в повышении учебно-технологических возможностей организации проверки знаний с помощью компьютеров.
Краткость обеспечивается тщательным подбором слов, символов, графиков, позволяющих минимумом средств добиваться ясности смысла содержания задания. Исключаются повторы, малопонятные, редко употребляемые, а также неизвестные для учащихся символы, слова, затрудняющие восприятие смысла. Примерное количество слов в заданиях – от трех до девяти. Хорошо, когда задания содержат не более одного придаточного предложения. Хорошо отработанная методика тестирования предполагает четкую и быструю различаемость правильных ответов и неправильных.
Логическое преимущество задания в тестовой форме заключается в возможности его естественного превращения в логическую форму истинного или ложного высказывания. Переход к высказывательной форме позволяет создавать задания по-новому, опираясь при этом на ряд методических принципов. Технологическое преимущество проявляется в их соответствии требованиям автоматизации рутинных компонентов обучения и контроля знаний. Задания в тестовой форме легко вводятся в компьютер, удобно и компактно проецируются на экран монитора, хорошо различаются по форме и воспринимаются по смыслу.
Помимо содержания к заданиям в тестовой форме предъявляются следующие требования:
- одинаковость для всех испытуемых, инструкции по выполнению каждого задания,
- адекватность инструкции форме и содержанию задания,
- краткость и четкость выражения мысли, инструкции и задания,
- формулирование заданий в логической форме высказывания,
- правильность расположения элементов задания,
- наличие определенного места для ответов,
- одинаковость правил оценки ответов учащихся в рамках принятой формы.
Поскольку в педагогическом тесте задания упорядочиваются по принципу возрастающей трудности, можно заметить, что одни испытуемые, имеющие слабую подготовку, «срезаются» уже на самом легком первом задании, другие, как правило, – на последующих. И только самые знающие в состоянии дать правильный ответ на задания самого высокого уровня трудности, расположенные в конце теста.
В классической теории тестов многие годы рассматривались только эмпирические показатели трудности. В новых вариантах психологических и педагогических теорий тестов больше внимания стало уделяться характеру умственной деятельности учащихся в процессе выполнения тестовых заданий различных форм. Ответ на задание педагогического теста представляет собой краткое суждение, связанное по содержанию и по форме с содержанием задания. Ответы к каждому заданию делятся на правильные и неправильные. Критерии правильности заранее определяются авторами теста.
Вероятность отбора правильного ответа зависит от соотношения уровня знаний испытуемого и уровня трудности задания. При наличии сопоставимых шкал, эту вероятность выражают значениями от нуля до единицы.
Методика конструирования тестовых заданий.
1.Принципы композиции заданий в тестовой форме.
2.Виды заданий в тестовой форме.
По форме все известные в теории и на практике тестовые задания можно разделить на четыре основные группы.
Подводим итоги.
Разработка государственных образовательных стандартов, внедрение новых технологий обучения и контроля знаний вновь, после длительного перерыва, привлекли интерес широкой педагогической общественности к тестам. Являясь частью многих педагогических новаций, тесты позволяют учителю повысить эффективность урока, оперативно и своевременно выявить пробелы в знаниях учащихся, вести систематическое наблюдение за уровнем усвоения школьниками программного материала. Тестовые задания могут быть использованы и в качестве индивидуального раздаточного материала для самостоятельной работы учащихся.
Надежда Дудник
Зачем нужно тестирование? — Хабр Q&A
Я лично думаю, что тесты — это образчик типично западного лицемерия — как в сказке Андерсена «Голый король». Тесты — это чушь собачья (точнее, чушь свинячья). Полезность тестов — вымышленна. Тесты были изобретены на Западе — и они чужды по духу русскому человеку — ввиду своего чудовищного (типично Западного) лицемерия. Сторонники тестов пытаются что-то там такое невразумительное говорить (в защиту тестов) — но никто им не торопится верить — отсюда, собственно, и появился данный вопрос на данном форуме — если бы полезность тестов была реальна — люди бы не спрашивали, зачем они нужны — а просто пользовались бы ими. Все, кто выступает в защиту тестов — я думаю, лишь послушно повторяют цитаты из западных учебников — вместо изложения своих собственных мыслей. Конечно, ведь так хотят работодатели — так как же можно выступить против них?Писать же тесты ДО написания кода — это вообще ВЕРХ абсурда. Неужели непонятно, НАСКОЛЬКО противоестественно это занятие? Это просто дичь какая-то. Даже сами западные авторы учебников по тестированию об этом пишут — я прочёл несколько западных учебников по тестированию, пытаясь найти хоть какой-то смысл в тестах — они пишут, что BDD хорошо не более чем в 20% случаев.
Использовать тесты как защиту на будущее — «если что-то поломается при новых правках»? Ну извините, а не слишком ли дорогая цена — для 90% проектов? Да, может быть, на каком-нибудь миллионно-посещаемом сайте это и оправдано экономически — но на подавляющем большинстве сайтов — едва ли.
И вообще — даже если и идея автоматизирования тестирования и носит разумное зерно — почему нужно СПЕЦИАЛЬНО вручную писать тесты? В лучшем случае, это должно быть сделано так: ты тестируешь РУКАМИ какую-то фичу — а программа при этом АВТОМАТИЧЕСКИ запоминает всю последовательность ручных тестировочных действий (и потом воспроизводит при нужде). Только так это имеет право выглядеть. Я немного утрирую, конечно — но суть в том, что это безумный абсурд — писать тесты руками — тратя на это уйму времени и генерируя тем самым новые ошибки.
Короче, я для себя лично пока что решил так: писать тесты только для западных заказчиков — чтобы их душа была спокойна. И делать тесты как можно правдоподобней при этом — максимально выдавая их под якобы действительно нужную и полезную вещь (с точки зрения западного менталитета). Вот моя чисто практическая рекомендация. У них там на Западе множество идиотизмов, не понятных (и чуждых) русскому человеку — и это один из них.
Так что я действительно искренне не понимаю — зачем нужны тесты — и считаю, что они и не нужны на самом деле — а нужны исключительно для введения в заблуждение западных заказчиков — и больше ни для чего. Во всяком случае, в том (нелепом) виде, в котором они (тесты) существуют сейчас. Я же свой код тестирую руками — и это намного лучше и эффективней тестов. Да, я не говорю, что я не тестирую свой код — тестирую обязательно (а как же без этого) — но только руками. Может быть, и есть в отдельных случаях смысл написать именно тест — если руками тяжело и долго воспроизводить тестировочно-проверочную последовательность действий — но это как исключительный случай. Западное же требование покрытия кода тестами под 80-90% — вообще полная чушь — бездумная и шаблонно-тупая. Они ведь там тоже не семи пядей во лбу — а главное, что на Западе категорически запрещено думать своей головой — это только в России пока позволено (и то не каждому, как очевидно).
Я против тестов (в нынешнем их виде). Тем более, я против TDD. Но я не против тестирования — но только ручного.
Излагайте свои доводы — но только СВОИ, а не где-то вычитанные.
В статье разобраны когда и зачем нужно тестирование как таковое и в каких случаях нужна его автоматизация.
В ходе дискуссии по этому вопросу, проводимой в клубе им. Френсиса Бекона (“ВебПосиделки КиФБ” в teleram), коллеги обменялись опытом и записали свои мысли.
Автоматизация тестирования нужна, если это приносит ценность. Когда же само тестирование приносит ценность? Выявлено два случая.
Если процесс отлавливает ошибки в ПО перед выкладкой на бой
Если тестирование новой версии выявило ошибки, которые были в последующем исправлены, то это тестирование было проведено не зря.
Но что если ситуация обратная? Если тестирование не нашло ошибки, но они проявились на бою? Если ошибки при этом были обнаружимы на тестовом стенде (в т.ч. тестовый стенд настроен наиболее близко к бою).
Утверждается, что в этом случае тестирование проведено некачественно.
Как измерять качество тестирования? Для этого случая пригодна метрика = количество ошибок на тестовом окружении / (количество ошибок на тестовом + боевом окружении). При этом количество ошибок берется взвешенное по уровню их критичности.
А что если тестирование не нашло ошибок и их не было обнаружено на боевом сервере?
Утверждается, что этом случае тестирование, как таковое, не принесло ценности и эти работы были сделаны зря (за исключением следующего случая, про который мы расскажем позже). С точки зрения Lean это потери.
Когда возможна такая ситуация? Когда тестируемый модуль не изменялся. Что может изменить модуль?
- Изменение кода модуля.
- Изменение версии используемых библиотек (включая ОС, БД и пр). Изменение может быть обусловлено требованиями регуляторов, из-за чего библиотеку требуется обновить в жестко заданные сроки.
- Изменение настроек или данных, серьезно влияющих на поведение универсального функционала, всестороннее тестирование которого провести избыточно трудоемко тяжело и от тестирования в итоге отказались. Примеры:
- Настройки промоакций в решениях типа Siebel CRM или Oracle ATG может привести к деградации производительности функционала расчета промо, а возможность всесторонней проверки невозможна в разумные сроки из-за излишней гибкости и универсальности этих решений
- html описание карточки товара может содержать нарушенную структуру документа или ошибки в написанном внутри описании js-кода, что ломает страницу карточки товара
- Применение функционала не предназначенным для этого способом (микроскопом гвозди забивать). Например, изменение типа нагрузки, не заложенное в требованиях и как следствие не учтенное при проведенном тестировании. К примеру, перед черной пятницей стоит провести отдельное нагрузочное тестирование на лендинг, куда будет идти трафик, если к этому типу страниц не было таких требований по нагрузке.
- Изменение поведения API других модулей, который использует разрабатываемый модуль. Особенно если функционал API не покрыт регрессионным тестированием.
Так как варианты изменений могут быть разные, а проведение полного регрессионного тестирования стоит денег, то стоит проводить не все тесты. Один из вариантов управления состоит в разметке тестов тегами и перед тестированием. Тест менеджер определяет какой набор тестов стоит направить на выполнение для заданной порции изменений.
Когда нужно писать автотесты в этом случае?
Начнем с того, что автоматизированное тестирование не отменяет тестирование постановки, тестирование дизайна и написания тест кейсов по постановке! И не заменяет их. Если этого нет, то и автоматизацией не следует заниматься. При этом под автотестами следует понимать не только само выполнение сценария, но и подготовку к их прогону и использование результатов.
Если писать автотесты после создания кода, то это приведет к увеличению time2market (что автоматически приведет к увеличению связного капитала). Поэтому если принято решение покрывать код автотестами, то следует писать эти автотесты параллельно основному коду, в парадигме разработки “TestFirst” или “TDD”.
Основная ценность создаваемая при этом автоматизацией тестирования — это сокращение time2market за счет более быстрой выкладки новой версии.
Тесты нужны для гарантии работоспособности критических процессов
Несмотря на то, что автомобиль ни разу не загорелся, тем не менее наличие огнетушителя в нем не бесполезно.
Ошибка на сайте с большим трафиком, не позволяющая добавлять товар в корзину, может привести к более значимым потерям, чем расходы на разработку и проведение тестирования этой функции за год.
Следовательно, нужно выделить критические процессы, которые войдут в регулярные проверки (которые стоит делать если происходит какое-то изменение). Сопоставлять следует:
- потери от простоя функции за время от обнаружения до его исправления,
- расходы ручное регулярное тестирование или на его автоматизацию и последующее его проведение в течении периода окупаемости.
А что если регулярное тестирование не находит ошибок в течении долгого времени и их не возникает на бою? Тогда тестирование не приносит ценности, а следовательно оно не нужно. Когда это возможно?
- Разрабатываемый модуль не очень большой.
- Стабильная высоко компетентная команда.
- Интеграции закрыты тестами либо на той стороне не происходит изменений.
Возможно ли не делать тестирование вообще?
Это возможно через запуск нескольких инсталляций решения и тестирования новых beta-версий на “кошечках”, если это технически возможно и если найдутся такие добровольцы. После выкладки новой версии мониторится телеметрия и производится откат, в случае деградации показателей. (Напомним, что телеметрия на бою обязана быть вне зависимости от наличия тестирования).
Еще один случай полезности регрессионного автотестирования — это тестирование API (тестирование контракта API), если это API требуется для обеспечения критического процесса. Особенно это важно, если разработчики чужого модуля что-то меняют и не делают качественное тестирование изменений на своей стороне.
Когда не нужна автоматизация тестов
Если вам достался большой объем унаследованного не очень качественного кода. Покрывать автотестами такой хаос это увеличивать хаос.
В этом случае стоит выделить из этого решения логический модуль. После выделения слоя взаимодействия этого модуля с остальным кодом нужно покрыть взаимодействие автотестами. Это обеспечит гарантии сохранности поведения модуля и целостности после его перекодирования.
Автотесты не заменяют ручного тестирования. Ручное тестирование чаще всего провести быстрее и дешевле чем написать и в последующем сопровождать автотесты. В частности, если тестирование проводится после разработки кода, то из этого тестирования автоматизировать нужно только тот кусок, который войдет в регулярное тестирование критического функционала.
И напоследок — чеклист готовности компании к автотестам
Сразу оговоримся, этот чек лист не для всех, он написан для тестировщиков компаний, для которых разработка софта есть основной источник дохода.
Чеклист
- В компании отрисован основной бизнес процесс доставки и есть понимание где вы конкретно находитесь.
- В компании отрисован процесс доставки ценности заказчикам.
- Поставлено управление задачами, это означает что все причастные переводят задачи в нужный статус. И задачи при этом типизированы.
- В компании сформулированы цели тестирования.
- Заголовки задач в трекере “причесаны”, иными словами, по заголовку можно понять что это за задача.
- Реестр задач управляем, в любой момент времени он отражает текущий статус и политику проекта/продукта.
- Реестр требований есть и он управляем.
- Существует трассируемость требований на задачи.
- Существует трассируемость требований на тесты. Известно какие требования какими тестами покрыты.
- Существует трассируемость тестов на задачи. Известно что уже протестировано, где и как.
- Существуют матрица влияния компонент друг на друга.
- Задачи трассируются на компоненты.
- Все стоит на версионном контроле.
- Существует версионная политика, кто, как и зачем. Есть понимание почему git flow плохая модель.
- Существую стандраты: кодирования и прочего
- Есть CI
- Есть релизная политика, где в частности прописаны способы версионирования, всего чего надо.
- Есть репозиторий для артефактов, откуда вы можете однозначно вынуть готовый к установке продукт.
- Есть политика по маркировке артефактов по разным критериям. Не забыт статический анализ кода.
- Среда для развертки продукта поднимается по щелчку пальца. Среда тоже на версионном контроле.
- Среда полностью автоматизировано проверяются на правильность. Порты, версия джавы, ….
- Продукт разворачивается по щелчку с проверкой
- Продукт конфигурируется полностью автоматически под необходимую задачу. Кстати это относится и бизнес конфигурации. И это тоже проверятся в автоматически.
- У вас есть способ повторяемо и автоматически генерировать все необходимые тестовые данные. Скрипты генерации тоже на версионном контроле и связаны с артефактами продукта.
- Все вышеуказанное работает для любой версии продукта.
- У вас прописан конвейер поставки, внутри релизной политики.
Напоследок спасибо участникам группы за дискуссию и помощь в подготовке статьи.
Основные положения тестирования / Хабр
Области применения, цели и задачи тестирования ПО разнообразны, поэтому тестирование оценивается и объясняется по-разному. Иногда и самим тестировщикам бывает сложно объяснить, что такое тестирование ПО ‘as is’. Возникает путаница.Для распутывания этой путаницы Алексей Баранцев (практик, тренер и консалтер в тестировании ПО; выходец из Института системного программирования Российской академии наук) предваряет свои тренинги по тестированию вводным видео про основные положения тестирования.
Мне кажется, что в этом докладе лектор смог наиболее адекватно и взвешенно объяснить «что такое тестирование» с точки зрения ученого и программиста. Странно, что этот текст еще не появлялся на хабре.
Привожу здесь сжатый пересказ этого доклада. В конце текста есть линки на полную версию, а также на упомянутое видео.
Основные положения тестирования
Уважаемые коллеги,
сначала попробуем понять, чем тестирование НЕ является.
Тестирование не разработка,
даже если тестировщики умеют программировать, в том числе и тесты (автоматизация тестирование = программирование), могут разрабатывать какие-то вспомогательные программы (для себя).
Тем не менее, тестирование — это не деятельность по разработке программного обеспечения.
Тестирование не анализ,
и не деятельность по сбору и анализу требований.
Хотя, в процессе тестирования иногда приходится уточнять требования, а иногда приходится их анализировать. Но эта деятельность не основная, скорее, это приходится делать просто по необходимости.
Тестирование не управление,
несмотря на то, что во многих организациях есть такая роль, как «тест-менеджер». Конечно же, тестировщиками надо управлять. Но само по себе тестирование управлением не является.
Тестирование не техписательство,
однако тестировщикам приходится документировать свои тесты и свою работу.
Тестирование нельзя считать ни одной из этих деятельностей просто потому, что в процессе разработки (или анализа требований, или написания документации для своих тестов) всю эту работу тестировщики делают для себя, а не для кого-то другого.
Деятельность значима только тогда, когда она востребована, то есть тестировщики должны что-то производить «на экспорт». Что они делают «на экспорт»?
Дефекты, описания дефектов, или отчеты о тестировании? Частично это правда.
Но это не вся правда.
Главная деятельность тестировщиков
заключается в том, что они предоставляют участникам проекта по разработке программного обеспечения отрицательную обратную связь о качестве программного продукта.
«Отрицательная обратная связь» не несет какой-то негативный оттенок, и не означает, что тестировщики делают что-то плохое, или что они делают что-то плохо. Это просто технический термин, который обозначает достаточно простую вещь.
Но эта вещь очень значимая, и, наверное, единственная наиболее значимая составляющая деятельности тестировщиков.
Существует наука — «теория систем». В ней определяется такое понятие как «обратная связь».
«Обратная связь» это некоторые данные, которые с выхода попадают обратно на вход, или какая-то часть данных, которые с выхода попадают обратно на вход. Эта обратная связь может быть положительной и отрицательной.
И та, и другая разновидности обратной связи равноценно важны.
В разработке программных систем положительной обратной связью, конечно же, является какая-то информация, которую мы получаем от конечных пользователей. Это запросы на какую-то новую функциональность, это увеличение объема продаж (если мы выпускаем качественный продукт).
Отрицательная обратная связь тоже может поступать от конечных пользователей в виде каких-то негативных отзывов. Либо она может поступать от тестировщиков.
Чем раньше предоставляется отрицательная обратная связь, тем меньше энергии необходимо для модификации этого сигнала. Именно поэтому тестировать нужно начинать как можно раньше, на самых ранних стадиях проекта, и предоставлять эту обратную связь и на этапе проектирования, и еще, может быть, раньше, еще на этапе сбора и анализа требований.
К слову, отсюда и произрастает понимание того, что тестировщики не отвечают за качество. Они помогают тем, кто за него отвечает.
Синонимы термина «тестирование»
С точки зрения того, что тестирование — это предоставление отрицательной обратной связи, всемирно известная аббревиатура QA (англ. Quality Assurance — Обеспечение качества) синонимом термина «тестирование» уж совершенно точно НЕ является.
Нельзя считать обеспечением качества простое предоставление отрицательной обратной связи, ведь Обеспечение — это некоторые позитивные меры. Подразумевается, что в этом случае мы именно обеспечиваем качество, своевременно предпринимаем какие-то меры для того, чтобы качество разработки ПО повысилось.
А вот «контроль качества» — Quality Control, можно считать в широком смысле синонимом для термина «тестирование», потому что контроль качества это и есть предоставление обратной связи в самых разных ее разновидностях, на самых разных этапах программного проекта.
Иногда тестирование подразумевается как некоторая отдельная форма контроля качества.
Путаница приходит из истории развития тестирования. В разное время под термином «тестирование» подразумевались различные действия, которые можно разделить на 2 больших класса: внешние и внутренние.
Внешние определения
Определения, которые в разное время дали Майерс, Бейзер, Канер, описывают тестирование как раз с точки зрения его ВНЕШНЕЙ значимости. То есть, с их точки зрения, тестирование — это деятельность, которая предназначена ДЛЯ чего-то, а не состоит из чего-то. Все три этих определения можно обобщить как предоставление отрицательной обратной связи.
Внутренние определения
Это определения, которые приведены в стандарт терминологии, используемой в программной инженерии, например, в стандарт де-факто, который называется SWEBOK.
Такие определения конструктивно объясняют, ЧТО представляет из себя деятельность по тестированию, но не дают ни малейшего представления о том, ДЛЯ ЧЕГО нужно тестирование, для чего потом будут использоваться все полученные результаты проверки соответствия между реальным поведением программы и ее ожидаемым поведением.
Итак,
тестирование — это
- проверка соответствия программы требованиям,
- осуществляемая путем наблюдения за ее работой
- в специальных, искусственно созданных ситуациях, выбранных определенным образом.
Отсюда и далее будем считать это рабочим определением «тестирования».
Общая схема тестирования примерно следующая:
- Тестировщик на входе получает программу и/или требования.
- Он с ними что-то делает, наблюдает за работой программы в определенных, искуственно созданных им ситуациях.
- На выходе он получает информацию о соответствиях и несоответствиях.
- Далее эта информация используется для того, чтобы улучшить уже существующую программу. Либо для того, чтобы изменить требования к еще только разрабатываемой программе.
Что такое тест
- Это специальная, искусственно созданная ситуация, выбранная определенным образом,
- и описание того, какие наблюдения за работой программы нужно сделать
- для проверки ее соответствия некоторому требованию.
Не нужно считать, что ситуация – это нечто одномоментное. Тест может быть достаточно длинным, например, при тестировании производительности вот эта искусственно созданная ситуация это может быть продолжающаяся в течение достаточно продолжительного времени нагрузка на систему. А наблюдения, которые нужно при этом делать, это набор различных графиков или метрик, которые мы измеряем в процессе выполнения этого теста.
Разработчик тестов занимается тем, что он из огромного потенциально бесконечного набора тестов выбирает некоторый ограниченный набор.
Ну и таким образом мы можем заключить, что тестировщик делает в процессе тестирования две вещи.
1.Во-первых, он управляет выполнением программы и создает эти самые искусственные ситуации, в которых мы собираемся проверять поведение программы.
2.И, во-вторых, он наблюдает за поведением программы и сравнивает то, что он видит с тем, что ожидается.
Если тестировщик автоматизирует тесты, то он не сам наблюдает за поведением программы — он делегирует эту задачу специальному инструменту или специальной программе, которую он сам написал. Именно она наблюдает, она сравнивает наблюдаемое поведение с ожидаемым, а тестировщику выдает только некоторый конечный результат — совпадает ли наблюдаемое поведение с ожидаемым, или не совпадает.
Любая программа представляет собой механизм по переработке информации. На вход поступает информация в каком-то одном виде, на выходе информация в некотором другом виде. При этом входов и выходов у программы может быть много, они могут быть разными, то есть у программы может быть несколько разных интерфейсов, и эти интерфейсы могут иметь разные виды:
- Пользовательский интерфейс (UI)
- Программный интерфейс (API)
- Сетевой протокол
- Файловая система
- Состояние окружения
- События
Наиболее распространенные интерфейсы это
- пользовательский,
- графический,
- текстовый,
- консольный,
- и речевой.
Используя все эти интерфейсы, тестировщик:
- каким-то образом создает искусственные ситуации,
- и проверяет в этих ситуациях как программа себя ведет.
Вот это и есть тестирование.
Другие классификации видов тестирования
Чаще всего используется разбиение на три уровня, это
- модульное тестирование,
- интеграционное тестирование,
- системное тестирование.
Под модульным тестированием обычно подразумевается тестирование на достаточно низком уровне, то есть тестирование отдельных операций, методов, функций.
Под системным тестированием подразумевается тестирование на уровне пользовательского интерфейса.
Иногда используются также некоторые другие термины, такие, как «компонентное тестирование», но я предпочитаю выделять именно эти три, по причине того, что технологическое разделение на модульное и системное тестирование не имеет большого смысла. На разных уровнях могут использоваться одни и те же инструменты, одни и те же техники. Разделение условно.
Практика показывает, что инструменты, которые позиционируются производителем как инструменты модульного тестирования, с равным успехом могут применяться и на уровне тестирования всего приложения в целом.
А инструменты, которые тестируют все приложение в целом на уровне пользовательского интерфейса иногда хотят заглядывать, например, в базу данных или вызывать там какую-то отдельную хранимую процедуру.
То есть разделение на системное и модульное тестирование вообще говоря чисто условное, если говорить с технической точки зрения.
Используются одни и те же инструменты, и это нормально, используются одни и те же техники, на каждом уровне можно говорить о тестировании различного вида.
Комбинируем:
То есть, можно говорить о модульном тестировании функциональности.
Можно говорить о системном тестировании функциональности.
Можно говорить о модульном тестировании, например, эффективности.
Можно говорить о системном тестировании эффективности.
Либо мы рассматриваем эффективность какого-то отдельно взятого алгоритма, либо мы рассматриваем эффективность всей системы в целом. То есть технологическое разделение на модульное и системное тестирование не имеет большого смысла. Потому что на разных уровнях могут использоваться одни и те же инструменты, одни и те же техники.
Наконец, при интеграционном тестировании мы проверяем, если в рамках какой-то системы модули взаимодействуют друг с другом корректно. То есть, мы фактически выполняем те же самые тесты, что и при системном тестировании, только еще дополнительно обращаем внимание на то, как именно модули взаимодействуют между собой. Выполняем некоторые дополнительные проверки. Это единственная разница.
Давайте еще раз попытаемся понять разницу между системным и модульным тестированием. Поскольку такое разделение встречается достаточно часто, эта разница должна быть.
И разница эта проявляется тогда, когда мы выполняем не технологическую классификацию, а классификацию по целям тестирования.
Классификацию по целям удобно выполнять с использованием «магического квадрата», который был изначально придуман Брайаном Мариком и потом улучшен Эри Тенненом.
В этом магическом квадрате все виды тестирования располагаются по четырем квадрантам в зависимости от того, чему в этих тестах больше уделяется внимания.
По вертикали — чем выше располагается вид тестирования, тем больше внимания уделяется некоторым внешним проявлениям поведения программы, чем ниже он находится, тем больше мы внимания уделяем ее внутреннему технологическому устройству программы.
По горизонтали — чем левее находятся наши тесты, тем больше внимания мы уделяем их программированию, чем правее они находятся, тем больше внимания мы уделяем ручному тестированию и исследованию программы человеком.
В частности, в этот квадрат можно легко вписать такие термины как приемочное тестирование, Acceptance Testing, модульное тестирование именно в том понимании, в котором оно чаще всего употребляется в литературе. Это низкоуровневое тестирование с большой, с подавляющей долей программирования. То есть это все тесты программируются, полностью автоматически выполняются и внимание уделяется в первую очередь именно внутреннему устройству программы, именно ее технологическим особенностям.
В правом верхнем углу у нас окажутся ручные тесты, нацеленные на внешнее какое-то поведение программы, в частности, тестирование удобства использования, а в правом нижнем углу у нас, скорее всего, окажутся проверки разных нефункциональных свойств: производительности, защищенности и так далее.
Так вот, исходя из классификации по целям, модульное тестирование у нас оказывается в левом нижнем квадранте, а все остальные квадранты — это системное тестирование.
Спасибо за внимание.
Дополнительно
- Полная расшифровка текста со всеми картинками. Рассказывается о тестировании методом черного и белого ящика, о шести аспектах качества верхнего уровня (функциональность, надежность, практичность, эффективность, сопровождаемость, переносимость), о критериях полноты тестирования.
- Видео-версия доклада: тут (ее можно и смотреть, и скачать как .wmv).
- Если интересно: проводится распродажа записей вебинаров Баранцева.
Тестирование – это процесс, который заключается в проверке соответствия программного продукта или сайта заявленным характеристикам и требованиям, требованиям эксплуатации в различных окружениях, с различными нагрузками, требованиям по безопасности, требованиям по эргономике и удобству использования.
В зависимости от направленности тестирования, проверяется та или иная особенность приложения или веб-сайта. Как правило, процесс тестирования документируется в виде тестового плана и тест-кейсов. Тестовый планописывает стратегию тестирования, методы и средства тестирования, порядок тестирования и другие его особенности. Тест-кейсы описывают последовательные пошаговые операции проверки функционала программы или веб-сайта. Это минимальные элементарные операции сверки для каждой функции или элемента приложения.
Зачем нужно тестирование? Тестирование решает несколько основных задач:
- Дает уверенность в качестве конечного продукта, подтверждает что все заявленные функциональные требования реализованы, приложение им соответствует и не имеет ошибок в программном коде;
- Подтверждает, что приложение способно выполняться во всех заявленных режимах и на всех поддерживаемых ОС или Web-браузерах корректно;
- Гарантирует, что хранимые и обрабатываемые данные надежно защищены от постороннего доступа и «взлома»;
- Определяет, какая максимальная нагрузка на сервер, локальную сеть, БД может быть корректно обработана приложением;
- Позволяет убедиться в том, что пользователь может «интуитивно» использовать ваш продукт или услугу не путаясь в сложных переплетениях интерфейсов.
Различают следующие виды тестирования:
Функциональное тестирование. Этот вид тестирования проверяет соответствие реализованных функций требованиям, ТЗ, спецификациям, различным другим проектным документам и просто ожиданиям пользователя. Проверяется каждая из функций приложения и все они в комплексе. Исследуются все сценарии использования. Проверяется адекватность хранимых и выходных данных, методы их обработки, обработка вводимых данных, методы хранения данных, методы импорта и экспорта данных и т.д. в зависимости от специфики приложения.
Вы уверены, что поиск с использованием всех параметров на вашем сайте работает правильно? Вы проверяли все комбинации параметров? Подумайте, что если пользователь не найдет нужный товар, то вы потеряете часть своей прибыли!
Конфигурационное тестирование. Этот вид тестирования позволяет проверить как приложение ведет себя при различных разрешениях экрана, в различных браузерах, на различных ОС, с разным программным и аппаратным обеспечением.
Вы знаете, что 10% пользователей используют нестандартные браузеры? Вы знаете, как ваш сайт выглядит в этих браузерах? Да и вообще, работает ли он? Врядли хорошая идея потерять 10% потенциальных покупателей.
Тестирование безопасности. Такой вид тестирования позволяет убедиться, что данные хранятся надежно, доступ к ним блокирован для посторонних лиц. Данные в процессе хранения, обработки и иной работы с ними не могут быть получены методами несанкционированного доступа. Проверяется защищенность БД, каналов связи, интерфейсов ввода и транспорта данных.
Вы не боитесь, что в один прекрасный день злоумышленник может испортить вашу БД или остановить работу сайта? Что Вы сделали для того, чтобы предотвратить это? Не успокаивайте свою совесть, проверьте безопасность!
Нагрузочное тестирование. Этот вид тестирования позволяет выявить уровень критических нагрузок при работе с БД, интернет серверами, сетями и другими ресурсами. При помощи автоматизированных тестов можно воспроизвести типичные сценарии действий пользователя и многократно умножить их количество, смоделировав, таким образом, как поведет себя система при 100 или 10000 активных пользователях.
Вы готовы к росту популярности вашего ресурса? Вы знаете, что будет, если реклама «выстрелит» и количество ваших посетителей возрастет в 10 раз? Было бы очень обидно, если бы сервер не справился с работой как раз в этот момент.
Тестирование usability. Проверяется удобство пользования продуктом. Исследуется на примере группы испытуемых как пользователь воспринимает продукт, как он представляет себе пути его использования, сколько времени затрачивает на то или иное действие, какие проблемы у него возникают и в состоянии ли он их решить.
Достаточно ли прост и понятен ваш сайт? Каждый ли пользователь сможет разобраться, как заказать товар? А как его найти? Не уйдет ли он к вашим конкурентам, потому что их сайт простой и понятный?
Если Вы решили разработать оптимизировать работу Вашего сайта, напишите нам.
Тестирование. Фундаментальная теория / Хабр
Недавно был на собеседовании на Middle QA на проект, который явно превышает мои возможности. Уделил много времени тому, чего не знал вообще и мало времени повторению простой теории, а зря.Ниже основы основ для повторения перед собеседованием для Trainee and Junior: определение тестирования, качество, верификация / валидация, цели, этапы, тест план, пункты тест плана, тест дизайн, техники тест дизайна, traceability matrix, test case, чек-лист, дефект, error/deffect/failure, баг репорт, severity vs priority, уровни тестирования, виды / типы, подходы к интеграционному тестированию, принципы тестирования, статическое и динамическое тестирование, исследовательское / ad-hoc тестирование, требования, жизненный цикл бага, стадии разработки ПО, decision table, qa/qc/test engineer, диаграмма связей.
Все замечания, корректировки и дополнения очень приветствуются.
Тестирование программного обеспечения — проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом. В более широком смысле, тестирование — это одна из техник контроля качества, включающая в себя активности по планированию работ (Test Management), проектированию тестов (Test Design), выполнению тестирования (Test Execution) и анализу полученных результатов (Test Analysis).
Качество программного обеспечения (Software Quality) — это совокупность характеристик программного обеспечения, относящихся к его способности удовлетворять установленные и предполагаемые потребности. [Quality management and quality assurance]
Верификация (verification) — это процесс оценки системы или её компонентов с целью определения удовлетворяют ли результаты текущего этапа разработки условиям, сформированным в начале этого этапа[IEEE]. Т.е. выполняются ли наши цели, сроки, задачи по разработке проекта, определенные в начале текущей фазы.
Валидация (validation) — это определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе [BS7925-1].
Также можно встретить иную интерпритацию:
Процесс оценки соответствия продукта явным требованиям (спецификациям) и есть верификация (verification), в то же время оценка соответствия продукта ожиданиям и требованиям пользователей — есть валидация (validation). Также часто можно встретить следующее определение этих понятий:
Validation — ’is this the right specification?’.
Verification — ’is the system correct to specification?’.
Цели тестирования
Повысить вероятность того, что приложение, предназначенное для тестирования, будет работать правильно при любых обстоятельствах.
Повысить вероятность того, что приложение, предназначенное для тестирования, будет соответствовать всем описанным требованиям.
Предоставление актуальной информации о состоянии продукта на данный момент.
Этапы тестирования:
1. Анализ продукта
2. Работа с требованиями
3. Разработка стратегии тестирования
и планирование процедур контроля качества
4. Создание тестовой документации
5. Тестирование прототипа
6. Основное тестирование
7. Стабилизация
8. Эксплуатация
Тест план (Test Plan) — это документ, описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.
Отвечает на вопросы:
Что надо тестировать?
Что будете тестировать?
Как будете тестировать?
Когда будете тестировать?
Критерии начала тестирования.
Критерии окончания тестирования.
Основные пункты тест плана
В стандарте IEEE 829 перечислены пункты, из которых должен (пусть — может) состоять тест-план:
a) Test plan identifier;
b) Introduction;
c) Test items;
d) Features to be tested;
e) Features not to be tested;
f) Approach;
g) Item pass/fail criteria;
h) Suspension criteria and resumption requirements;
i) Test deliverables;
j) Testing tasks;
k) Environmental needs;
l) Responsibilities;
m) Staffing and training needs;
n) Schedule;
o) Risks and contingencies;
p) Approvals.
Тест дизайн – это этап процесса тестирования ПО, на котором проектируются и создаются тестовые сценарии (тест кейсы), в соответствии с определёнными ранее критериями качества и целями тестирования.
Роли, ответственные за тест дизайн:
• Тест аналитик — определяет «ЧТО тестировать?»
• Тест дизайнер — определяет «КАК тестировать?»
Техники тест дизайна
• Эквивалентное Разделение (Equivalence Partitioning — EP). Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала — 0.
• Анализ Граничных Значений (Boundary Value Analysis — BVA). Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.
• Причина / Следствие (Cause/Effect — CE). Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как «Имя», «Адрес», «Номер Телефона» а затем, нажать кнопку «Добавить» — это «Причина». После нажатия кнопки «Добавить», система добавляет клиента в базу данных и показывает его номер на экране — это «Следствие».
• Предугадывание ошибки (Error Guessing — EG). Это когда тестировщик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «пользователь должен ввести код». Тестировщик будет думать: «Что, если я не введу код?», «Что, если я введу неправильный код? », и так далее. Это и есть предугадывание ошибки.
• Исчерпывающее тестирование (Exhaustive Testing — ET) — это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.
• Попарное тестирование (Pairwise Testing) — это техника формирования наборов тестовых данных. Сформулировать суть можно, например, вот так: формирование таких наборов данных, в которых каждое тестируемое значение каждого из проверяемых параметров хотя бы единожды сочетается с каждым тестируемым значением всех остальных проверяемых параметров.
Допустим, какое-то значений (налог) для человека рассчитывается на основании его пола, возраста и наличия детей — получаем три входных параметра, для каждого из которых для тестов выбираем каким-то образом значения. Например: пол — мужской или женский; возраст — до 25, от 25 до 60, более 60; наличие детей — да или нет. Для проверки правильности расчётов можно, конечно, перебрать все комбинации значений всех параметров:
А можно решить, что нам не нужны сочетания значений всех параметров со всеми, а мы хотим только убедиться, что мы проверим все уникальные пары значений параметров. Т.е., например, с точки зрения параметров пола и возраста мы хотим убедиться, что мы точно проверим мужчину до 25, мужчину между 25 и 60, мужчину после 60, а также женщину до 25, женщину между 25 и 60, ну и женщину после 60. И точно так же для всех остальных пар параметров. И таким образом, мы можем получить гораздо меньше наборов значений (в них есть все пары значений, правда некоторые дважды):
Такой подход примерно и составляет суть техники pairwise testing — мы не проверяем все сочетания всех значений, но проверяем все пары значений.
Traceability matrix — Матрица соответствия требований — это двумерная таблица, содержащая соответствие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases). В заголовках колонок таблицы расположены требования, а в заголовках строк — тестовые сценарии. На пересечении — отметка, означающая, что требование текущей колонки покрыто тестовым сценарием текущей строки.
Матрица соответствия требований используется QA-инженерами для валидации покрытия продукта тестами. МСТ является неотъемлемой частью тест-плана.
Тестовый сценарий (Test Case) — это артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
Пример:
Action Expected Result Test Result
(passed/failed/blocked)
Open page «login» Login page is opened Passed
Каждый тест кейс должен иметь 3 части:
PreConditions Список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
Test Case Description Список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям
PostConditions Список действий, переводящих систему в первоначальное состояние (состояние до проведения теста — initial state)
Виды Тестовых Сценариев:
Тест кейсы разделяются по ожидаемому результату на позитивные и негативные:
• Позитивный тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.
• Негативный тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций (срабатывание валидаторов), а также проверяет, что вызываемая приложением функция не выполняется при срабатывании валидатора.
Чек-лист (check list) — это документ, описывающий что должно быть протестировано. При этом чек-лист может быть абсолютно разного уровня детализации. На сколько детальным будет чек-лист зависит от требований к отчетности, уровня знания продукта сотрудниками и сложности продукта.
Как правило, чек-лист содержит только действия (шаги), без ожидаемого результата. Чек-лист менее формализован чем тестовый сценарий. Его уместно использовать тогда, когда тестовые сценарии будут избыточны. Также чек-лист ассоциируются с гибкими подходами в тестировании.
Дефект (он же баг) – это несоответствие фактического результата выполнения программы ожидаемому результату. Дефекты обнаруживаются на этапе тестирования программного обеспечения (ПО), когда тестировщик проводит сравнение полученных результатов работы программы (компонента или дизайна) с ожидаемым результатом, описанным в спецификации требований.
Error — ошибка пользователя, то есть он пытается использовать программу иным способом.
Пример — вводит буквы в поля, где требуется вводить цифры (возраст, количество товара и т.п.).
В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message), с красным крестиком которые.
Bug (defect) — ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так как планировалось и программа выходит из-под контроля. Например, когда никак не контроллируется ввод пользователя, в результате неверные данные вызывают краши или иные «радости» в работе программы. Либо внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
Failure — сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы. То есть, существуют такие дефекты, которые приводят к сбоям (A defect caused the failure) и существуют такие, которые не приводят. UI-дефекты например. Но аппаратный сбой, никак не связанный с software, тоже является failure.
Баг Репорт (Bug Report) — это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
Шапка
Короткое описание (Summary) Короткое описание проблемы, явно указывающее на причину и тип ошибочной ситуации.
Проект (Project) Название тестируемого проекта
Компонент приложения (Component) Название части или функции тестируемого продукта
Номер версии (Version) Версия на которой была найдена ошибка
Серьезность (Severity) Наиболее распространена пятиуровневая система градации серьезности дефекта:
• S1 Блокирующий (Blocker)
• S2 Критический (Critical)
• S3 Значительный (Major)
• S4 Незначительный (Minor)
• S5 Тривиальный (Trivial)
Приоритет (Priority) Приоритет дефекта:
• P1 Высокий (High)
• P2 Средний (Medium)
• P3 Низкий (Low)
Статус (Status) Статус бага. Зависит от используемой процедуры и жизненного цикла бага (bug workflow and life cycle)
Автор (Author) Создатель баг репорта
Назначен на (Assigned To) Имя сотрудника, назначенного на решение проблемы
Окружение
ОС / Сервис Пак и т.д. / Браузера + версия /… Информация об окружении, на котором был найден баг: операционная система, сервис пак, для WEB тестирования — имя и версия браузера и т.д.
…
Описание
Шаги воспроизведения (Steps to Reproduce) Шаги, по которым можно легко воспроизвести ситуацию, приведшую к ошибке.
Фактический Результат (Result) Результат, полученный после прохождения шагов к воспроизведению
Ожидаемый результат (Expected Result) Ожидаемый правильный результат
Дополнения
Прикрепленный файл (Attachment) Файл с логами, скриншот или любой другой документ, который может помочь прояснить причину ошибки или указать на способ решения проблемы
Severity vs Priority
Серьезность (Severity) — это атрибут, характеризующий влияние дефекта на работоспособность приложения.
Приоритет (Priority) — это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Можно сказать, что это инструмент менеджера по планированию работ. Чем выше приоритет, тем быстрее нужно исправить дефект.
Severity выставляется тестировщиком
Priority – менеджером, тимлидом или заказчиком
Градация Серьезности дефекта (Severity)
S1 Блокирующая (Blocker)
Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее ключевыми функциями становится невозможна. Решение проблемы необходимо для дальнейшего функционирования системы.
S2 Критическая (Critical)
Критическая ошибка, неправильно работающая ключевая бизнес логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, без возможности решения проблемы, используя другие входные точки. Решение проблемы необходимо для дальнейшей работы с ключевыми функциями тестируемой системой.
S3 Значительная (Major)
Значительная ошибка, часть основной бизнес логики работает некорректно. Ошибка не критична или есть возможность для работы с тестируемой функцией, используя другие входные точки.
S4 Незначительная (Minor)
Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.
S5 Тривиальная (Trivial)
Тривиальная ошибка, не касающаяся бизнес логики приложения, плохо воспроизводимая проблема, малозаметная посредствам пользовательского интерфейса, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.
Градация Приоритета дефекта (Priority)
P1 Высокий (High)
Ошибка должна быть исправлена как можно быстрее, т.к. ее наличие является критической для проекта.
P2 Средний (Medium)
Ошибка должна быть исправлена, ее наличие не является критичной, но требует обязательного решения.
P3 Низкий (Low)
Ошибка должна быть исправлена, ее наличие не является критичной, и не требует срочного решения.
Уровни Тестирования
1. Модульное тестирование (Unit Testing)
Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).
2. Интеграционное тестирование (Integration Testing)
Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.
3. Системное тестирование (System Testing)
Основной задачей системного тестирования является проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т.д.
4. Операционное тестирование (Release Testing).
Даже если система удовлетворяет всем требованиям, важно убедиться в том, что она удовлетворяет нуждам пользователя и выполняет свою роль в среде своей эксплуатации, как это было определено в бизнес модели системы. Следует учесть, что и бизнес модель может содержать ошибки. Поэтому так важно провести операционное тестирование как финальный шаг валидации. Кроме этого, тестирование в среде эксплуатации позволяет выявить и нефункциональные проблемы, такие как: конфликт с другими системами, смежными в области бизнеса или в программных и электронных окружениях; недостаточная производительность системы в среде эксплуатации и др. Очевидно, что нахождение подобных вещей на стадии внедрения — критичная и дорогостоящая проблема. Поэтому так важно проведение не только верификации, но и валидации, с самых ранних этапов разработки ПО.
5. Приемочное тестирование (Acceptance Testing)
Формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью:
• определения удовлетворяет ли система приемочным критериям;
• вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.
Виды / типы тестирования
Функциональные виды тестирования
• Функциональное тестирование (Functional testing)
• Тестирование пользовательского интерфейса (GUI Testing)
• Тестирование безопасности (Security and Access Control Testing)
• Тестирование взаимодействия (Interoperability Testing)
Нефункциональные виды тестирования
• Все виды тестирования производительности:
o нагрузочное тестирование (Performance and Load Testing)
o стрессовое тестирование (Stress Testing)
o тестирование стабильности или надежности (Stability / Reliability Testing)
o объемное тестирование (Volume Testing)
• Тестирование установки (Installation testing)
• Тестирование удобства пользования (Usability Testing)
• Тестирование на отказ и восстановление (Failover and Recovery Testing)
• Конфигурационное тестирование (Configuration Testing)
Связанные с изменениями виды тестирования
• Дымовое тестирование (Smoke Testing)
• Регрессионное тестирование (Regression Testing)
• Повторное тестирование (Re-testing)
• Тестирование сборки (Build Verification Test)
• Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)
Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.
Тестирование пользовательского интерфейса (GUI Testing) — функциональная проверка интерфейса на соответствие требованиям — размер, шрифт, цвет, consistent behavior.
Тестирование безопасности — это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
Тестирование взаимодействия (Interoperability Testing) – это функциональное тестирование, проверяющее способность приложения взаимодействовать с одним и более компонентами или системами и включающее в себя тестирование совместимости (compatibility testing) и интеграционное тестирование
Нагрузочное тестирование — это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе.
Стрессовое тестирование (Stress Testing) позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом цели стрессового тестирования могут пересекаться с целями тестирования производительности.
Объемное тестирование (Volume Testing). Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения
Тестирование стабильности или надежности (Stability / Reliability Testing). Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.
Тестирование установки направленно на проверку успешной инсталляции и настройки, а также обновления или удаления программного обеспечения.
Тестирование удобства пользования — это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Сюда также входит:
User eXperience (UX) — ощущение, испытываемое пользователем во время использования цифрового продукта, в то время как User interface — это инструмент, позволяющий осуществлять интеракцию «пользователь — веб-ресурс».
Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.
Конфигурационное тестирование (Configuration Testing) — специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.)
Дымовое (Smoke) тестирование рассматривается как короткий цикл тестов, выполняемый для подтверждения того, что после сборки кода (нового или исправленного) устанавливаемое приложение, стартует и выполняет основные функции.
Регрессионное тестирование — это вид тестирования направленный на проверку изменений, сделанных в приложении или окружающей среде (починка дефекта, слияние кода, миграция на другую операционную систему, базу данных, веб сервер или сервер приложения), для подтверждения того факта, что существующая ранее функциональность работает как и прежде. Регрессионными могут быть как функциональные, так и нефункциональные тесты.
Повторное тестирование — тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
В чем разница между regression testing и re-testing?
Re-testing — проверяется исправление багов
Regression testing — проверяется то, что исправление багов, а также любые изменения в коде приложения, не повлияли на другие модули ПО и не вызвало новых багов.
Тестирование сборки или Build Verification Test — тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования. По своим целям является аналогом Дымового Тестирования, направленного на приемку новой версии в дальнейшее тестирование или эксплуатацию. Вглубь оно может проникать дальше, в зависимости от требований к качеству выпущенной версии.
Санитарное тестирование — это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям. Является подмножеством регрессионного тестирования. Используется для определения работоспособности определенной части приложения после изменений произведенных в ней или окружающей среде. Обычно выполняется вручную.
Подходы к интеграционному тестированию:
• Снизу вверх (Bottom Up Integration)
Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.
• Сверху вниз (Top Down Integration)
Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами. Таким образом мы проводим тестирование сверху вниз.
• Большой взрыв («Big Bang» Integration)
Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.
Принципы тестирования
Принцип 1 – Тестирование демонстрирует наличие дефектов (Testing shows presence of defects)
Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.
Принцип 2 – Исчерпывающее тестирование недостижимо (Exhaustive testing is impossible)
Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.
Принцип 3 – Раннее тестирование (Early testing)
Чтобы найти дефекты как можно раньше, активности по тестированию должны быть начаты как можно раньше в жизненном цикле разработки программного обеспечения или системы, и должны быть сфокусированы на определенных целях.
Принцип 4 – Скопление дефектов (Defects clustering)
Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.
Принцип 5 – Парадокс пестицида (Pesticide paradox)
Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот “парадокс пестицида”, тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения,
или системы, и найти как можно больше дефектов.
Принцип 6 – Тестирование зависит от контекста (Testing is concept depending)
Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.
Принцип 7 – Заблуждение об отсутствии ошибок (Absence-of-errors fallacy)
Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.
Cтатическое и динамическое тестирование
Статическое тестирование отличается от динамического тем, что производится без запуска программного кода продукта. Тестирование осуществляется путем анализа программного кода (code review) или скомпилированного кода. Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к статическому тестированию относится тестирования спецификации и прочей документации.
Исследовательское / ad-hoc тестирование
Простейшее определение исследовательского тестирования — это разработка и выполнения тестов в одно и то же время. Что является противоположностью сценарного подхода (с его предопределенными процедурами тестирования, неважно ручными или автоматизированными). Исследовательские тесты, в отличие от сценарных тестов, не определены заранее и не выполняются в точном соответствии с планом.
Разница между ad hoc и exploratory testing в том, что теоретически, ad hoc может провести кто угодно, а для проведения exploratory необходимо мастерство и владение определенными техниками. Обратите внимание, что определенные техники это не только техники тестирования.
Требования – это спецификация (описание) того, что должно быть реализовано.
Требования описывают то, что необходимо реализовать, без детализации технической стороны решения. Что, а не как.
Требования к требованиям:
• Корректность
• Недвусмысленность
• Полнота набора требований
• Непротиворечивость набора требований
• Проверяемость (тестопригодность)
• Трассируемость
• Понимаемость
Жизненный цикл бага
Стадии разработки ПО — это этапы, которые проходят команды разработчиков ПО, прежде чем программа станет доступной для широко круга пользователей. Разработка ПО начинается с первоначального этапа разработки (стадия «пре-альфа») и продолжается стадиями, на которых продукт дорабатывается и модернизируется. Финальным этапом этого процесса становится выпуск на рынок окончательной версии программного обеспечения («общедоступного релиза»).
Программный продукт проходит следующие стадии:
• анализ требований к проекту;
• проектирование;
• реализация;
• тестирование продукта;
• внедрение и поддержка.
Каждой стадии разработки ПО присваивается определенный порядковый номер. Также каждый этап имеет свое собственное название, которое характеризует готовность продукта на этой стадии.
Жизненный цикл разработки ПО:
• Пре-альфа
• Альфа
• Бета
• Релиз-кандидат
• Релиз
• Пост-релиз
Таблица принятия решений (decision table) – великолепный инструмент для упорядочения сложных бизнес требований, которые должны быть реализованы в продукте. В таблицах решений представлен набор условий, одновременное выполнение которых должно привести к определенному действию.
QA/QC/Test Engineer
Таким образом, мы можем построить модель иерархии процессов обеспечения качества: Тестирование – часть QC. QC – часть QA.
Диаграмма связей – это инструмент управления качеством, основанный на определении логических взаимосвязей между различными данными. Применяется этот инструмент для сопоставления причин и следствий по исследуемой проблеме.
Источники: www.protesting.ru, bugscatcher.net, qalight.com.ua, thinkingintests.wordpress.com, книга ISTQB, www.quizful.net, bugsclock.blogspot.com, www.zeelabs.com, devopswiki.net, hvorostovoz.blogspot.com.
Ресурсы рекомендованные в комментах Sofiya Novachenko: istqbexamcertification.com www.testingexcellence.com
Тесты на интеллект изучают познавательные способности человека — его внимания, памяти, способности к анализу, логике и т.д. Они могут выглядеть как задачи или школьные примеры. Порой во время их прохождения необходимо совершать математические действия, но иногда это просто разные карточки с текстом или картинками. Подобные тесты используют для определения готовности к школе, а также для выявления интеллектуальных способностей.
А вот личностные тесты изучают и помогают определить особенности характера, тонкости темперамента, поведения, эмоциональную сферу, настроение, силу воли.
Чаще всего эти тесты выглядят как опросники. В среднем в них семьдесят-девяносто вопросов, но бывают и большие анкеты, в которых более пятисот вопросов. Чем больше вопросов, тем более точно можно описать особенности личности, рассчитать на основании их вероятность поведения в тех или иных ситуациях, спрогнозировать совместимость человека с другими членами коллектива, нащупать основные психологические проблемы, комплексы, а также положительные качества. Такие тесты часто применяются при приеме на работу, во время диагностики в медучреждениях.
Также эти тесты используются психологами, работающими с подростками, которые находятся в процессе поиска собственного я, собственной идентификации, помогают им лучше понять собственный характер.
Есть еще тесты, которые помогают понять психологическое настроение в коллективе – трудовом, школьном классе или же в семье, как между супругами, так и между родителями и детьми.
Бывают тесты, когда психолог просит тестируемого нарисовать что-либо (например, домик, членов семьи, дерево и т.д.), и по этим рисункам опытный врач тоже может сделать выводы о настроении, о проблемах во взаимоотношении с другими членами семьи или коллектива, и даже о тревожности и депрессии.
Тесты являются не единственным, но достаточно значимым способом психодиагностики, и с успехом применяются разными психиатрами. Как правило, их результаты (которые все же можно интерпретировать по-разному) должны подкрепляться и другими данными.
- Домой
- тесты
- Поиск
- Рекомендуемые товары
- назад
- Подготовительные курсы ACT
- Учебный материал CFA
- CPA Обзорные курсы
- Подготовительные курсы GMAT
- Подготовительные курсы GRE
- Подготовительные курсы HESI
- назад
- Домашняя страница
Тестирование
- Назад
- Agile Testing
- BugZilla
- Огурец
Тестирование всего программного обеспечения Тестирование всего программного обеспечения- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Mobile Тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Quality Center (ALM)
- RPA
- SAP Тестирование
- Селен
- SoapUI
- Управление тестированием
- TestLink
SAP
- Назад
- ABAP
- APO
- Новичок
- Основа
- Bods
- BI
- БПЦ
- CO
- Назад
- CRM
- Crystal Reports
- КУКИШ
- HANA
- HR
- MM
- QM
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Успешные клиенты
- 9000 5000
- 9000 5000 9000 5000
- Назад
- Java
- JavaScript
- JSP
- Kotlin M000 M000 js
- Back
- Perl
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL5000
- SQL000
- UML
- VB.Net
- VBScript
- Веб-сервисы
- WPF
Необходимо учиться!
- Назад
- Учет
- Алгоритмы
- Blockchain
- Бизнес-аналитик
- Сложение Сайт
- CCNA
- Cloud Computing
- COBOL
- Compiler Design
- Embedded Systems
- Назад
- Ethical Hacking
- Excel Учебники
- Go Программирование
- IoT
- ITIL
- Дженкинс
- MIS
- Networking
- Операционная система
- Prep
- Назад
- PMP
- Photoshop Управление
- Проект
- Отзывы
- Salesforce
- SEO
- Разработка программного обеспечения
- VBA
Big Data
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Складирование данных 000000000 HBB
бесплатных тестов CNA для практики (обновление 2020)
- Домой
- тесты
- Поиск
- Рекомендуемые товары
- назад
- Подготовительные курсы ACT
- Учебный материал CFA
- CPA Обзорные курсы
- Подготовительные курсы GMAT
Бесплатный тест IQ онлайн | 30 быстрых вопросов
- Домой
- тесты
- Поиск
- Рекомендуемые товары
- назад
- Подготовительные курсы ACT
- Учебный материал CFA
- CPA Обзорные курсы
- Подготовительные курсы GMAT
- Подготовительные курсы GRE
- Подготовительные курсы HESI
- Вернуться