Сайт о телевидении

Сайт о телевидении

» » Критерии тестирования программ. Как выбрать тесты для автоматизации

Критерии тестирования программ. Как выбрать тесты для автоматизации

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

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

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

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

Анализ показал, что под объективностью понимается степень, в которой результаты теста не зависят от проверяющего. «Объективность означает, что результат тестирования достигается только тестовым инструментом, т.е. согласно его намерениям и целям, независимо от руководителя теста. Тогда побуждением к ответу в тесте будет только вопрос или задача теста». В зависимости от того, в какой фазе тестирования проявляется влияние исследователя на результат, различают три аспекта объективности: проведения, подведения итогов и интерпретации (см. приложение 19).

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

Валидность, или действительность теста есть гарантия, что он в самом деле измеряет то, что подлежит измерению, или что должно быть измерено. Согласно оценкам специалистов, валидность остается самой спорной и сложной проблемой для тех, кто занимается конструированием тестов. Чаще всего в литературе речь идет о следующих видах валидности: содержательной, конструктивной, критери- альнообусловленной, согласованной, конкурентной (см. приложение 21) и прогностической. Для практики отбора персонала особенно интересна и значима, как показывает анализ, прогностическая валидность, которая тем лучше, чем выше коррелируют друг с другом результаты тестирования и последующие фактические профессиональные успехи.

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

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

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

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

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

Значительная часть проведенных обследований показывает, что наиболее ценным инструментом диагностики профессиональной пригодности являются тесты на интеллект. Валидность тестов этой группы Штелле оценивает в диапазоне 0,20-0,30, авторы осуществленных мета-анализов - 0,25-0,50; ими же подчеркивается, что трудовую деятельность с параллельным обучением гшо- гнозировать легче, чем «чисто профессиональную в узком смысле». Например, крупные финансовые организации ФРГ, согласно результатам Торгово- промышленной палаты, валидность оценки интеллектуальных способностей «лиц с последующим обучением» через соответствующие тестовые батареи оценивают в 0,48.

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

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

20-0,40, другие исследователи дают моментные показатели, укладывающиеся в границах этого интервала: Рейли и Чао- 0,18, Шмитт и соавторы-- 0,15. Если же оценивать не общий личностный тест, а его «отдельные специфические гипотетические факторы», то, по расчетам специалистов, можно ожидать более высокой оценки. Так, средний показатель валидности для специальных личностных тестов определяется как 0,25 и 0,30 - для тестов по оценке интересов и мотиваций.

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

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

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

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

Важным моментом организации и проведения тестирования является создание тестовой ситуации, в комплексное понятие которой включаются такие элементы тестовой процедуры, как внешние условия, руководитель теста, взаимодействие между руководителем теста и испытуемым, установки и ожидания испытуемого, страх перед тестом. Частота использования тестирования при внешнем отборе кандидатов ФРГ Франция Испания Бенилюкс Англия лич. пр. ИНТ. лич. пр. ИНТ. лич. пр. ИНТ. лич. пр. ИНТ. лич. пр. ИНТ. Необученные рабочие 2 5 2 20 30 30 20 27 20 0 9 0 0 13 0 Квалифицированные рабочие 3 5 0 36 18 18 53 32 42 0 14 0 7 43 29 Служащие без руководящих функций 6 5 5 21 21 14 69 25 44 25 20 25 6 31 25 Обучающиеся на производстве Руководители, в т.ч. нижнего уровня среднего уровня высшего уровня 7 11 8 56 33 44 59 35 47 50 29 57 69 56 44 Объективность тестовой ситуации означает прежде всего, что условия проведения для кандидатов одинаковы и стандартизированы.

