Страница107
Навторомуровнетестируютсяметодыкласса,которыеобразуютконтекстинтеграционного
тестированиякаждогокласса.
Натретьемуровнеужепротестированныйклассвключаетсявобщийконтекст(деревоклассов)
программногопроекта.Здесьстановитсявозможнымотслеживатьреакциюпрограммынавнешние
события.
Второйитретийуровнирассматриваемоймоделисоответствуютэтапуинтеграционноготестирования.
Вслучаесистем,написанныхнапроцедурныхязыках,процесстестированиямодуляпроисходиттак–для
каждогомодуляразрабатываетсятестовыйдрайвер,вызывающийфункциимодуляисобирающий
результатыихработыинаборзаглушек,которыеимитируютповедениефункций,содержащихсявдругих
модулях,непопадающихподтестированиеданногомодуля.
Притестированииобъектно‐ориентированныхсистемсуществуетрядособенностей,преждевсего
вызванныхинкапсуляциейданныхиметодоввклассах.
Внутриклассаотдельновзятыеметодыимеютимперативныйхарактерисполнения.Языкиобъектно‐
ориентированногопрограммированиявозвращаютконтрольвызывающемуобъекту,когдасообщение
обработано.Поэтомукаждыйметод(функция‐членкласса)долженпройтитрадиционноемодульное
тестированиеповыбранномукритерию.Всерезультаты,полученныедлятестированиямодулей,
безусловно,подходятдлятестированияметодовклассов.
Процесстестированияклассовкакмодулейиногданазываюткомпонентнымтестированием.Входетакого
тестированиепроверяетсявзаимодействиеметодоввнутриклассаиправильностьдоступаметодовк
внутреннимданнымкласса.Притакомтестированиивозможнообнаружениенетолькостандартных
дефектов,связанныхсвыходамизаграницыдиапазонаилиневернореализов
аннымитребованиями,а
такжеобнаружениеспецифическихдефектовобъектно‐ориентированногопрограммногообеспечения:
дефектовинкапсуляции,врезультатекоторых,например,сокрытыеданныеклассаоказывается
недоступнымиприпомощисоответствующихпубличныхметодов;
дефектовнаследования,приналичиикоторыхсхеманаследованияблокируетважныеданныеили
методыотклассов‐потомков;
дефектовполиморфизма,прикоторыхполиморфноеповедениеклассаоказывается
распространеннымненавсевозможныеклассы;
дефектовинстанцирования,прикоторыхвовновьсоздаваемыхобъектахклассане
устанавливаютсякорректныезначенияпоумолчаниюпараметровивнутреннихданныхкласса.
Однаковыборклассавкачестветестируемогомодуляимеетирядсопряженныхпроблем.
ОПРЕДЕЛЕНИЕСТЕПЕНИПОЛНОТЫТЕСТИРОВАНИЯКЛАССА.Есливкачестветестируемого
модулявыбранкласс,несовсемясно,какопределятьстепеньполнотыеготестирования.Содной
стороны,можноиспользоватьклассическийкритерийполнотыпокрытияпрограммногокода
тестами–еслиполностьювыполненывсеструктурныеэлементывсехметодов–какпубличных,так
искрытых,тотестыможносчитатьполными.Однакосуществуетдругойподходктестированию
класса,согласнокоторомувсепубличныеметодыдолжныпредоставлятьпользователюданного
классасогласованнуюсхемуработыидостаточнопроверитьтипичныекорректныеинекорректные
сценарииработысданнымклассом.
ПРОТОКОЛИРОВАНИЕСОСТОЯНИЙОБЪЕКТОВИИХИЗМЕНЕНИЙ.Некоторыеметодыкласса
предназначенынедлявыдачиинформациипользователю,адляизменениявнутреннихданных
объектакласса.Значениевнутреннихданныхобъектаопределяетегосостояниевкаждый
отдельныймоментвремени,авызовметодов,изменяющихданные,изменяетисостояниеобъекта.
Притестированииклассовнеобходимопроверять,чтоклассадекватнореагируетнавнешние