теория_6 (1035684), страница 3
Текст из файла (страница 3)
Рис. 19.1. Генерация отчета о покрытии и изменения по результатам его анализа
Недостаточное покрытие может свидетельствовать о неполноте системы тестов или тест-требований, в этом случае в запросе об изменении указывается на необходимость расширения системы тестов или тест-требований. Другой причиной недостаточного покрытия могут быть участки защитного кода, которые никогда не выполнятся даже в случае нештатной работы системы. В этом случае в запросе на изменение указывается на необходимость модификации исходных текстов либо отмечается, что для этого участка программной системы не требуется покрытие. В качестве третьей причины недостаточного покрытия может выступать рассогласование требований и программного кода системы, в результате которого в коде могут остаться неиспользуемые более участки либо, наоборот, появиться участки, рассчитанные на будущее (и реализующие функциональность, не описанную в требованиях). В этом случае в запросе на изменение указывается на необходимость модификации требований и/или кода системы для приведения их в согласованное состояние.
19.2.4.2. Возможные формы отчетов о покрытии
Типичный отчет о покрытии представляет собой список структурных элементов покрываемого программного кода (функций или методов), содержащий для каждого структурного элемента следующую информацию:
-
название функции или метода;
-
тип покрытия (по строкам, по ветвям, MC/DC или иной);
-
количество покрываемых элементов в функции или методе (строк, ветвей, логических условий);
-
степень покрытия функции или метода (в процентах или в абсолютном выражении);
-
список непокрытых элементов (в виде участков непокрытого программного кода с номерами строк).
Кроме того, отчет о покрытии содержит заголовочную информацию, позволяющую идентифицировать отчет, и общий итог – общую степень покрытия всех функций, для которых собирается информация о покрытии.
Отчет о покрытии может создаваться либо для всех функций или методов программного модуля или всего проекта, либо выборочно для определенных функций или методов.
В случае, если размер функций, для которых генерируется выборочный отчет, невелик, может применяться другая форма отчета о покрытии, в котором покрытый и непокрытый программный код выделяются различными цветами. Такая форма неприменима для покрытия ветвей и логических условий, но может использоваться для покрытия по строкам.
19.2.4.3. Покрытие на уровне исходных текстов и на уровне машинных кодов
В некоторых случаях инструментальные средства сбора покрытия анализируют покрытие программного кода тестами не на уровне исходных текстов системы, а на уровне машинных инструкций. В этом случае степень покрытия зависит и от того, какой исполняемый код генерируется компилятором.
Поскольку степень покрытия может меняться в зависимости от оптимизации при генерации кода, в некоторых случаях даже при полном выполнении всех операторов языка высокого уровня, на котором написана программная система, не удается достичь полного покрытия на уровне исполняемого кода.
Сбор информации о покрытии на уровне исполняемого кода наиболее часто применяется в высококритичных программных системах, где не допускается наличия "мертвого" исполняемого кода, который потенциально может привести к сбою или отказу во время работы системы. К таким системам, в первую очередь, можно отнести авиационные бортовые системы, медицинские системы и системы обеспечения безопасности информации.
19.3. Возможности MVSTE по построению покрытия кода
Замечание. Подробнее о покрытии кода можно прочитать по адресу: http://msdn2.microsoft.com/en-us/library/ms182496(VS.80).aspx
Чтобы увидеть, какая часть кода вашего проекта фактически тестируется, используйте такой инструмент для тестировщиков в Visual Studio Team System, как Покрытие кода. Этот инструмент показывает процент кода, который был выполнен, и "раскрашивает" его, показывая, какие линии кода были выполнены, а какие нет.
На прошлых семинарах мы познакомились с возможностями MVSTE по автоматизации модульного тестирования на примерах тестирования метода Add класса CalcClass и метода RunEstimate класса AnalaizerClass. Покажем на этих же примерах, какую часть кода покрыли созданные нами модульные тесты.
Для начала откроем BaseCalculator, с которым мы работали на семинаре 5.
Далее в меню Test выбираем Edit Test Run Configuration. В подменю выбираем Local Test Run (localtestrun.testrunconfig), чтобы запустить файл конфигурации. (аналогично запустить файл конфигурации можно, щелкнув в Solution Explorer под Solution Items на localtestrun.testrunconfig). Появится диалоговое окно localtestrun.testrunconfig (рис. 19.2).
Рис. 19.2. Диалоговое окно "localtestrun.testrunconfig"
Выбираем Code Coverage.
В поле Select artifacts to instrument отмечаем пункты BaseCalculator.exe и BaseCalculator.Test.dll
Замечание. Если вы выбрали BaseCalculator.Test.dll, то MVSTE генерирует информацию о покрытии кода для методов в вашем тестовом проекте.
Нажмите Apply, затем закройте диалоговое окно. Мы настроили файл конфигурации.
Далее в меню Test выберите Select Active Test Run Configuration. Подменю показывает все конфигурации запуска теста вашего решения. Поместим метку на конфигурацию запуска, которую мы только что редактировали, localtestrun.testrunconfig; что сделает её активной конфигурацией запуска теста.
В окне Test View выделяем все тесты и нажимаем кнопку Run Selection. Запустятся созданные нами на 5-ом семинаре тесты.
После выполнения всех тестов в окне Test Results в меню Test выберем Windows и в раскрывшемся подменю нажмем на Code Coverage Results. Откроется окно Code Coverage Results. (рис. 19.3)
Рис. 19.3. Окно "Code Coverage Results"
Замечание. Колонка Hierarchy изначально показывает единственный узел (в данном случае Belf@BLEFF 2006-11-08 01:34:12), который содержит данные обо всем покрытии кода, достигнутом в последнем запущенном и выполненном тесте. Он назван, используя следующий формат: <user name>@<computer name> <date> <time>.
Если вы раскроете этот узел, то увидите выбранные нами в файле конфигурации проекты BaseCalculator.exe и BaseCalculator.Test.dll
Раскроем узел для сборки BaseCalculator.exe, для пространства имен BaseCalculator и для класса CalcClass, как показано на рис.19.4.
Рис. 19.4. Окно "Code Coverage Results"
Строки в классе CalcClass представляют его методы. Колонки в окне Code Coverage Results показывают статистику покрытия для отдельных методов, для классов, и для всего пространства имен.
Замечание. В этой таблице можно выбирать, в каком порядке и какие колонки будут отображаться. Для этого нужно нажать правой кнопкой мыши в окне Code Coverage Results и выбрать в контекстном меню пункт Add/Remove Columns.
Замечание. Статистика покрытия кода показывает покрытие блоков и линий кода.
Чтобы посмотреть, какая именно часть кода была покрыта, щелкнем два раза на строку с методом Add.
Откроется файл исходного текста CalcClass.cs на методе Add. В этом файле мы видем "окрашенный" код. Линии, окрашенные в голубой цвет, были выполнены в процессе выполнения тестов, а линии, окрашенные в красный, не были выполнены. (рис.19.5)
Замечание. Цвета окрашивания линий покрытия кода можно изменить. Для этого нужно зайти в Tools->Options. В открывшемся диалоговом окне нужно выбрать Environment->Fonts and Colors. Далее в раскрывающемся списке Show settings for выбираем Text Editor. Далее в Display items нужно выбрать область покрытия кода, цвет которой вы хотите изменить: это Coverage Not Touched Area, или Coverage Partially Touched Area, или Coverage Touched Area. Для этих областей покрытия кода можно изменить шрифт, его размер, жирность, цвет текста и его "окрашивание". По завершении, чтобы сохранить изменения и выйти из диалогового окна, нажмите OK.
Рис. 19.5. "Окрашивание" покрытия кода
Прокручивая файл, вы можете увидеть в нем покрытие для других методов.
Замечание. Точно так же можно просмотреть покрытие кода наших модульных тестов, то есть, можно увидеть, какие из тестовых методов были осуществлены (раскрыв в окне Code Coverage Results сборку BaseCalculator.Test.dll). Применяется та же самая схема окрашивания: голубой показывает выполненный в процессе выполнения теста код; красный — невыполненный.
Замечание. Результаты покрытия кода можно экспортировать в отдельный XML-файл. Для этого в окне Code Coverage Results нужно нажать на кнопку Export Results
, указать имя и местоположение файла.
19.4. Раздаточный материал
19.4.1. Программа
Модульные тесты, которые написали студенты, выполнив домашнее задание 5-го семинара.
19.5. Задание
Разработать модульные тесты своей программы, добившись максимального покрытия кода по MC\DC.