Для участников испытания подбирается соответствующее помещение, хорошо освещаемое и проветриваемое, исключающее посторонние помехи. В задачи руководителя тестирования входит ознакомление кандидатов с инструкцией теста, наблюдение за ходом процедуры, предотвращение нарушения порядка, сбор анкет по истечении времени. На первый взгляд, задачи «руководителя» достаточно «невинны». Вместе с тем это далеко не так. «Атмосфера во время тестирования может быть смягчена уже вступительным словом руководителя, - пишет Ришар, - и было бы хорошо, если бы такая ситуация сознательно провоцировалась». Пол, раса, возраст, цвет кожи, телосложение, профессиональный и социальный статус, опыт и практика «руководителя», его личные качества и внешность влияют на улучшение или ухудшение результатов теста. По результатам исследования Ра- бина (1954 г.), испытуемые мужского пола дают меньше сексуальных толкований по Роршах-тесту, если руководитель теста- женщина; по заключению Хаймана (1955 г.), тестируемые-мужчины дают «руководителям-женщинам больше «типично женских» ответов и наоборот. Согласно выводам Робинзона и Роде (1946 г.), ответы в тестовых заданиях менялись нз-за национальности, Кэнтрилпа (1946 г.) - цвета кожи, Кэмпбелла и Фидлмэна (1959 г.) - профессионального статуса «руководителя».

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

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

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

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

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

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

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

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

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

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

В-четвергых, согласно практике тестирования, метод используется для внешнего отбора. При общем тренде фактической частотности применения: личностные -» производительные -» интеллектуальные, в каждой из стран сложилось различное отношение работодателей к тактике реализации метода при найме. Во Франции, как и Германии, психологические тесты актуальны для тех категорий кандидатов, решающим элементом в профиле пригодности которых является потенциал развития (ученики, стажеры), а также особые мыслительные способности или личностные качества (менеджеры). На предприятиях Испании при значительном влиянии результатов тестирования на решение о приеме на работу особое предпочтение отдается личностным тестам, которые используются для селекции всех видов обученных кандидатов, достигая максимума (93%) при найме руководителей. Менее значимыми оказались тесты производительности, хотя в своей «нише» - ученики в торгово-коммерческой сфере и ученики-техники - их применение характеризовалось 67% и 63% соответственно, и личностные тесты («ниша» - менеджеры, 73%). В Англии при внедрении тестов 84% опрошенных фирм показывают дифференцированное отношение к методу в зависимости от статуса вакансии: сфера личностных тестов ограничивается по существу отбором руководителей и стажеров, тестов производительности - учениками, стажерами и квалифицированными рабочими, тестов на интеллект (наименее актуальных) - сужается до одной категории - стажеров. В странах Бенилюкса при главенствующей роли тестов производительности другие применяются в меньшей мере. Это означает, что модели отбора с помощью тестовых методов помимо статуса вакансии определяются также национальными факторами.

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

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

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

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

Требования к идеальному критерию тестирования

Требования к идеальному критерию были выдвинуты в работе

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

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

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

    Критерий должен быть легко проверяемым , например вычисляемым на тестах

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

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

Классы критериев

    Структурные критерии используют информацию о структуре программы (критерии так называемого "белого ящика")

    Функциональные критерии формулируются в описании требований к программному изделию (критерии так называемого "черного ящика" )

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

    Мутационные критерии ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.

Структурные критерии (класс I).

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

Структурные критерии базируются на основных элементах УГП, операторах, ветвях и путях.

    Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно.

    Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно и не так уж велико. Данный критерий часто используется в системах автоматизации тестирования.

    Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раза. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой (часто - 2, или числом классов выходных путей).

Рассмотрим условия тестирования в соответствии со структурными критериями.

1 public void Method (ref int x)

Пример 3.1. Пример простой программы, для тестирования по структурным критериям

1 void Method (int *x)

2 if (*x>17)

Пример 3.1.1. Пример простой программы, для тестирования по структурным критериям

Тестовый набор из одного теста, удовлетворяет критерию команд (C0):

(X,Y)={(x вх =30, x вых =0)} покрывает все операторы трассы 1-2-3-4-5-6

Тестовый набор из двух тестов, удовлетворяет критерию ветвей (C1):

(X,Y)={(30,0), (17,17)} добавляет 1 тест к множеству тестов для С0 и трассу 1-2-4-6. Трасса 1-2-3-4-5-6 проходит через все ветви достижимые в операторах if при условии true, а трасса 1-2-4-6 через все ветви, достижимые в операторах if при условии false.

Тестовый набор из четырех тестов, удовлетворяет критерию путей (C2):

(X,Y)={(30,0), (17,17), (-13,0), (21,-4)}

Набор условий для двух операторов if c метками 2 и 4 приведен в таблице

Таблица 3.1. Условия операторов if

Критерий путей С2 проверяет программу более тщательно, чем критерии - C1, однако даже если он удовлетворен, нет оснований утверждать, что программа реализована в соответствии со спецификацией.

Например, если спецификация задает условие, что|x|100, невыполнимость которого можно подтвердить на тесте (-177,-177). Действительно, операторы 3 и 4 на тесте (-177,-177) не изменят величину х=-177 и результат не будет соответствовать спецификации.

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

Функциональные критерии (класс II)

Функциональный критерий - важнейший для программной индустрии критерий тестирования. Он обеспечивает, прежде всего, контроль степени выполнения требований заказчика в программном продукте. Поскольку требования формулируются к продукту в целом, они отражают взаимодействие тестируемого приложения с окружением. При функциональном тестировании преимущественно используется модель "черного ящика". Проблема функционального тестирования - это, прежде всего, трудоемкость; дело в том, что документы, фиксирующие требования к программному изделию (Software requirement specification, Functional specification и т.п.), как правило, достаточно объемны, тем не менее, соответствующая проверка должна быть всеобъемлющей.

Ниже приведены частные виды функциональных критериев.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Произвести опрос статуса склада (вызвать функцию GetStoreStat). Добавить в журнал сообщений запись "СИСТЕМА: Запрошен статус СКЛАДА". В зависимости от полученного значения произвести следующие действия:

    Полученный статус склада = 32. В приемную ячейку склада поступил подшипник. Система должна:

    Добавить в журнал сообщений запись "СКЛАД: Статус СКЛАДА = 32".

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

    Добавить в журнал сообщений запись "СИСТЕМА: Запрошены параметры подшипника".

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

Таблица 3.2. Действия по результатам функции GetRollerPar

Значение, возвращенное функцией GetRollerPar

Действия системы

      Добавить на первое место команду GetR - "ПОЛУЧИТЬ ИЗ ПРИЕМНИКА В ЯЧЕЙКУ"

      Добавить в журнал сообщений запись "ТЕРМИНАЛ ПОДШИПНИКА: 0 - параметры возвращены <Номер_группы>"

Добавить в журнал сообщений запись "ТЕРМИНАЛ ПОДШИПНИКА: 1 - нет данных"

    Произвести опрос терминала оси (вызвать функцию получения сообщения от терминала - GetAxlePar). В журнал сообщений должно быть добавлено сообщение "СИСТЕМА: Запрошены параметры оси". В зависимости от возвращенного функцией GetAxlePar значения должны быть выполнены следующие действия

Определим классы входных данных для параметра - статус склада:

    Статус склада = 0 (правильный).

    Статус склада = 4 (правильный).

    Статус склада = 16 (правильный).

    Статус склада = 32 (правильный).

    Статус склада = любое другое значение (ошибочный).

Теперь рассмотрим тестовые случаи:

    Тестовый случай 1 (покрывает класс 4):

Статус склада - 32.

Система запрашивает статус склада (вызов функции GetStoreStat) и получает 32

    Тестовый случай 2 (покрывает класс 5):

Состояние окружения (входные данные - X):

Статус склада - 12dfga.

Ожидаемая последовательность событий (выходные данные - Y):

Система запрашивает статус склада (вызов функции GetStoreStat) и согласно пункту спецификации при ошибочном значении статуса склада в журнал добавляется сообщение "СКЛАД: ОШИБКА: Неопределенный статус".

Стохастические критерии (класс III)

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

В этом случае множество Y неизвестно (его вычисление невозможно), но известен закон распределения данного множества.

Критерии стохастического тестирования

    Cтатистические методы окончания тестирования - стохастические методы принятия решений о совпадении гипотез о распределении случайных величин. К ним принадлежат широко известные: метод Стьюдента (St), метод Хи-квадрат (χ 2) и т.п.

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

Рис. 3.1. Зависимость скорости выявления ошибок от времени выявления

При формализации модели скорости выявления ошибок использовались следующие обозначения:

N - исходное число ошибок в программном комплексе перед тестированием,

C - константа снижения скорости выявления ошибок за счет нахождения очередной ошибки,

t 1 ,t 2 ,…t n - кортеж возрастающих интервалов обнаружения последовательности из n ошибок,

T - время выявления n ошибок.

Если допустить, что за время T выявлено n ошибок, то справедливо соотношение (1), утверждающее, что произведение скорости выявления i ошибки и времени выявления i ошибки есть 1 по определению:

(1) (N-i+1)*C*t i = 1

В этом предположении справедливо соотношение (2) для n ошибок:

(2) N*C*t 1 +(N-1)*C*t 2 +…+(N-n+1)*C*t n =n

N*C*(t 1 +t 2 +…+t n) - C*Σ(i-1)t i = n

NCT - C*Σ(i-1)t i = n

Если из (1) определить t i и просуммировать от 1 до n, то придем к соотношению (3) для времени T выявления n ошибок

(3) Σ1/(N-i+1) = TC

Если из (2) выразить C, приходим к соотношению (4):

(4) C = n/(NT - Σ(i-1)t i)

Наконец, подставляя C в (3), получаем окончательное соотношение (5), удобное для оценок:

(5) Σ1/(N-i+1) = n/(N - 1/T*Σ(i-1)t i)

Если оценить величину N приблизительно, используя известные методы оценки числа ошибок в программе , или данные о плотности ошибок для проектов рассматриваемого класса из исторической базы данных проектов, и, кроме того, использовать текущие данные об интервалах между ошибками t 1 ,t 2 …t n , полученные на фазе тестирования, то, подставляя эти данные в (5), можно получить оценку t n+1 -временного интервала необходимого для нахождения и исправления очередной ошибки (будущей ошибки).

Если t n+1 >Td - допустимого времени тестирования проекта, то тестирование заканчиваем, в противном случае продолжаем поиск ошибок.

Наблюдая последовательность интервалов ошибок t 1 ,t 2 …t n , и время, потраченное на выявление n ошибок T=Σt i , можно прогнозировать интервал времени до следующей ошибки и уточнять в соответствии с (4) величину C.

Критерий Moranda очень практичен, так как опирается на информацию, традиционно собираемую в процессе тестирования.

Мутационный критерий (класс IV).

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

Подход базируется на следующих понятиях:

Мутации - мелкие ошибки в программе.

Мутанты - программы, отличающиеся друг от друга мутациями.

Метод мутационного тестирования - в разрабатываемую программу P вносят мутации, т.е. искусственно создают программы-мутанты P1, P2... Затем программа P и ее мутанты тестируются на одном и том же наборе тестов (X,Y).

Если на наборе (X,Y) подтверждается правильность программы P и, кроме того, выявляются все внесенные в программы-мутанты ошибки, то набор тестов (X,Y) соответствует мутационному критерию, а тестируемая программа объявляется правильной .

Если некоторые мутанты не выявили всех мутаций, то надо расширять набор тестов (X,Y) и продолжать тестирование.

Пример применения мутационного критерия

Тестируемая программа P приведена на примере . Для нее создается две программы-мутанта P1 и P2.

В P1 изменено начальное значение переменной z с 1 на 2

В P2 изменено начальное значение переменной i с 1 на 0 и граничное значение индекса цикла с n на n-1

При запуске тестов (X,Y) = {(x=2,n=3,y=8),(x=999,n=1,y=999), (x=0,n=100,y=0 } выявляются все ошибки в программах-мутантах и ошибка в основной программе, где в условии цикла вместо n стоит n-1:

// степень n числа x

static public double PowerNonNeg(

double x, int n)

for (int i=1;n-1>=i;i++)

else Console.WriteLine(

быть больше 0.");

Пример 3.2. Основная программа P

double PowerNonNeg(double x, int n)

for (i=1;n-1>=i;i++)

быть больше 0.\n");

Пример 3.2.1. Основная программа P

Измененное начальное значение переменной z в мутанте Р1 помечено светлым тоном:

// Метод вычисляет неотрицательную

// степень n числа x

static public double PowerMutant1(

double x, int n)

for (int i=1;n>=i;i++)

else Console.WriteLine(

"Ошибка! Степень числа n должна

быть больше 0.");

Пример 3.3. Программа мутант P1.

double PowerMutant1(double x, int n)

for (i=1;n>=i;i++)

"Ошибка! Степень числа n должна

быть больше 0.\n");

Пример 3.3.1. Программа мутант P1.

Измененное начальное значение переменной i и границы цикла в мутанте P2 помечено светлым тоном:

// Метод вычисляет неотрицательную

// степень n числа x

static public double PowerMutant2(

double x, int n)

for (int i=0;n-1>=i;i++)

else Console.WriteLine(

"Ошибка! Степень числа n должна

быть больше 0");

Пример 3.4. Программа-мутант P2.

double PowerMutant2(double x, int n)

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

    Классы критериев

  • Структурные критерии используют информацию о структуре программы (критерии так называемого "белого ящика")
  • Функциональные критерии формулируются в описании требований к программному изделию (критерии так называемого "черного ящика" )
  • Критерии стохастического тестирования формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы.
  • Мутационные критерии ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.
  • Структурные критерии (класс I).

    Структурные критерии используют модель программы в виде "белого ящика", что предполагает знание исходного текста программы или спецификации программы в виде потокового графа управления. Структурная информация понятна и доступна разработчикам подсистем и модулей приложения, поэтому данный класс критериев часто используется на этапах модульного и интеграционного тестирования (Unit testing, Integration testing).Структурные критерии базируются на основных элементах УГП, операторах, ветвях и путях.
  • Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно.
  • Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно и не так уж велико. Данный критерий часто используется в системах автоматизации тестирования.
  • Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой (часто - 2, или числом классов выходных путей).
  • На приведен пример простой программы. Рассмотрим условия ее тестирования в соответствии со структурными критериями .

    1 public void Method (ref int x) { 2 if (x>17) 3 x = 17-x; 4 if (x==-13) 5 x = 0; 6 } Пример 3.1. Пример простой программы, для тестирования по структурным критериям

    1 void Method (int *x) { 2 if (*x>17) 3 *x = 17-*x; 4 if (*x==-13) 5 *x = 0; 6 } Пример 3.1.1. Пример простой программы, для тестирования по структурным критериям

    Тестовый набор из одного теста, удовлетворяет критерию команд (C0):(X,Y)={(x вх =30, x вых =0)} покрывает все операторы трассы 1-2-3-4-5-6Тестовый набор из двух тестов, удовлетворяет критерию ветвей (C1):(X,Y)={(30,0), (17,17)} добавляет 1 тест к множеству тестов для С0 и трассу 1-2-4-6. Трасса 1-2-3-4-5-6 проходит через все ветви достижимые в операторах if при условии true , а трасса 1-2-4-6 через все ветви, достижимые в операторах if при условии false .Тестовый набор из четырех тестов, удовлетворяет критерию путей (C2):(X,Y)={(30,0), (17,17), (-13,0), (21,-4)} Набор условий для двух операторов if c метками 2 и 4 приведен в

    Таблица 3.1. Условия операторов if
    (30,0) (17,17) (-13,0) (21,-4)
    2 if (x>17) > >
    4 if (x==-13) = =

    Критерий ветвей С2 проверяет программу более тщательно, чем критерии - C1, однако даже если он удовлетворен, нет оснований утверждать, что программа реализована в соответствии со спецификацией.Например, если спецификация задает условие, что|x|100 , невыполнимость которого можно подтвердить на тесте (-177,-177) . Действительно, операторы 3 и 4 на тесте (-177,-177) не изменят величину х=-177 и результат не будет соответствовать спецификации.Структурные критерии не проверяют соответствие спецификации, если оно не отражено в структуре программы. Поэтому при успешном тестировании программы по критерию C2 мы можем не заметить ошибку, связанную с невыполнением некоторых условий спецификации требований.

    Функциональные критерии (класс II)

    Функциональный критерий - важнейший для программной индустрии критерий тестирования. Он обеспечивает, прежде всего, контроль степени выполнения требований заказчика в программном продукте. Поскольку требования формулируются к продукту в целом, они отражают взаимодействие тестируемого приложения с окружением. При функциональном тестировании преимущественно используется модель "черного ящика". Проблема функционального тестирования - это, прежде всего, трудоемкость; дело в том, что документы, фиксирующие требования к программному изделию (Software requirement specification, Functional specification и т.п.), как правило, достаточно объемны, тем не менее, соответствующая проверка должна быть всеобъемлющей.Ниже приведены частные виды функциональных критериев .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Пусть для решения задачи тестирования системы "Система управления автоматизированным комплексом хранения подшипников" (см. Приложение 1, FS) был разработан следующий фрагмент спецификации требований:
  • Произвести опрос статуса склада (вызвать функцию GetStoreStat ). Добавить в журнал сообщений запись "СИСТЕМА: Запрошен статус СКЛАДА". В зависимости от полученного значения произвести следующие действия:
  • Произвести опрос терминала оси (вызвать функцию получения сообщения от терминала - GetAxlePar ). В журнал сообщений должно быть добавлено сообщение "СИСТЕМА: Запрошены параметры оси". В зависимости от возвращенного функцией GetAxlePar значения должны быть выполнены следующие действия ():
  • Определим классы входных данных для параметра - статус склада:
  • Статус склада = 0 (правильный).
  • Статус склада = 4 (правильный).
  • Статус склада = 16 (правильный).
  • Статус склада = 32 (правильный).
  • Статус склада = любое другое значение (ошибочный).
  • Теперь рассмотрим тестовые случаи:

    Тестовый случай 1 (покрывает класс 4):

    Статус склада - 32.

    Система запрашивает статус склада (вызов функции GetStoreStat ) и получает 32

    Тестовый случай 2 (покрывает класс 5):

    Состояние окружения (входные данные - X ):

    Статус склада - 12dfga.

    Ожидаемая последовательность событий (выходные данные - Y ):

    Система запрашивает статус склада (вызов функции GetStoreStat ) и согласно пункту спецификации при ошибочном значении статуса склада в журнал добавляется сообщение "СКЛАД: ОШИБКА: Неопределенный статус".

    Стохастические критерии (класс III)

    Стохастическое тестирование применяется при тестировании сложных программных комплексов - когда набор детерминированных тестов (X,Y) имеет громадную мощность. В случаях, когда подобный набор невозможно разработать и исполнить на фазе тестирования, можно применить следующую методику.
  • Разработать программы - имитаторы случайных последовательностей входных сигналов {x} .
  • Вычислить независимым способом значения {y} для соответствующих входных сигналов {x} и получить тестовый набор (X,Y) .
  • Протестировать приложение на тестовом наборе (X,Y) , используя два способа контроля результатов:
  • Критерии стохастического тестирования
  • Cтатистические методы окончания тестирования - стохастические методы принятия решений о совпадении гипотез о распределении случайных величин. К ним принадлежат широко известные: метод Стьюдента (St ), метод Хи-квадрат (χ 2 ) и т.п.
  • Метод оценки скорости выявления ошибок - основан на модели скорости выявления ошибок , согласно которой тестирование прекращается, если оцененный интервал времени между текущей ошибкой и следующей слишком велик для фазы тестирования приложения.

  • Рис. 3.1.

    При формализации модели скорости выявления ошибок () использовались следующие обозначения:N - исходное число ошибок в программном комплексе перед тестированием,C - константа снижения скорости выявления ошибок за счет нахождения очередной ошибки,t 1 ,t 2 ,…t n - кортеж возрастающих интервалов обнаружения последовательности из n ошибок,T - время выявления n ошибок.Если допустить, что за время T выявлено n ошибок, то справедливо соотношение (1), утверждающее, что произведение скорости выявления i ошибки и времени выявления i ошибки есть 1 по определению:

    (1) (N-i+1)*C*t i = 1

    В этом предположении справедливо соотношение (2) для n ошибок:

    (2) N*C*t 1 +(N-1)*C*t 2 +…+(N-n+1)*C*t n =n N*C*(t 1 +t 2 +…+t n) - C*Σ(i-1)t i = n NCT - C*Σ(i-1)t i = n

    Если из (1) определить t i и просуммировать от 1 до n , то придем к соотношению (3) для времени T выявления n ошибок

    (3) Σ1/(N-i+1) = TC

    Если из (2) выразить C , приходим к соотношению (4):

    (4) C = n/(NT - Σ(i-1)t i)

    Наконец, подставляя C в (3), получаем окончательное соотношение (5), удобное для оценок:

    (5) Σ1/(N-i+1) = n/(N - 1/T*Σ(i-1)t i)

    Если оценить величину N приблизительно, используя известные методы оценки числа ошибок в программе , или данные о плотности ошибок для проектов рассматриваемого класса из исторической базы данных проектов, и, кроме того, использовать текущие данные об интервалах между ошибками t 1 ,t 2 …t n , полученные на фазе тестирования, то, подставляя эти данные в (5), можно получить оценку t n+1 -временного интервала необходимого для нахождения и исправления очередной ошибки (будущей ошибки).Если t n+1 >Td - допустимого времени тестирования проекта, то тестирование заканчиваем, в противном случае продолжаем поиск ошибок.Наблюдая последовательность интервалов ошибок t 1 ,t 2 …t n , и время, потраченное на выявление n ошибок T=Σt i , можно прогнозировать интервал времени до следующей ошибки и уточнять в соответствии с (4) величину C .Критерий Moranda очень практичен, так как опирается на информацию, традиционно собираемую в процессе тестирования.

    Мутационный критерий (класс IV).

    Постулируется, что профессиональные программисты пишут сразу почти правильные программы, отличающиеся от правильных мелкими ошибками или описками типа - перестановка местами максимальных значений индексов в описании массивов, ошибки в знаках арифметических операций, занижение или завышение границы цикла на 1 и т.п. Предлагается подход, позволяющий на основе мелких ошибок оценить общее число ошибок, оставшихся в программе.Подход базируется на следующих понятиях: Мутации - мелкие ошибки в программе. Мутанты - программы, отличающиеся друг от друга мутациями .Метод мутационного тестирования - в разрабатываемую программу P вносят мутации , т.е. искусственно создают программы-мутанты P1 , P2 ... Затем программа P и ее мутанты тестируются на одном и том же наборе тестов (X,Y) .Если на наборе (X,Y) подтверждается правильность программы P и, кроме того, выявляются все внесенные в программы-мутанты ошибки, то набор тестов (X,Y) соответствует мутационному критерию , а тестируемая программа объявляется правильной .Если некоторые мутанты не выявили всех мутаций , то надо расширять набор тестов (X,Y) и продолжать тестирование.

    Пример применения мутационного критерия

    Тестируемая программа P приведена на . Для нее создается две программы-мутанта P1 и P2 .В P1 изменено начальное значение переменной z с 1 на 2 ().В P2 изменено начальное значение переменной i с 1 на 0 и граничное значение индекса цикла с n на n-1 ().При запуске тестов (X,Y) = {(x=2,n=3,y=8),(x=999,n=1,y=999), (x=0,n=100,y=0 } выявляются все ошибки в программах-мутантах и ошибка в основной программе, где в условии цикла вместо n стоит n-1 :

    // Метод вычисляет неотрицательную // степень n числа x static public double PowerNonNeg(double x, int n) { double z=1; if (n>0) { for (int i=1;n-1> Пример 3.2. Основная программа P

    double PowerNonNeg(double x, int n) { double z=1; int i; if (n>0) { for (i=1;n-1> Пример 3.2.1. Основная программа P

    Измененное начальное значение переменной z в мутанте Р1 помечено светлым тоном:

    // Метод вычисляет неотрицательную // степень n числа x static public double PowerMutant1(double x, int n) { double z=2; if (n>0) { for (int i=1;n>=i;i++) { z = z*x; } } else Console.WriteLine("Ошибка! Степень числа n должна быть больше 0."); return z; } Пример 3.3. Программа мутант P1.

    double PowerMutant1(double x, int n) { double z=2; int i; if (n>0) { for (i=1;n>=i;i++) { z = z*x; } } else printf("Ошибка! Степень числа n должна быть больше 0. "); return z; } Пример 3.3.1. Программа мутант P1.

    Измененное начальное значение переменной i и границы цикла в мутанте P2 помечено светлым тоном:

    // Метод вычисляет неотрицательную // степень n числа x static public double PowerMutant2(double x, int n) { double z=1; if (n>0) { for (int i=0;n-1>=i;i++) { z = z*x; } } else Console.WriteLine("Ошибка! Степень числа n должна быть больше 0"); return z; } Пример 3.4. Программа-мутант P2.

    double PowerMutant2(double x, int n) { double z=1; int i; if (n>0) { for (i=0;n-1>=i;i++) { z = z*x; } } else printf("Ошибка! Степень числа n должна быть больше 0. "); return z; } Пример 3.4.1. Программа-мутант P2.

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

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

    • - надежность;
    • - валидность;
    • - объективность;
    • - экономичность;
    • - полезность .

    Валидность (англ. valid - действительный, пригодный, имеющий силу) - один из важнейших критериев качества теста, означающий пригодность теста для измерения того, что он по замыслу должен измерять; или иначе: соответствие тестовой методики измеряемому концепту. Если, например, проводится тестирование испытуемых на определение их интеллектуальных способностей, то вряд ли целесообразно с помощью одного и того же теста оценивать еще и типы их темперамента. Проверка теста на валидность включает ряд процедур, главными из которых являются процедуры валидизации (валидации). Определяется валидация посредством корреляции результатов тестирования с успешностью выполнения соответствующей деятельности. К примеру, если с группой испытуемых проведено тестирование на определение общих способностей, то процесс валидации можно представить как установление корреляционных связей полученных данных тестирования с результатами обследования этих же испытуемых на предмет выявления общих способностей по другим проверенным и надежным методикам. Валидность считается достаточно высокой, если коэффициент корреляции будет более 0,6. При значении коэффициента корреляции 0,45-0,65 валидность считается вполне удовлетворительной .

    Надёжность - один из важных критериев его качества, относящегося к точности психологических измерений. Чем выше надежность теста, тем относительно свободнее он от погрешностей измерений. Надежность теста рассматривается как устойчивость (стабильность) результатов при повторном тестировании на той же выборке испытуемых. Повторное тестирование обычно проводится через две недели после первого тестирования. Считается, что при коэффициенте корреляции более 0,75 уровень надежности теста вполне приемлем.

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

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

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

    Выделяют следующие типы надёжности:

    ретестовая надёжность (самый очевидный и понятный метод определения надёжности результатов теста - его повторное проведение;

    надёжность взаимозаменяемых форм (один из способов избежать трудностей, с которыми приходится сталкиваться при определении ретестовой надёжности, - использование взаимозаменяемых форм теста);

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

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

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

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

    Формулу 3 можно преобразовать:

    Используя формулу (1) получаем:

    Значение, выведенное из равенства достоверности, называется стандартной ошибкой текста. Она выявляет среднее отклонение ошибки от истинного значения .

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

    Надежность не обязательно предполагает валидность. Она является необходимым, но недостаточным условием валидности. Справедливо следующее неравенство: валидность надежность. Это означает, что валидность теста не может превышать его надежность .

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

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

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

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

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

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

    Социальная адаптация тестовых методик - данное требование выдвинуто сравнительно недавно. И связано это с необходимостью адаптации тестовых методик, заимствованных из других стран, к новым региональным и социальным условиям. Р.С Немов по этому поводу пишет: "Если, например, созданный в Европе тест интеллекта впервые применяется в стране, где доминирующим в структуре интеллекта является не словесно-логическое, а образное или практическое мышление, то он обязательно должен быть социокультурно адаптирован. В противном случае, применяя его в первоначальном, неадаптированном варианте, мы, скорее всего, получим низкие результаты, которые не будут соответствовать уровню развития мышления у жителей данной страны».

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

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

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

    К побочным критериям качества тестов относятся:

    Нормируемость;

    Сравнимость;

    Целесообразность(полезность);

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

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

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

    Классы критериев

    1. Структурные критерии используют информацию о структуре программы (критерии так называемого "белого ящика")
    2. Функциональные критерии формулируются в описании требований к программному изделию (критерии так называемого "черного ящика" )
    3. Критерии стохастического тестирования формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической гипотезы.
    4. Мутационные критерии ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.

    Структурные критерии (класс I).

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

    Структурные критерии базируются на основных элементах УГП, операторах, ветвях и путях.

    • Условие критерия тестирования команд (критерий С0) - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно.
    • Условие критерия тестирования ветвей (критерий С1) - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно и не так уж велико. Данный критерий часто используется в системах автоматизации тестирования .
    • Условие критерия тестирования путей (критерий С2) - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раза. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой (часто - 2, или числом классов выходных путей).
    Таблица 3.1. Условия операторов if
    (30,0) (17,17) (-13,0) (21,-4)
    2 if (x>17) > >
    4 if (x==-13) =

    Критерий путей С2 проверяет программу более тщательно, чем критерии - C1, однако даже если он удовлетворен, нет оснований утверждать, что