Текст
                    rrЕСТИРО ВАНИЕ
проrРАммноrо
о Б ЕСПЕЧЕliИЯ.


Фундаментальные
концепции менеджмента
6изнес
 приложений


СЭМ КАНЕР


ДЖЕК ФОЛ К


EHr КЕК HrYEH


[1 oi;s;ii





ББК 32,973 К 81 Канер СЭМ н др. К 81 Тестирование ПрОl'раММIЮI'О обеспечения, Фундаlента,'Ыlые коннеПIIИИ менеджмента бюнеспридожений: Пер, с aIlIl./СЭМ Канер, Джек Фодк, EHr Кек HI'yeH,  К,: Издате.1ЬСТВО <,ДиаСофт.., 2001,  544 с, ISBN 966 7393879 КНИI'а именитых спениа.1ИСТОI3 в области разработки ПрOl'раМ\lIЮI'О обеспече ния ПОСl3яшеllа одному из наиБО,lее важных 11 неТРИI3И<L1ЫIЫХ аспектов 13 рамках пронесса создания С,lОЖНЫХ ПрOl'раммных cllcTeM, КНИIУ ОТ.1И'Iает, прежде I3cel'O, привязка к УС,lОI3IIЯМ реалыюrо мира на ПР\lмерах И3I3еСТlIЬ\Х ко\\пatIИЙразработ ЧИКОI3, наХОДЯШIIХСЯ 13 Сll,lИКОIЮВОЙ ДО,llше, Подробно рассмаТРlшается широкий спектр вопросов: от Орl'aIlИзаIlИИ прощ:сса тестироваllИЯ до собственно TeKcТllpo l3аНIIЯ проекта, кода, документаllИИ и т,д, Д.1Я спеllиа..lиетоl3 в об,lасти разраБОТКII ПрOl'раммноrо обеспечении, ББК 32.973 Научное издание Канер Сэм и лр, ТЕСТИРОВАНИЕ проrРАммноrо ОБЕСПЕЧЕНИЯ, ФУНДАМЕНТАIJЬНЬ/Е КОННElШИИ МЕНЕдЖМЕНТА БИЗНЕСIlРИ,lОЖЕНИЙ fлавный редактор Ю.Н.Артеменко Научныii ре,lактор О,В,3дир ЛинраТУрllЫЙ редактор А,В,I/IтиlI Переводчик о,в,заир Верстка Т II.АртемеllКО r.lаВIIЫЙ ю\3айнер О,А,ШадРUII Н/К СдаllО в lIабор 13,03,01, Подписано 13 печать 13,05,01, Формат 60x84/16, БУМaI'а офсет, ная, ['арнитура ТаЙ\IС, Печать офсетная, УСJl,печ.л. 40,80, УС,l,КР,оп, 40,80 Тираж 3000 ')K'J, Заказ NQ I  78, ИщатеДЬСТ130 «ДиаСофт.., Киев,55, а/я 100, тед./факс (044) 212 1254, email: books(diasoft,kiev,IJa, http://www,diasoft,kiev,lIa, AtJtllOrized lrun,lulion from 111e [ngl"h lungtluge ed,lion rtlbIi,hed Ьу Inlernalionul ТllOm,оп Comrtl1er Pre", Coryriglll се) 1999 АII rights rбеr\'сd. r\o rart of tlli hook mi.lY Ье rerrodlJced or transmittcd in алу form or Ьу злу теап. eJectronic от mechf!nicaJ, rлсludiпg рlюtосоруiпg. rccordiпg от Ьу апу inlormalion .torage rctr;eva1 system, without pcrmision froт t11C' PlJbIiller. Rl,,,ian langtlage edilion rtlbIi,hed Ьу OiaSofl Lld, Coryriglll f' 2001 ЛIНlен Н1.Я Ilre..:lOcraB:ICHa 11 шаJСЛЬLТlЮ:\.1 International Thomson ComrLJtcr Prcs, ПОl1rаJ..1СЛС'IН1С Interl1ational TllOmon PlIhIihing Inc. Нее lIraBI.I Зi.lrсзеrвиrоваtIЫ. вк.lючая nraBo на полнос 11..111 чаСПlчное JюеПрО11 ше 1 1СIШС в KaKoil бы ro нlt было фОр\1е. ISBN 9667393879 (рус,) ISB' Ц(5032847I (alll',l,) Свидетедьство fиrиеническое i1) Перевод lIa русскиii я'Jык, Иыате-тьство «ДШIСОфТ», 2001 i1) II1terl1ational Тlюmsоn PubIishillg Press, 1999 i1) Оформлеl1\1е, Ищате.1ЬСТВО <,ДиаСофт», 2001 о реrистрации 24729912 от 11.03.97. заключение N!! 77.99.6.953.П.438.2.99 от 04.02.1999 
Оrлавление Часть 1. ОСНОВЫ .. ..... ....... ........... ........ .... .... .... 19 rлава 1. Пример серии тестов .........................................20 Первый цикл тестирования ..'................'........................................20 Второй цикл тестирования '..,........,......,....,........................'..'....'... 32 Что дальше? ..... ....... ..,..,............. ,..... ................... ....'..................... 37 rлава 2. Желаемое и действительное в жизни тестировщика. ......... ....... ......... .....................38 Полностью протестировать проrрамму невозможно........'..........'... 39 Цель тестировщика  проверка правильности проrраммы? ,..,......, 46 Итак, для чеrо же тестируют проrраммы? ..'..........'..'..'........'..'..'...49 rлава 3. ТИПbl тестов и их роль в процессе разработки проrраммноrо обеспечения ........................ 50 Обзор стадий разработки..........'........'................'..'..............'....... 55 Стадии планирования.. ....,.... '...... ,.. ..,..,..... ,......,..'.... ..,...........,...... 57 Тестирование на этапе планирования ....'..'....,....'....'..........'........., 58 Стадии проектирования ... .............,..,............ ....,.....' '.. ..,..,............ 62 Тестирование на этапе проектирования '....'......................'...........66 Тестирование "стеклянноrо ящика" на стадии кодирования.. .......... 69 Реrрессионное тестирование ................ ......,.... ......,... ..,....'...,......, 80 Тестирование "черноrо ящика" '........'............'..'................'...........80 Сопровождение .... ,.... ........ .......... '.. ,... ..,.....,.., '....' ......... ........... ....' 90 rлава 4. ПроrраММНblе ошибки ........................................ 93 Качество ....,.................. ,.... .....................,.......... '...................,...... 93 Что такое проrраммная ошибка? ......'....'............'........'....'........'...95 Катеrории проrраммных ошибок ..'..,........,........'........,..'............,.. 95 rлава 5. Документирование и анализ ошибок .................. 101 Отчет следует составлять немедленно ........,........,..'..,....,......,..... 102 Структура отчета о проблеме ......'..........'..'..........'..'............,..,... 103 Каким должен быть отчет о проблеме ......,..........'..'....,..'............. 113 Анализ воспроизводимой ошибки ............,..................,....,........'.. 116 Методика анализа воспроизводимой ошибки '............,..'............. 119 Поиск способа воспроизведения ошибки ....,....,..........................' 1/:) 
6 Тестирование npocpa,\I'\ulOcO обеспеченuя Часть 11. Приемы и технолоrии тестирования .....129 rлава 6. Система отслеживания проблем ....................... 130 Основное назначение системы отслеживания проблем ,......'........ 134 Задачи системы ............ .........,.............. ..,.... ..,........' ..,..,............. 135 Процесс отслеживания проблемы ..,......................,...................... 135 Пользователи системы отслеживания проблем ..,......,..............,..' 144 Реализация базовых функций системы отслеживания проблем.... 158 Дополнительные замечания о документировании проблем .......... 169 Терминолоrия ........ ..'.... ...........' ...... ....... ....................,.........,...... 178 rлава 7. Разработка тестов ........................................... 180 Характеристики хорошеrо теста ..,....,........,..,....,..'............,..,.....' 182 Классы эквивалентности и rраничные условия ..........................,.. 183 Тестирование переходов между состояниями ......'........,.............. 193 Условия rOHoK и друrие временные зависимости ,..................,..,.. 194 Наrрузочные испытания..........'........'..............'..'......'...........'...... 196 Проrнозирование ошибок....'..'..............'.. ,................................., 196 Тестирование функциональной эквивалентности: автоматизация, анализ чувствительности и случайный ввод ..........'..,.............. 197 Реrрессионное тестирование: успешно ли исправлена ошибка ,.., 204 Реrрессионное тестирование: стандартная серия тестов ............, 205 Выполнение тестов ..... .......... ..,.. ..,....'..' ..,........' ..'... ............ ......,.. 206 rлава 8. Тестирование принтеров и друrих устройств ....... 208 Общие вопросы конфиrурационноrо тестирования .....................' 209 Тестирование печати ............,............,..........'....,......'....,......,.....' 211 rлава 9. Адаптационное тестирование ...........................237 Изменен ли исходный код? ............,........,......'......,........,......,...... 238 Привлекайте к работе специалистов, свободно владеющих языком ..,.. .......... ..,..,....'.... ..,......,... ..,........,..,... ,.., 239 Встроен ли текст в проrраммный код? ......................................,.. 239 Перевод длиннее исходноrо текста ..'..'........'..'....'........'......'..'...239 Наборы символов................,....,......,..,.....,...........,....,......... ....,..' 240 Клавиатура .............. ............... ..'.................,............................... 240 Фильтрация ввода...... ......... ....... .............. ............. ...... ,..... .......... 241 Заrрузка, сохранение, импорт и экспорт символов OCHoBHoro и расширенноrо набора ASCII........,........,..,........... 241 Язык и операционная система ..................................................,.. 242 Клавиши вызова....... ............... ....,.. ................'............................ 242 Сборные сообщения. ....,............ ..'.....................,...... ..,..,....... ,..... 242 
Ославлеlluе 7 Идентификаторы сообщений об ошибках ..,........'.....................,.. 243 Правила переноса ............................................................'........., 243 Правописание .............. ..... ........ ...... .............. .............................. 243 Порядок сортировки...... ...........,............. ..................... ................ 243 Преобразование текста к верхнему и нижнему реrиСтру ......,....,.. 244 Правила подчеркивания .....,.. ......,.....,................'..... .....'...... ....... 244 Принтеры ..... ...,........ ........,............... ......... ............................,..... 244 Размеры бумаrи ... ....,... ................................ ...... ,.. ,..... ......,..,...... 244 Процессоры и видео..... ..... .............'..'..'..' .......... ......,............ ...... 244 Форматы данных и опции настройки ..,.........,.....................,......... 245 Единицы измерения ...... ..... ............,..,.. ,......'............,....' ....,........ 245 Изображения, связанные с конкретной культурой ..'..................,.. 246 Выходные данные, связанные с конкретной культурой ............,.... 246 Совместимость с местными продуктами ............................,......,.. 246 Не будьте наивными '..,..................,..,....,.........................'.........., 246 Автоматизированное тестирование ..........'....'..'..........................247 rлава 10. Тестирование документации ...........................248 Хорошая документация ............ ..,......... ..'...... ..................... ,........ 249 Цели тестировщика документации ............................... '........ ....... 251 Как тестирование документации повышает надежность проrраммноrо продукта ..................................'........'.............. 252 Назначьте техническоrо редактора ........'..........,.......................... 254 Работа с руководством в процессе ero разработки ...................... 254 Интерактивная справка ..,..,... ....,......,....,...... '.. '...... '.... ,............... 262 rлава 11. ИнструментаЛЬНblе средства тестировщика ...... 264 Базовые инструменты тестировщика ............'..........'........'......'...265 Автоматизация приемочноrо и реrрессионноrо тестирования ...... 267 Стандарты.".'....,.'.."".."...".....' '..'..'. '..'..........,..,...'..."..'.... '..'.... 277 Тестирование "стеклянноrо ящика" ,..................'......,................,.. 280 rлава 12. Планирование и документация ........................ 284 Общее назначение TecToBoro плана: продукт или инструмент? .... 286 Цели, преследуемые при планировании тестов и разработке документации......" '...'.... '....""..,..,.....,....,.."..,...', '..,....",'.....' 288 Тесты каких типов следует фиксировать в плановых документах.. 296 Стратеrия разработки компонентов TecToBoro плана ..................' 300 Компоненты плана тестирования..........'.......... '........, ....,..,.......... 307 Документирование тестовых материалов ..................................,.. 339 Заключение..""..'..'...."'.'..............'..'........'..'...." '..'....,.........,...., 355 
8 Тестирование просра,нлtllOсО обеспечения Часть 111. Управление проектами и rруппами .....357 rлава 13. Объединяющая .............................................358 Чем приходится поступаться разработчикам проrраммноrо обеспечения.............. ...... ...................... ................................. 360 Модели разработки проrраммноrо обеспечения ..........,............... 362 Затраты на качество ....................................................................371 Последовательность этапов проекта ..'......'........'..................'..'...373 Проектирование продукта........... ......,............... ....,............. ..,...., 381 Реализация базовых функций ........,......,......'..,....,................,...... 388 Почти альфа..... ..,.. ,........... ...., ....,......... ..,.. ....,...... '..'............. ...... 389 Альфа ................... ..'.. ..,... ........,.... ........ ..........'........ .................., 392 Пребета ....' ,....,... ,........... ...... ,...... '....., ..,..,.... ....... ....,........ '.. '....' 404 Бета'..""..""'.......'.."'.""'."..".'..."'."""........."".""""...'."'."'.'. 405 Замораживание пользовательскоrо интерфейса .......................... 415 Подrотовка к финальному тестированию ....,........,......,..,............, 418 Последняя проверка целостности ..........,................,....'........,...... 423 Выпуск..... '....,............ ........ ........,.........'... ..,.. ....,.... ,......,.... '... ..... 425 После выпуска........... ..,.... ,....'.....'......... '............ ,....,........... ...., ,.. 426 rлава 14. Управление rруппой тестирования ...................428 Роль rруппы тестирования ........................'............'....'........'.......430 rруппа тестирования  не избавление проrраммистов ....,........'.. 434 Альтернатива: независимые тестовые areHTcTBa '......'........'..'..'...435 Советы по планированию .......,....,.........,......,................,..'.......... 439 Персонал.............. '... ..,................. ...........'... ...................... '.. ..,... 447 Приложение. Распространенные nporpaMMHbIe ошибки .... 453 Ошибки пользовательскоrо интерфейса ..,..,....'..........,................ 455 Обработка ошибок........ ....,.........'........,.............,.................,...... 486 Ошибки, связанные с rраничными условиями ..,..........,................ 490 Ошибки вычислений ..........'..,....,.............,..,................,..,...........' 493 Начальное и последующие состояния ......,..............,..,..,...........,.. 496 Ошибки управления потоком ,......'..........,....,................,..,........... 500 Ошибки обработки или интерпретации данных ..,......'..'..,........,..' 515 Ситуации rOHoK ..........'.... ....'.... ....,........, ,.. ............' ..,............ ...... 523 Повышенные наrрузки .............'. ,........... ..,..,................ '.............., 527 Аппаратное обеспечение......... ........ ,............,... ....'..... .......'........' 531 Контроль версий и идентификаторов ..'..................'......'..........'...536 Ошибка выявлена и забыта ............'...................'......'........'........542 
Предисловие Тестирование просраМЛtllОСО обеспеченuя  это книrа, написанная профес сионалаIИ для профессионалов, Что такое тестирование потребительских и деловых ПрOIраIМ в условиях, приближенных к боевым, мы знаем не понаслышке, поскольку ВЫllOЛНЯЛИ эту работу для самых известных про изводите:lей ПрOI'раммно\'О обеспечения Кремниевой Долины, Лежащее перед вами руководство разрабатывалось для наших собственных сотрудни ков, О том, как тестировать ПрOI'раммные продукты, от которых требуется повышенная надежность, написано немало хороших кнИI'. От надеЖНОI'О функционирования опреде,lенных типов ПрОlраММНОI'О обеспечения может зависеть успех бизнеса  работы финансовых или промышленных компа ний  ИЛИ даже... человеческая жизнь. Поэтому на е[о самое тщательное проектирование, разработку и тестирование не жа.:Jеют ни времени, НII денеI'. Сотрудникам тестовых I'РУШI предоставляется llO,lНЫЙ доступ к ис ходному коду ПрOI'рамм, причем на столько времени, сколько потребуется для eI'o подробнOI'О изучения. Сверхнадежное ПрOI'раммное обеспечение можно сравнить с "Роллс ройсом"  роскошно, но дорOI'О. Однако не все ПрOIраммное обеспечение таково, и де,10 не только в eI'o иене. Тестирование ПрOI'раммных продук тов Д,lЯ среднеI'О бизнеса, академических учреждений и ,1ИЧНОI'О llO,lьзова Ния проводится в более сжатые сроки и скромнее ОП,lачивается, но их качество вполне УДОIl,1етворяет требованиям рынка  это llO,lезные и Ha JJсжные ПрOI'раммы, МНOI'ИМИ из которых производители MorYT заС,lужен но \'ОРДИТЬСЯ, Так как же ОрI'анизовать тестирование ПрOI'раммных продуктов, чтобы eI'o результаты можно БЫ,10 назвать сверхнадежными? И как удастся I'рУП IlaM тестирования оБЫЧНОI'О потребительскоrо ПО в условиях сжатых cpo ков, маЛОЧИС,lенной команды и ОI'раниченных средств выпускать IIрекрасные и ВПОЛfе конкурентоспособные продукты? Обо всем этом вы узнаете из КНИI'И Тестирование пpOi!paMMHOi!O обеспеченuя. Чеrо в этой книrе нет Часто авторы книr утверждают, что lVlЯ успеШНОI'О тестирования необ ходимо, чтобы все было по правилам: документаuия, включающая необхо ;lIIмые для разработки спеuификаuии БЫ,lа полной и своевременной, при Ilроектировании и написании кода примеНЯ,lась правильная и самая COBpe ,\lСlIная методолOI'ИЯ и т.д, 
1 О Тестирова//ие просраМЛfl/ОсО обеспече//uя Эта KUUi!a  о тестироваиии в условиях, КОi!да те, с кем вы работаете, "е следуют, "е хотят и "е должuы следовать правилам. На деле при разработке ПрОl'раМЮЮl'О обеспечения бюджет Bcel'дa слишком мал, сотрудников не хватает, СOl'ласия между ними для выработ ки единой ,1ИНИИ добиться трудно, а работа при этом должна быть ВЫlIOЛ нена "на вчера". Качество большOl'О Ilродукта зависит от работы каждOl'О, кто el'o проек Тl1рует, ПрOl'раммирует, тестирует и документирует. Никакие стандарты и Сllеuификаuии, никакой контроль и отслеживание изменений не I'аранти руют качества продукции, Все зависит ТО,lЬКО от людей  их работоспособ ности, мастерства и умения работать в команде. Только это определяет результат, а никак не правила, у команды разработчиков имеется определенное видение будущеl'O Ilродукта, I'орячее желание осуществить задуманное и понимание TOI'O, что во МНOI'ОМ работа будет делаться методом проб и ошибок. К тому BpeMe ни, KOl'дa каЖJ!ЫЙ aClleKT разработки прорисуется до деталей, будет сфор мирована рабочая версия IlpoeKTa, которую смOI'УТ IIOНЯТЬ И охватить uеликом ОДИН.!J.l\а ведущих Сllеuиалиста. Эта версия и называется спецuфu кацией. Спеuификаuия не вьн'равирована на камне; позднее она не раз еще будет пересматриваться и усовершенствоваться, пока не будет ДОСТИl'нута IlOлная СOl'ласованность со всей системой, И выloлняяя тестироваllие, вы тоже примете участие в этой работе, В реа;1 ьной жизни изменения вносятся в продукт даже в самом KOHlle разработки. Если, например, ПрОl'рамма Ра3рабатывается на продажу, ваши пользователи  поте//ЦUШlы/ые llOльзовате,lИ  ни на какую спеuификаuию не СОI',lашались. И если конкурент создаст нечто более Ilривлекательное, отвечать IIРИХОДИТСЯ быстро. Как часто IIРИХОДИТСЯ отказываться от внесения в ПрOl'рамму полезных ДОllOЛНl1Тельных возможностей изза HexBaTКl1 времени, И часто первая рабочая версия фР3l'мента, которую никак нельзя Ilазвать профессиональ ной, остается последней, поскольку lIереписывать ес HeKOl'дa, Бывает, что ПрOl'раммист "втихаря" по собственной иниuиативе все же ВЫllOЛlIИТ нуж ную работу и без предупреЖJ!ения внесет в проект значительные из:v(ене ния, Такая работа делается не по обязанности, сверх положенных 40 часов в неделю, Она может значительно улучшить проект, а может и серьезно el'o дестабилизировать на некоторое время, Но каким бы ни был результат, личная иниuиатива Bcel'дa направлена на улучшение проекта, Изменения в конце разработки есть всета, и они нужны, I"лавное  Сllравип,ся с ними с минимумом потерь, Не стоит разводить бюрократию, 
IIредисловие 11 пытаясь запретить такие изменения, Профессионализм сотрудников I'PYII пы тестирования заключается в том, чтобы принять реальность такой, как она есть, не жаЛУЯСh и не пытаясь бороться с ней запретами, и успешно закончить тестирование продукта вместе с внесенными изменениями, Для Koro предназначена эта книrа Эта КНИl'а предназначена для TOI'O, КТО выполняет тестирование про IpaMMHOI'o кода, обычно написаннOI'О KeMTO ДРУI'ИМ, В ней обсуждаются вопросы и решения, которые на наш ВЗI'ЛЯД интересны и полезны такому человеку, Поэтому рассказ наш не академичен, в нем не заТР3l'иваются такие классические темы, как доказательства правильности ПрOl'раммнOI'О кода, Мы постарались больше уделить внимания темам, не характерным ШIЯ учебников, как, например, межличностные взаимоотношения и корпо ративная политика, Судить о работе ДРУI'ИХ людей приходится даже начи нающему тестировщику  в этом суть тестирования, За высказывание своих суждений тестировщики нередко подвеРl'аются нападкам со стороны разработчиков, (Бываст, что и заслуженно,) Поскольку Iруппа тестирования работает с ПрOl'раммой последней и се результаты у всех на виду, се OTBeT ственность Bcel'дa оказывается больше возможностей  положение поли тически самое невыlодное,' Решения этой проб,lемы у нас нет, Однако мы I'ОТОВЫ поделиться своим опытом в том, как повысить эффективность pa боты и избежать некоторых неприятных моментов и ошибок, ПOl'ОВОрИМ мы также и об управлении проектом, Оценка, планирование и составление календарноrо плана работ по тестированию npOl'paMMHOl'O продукта  задача не из леl'КИХ, ведь конечная точка фактически не опре делена, Bcel'дa остаются тесты, которые еще полезно было бы провести, и риск, связанный с отказом от их выполнения, Спеuиалист по тестированию ДО,lжен это хорошо понимать и принимать во внимание при планировании работ, Например, можно отложить важный тест, чтобы в совершенстве ВЫllOЛfИТЬ ДРУI'УЮ часть работы, а потом обнаружить, что времени на OT ложенный тест уже нет. В реЗУ,lhТате, пытаясь выполнить работу лучше, вы на самом деле сделаете се хуже, К сожалению, ситуаuия эта очень типич на, Поэтому в нашей книrе MHOI'O внимания уделено вопросам эффектив ности и правильной расстановки приоритетов, Бывает, что при тестировании проrpаммноrо продукта приходится иметь де,10 с ошибками, допущенными еще на стадии проектирования, Проrрам ма может в точности соответствовать спеuификаuии, но, если спеuифика uия содержит ошибки, такая проrpамма, увы, ШJЯ работы не I'ОДИТСЯ, Часто в литературе, посвященной вопросам надежности проrраммноrо обеспечения и методикам el'o тестирования, совсем не уделяется внимания пользовательскому интерфейсу проrрамм, Ее авторы считают, что этим 
12 Тестирование просралоlНОСО обеспеченuя вопросом должен заниматься спеuиалист по анализу человечеСКОl'О факто ра, Мы же с этим абсолютно не сошасны, (И даже имеющийся в нашем коллективе епеuиалист по анализу человечеСКОl'О фактора с этим не cOI')la сен,) Ведь надежность системы зависит от TOI'O, насколько хорошо работают вместе все се состаВ_1Яющие, включая u людей, которые используют IIpOI'PaM му, Задача спеuиалиста по тестированию  выявить все проблемы, которые мOI'УТ возникнуть при работе с продуктом, и сделать все возможное Д_1Я улучшения el'o качества, Помните, что вы тестируете не просто ПрOl'рам му, вы тестируете систему человеккомпьютер, и отчеты о ненадежности или неэффективности взаимодействия между человеком и компьютером не менее важны, чем остальные, Вы один ИЗ неМНОl'ИХ спеuиалистов, анали зирующих продукт ВО всех деталях, причем непосредственно перед el'o Ilpe доставлением пользовате_1Ю, И поэтому кто же, как не вы, сможет выявить и устранить подобные проб_1емы, Прочитав разделы нашей КНИI'И, посвященные пользовательскому ин терфейсу, вы не станете в этом вопросе спеuиалистом  КНИI'а не претен дуст на абсолютную полноту освещения этой темы, Может быть, некоторые из ваших предложений будут неверны, Но все же предоставьте отчеты и на тему интерфейса, Они очень важны, И некоторые из них обязательно llOMOl'YT улучшить конечный продукт, Проrраммное обеспечение, к которому предъявляются повышенные требования по надежности При создании определенных типов ПрOl'раММНОl'О обеспечения отступ ление ПрOl'раммистов и управляющеl'О персонала от стандартизированной меТОДОЛОl'ИИ абсолютно Heдoпycтuмo, Например, ПрOl'раммы, управляющие ядерным реактором, должны быть спеuифиuированы и документированы самым тщательным образом, И в случае их сбоя отчеты о тестировании становятся юридическими документами, Для тестирования таких проектов выделяются OI'ромные средства и этим занимаются очень большие I'РУШIЫ специалистов, называемые I'РУШlами I'арантии качества (Qllality Assшапсе), Для обучения сотрудников таких I'РУШI больше подойдут ДРУl'ие КНИI'И  CTpOl'O академичеСКОl'О характера, Но даже на таких проектах в конце работы часто подключаются l'рУП пы приемки, бюджеты которых мизерны, а сроки предельно коротки, Сотрудники таких I'РУШI не участвуют в разработке и часто изза HeДOCTaT ка времени не MoryT llOlfaстоящему серьезно протестировать продукт, Если 
IIреди('лоние 13 вы работаете именно в таких условиях, эта КНИI'а будет lVJЯ вас IIQjle3Hce, чем традиuионные учебники, Можно ли назвать эту книry учебником? Мы принимали на работу множество спеuиалистов по тестированию, но еще ни разу не встречали выпускника компьютернOI'О факультета, который узнал бы чтонибудь 1I0лезное о тестировании из университеТСКОl'О курса, ОРl'анизациями Association for Coтputing Machinery (Ассоuиация BЫ числительной техники) и 'ЕЕЕ Coтputer Society (КОМ[lьютерное сообще ство 'ЕЕЕ) недавно был опуб,1икован документ Computiпg C//rricula 1991 (рекомендованный учебный план компьютерных факультетов), который в значительной стеllени определит содержание университетских учебных IlpOl'paMM в области КОМПhютерных наук на все С,1едующее десятилетие, Время, отводимое на изучение теХНО,10I'ИЙ тестирования, обычно составляет несколько часов на четыреXl'ОДИЧНЫЙ курс, В документе Computiпg Curricula предлщ'ается ввести необязате,1ЬНЫЙ курс под названием Advaпced Software Eпgiпeeriпg (ПродвUllутый курс разработкu пpOcpa,\1MIIOCO обеспечеIlUЯ), вклю чающий среди прочих и темы тестирования, но идеи о спеuиаЛhlЮМ KYP се тестирования в этом руководстве нет. Итак, не похоже, что в ближайшие десять лет выпускники компьютер ных факультетов университетов будут хоть 'lТонибудь знать о тестирова нии ПРОI-раммных продуктов. Но ПО'lему бы этот Ilробел не заllOJlНИТЬ колледжам? Associate of Sciences (Ассоuиаuия наук), у которой есть несколькО курсов по тестиро ванию, дополненных вводным курсом ПрОl'раммирования и управления проектами, ВllOлне МОI'ла бы с этим справиться. К тому же стартовая зара ботная плата спеuиалистов по тестированию дocTaTo'lНo высока, Так что, [10 нашему мнению, колледжам стоит IIOJIYMaTb о llOДI'oToBKe таких спеuи аJlИСТОВ  это дело как раз Д;IЯ них. Работая над последним I1зданием этой КНИI'И, МЫ внесли в нес MHOI'O дополнений, рассчитанных именно на студентов колледжей  тех, которым никота не приходилось бывать с тестовых лабораториях, Надеемся также, что КНИI-а будет полезна тем колледжам, которые захотят ВКЛЮЧИТЬ в свои IlpOl'paMMbI курс тестирования деЛОВОl'О ПрOl'раМIНОI'О обеспечения. 
14 Тестирование пpocp a'\I'\I/IOcO обеспеченuя Структура кни2и и ..... принятые в неи СО2лашенuя Сначала несколько замечаний о структуре книrи Эта КНИI'а представляет собой учебное пособие, В вопросах, которы м она посвящена, мно('ие из се читателей будут новичками, Будут се читать и опытные спеuиалисты, обучившисся своему делу на практике и НИКОl'да еще не читавшие подобных учебников, Планируя структуру КНИ('И, имен но на таких 'lИтателей мы и ориентировались, Представленная в кни('е информаuия разделена по степени сложности, чтобы читатель MOI- осваивать се постепенно, Вместо ТО('О чтобы пытаться осветить все стороны вопроса в одном разделе, мы сначала рассказываем о е('о сути, а в следующих разделах преШJ3I'аем ДОllOлнительные сведения, позволяющие rюнять е('о шубже или изучить подробнее, Часть 1. ОСНОВЫ Первые пять ('лав посвящены основам предметной области. И хотя преЖJ!е все('о они предназначены ШJЯ НОВИ'IКОВ, прочитать их следует всем, Новичку Чтобы КНИI'а принесла вам как можно больше пользы (и удовольствия), ЛУ'lше все('о поступить так, Внимательно про'пите ('лавы 1, 2, 4, 5 и про смотрите ('лаву 3, Затем, если возможно, в течение нескольких недель зай митесь практически м тестированием, выявите несколько ошибок и добейтесь их исправления, и только после ЭТО('О продолжите 'пение, Преподавателю Если у ваших студентов нет практическOI'О опыта, перед переходом к ('лаве 6 стоит орrанизовать практические занятия (часов на 'O20), ДЛЯ занятий можно взять какойнибудь коммерческий продукт  в них Bcel'дa 
Структура KIIUCU 15 множество ошибок, На этом этапе занятий не стоит добиваться аналити чеСКОl'О подхода, Пусть студенты просто выявят ошибки и составят о них письменные OT'leTbl, В конце занятий подведите ИТОI'И сделанному и YKa жите студентам на IIРОllущенные тесты и слабые места в их работе, Часть 2. Приемы и технолоrии тестирования !"лавы 6 12 содержат разнообразный практический материал, Их мож но читать независимо и в любом порядке (только перед I'лавой 6 нужно обязательно Ilрочитать I'JlaBY 5), Информаuия этой части полезна СlIеuиа листу по тестированию люБОl'О уровня, Вторая часть несколько сложнее lIервой и предназначена преЖJ!е Bcel'o для читателей, которые составляют планы работ и руководят небольшими I'РУШlами тестировщиков или же обучают будущих спеuиалистов, Однако с этим материалом CMOI'YT спра виться и нович ки, проработавшие Iлавы 1 5, Новичку В Iлаве 6 рассказывается о том, как должна быть ОРI-анизована работа I'PYIIII разраБОТ'IИКОВ и маркеТИНl'а с предоставленными тестировщиками отчетами об ошибках, а также о том, как упорядочить ВЫЯШlение и YCTpa нение ошибок с помощью базы данных, Эта UlaBa будет особенно интерес на тем из читателей, кто на собственном опыте прочувствовал, каково ВЫIIOЛНИТЬ OIромную работу по выявлению и протоколированию ошибок, а потом обнаружить, что часть этой работы IlpOCTO ПрОIIала зря изза IIЛО хой Орl'анизаuии: отчеты llOтерялись, были ПрОИl'норированы или неверно IIOНЯТЫ, Те, у KOI'O есть llOдобный опыт, лучше ДРУI'ИХ поймут, насколько важно всс, что может улучшить ор/'анизаuию составления отчетов и рабо ты с НИМИ, если же шестая l'JlaBa покажется вам скучной, просто IlpOCMOT рите несколько се начальных разделов до раздела "ОРI'анизаuия бюы ;ЩНIIЫХ" , (лава 8, IlOсвященная тестированию печати, содержит 110 этому вопросу o'leHb подробные сведения, Если тестируемая ПрOIрамма MHOI'O печатает, в команде тсстировщиков обязатеJ\L,но должен быть спеuиалист, который очень хорошо разбирается в этом вопросе, Если I'лава кажется вам черес чур IlOдробноЙ ИЛИ тестируемые вами ПрOIраммы мало печатают, постарай тесь IIOНЯТЬ суть описанной стратеl'ИИ тестирования, Разберитесь, в чем состоит различие между ошибками, независимыми от устройств. ошибка ми IIринтера (или модема, терминала, видеОlIлаты и т,п,), ошибками драй вера и аппаратными ошибками, Если вы lюii\lете, почему необходимо выявлять ошибки всех этих ПIlIOВ, ПрlI'I\:\1 именно в указанном порядке, ТОlла вы llOЙlете суть кон цеlЩИ 11 тестирован ия печати. 
16 Тестuроваlluе npOcpaJtJtllocO обеспечеllUЯ Преподавателю Проводя интервью lVJЯ приема на работу новых сотрудников, мы Bce та очень рады, если кандидат может представить примеры своей работы (планы тестирования или отчеты), Обычно такие материалы являются KOM мерческой тайной, и в течение ряда лет после окончания работ показывать их никому нельзя, Вот несколько проектов, которые мOI'УТ быть ВЫIlOлне ны студентами и материалы которых они CMOI'YT сохранить на будущее, . Создание cxelbI УС,10ВИЙ ДСIЯ данных (см, rлавы 7 и 12) сложных и переlруженных форм ввода, Для тестирования можно взять одну из недороПlХ коммерческих IIpOI'paMM, предназначt:нных для работы с какойлибо базой данных  например, ПрOl'рамму, выписывающую чеки, адресную КНИI'У или менеджер контактов, Сколько нужно Te стов, чтобы проверить каждое из требований к вводимым данным в отдельности? Сколько тестов IlOнадобиться Д;IЯ проверки всевозмож ных комбинаuий этих условий? Определите каждую комбинаuию, которую необходимо Ilроверить, НЩI ишите короткую IIpol'paMMY, ИСIiОЛЬЗУЮЩУЮ I'енератор случайных чисел (I'лава 7), Д;IЯ ВЫIlOлне ния IIроверки работы всех комбинаuий условий, Будет ли такой подход ЛУ'lше тестирования вручную? . Студент, IlOнимающий, как ПрОl'раммное обеСllе'lение взаимодей ствует с аIl!lаратной частью системы, может самостоятельно напи сать верс!!ю ,'лавы 8 для работы с модемом, мышью, видеоплатой или любым ДРУI'ИМ устройством. Пусть ОН включит в нес при меры тсстон для спеuифических типон коммерческих ПрOl'рамм, . Протестируйте коммерческие ПрОl'раммы на соответствие ПрИЛal'аю щимся к ним руководствам и ДРУI'ОЙ документаuии (I'лава 10), OT четом может служить само руководство с пометками плюс самостоятеЛhные отчеты о тех несоответствиях меЖJ!У ПрОl'раммой 11 документаuией, которые являются результатами ошибок н ПрOl'рам ме, . Протестируйте какуюнибудь коммерческую ПрОI-рамму с ИСIIOЛЬЗО ванием средств автомаТllзаuии тестирования (I'лава 11). Сколько времени понадобится, чтобы 1I0дl'ОТОВИТЬ тесты различны х ТИIIОВ? Сколько времени займет эта же работа вручную? Насколько может измениться ПрОI'рамма, чтобы разработанные тесты все еше были к ней применимы? И исходя ИЗ отнетов на эти вопросы, как HaMepe ны студенты использовать подобные средства  при каких обстоя тельствах и для каких типов тестов? 
Структура КlIиси 17 Часть 3. Управление проектами и rруппами Материал последних I'лав (13 14) IIредназначен прежде Bcel'O ДJlЯ спе Illlа':IИСТОВ, руководящих тестированием !lpOeKTa. От рассмотрения деталей IЫ lIереходим к более I'лобальному анализу работ  на уровне плана Te еТllрования (I'лава 12) и проекта в uелом (I'лава 13), I"лава 15 посвящена эф фективному управлению работой rруппы тестирования, Соrлашения Как и МНОl'ие ДРУI'ие, эта КНИl'а имеет иерархическую структуру, Мы lюетарались облеl'ЧИТЬ читателю отслеживание этой иерархии, выделив j,II'ОЛОВКИ разных уровней соответствующими шрифтами, Это rлавный заrоловок Это заrоловок BTOpOrO уровня Это заrоловок TpeTberO уровня Это заrоловок четвертоrо уровня Кроме ТО 1'0 , в КНИl'е используются СJlедующие способы выделения TeK ('1:1: . Полужирным шрифтом набраны фР3l'менты текста, которые долж ны выдеЛЯТhСЯ из контекста, Наllример, это может быть текст, KO торый нужно набраlЪ с клавиатуры, текст, отображаемый на экране КОМПhютера, фР3l'мент paelle'laTaHHOI'o отчета, имя поля базы дaH ных или ИМЯ lIеременной, . Курсивом выделены впервые встретившиеся в КНИl'е важные терми ны, Значсние TaKol'o термина объясняется в том же разделе, . Названия клавиш заключены в YI')IOBhIe скобки, наllример, <Enter> или <Ctr1>, . ССhfJШЯСh на ДРУI'ОЙ раздел кни!'и, мы разделяем З3l'оловки включа ющих el'o разделов и подразделов двоеточиями, Вы!'Лядит ссылка так: См, в I'лаве 12 раздел 'Тлавный З3l'оловок: З3I'оловок ВТОРOl'О ypOB ня: З3I'оловок TpelЪel'o уровня", 
18 l,'опuроваlluе просраинносо обеспеченuя Бла20дарпостu Работа над этой кни('ой была начата в 1983 ЮДУ, а в 1988 ('оду в изда теЛhстве Канера (Kaner) вышло се первое издание, За ('оды работы нам помо('зли мно('ие люди, читавшие РУКОПИСh и первое издание книrи и выскаЗ,lНшие множество полезных замечаний, Вот те, кому мы хотим выразить особую БЛ3l'одарность (в алфавитном 1I0рядке): IIрофесеор Элсйн Андерсен (E1aine Andersson), kP Борис Бейзер (BOI'is Beizer), Джим Брукс (.Jim Brooks), Рэнди ДеЛЮЧ'IИ (Randy De1ucehi), Мэл Дауэри (Ме1 Doweary), Дэнид Фамер (Dзvid I:armer), !Iрофессор Ларри Джоне (L.апу .Jones), Шарон I'афнер (Sharon Hafl1er), Махмуд Кан (Mahmood Kahn), Джинни Канер (Ginny Kaner), kp Сэм Канер (Sam Kaner), Джон JIавеЛh (.John L,avelle), kP JIэрри Мэлкас (L.апу Ma1kus), Тэд Маиумара (Ted Matstlmara), 1lp Дон Максвелл (Ооп Maxwell), Брюс Мил лер (Bruee Mi1lcr), Рэйчел Миллер (Rae11e1 Miller), Пиrер Морзе (Peter Morse), Джейн CTell3K Оапе Stepak), и ЭммануеЛh Эрен (Еmшапuе1 tJren), КЩtе'IНО, за вес оетаншиеся l! кни('е ошибки отвечают ТОЛhКО се aBTO ры, 
Часть 1 Основы rлава 1. Пример серии тестов r лава 2. Желаемое и  деиствительное в жизни тестировщика rлава 3. Типы тестов и их роль в процессе разработки nporpaMMHoro обеспечения r лава 4. Проrраммные ошибки rлава 5. Документирование и анализ ошибок 
Fлава 1 Пример серии тестов Назначение этой rлавы Процесс тестирования nporpaMMHoro обеспечения можно отчасти назвать интуитивным, но в то же время в основе ero пежит впопне системати зированный подход, Хорошо про тестировать nporpaMMY означает нечто rораздо бопее серьезное, чем просто "поrонять" ее нескопько минут, чтобы убедиться, что она работает, Эффективное тестирование требу ет тщатепьноrо анапиза и cTpororo системноrо подхода, Эта rnaBa явпяется своеобразным введением, цепь KOToporo  на про стом примере продемонстрировать подход К тестированию nporpaMM, применяемый опытными специалистами этоrо дела, Для примера мы выб рали маленькую незамысловатую nporpaMMKY с несколькими ошибками, Первый цикл тестирования Вмеетс с ПрОI'раммой, которую С;Jедуст протсетировать, вы НОЛУ'lИли Ta кос Оllиеание, Назначение ПрOl'раМ\IЫ  СЛОЖИТЬ два введенных вами 'Iиела, В каж дом из чиесл должна быть одна или две IlИфРЫ. ПрОl'рамма ВЫПО;IНЯСТ эхоотображение ВВОДИIЫХ чисел, а затем ВЬШОДИТ их сумму, Ввол каж досо числа завершается нажатием клавиши <Enter>, Запускается ПрOl-рам ма с IIOМОШЬЮ KOMaHдI,! АООЕК Шаr 1. Начнем с простоrо и наиболее очевидноrо теста Для начала с ПрOl'раммой нужно познакомиться и посмотреть, 1l0eTa точно ли она стабильна, чтобы се можно было тестировать, В ПрОI-раммах, прсдоеТ,Ш;It:ННЫХ Д;JЯ IICpBOI'O формальноrо тестирования, часто сразу же проиеХОЛI\Т ебоii, Ik стоит тратить на них MHOI'O времсни, 
{лава 1: IIрШlер серии тестов 21 Что вы делаете Вводите ADDER и нажимаете клавишу <Enter> Нажимаете 2 Нажимаете <Enter> Нажимаете 3 Нажимаете <Enter> Что происходит Экран миrает, Вверху экрана вы видите знак вопроса, За знаком вопроса появляется цифра 2, В следующей строке появляется знак вопроса, За вторым знаком вопроса появляется цифра 3, В третьей строке появляется цифра 5, На несколько строк ниже появляется еще один знак вопроса, РИСУНОК 1.1, lIервый тест прuсРCL\/МЫ в первом тесте складываются числа 2 и 3, Поел слова тельность дсй етний и РСЗУЛhТат ПРИlзедсtl ы на рис, 1,1, Л на рис, 1,2 видно, как l!I,)J'ЛЯ лит экран 110 ОКОН'I,ШИИ тсста, Курсор (МИI'ающий еИМIЮЛ ПО;Lчеркивания IlOзали знака вопроса вни JY :KpaHa) указы наст, IЛС булет отображаться следующее ВНОЛИМОС число, Отчет о проблемах, выявленных первым тестом ПР(JI'рамма работаст  она IIРИlIН;lа числа 2 и 3 и вернула 5, Но IlpO б;IсIы вес же есть, Длн их опиеанин еоетаВ;IНСТ<:Я отчет, форма KOTOpOl'O Ilриведсна на рис, ] ,3, 1, ОUJllбка проектuроваllllЯ, Нет никаких указаний на то, с какой про I'раммой Bы работаете, Откула вам 'шать, что именно <: той, KOTO рая нужна? 2, Ошuбка проектuроваllUЯ, На экране нет никаких инетрукuий, вам знать, что нужно делать? Что, если вы вводите недопуети мыс числа? Отобразить инетрук llИЮ на экранс не трудно, и она веста будст перед Iлазами, в то время как псчатная документаllИЯ может потеряться, 3, Ошuбка проектuроваllUЯ, Как OCTa НО вить ПрОI'рамму? Эта инетрук llия тоже должна быть на экране, 4, Ошuбка кодuроваllllЯ, Сумма (чие ло 5) выведена в стороне от ела I'аемых, Откуда ? 2 3 ? 5 ? Курсор (позади знака вопроса внизу экрана) указывает, rAe будет отображаться следующее вводимое число, РИСУНОК 1.2. ТаквЫCJ/ядuт экраll по ОКOIIЧGlШU теста 
22 Часть 1: Основы НАЗВАНИЕ КОМПдНИИ проrРАММА КОНФИДЕНЦИАЛЬНО 01ЧЕТ О ПРОБЛЕМЕ N'! ВЫПУСК, ВЕРСИЯ ПРИЛОЖЕНИЯ (Д/H) Если да, какие: ТИП 01ЧЕТА (H) f . Ошибка кодирования 2 ' СШибка проектирования 3 ' Пpeдllожение 4 ' Расхождение с документацией 5 ' Взаимодействие с аппаратурой 6 ' Вопрос СТЕПЕНЬ ВдЖНОСТИ (1,З) f ' Фатальная 2 ' Серьезная 3 ' Незначительная ПРОБЛЕМА МОЖЕТЕ ЛИ ВЫ ВОСПРОИЗВЕСТИ ПРОБЛЕМНУЮ СИТУАЦИЮ? (Д/Н) , ПОДРоБНОЕ ОПИСАНИЕ ПРОБЛЕМЫ И КАК ЕЕ ВОСПРОИЗВЕСТИ ," ПРЕДЛдrАЕМоЕ ИСПРАВЛЕНИЕ (НЮБЯЗдТЕЛЬНО) ,, 01ЧЕТ ПР<ДСТдВЛЕН СОТРУДНИКОМ, дATA..J..J , СЛЕДУЮЩИЕ rРАФЫ ПРЕДНАЗНАЧЕНЫ ТОЛЬКО для РАЗРАБОТЧИКОВ ФУНКЦИОНАЛЬНАЯ ОБЛдСТЬ,, ОТВЕТСТВЕННЫЙ, КОММЕНТАРИИ СОСТОЯНИЕ( 1'2) f ' Открыто 2 ' Закрыто ПРИОРИТЕТ (1,5) РЕЗОЛЮЦИЯ (1,9) f ' Рассматривается 2 ' Исправлено 3 ' Не воспроизводится ИСПРАВЛЕННАЯ ВЕРСИЯ 4 ' Отложено 5 ' Соответствует npoeкry 6 ' Не может быть исправлено 7 ' Отозвано составителем 8 ' Нужна дополнитепьная информация 9 ' Не соrласен с предложением РАССМОТРЕНО ПРОКОНТРОЛИРОВдНО дATA..J..J  дATA..J..J  СЧИТАТЬ ОТЛОЖЕННЫМ (Д/H) РИСУНОК 1.3. Фор,на доку,нента .. Отчет о проблеЛlе" 
I:Щllа 1: IIРII,нер серии тестОIl 23 ОбязателЬ1l0 представляйте отделыlйй "Отчет о.. проблеме" по каждойошибке. Описание всех четырех ошибок \lOжно бl,IJ\О бы ПО\lестип, в один отчет, но лучше ЭТОСО не делап" Ошибки мо!'ут исправляп,ся в разнос врем}!, и сведения о тех из них, которые остаЛИСI, неисправленными, \IO!'YT просто lIотерянся, Если !lрOl'раммист захочет их С!'РУШlИровап" он сам рассортирует отчеты, Чтобы принлеЧI, внимание к взаимосвязанным проблема\l, просто поместите н отчеты соответстнующие ссылки, Шаr 2. Составим заметки о том, что еще ДОЛЖНО быть протестировано ВШlOлнив IlepHhlC, и са\lые О'Iевидные тесты, следует !lOдумап, о том, 'ПО еще следует IIРОтt:стиронап" Свои соображенин lIуЖНО записап,: одни И'3 заllисей llРИМУТ форму заметок, ДРУПlе же \IOIYT Ilредставлян собой достаТО'111O СТрOl'О формали:ютнlНЫС Оl/исанин серllЙ тестон, Такие ДOKY \lеlJтиронанные I'РУIIIJЫ тестов в далl,lJеiiшt:м МOIут IIOСЛУЖИП, Л;IЯ IlpoBep ки сле;lУЮШИХ версий Ilро!'раммы, Примером lOжет бын серия тестон, IlреДСТ,lнлеlJн;tя на рис, 1.4, Вход1lые Ожuдае,lIfЫЙ да1l1lые результат 99 + 99 198 ,99 + ,99 ,198 99 + ..14 85 ,38 + 99 61 56 + 99 155 9 + 9 18 О + О О О + 23 23 ,78 + О ,78 РИСУНОК 1.4. Тест lIа дUl1устЩlЫе IIxoallbIe даllllые ЗШlfечаllUЯ Пара наибольших чисел, которые может складывать nporpaMMa, В документации не сказано, что нельзя складывать отрицательные числа, Большое lIервое число может повлиять на интерпретацию проrраммой BToporo, Проверим сложение отрицательноrа числа с положительным, Проверим, не влияет ли слишком большое второе число на интерпретацию nepBoro, 9 является наибольшим числом из одной цифры, Проrраммы часто сбоят на нулях, Прorрамма может особым образом обрабатывать О, поэтому ero нужна проверить и в виде nepBoro, и в виде BToporo слаraемorо, 
24 Часть 1: OCIlOIIbI Эти тесты охваП,lвают все ДОПУСТИlые входные ;(aIllll.IC 11\101 \1J\IIЫ  пары чисел, которые ей !lOлаrается СК:lаДI,/вап, flраВИЛI,IIО, В flepBoM тесте BI,I ввели два числа и провеРИЛl1 реЗУ;II,I;II, Ф:\К\'И'lес ки все оетаншиеся 39600 тестон TO'IHO такие же, ВЫ !IOЛШII'I, 11 Х все было бы безумием, На рис, 1,4 д)lя тестирования ПРOl-раммы Ilpt::t;I<l1 ас 1\: н HO ceMI, !Iримеров. ПО'lему ТОJII,КО BoceMI, и /lOче\IУ именно I'аких'! Прежде все!'о, тесты были IlOiюбраны так, чтобы каждая uифра BCTpe'Il'laCI, н них хотя бы Оitин раз, Kpo\le ТО!'О, мы подобрали 110 одной КО\lбlll\ЩIIII чи сел на каЖ.1УЮ из нероятных пробле>,,1. А чтобы ОIlределип" Ila каких JlaH ных вероятнее нсе!'о возникнут IIроблемы, эффективнее HcelO Ilроверить l'раНИ'lные ус..lOния. Количество ВОЗМОЖНI,IХ тестов (39601) вычисляется так. В :IOIIУСТИМОМ диапазонt: от 99 до 99 Bcel'O 199 чисел. Любое из них может стояп, на нервом месте и любое  на втором, Все!'о получается 1992 39601 Ilap 'Iисе:j, "3:\\lеп,те, что Т<1кое КО;lIlчество тестов ВЫХОitит даже без Y'leT:\ любых 'IYlh более сложных дt:ЙСУниilllOlII,зовате;IЯ, как, наllрИ\lер, нажа lИЯ кланиШИ <BaekSpace>, ЕеЛl1 же ;IOIIУСТIПЪ ие!IOJII,зованиt: клавиш редактирования, количество ВОЗlOжных тестов HhIpacTer MHOI'OKp,IТIIO, Заit3'1 а Оllреitе;lения количеС'j ва возможны х тестов относится к области \Iатем,пики, И\lенуемой КО\Iбинаторным анализом, ОБЫ'IНО З:\:Ш'I<! :на не сложная , необходимые формулы можно наЙ'II1 в ;lюБО1 У'lебнике 110 теори 11 вероя rнос/и И;I и комбинаторике, Если вы Ilроверяете К(шбинаЩIЮ 2 + 3, а :JaTe1 3 + 4, ваши тесты хотя 11 не в ТОЧНОСПI одинаконы, но очеНI, близки, Оба они 11роверяют, как pe а!'ируе'I /lpolpaMMa на пару ОJlнозна'IНЫХ IЮЛОЖllТеЛЫfhlХ 'lисе;l. И если Ilpol-раI\Iа IIРОЙi\ет Ilервый тест, наиболее вероятно, ,)то она Ilройдет 11 второй. Поэтому из OI-POMIIO!'O количества возможныХ тестов нужно выби рап, TO;lbKO наиболее важные, Из двух тестов, от которых ожидается оди1/ и тот же результат, про водите только оди1/. Если ОТ двух тестов ожидается получип, один и тот же реЗУЛhтат, значит, 01111 Ilриналлежат к одному классу, В нашем случае 81 тест ОПIO СIIТСЯ к классу "пара однозначных положительных чисел", Как TO;lbKO удается выделить класс, т,е, !'руппу ОДllOтипных тестов, можно Ilровести нескш/ько из них и ПрОИl'IIорировать остальные, Для отбора НРОНОДИIbIХ теСIОВ есть важное правило. Для IIЬ/llОЛ1/е1/ия всеlда выбирайте из класса те тесты, 1/а которых 6ерояпшее 6Сесо ожидается сбой просраммы. 
{лава 1: IIрюtер серии тесто(!, 25 Лучше Bcel'o ПОДХОДЯТ для тестирования ПРИ\lеры, лежащие на 1 paHll' ие представлеННОl'О классом диапазона значений, Именно на l'рiНIИ'IIIЫХ зна'lениях ПрOl'раммы сбоят чаще Bcel'O, Например, если ПрOl'рамма I/pek назначена ДJIЯ сложения двузначных чисел, одним из I'раничных значе, ний, которые она должна IlраВИЛhНО обрабаП,lнать, является ЧИСJIO 99, Классом lOжно назвать l'рУ//ПУ значений, которые IlpOl'paMMa обраба тывает О;(I!ИМ и тем же с//особом. А I'раничными значениями класса явля ются те входные данные, на которых ПрOl'рамма Iеняет свое IlOведение, Однако I'раничные значения MOI'YT быть там, I'де вы их совсем не ЖJ!ете, а там, rде и м llOложеllO быть, их в действитеJII,НОСТИ может и не оказаться, Не нсеlда ПрOl'рамма меняст свое поведение именно там, те IlреДllOл3!'ает IlрOl'раммист, и именно н этом Ilричина БО;II,шинства оши бок, При ПрОl'раММllровании l'раничныХ условиЙ случайная ошибка очеНI, вероятна, поэтому такие ТО'IКИ С;Iедует Ilроверять наиболее тщателыlO. ВолшебноЙ формулы для объединения тестон в IрУII/IЫ и Оl/реле.'lения I'РШIИlJНI,IХ условий не существует, Это умение приходит TO;Il,KO с опы TOI. Прочитав //рOl'ра\IМ//ЫЙ код, \lOжно наЙТII н l\eI 10, чет /lрИ ИСПОJII, зонании IIpOl'paMMbI вы не сможете даже I/реДllOJIOЖИТh, Однако пронеряп, те КРИТИ'lеские точки, которые можно определить по ЛИСПIIII'У, ,, это прежде Bcel'o работа //рОI'рнммиста, А наша задача .. пронна:JИ:JИровап, ПрОI'рНМ\IУ с дру)'()й ТО'IКИ зрения, чтобы ныявип, те критические ТО'IКИ, которые ПрOl'раммист IlрОllУСТИЛ, Поэтому классы возможных тестов Ba1 елелует ВhlДеляп" исходя Ilрежде Bcel'o из внешнет IlOведения IlpOl'paM мы, В реЗУJII,тате набор тестов будет ОТЛИ'lаться от TOI'O, которы Й можно СОСТНВИТh 110 ЛИСТИНIУ ПрOl'раммы,  именно в эro1 суп, вашей задачи, НаllOследок у//омяну еще об одном важном моменте, rраниuу значе ний обязательно нужно протестировать с J\BYX сторон. ПРОI'РНММИСТЫ часто убежднются, что критический фрю'мент кода работает на одном из значений и забывают это сделать на втором, Здесь они пропускают ошиб ки, которые вы пропустить не должны, Шаr 3. Проверим допустимые значения и посмотрим, что происходит Серия тестов, приведенны х на рис, 1.4, охватываст только допустимые значения входных данных ПрOl'раммы, На следующем этапе тестирования можно создать такую же серию тестов для недопустимых значений, Еще одна серия тестов может быть предназначена для проверки редактирова ния чисел: вы вводите значение, затем изменяетс el'o и только послс это 1'0 нажимаете <Enter>, Однако прежде BCCI'O выполните простеЙ/lllIС тесты, приведенные на рис, 1.4, 
26 Часть 1: Основы Про/римму тестируют потому, что 01lа может lIе работать. Можно убить уйму времени на разнообраЗНI,lе тесты, подсказанные Ha шей фантазией, а затем обнаружить, что ПрOl'ра\!ма не может сложить 2 и 3, Вот результаты теста нашей IlрOl'раММЬНlримера. . Положительные числа и О обрабаты ваютея прекрасно, . Не работает ни один тест с отриuатеЛIтIIЫМИ числами, После BBO да второй uифры КОМIII,ютер IIрОСТО "зависает", (Он 11ПlOрируеl кланиатурный ввод, I! е!'о IIриходитея I/ерезапускать,) Вы !lOпробо вали сложить 9 и 9, 'побы 1I0смотреть, не примет ли IlpOl'paMMa однозначные отриuатеЛhные числа, но 1I0Cle нажатия кланиши <EII(er> КОМllьютер "завис". Очевидно, IlРOl'рамма не ожидает OT риuатеЛhНЫХ чисел, Шаr 4. HeMHoro тестирования в режиме "свободноrо полета" КОlла серЮI rlOдI'отовлеllНЫХ тестов IIOJ\lIOСТhЮ НЫllOлнены, форм,vн, нос тесп!рование можно считаТh зансршенным. Однако это не Зllачит, 'ПО нужно lIe\leiIJleHIIO IIрекращать работу до следующеl'О этаllа. Тестирование '\IO,J/C/IO IIРОДО;IЖИТЬ. ТеСП,I, которые вы будете IIРОНОДИТЬ и ВЫIIOЛНЯТЬ С зто!'о \юмеlпа, не нужно тщательно !'отовип, или объяснять KOMYTO их назначение. Здесь в дело ДОЛЖllа НСТУIIИП, ваша интуиuия. Пробуйте нсе, 'ITO нридет на\1 в !'олову, даже если сотрудникам кажется, 'ПО 1I0добные тесты уже был и IIроведены. В нашем при мере вы быстро ДОСТИ('}IИ точки, В которой форма.:lьное Te стиронание переходит в нефОРМaJlhное, IIOСКОЛЬКУ сбой про!'раммы не за ставил себя ждать, Вероятно, в ней есть какаято фундаментаJ\l,ная ошибка. ЕСj)И это так, IlpoeKT про!'раММI,1 следует перссмотреть, Разраба ты вать новые тесты 1I0ка нет никако!'о С\lысла, 1I0СКОЛЬКУ к НОВОЙ версии ОНИ мо!'ут просто не llO;lOЙТИ, Поэтому, не тратя вре\!ени на IIланирова ние, можно провести неСКОЛhКО чисто иссле;lOватеЛhСКИХ ЭКСllериментов  все, что IIРИ;lет в !'олову, На рис, 1,5 персчислены тесты, которые IJровели бы мы, их возможные результаты и наши замечания, Всееда записывайте, что вы делаете и что происходит во время исследовательских тестов. Как 11И;111O из рис, 1,5, ПРОI-рамма НИКУ;lа не !'О;lИТСЯ: она "зависает" при НI;IСЙlllеfi Ilровокаuии, Вы больше времени тратите на перезаllУСКИ КОМПhютера, 'Ie\! на теСI ирование, 
I;шва 1: IIрuлtер серии тестов 27 Тест 100 + 100 <Enler>+<Enler> 1 23456 + О 1,2 + 5 А ' Ь <Clrl+ A>+<Clrl "В> <Clrl+C>+ <Clrl +О> <F1 >+<Esc> ЧеJlf 011 и1lтересе1l r раничное условие: числа больше максимальноrо допустимоrо значения (99) Что происходит при отсутствии введенных данных? Введем побольше цифр Попробуем с дссятичными знаками Недопустимые символы Управляющие символы и функциональные клавиши часто являются источниками проблем, ЗU.l\fечаllUЯ Проrрамма приняла 1 О, Korдa вы ввели второй О, чтобы получилось 100. nporpaMMa повела себя так, как будто вы нажали <Enler>, Так же было и СО вторым числом 100, В резулыэте по окончании теста ..а зкране было следующее: ? 10 ? 10 20 KorAa вы нажали <Enler>, nporpaMMa напечатала 10  последнее введенное вами Число, То же было и после BTOporO нажатия <Enler>, и в качестВе суммы nporpaMMa напечатала 20, Проrрамма приняла первые две цифры и проиrнорировала остальные так же, как было с числом 100, В будущей версии nporpaMMa бущп принимать большие числа' как она должна будет Tor да рсаrировать на подобные ситуации? Реакция на десятичный разделитель такая же, как и на < Enler>, Коrда вы нажали <Enler> после <А> nporpaMMa "зависла", Для продолжения тестирования вам пришлось перезапустить компьютер, Для всех комбинаций клавиш, кроме <Clrl"C>, nporpaMMa отобразила rрафические символы, затем, после нажатия <Enler>, "зависла", Нажатие <Clrl+C> привело к завершению nporpaMMbl и выходу в операционную систему, РИСУНОК 1.5. Даль//сйшuе uсследовательскuе тесты СТОЛКНУВШИСh С очере;lНОЙ проблемой, вы состанляете о неЙ отчет, О c;laHHhIx отчетах ЛУ'lше написаТh ;VIЯ себя ИТОI'овые заметки, На этом Te стирование первой версии ПрОl'раммы \lOжно считать завершеННhlМ, Шаr 5. Подведем итоrи тому, что мы узнали о проrрамме и ее недостатках Эта IlOсле;lНЯЯ раБОI'а  ТОЛhКО для вас. Она не всета неоБХО;lИма, но часто оказывается очеНh IlOлеЗIIOЙ. ДО ЭТОI'О времени вы все время БЫ,lИ сконuентрированы на конкретных ;lеталях  ана,lизировали ;lOпустимые ;laHHhIe, ПРО;lумывали I'раничные условия и составляли тестовые примеры. В БУ;lушем вы БОЛhше времени БУ;lете тратить на Вhl\lолнение уже IIO;lI'ОТОВ,lенных тестов, чем на ПРИ;lУ мыванис новых. Сейчас же самое время мысленно отступить неМНОПJ назад и ОКИНУТh ВЗ('}IЯ;IOМ ПрOl'рамму в ие,10М, УВИ;lеТh се не;lOстатки 11 ПРО;lумаТh стратеl'ИЮ БУ;lушеl'О тестирования, 
28 Часть 1: Основы РСЗУJ\l,татом TaKol'o более l'лобаЛhllOl'О анализа может быть обнаруже ние пропущенных ;lеталей  например, новых I'раничных условий, Очень IlOлезно ;(Jlя начала записать свои ИТOI'овые впечатления о про l'paM\le, Вот они, . у IJpOl'paMMhJ O'IeHb Оl'раниче/IIШЙ интерфеЙс. . ПРОl'рамма не работает с ОТРlщатеЛЬНЫ\IИ числами, НаиБО;lьшая сумма, которую она может вычислить,  198, а llaименьшая  О, . ТретиЙ ВВО;lИМЫЙ СИМВО;I (например, третью uифру в числе 100) проrрамма интерпретирует как нажатие <Enter>, . 110ка вы не нажмете <l2nter>, любые ВВО;lимые вами символы HOC IJринимаются как ;Ю[[УСlимые. . ПрOl'раМ\lа не [[роверяет, ;lействителыlO ли вы нвели число, преж де чем нажали <Enter>, ЕС;IИ вы ничеl'О не ввели, ПрOl'ра\lма ис /lOльзует после;lнее число, BBe;leHHoe ранее. ЕС;1I1 пре;оIOЛОЖИТЬ, что IlpOI-р<lММИСТ не является безн.цежно HeKOM петеНПIЫМ, то ;(JlЯ таких неIJРИl\лекате;IЬНЫХ результатов должна бып, Ilричина, Скорее Bcel'o, она состоит в том, что IlрOl'ра\I\IИСТ [[ ыта.ilСЯ c;le лаТh Ilpol'paMMY как можно меНI,шей 110 раЗ\lеру или как можно БО;lеt: быстрой, Ко;! обработки ошибок занимает память. Это же касается ЗaI'OJIOВКОВ, сообщений об ошибках и инструкuий, Если ПРОI-рамма должна rlOместить ся в o'feHb MaJleHbKoM фраl'меlпе IJамятн, ;lЛЯ Beel'o ЭТОI'О \leCTa нет. По ;юБНI.IМ же обра30\1 обстоит ;lело и со нременем: оно требуется и на IIроверку ;юпустимости ВВОШlМых символов, и на проверку нпо, что Tpe тьей нажатой клавишей ;lействительно является <Enter>, и на печать сообщений на экране, и на очистку lJepeMeHHhix пере;l ВЫIlOлнением оче pe;lHol'O за;raния, По ОШIOМУ только перечню не;юстатков ПрОI'раМ\IЫ TPY;lHO СУ;lИТЬ, ;lействитеЛhllO ли они вызваны жеСТКИ\IИ требованиями к се скорости или размерам. И если ;la, нет ли возможности исправить хотя бы часть из них, не ВЫХО;lЯ за пре;lелы этих Оl-раничений, Чтобы все это выяснить, нужно /IOI'ОВОрИТЬ С ПрОI'раММИСТО\I, Пре:rrIOЛОЖИМ, что I'лавной uелью ПРОl'раммиста является экономия памяти, Как он се ;ЮСТИI'ает? Большинство способов очеВИ;lIlО: никакOI'О ко;ш обработки ошибок, никаких сообщений о них, никаких ИНСТРУКIlИЙ на экране, никаКОl'О ко;ш проверки TpeТbel'o символа. Может бьпь, есть и ;lРУlие Сllособы? Без сомнения. Минимизировать требования к памяти можно '1<\ t;'ICТ ')ффеКТИl!llOl'О хранения ;шнных, В этой ПрОI'раМlе ;шнны ми ЯВШIЮ'IС>I IIIЮJtllII,lе СИ\IВОЛЫ 11 сумма, 
пlGва 1: Прu.\Iер серии тестов 29 Хранение суммы ДОПУСТИМhiМ!! МОI'ЛИ бы бhiТЬ суммы ОТ  198 ;10 198. Но ПрOl'рамма pa ботает ТОЛhКО с IIOJюжитеЛhНhI:I4И числами, поэтому в ней IЮЗ\IOЖНЫ CYM мы ОТ О ;10 198. Если храНИТh ТОЛhКО IIOЛОЖlпеЛhные ЧIIС;lа, то хватит и O;rlIOI'O байта (8 битов). Это стан;raртная и очеНh У;lОбная е;lиниuа хранения ;laHHhlx, вмещающая IlOложитеЛhНhiе числа от 0;10 255. Если ПрОI'раМIИСТ хотел Вhlбрап, ;UIЯ хранения CY\IMhi наимеНhШИЙ ВОЗОЖНhlЙ ра3.\1ер персменной и IIрИ ЭТОМ не С'IИТaJl неоБХО;lИМОЙ обработку отриuатеЛhНЫХ чисел, байт бhiЛ И;lеаЛЫIЫМ решением. Вот ТОЛhКО ЧТО будет, если ПрОl'рамма [вменится и должна БУ;lет об рабаТhlвать отриuатеЛhные числа тоже? Собственно I'ОВОрЯ, байт \lOжно ИСIIOЛhзовап, ;l;IЯ хранения и llO;lOжитеЛhНhlХ, и ОТРlщатеЛhНhiХ чисел, нужно ТОЛi,ко один из битов ВЫ;lСJliIП, ДЛЯ хранения знака. Тота в OДHOI f)айте \IOЖIlО хранить 'Iиела от 127 ;10 127, На ЧИС;lах, IIрсвышающих 127, Ilpol'paMMa БУ;lет сбоип,. 110;lОбные c(ioI1 обhiЧНО Вhlражаются в том, 'по числа, KoropMe боль ше 'IC\I 127, шпеРIJретируются как 0'1 риuатеЛhllЫе. Скорее Bcel'o, то же БУ;lет и <: нашей IlрОI'рам\IOЙ. В еле;lуюшей серии тестов сле;lуt:т обраrип, ВНИ\lание на БОЛhшие суммы ,, l'раНИ'IIIЫМИ БУ;lУТ значеНIIЯ 127 и 128. Серия тестов на рис. 1.4 уже ВКJIЮ'lает БОЛhШУЮ CYM\ly (99 + 99), !ЮЭТО МУ новые тееты пона;lОбятся ТОЛhКО в <:лучае, если этот ПрOl'рамма прой дет правилыlO. РЯ;IОМ с этим ПрИ\lером стоит приписап, заме'lание, 'lтобl,1 оrС;lе;lИТh неверный реЗУЛhтат. Этот IIрИ\lер l'рШIИЧI!ОI'О условия интересен тем, что он зависит от CIIO со ба хранения ;шнных, ВhiбраННОI'О ПрОl'раммистом или Оllре;lелеННОI'О языком IIрOl'раМ\lИрования. Обhl'1II0 типы данных опре;lеляются в начале IlpOI'pa\IMhl или в ОТ;lеЛhlIOМ файле. Просматривая ту 'lacТb KO;la, в KOTO рой Вhlполняется С,10жение, можно не УВИ;lеТh ничеl'О rЮ;lОзритеЛhllOl'О. ПРOl'рамма получает ;lBa числа, CКJla;lhlВaeT их, заПИСhlвает ку;што реЗУJli, тат , все ВhШIЯ;lИТ безупречно. Вот TOJlhKO случается, что сумма не по мещается TY;la, KY;la се заПИСhlвают. И ПО;lОбные ошибки пропуеТИТh очеНh леl'КО, Be;lh ЛОl'ика той части ПрОI'ра\I\lhI, которая ВhПlOлняет сложе ние, IIроста и праВИЛhна. Хранение входных данных РазобраВШИСI, с хранением Cy\I\lhI, перейдем к анализу символов, KO торые !IOЛhзоватеЛh ВВО;lИТ с К:Jавиатуры. Сейчас вы уви;rите, как знание IIP()f'P;IM\IM изнутри может 11O\IOЧh в co ставлении сле;lующей серии тестов. РеЧh Iюйдет о скрытых ?ранuчных точ ках , тех, которые не видны IIOЛi,З0вателю ПрОl'раММhI и ВhlЯВЛЯЮТСЯ ТОЛhКО при чтении ИСХО;lНОI'О KO:I<I. В нашем примере такие тесты можно 
30 Часть 1: OCHoв1 составить и без чтения КО;lа , на основании знаний О АSСllКО;lировке си,\!волов. Но В общем случае, чем больше вы знаете о про I'раммировании, те\! БОJIl,ше I'раНИ'lilЫХ точек сможете ВЫЯl!lПЬ. С.лСllУЮЩИЙ \\ример новичкам в тестирова нии 11 тем, у KOI'O нет IIрOl'раММИСТСКОl'О опы та, будет неlJOнятен, Поэтому el'O смело можно пропустип, 11 сразу переЙти к следующе\!у раздел у. Кла13иатурный 13ВО;1 оfiычно ПР!1нимается и обрабатывается СIJепиалhlЮЙ системной IlpO l'р(\ММОЙ. Эта ПрОI'ра,\!,\!а назначает каЖ;10И клавише числоной код, который IlрИ нажатии кла13ИШИ Ilередается Ilрикла;lIlОЙ ПрОI'рамме. O;lIIoii 113 клаССИ'IССКИХ КOJlИрО130К является ЛSСII, КО;IЫ uифр в этоii таб,;lиuе IIРИВС;IСНЫ на рис. 1.6. КОlла 13ы нажимаете К;lа13ИШУ, ПрОI рамIИСТ IJроверяст се ЛSСllКО;I, 'lf'обы нь!Яснип" была ли 13BClelta uифра. Этот фр<н'мент ПрОlра,\!мы 13ыrлн;lИТ JJримерно так. .. ..  СUJ\f80Л АSСllкод I 47 О 48 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 58 А 65 Ь 98 РИСУНОК 1.6. ASC//, !;оды цuфр (и lIeC!;O,1b!;UX дру?их СUAfш!Лов) IF АSСIIКОДВВЕДЕнноrосимвоЛА меньше 48 (48  ЭТО АSСIIкод ДЛЯ О) THEN отверr'НУТЬ символ как недоnустимый ELSE IF АSСIIКОДВВЕДЕнноrосимвоЛА больше 57 (57  ЭТО АSСIIкод для 9) THEN oTBepr'HYTb символ как недоnустимый ELSE ЭТО цифра, принять ее, ПоеIOТрИ\! теперь, !13за чеl'О этот КО;1 может сработать lIепраВIIЛЫIO. Вот шееп, наиБО;lее распространенных ошибок I1рОI'раммистов. . Если вместо онератора меньше JJрOJраммист 1I0станит ollcpaTop MeHЬ ше или равно, IJРOlрамма отвертет О как не;lOПУСТИМЫЙ символ. Чтобы найти эту ОШl!бку, нужно IIроверип" как JJpOl'paMMa рабо тает с Hy..leM  uифрой с наименьшим кодом ЛSСII (48), . Если нместо меньше 48 ПрOl'раммист напишет меньше 47, ПрOlрам \!<I IlplIMeT СИ\lВол /, решив, что это uифра. \{ \'06ы \I<I\iти 'лу ошибку, нужно провериТh, как ПрOl'рамма работа ст с l:1I\IIIО;Ю\! / ,, еllIВО;JOМ, KOll KOTOporo на единицу меныuе кода lIy;IH, 
Ijюва 1: Ilрuлtер серии тСС/110Ы 31 . Если ПрOl'раммист ДОllУСТИТ Оllечатку и вместо меньше 48 наllишет меньше 38, ИрOl'рамма llримет не только СИМIЮЛ j, 1/0 И девять дpy I'ИХ неuифровых символов с кода,\IИ от 38 до 47, Для выявления этой ошибки можно IIроверить Jlюбой символ из ЭТОI'О диаlIззона, I'раничным значение1 KOTOpOl'O будет код 47, . Tellepb IIОСМОТРЮI на самую большую uифру , 9 (ЛSСIIкод 57), При работс с ней, вероятнее BCCI'O, может встретиться ошибка БО.1ьше или равен 57 вместо равен 57, Е<:ли ввести 9, llpol'paMMa OT верПJСТ этот символ как нсuифровой, Такой код неверно работает с однойединственной uифрой , се и нужно Ilроверить, . ПР()J'раммист может захотеп, заlIисать второе условие иначе, как больше или равен 58, но 110 ошибке написать БО.1ьше 58, ТОIЛа IIpO I'рамма IIримет за uифру двоеточие, . Еще одной ОIIечзткой IIрОlраммиста можt:т быть 75 вместо 57, тота IIpOl'paMMa будет принимать за uифры все символы с кодами от 48 до 75, Эту ошибку южно обнаружить, нроверив любой символ из указаННОl'О ДИ3lIазона, но символа с l'раНИ'IНЫМ значснием кода (двоеТО'IИЯ) будет ВIюлне достаточно, Для обuаружения любой ошибки, которую ПрОi!рам.лrист может допустить при аuаJlдзе цифровых даUIlЫХ, достаточuо проверки вспо четырех ?раuичuых символов: j, О, 9, и :. Из "риведенных в таблиuе на рис, 1,6 СИIВОЛОВ два IlOследних мы ис IlOльзовали, чтобы выяснить, как IIpOl'paMMa реаl'ирует на ненифРОl\ые данные, Тест сработал, а ПрОI'рамма , нет, Но как бып, с шестью Ilepe численными ТИlIами ошибок? Одной IIроверкой буквы А их не выявить, Л буква Ь вообще ничем не IlOможет, Так 'ПО IIровернть нужно l'раНИ'lные символы (/, О, 9, и:), IIОСКОЛЬКУ, IIОВТОрЮСЬ, <:амыми эффсктивными яв ;IЯ ются тесты и \leHHO I'paH ич ных значени й, Первый цикл тестирования. Итоrи Вы начали с IIростейшеl'О из возможных тестов, Поскольку IIpOrpaMMa el-o IIрошла, вы разработали серию формапьных TeeloB, чтобы IIроверить, как она работает с ДОIIУСТИМЫМИ данными, Эти тесты вы будете ИСIIOЛЬ 'ювап, и ДaJlьше. Поскольку часть IIроверок IIрOl'рамма не IIрошла, на IIла нирование дальнейших серий тестов вы рсшили вреlени не тратить, Вместо ЭТОI'О вы IIровели несколько нефОРICUlЬНЫХ ЭКСlIериментов и выяснили, что 
32 Часть 1: Основы ПрOl'раМ\lа вообще очеНh нестаБИЛhна, Вы записали неСКОЛhКО замечаний, к которым обраппеСh при тестировании следующей версии ПрOl'ра\IМЫ. Если бы !lpOl'paMMa успешно !Iрошла первую серию тестов, вы бы раз работали вторую, более обстоятеЛhНУЮ, Если бы ПрOl'раIма снова показа ла себя надежной, вы бы !IРОДОЛЖИЛИ се тестирование, пока не исчеРllаЛИСh бы Иilеll или отведеllllOе время, Напоследок вы прове:1И бы неСКОЛhКО беl' лых тестов, не ВХОДИВШИХ в ранее разработанные сеРИI!, и запис,UlИ заме чания на будущее, Завершив тестирование и всю бумажную работу, стоит поrраТИТh еще HeMlIOI'o вреlени, чтобы обдумаТh реЗУЛhтаты, Вы Вhl!lOЛНИЛИ са!lюе o'le видное, но это еще ТОЛhКО начало, У вас нет пока конкреПlOl'О I!лана, Вы просто делали то, что первым llРИХОЛИ:1O в I'ОЛОВУ, "О ходу работы вы Oll ределили две линии атаки, ТепеРh же I/УЖНО выде,llIть время на оБJlумыва ние, Это очеНh важно, даже если сроки СИЛhНО !IOДЖИIают, Второй цикл тестирования Вы 1IOI'ОВОРИ;IИ с IIрOl'ра\lМИСТОМ, и он сказал, что скорость раБоIы про l1JaMMM ИСКJIючителыlO важна, а вот объем кода не имеl'Т никакою 'ша'lения, Резолюuии llрOl'раммиста на ваших отчетах представлены на рис, 1,7, 1, Ошибка проектирования: Резолюция: 2, Ошибка проектирования: Резолюция: З, Ошибка проектирования: Резолюция: 4, Ошибка кодирования: Резол юция: 5, Ошибка кодирования: Резолюция: 6, Ошибка кодирования: Резолюция: 7, Ошибка кодирования: Резолюция: 8, Ошибка кодирования: Резолюция: 9, Ошибка кодирования: Резолюция: На экране нет названия nporpaMMbl, Не будет исправлена, На экране нет инструкций, Не будет испраВJ\ена, Примечание: Замечание верное, но вывод инструкций замедлит работу проrpэммы, Как остановить nporpaMMY? Исправлена, На экране отображается подсказка: 'Для выхода нажмите <Ctrl+C>", Сумма (5) выводится в стороне от слаrаемых, Исправлена, Проrрамма 'эависает" на отрицательных числах, Исправлена, Проrрамма будет складывать и отрицательные числа, Проrрамма интерпретирует третий введенный символ как нажатие <Enter>, В работе (еще не исправлена), Сбой при вводе нечисловых данных, Не проблема, Комментарий: 'Не делайте этоrо', Сбой при вводе управляющих символов, Не проблема, Комментарий: 'См, отчет 7', Сбой при нажатии функциональных клавиш, Не проблема, Комментарий: 'См, отчет 7", РИСУНОК 1.7, l'ет,11Оции на отчетах первосо цuкла тестuрования 
I;lGea 1: Прu,иер серии тестов 33 Шаr 1. Прежде чем приступить к тестированию, внимательно прочтите резолюции проrраммиста на ваших отчетах  вы узнаете, что нужно делать, а чеrо не нужно Как видите, хорошо, что ВЫ не разрабатывали тестов для проверки кода обработки ошибок: ЭТОI'О кода нет и не будет, Более TOI'O, хотя ПрOl'рам ма и будет тепеРI, обрабатываТh отриuатеЛhные числа, она будет обраба тывать их не все, а TO;LhKO 110 9, Числа от IO до 199 дЛиной в три символа она IIOlIрежнему не обра батывает, интеРlIретируя третий символ как нажатие клавиши <Enter>, ОбраТИВШИСh к разработанной ранее серии тестов на рис, 1.4, вы видите, что тесты с 'Iислами 99, 78 и 14 запускать не придется, Вместо 78 и 14 ВОЗhмите lIару однозначных отриuательных чисел, ОчеНh 'lacTo IIрOl'раммист просит протестироваТh осталhНУЮ часть про lраммы, в то время как он занимается исправлением уже наЙденных оши бок , и это разумно, Некоторые из запланированных тестов нет смысла ПРОВОДИТh до исправления ошибки, с ДРУI'ИМИ же ВIlOлне можно IlOрабо тать, Если ждаТh, пока можно будет провести "лучшие" из тестов, мож но остаВИТh без внимания uелые области ПрОI'раммы, на которые потом уже не хватит времени, В нашем при мере можно протестироваТh числа между  1 и 9 , так вы хоть и не IIOЛНОСТЬЮ, но проверите, как работа ет сложение отриuатеЛНI,IХ чисел, вместо TOI'O чтобы опуСТИТh эту про нерку вообще, Из резолюuий на ваших отчетах вы увидите, какие тесты БОЛhше про ВОДИТh не нужно, а какие нужно замеНИТh новыми, Станут ли резолюuии IlрOl'раммиста ключом к созданию новых серий тестов? Без сомнения, Шаr 2. Проанализируйте комментарии к ошибкам, которые не будут исправлены. Возможно, следует провести дополнительное тестирование в нашей ПрOl'рамме хуже Bcel'o обстоит дело с обработкой ошибок, Проrраммист не собирается исправлять ситуаuию, Как же быть? Чтобы добиться исправлеllUЯ ошибки, "УЖI0 продемОllстрировать ситуацию, в которой ее появлеllие абсолют1l0 1Iедопустимо. Чтобы придумаТh самые IlOказатеЛhные примеры недопустимоrо пове дения ПрOl'раммы, IlOстарайтеСh ВЫЯВИТh суть ситуаuии, 21," 
34 Часть 1: Основы в нашем случае ПрOl'рамма "зависает", кота вы нажимаете определен ные клавиши, Так она ведет себя с буквами, управляющими и функuио наЛЫIhIМИ КJIaвишами, Фактически проrpамма "зависает" при вводе любою неДОlIУСТИМО!'О (неuифровOI'О) символа, Проrраммист !'оворнт, что таких символов вы ВВОДИТh не должны, С вашей же точки зрения, ПрOl'рамма должна вести себя вежливо и не застаВЛЯТh вас перезапускаТh КОМПhютер каждый раз, кота вы сделаете 'пото не так, Прекрасно, ТепеРh BepHeM ся назад, ПрOl'рамма некоррекТlIO ведет себя в ответ на нажатие HeKOTO рых клавиш, Проrраммист считает, что это не страшно, ПОСКОЛhКУ никто и не ЖJ!ет, что про!'рамма примет эти клавиши, Л что, если ПрOl'рамма "зависнет" в ответ на ввод символов, которые, 110 мнению IIOЛhзователя, она дОЛ:JlСllа пРUllять? Если найти достаточно таких символов, про!'раммисту придется написаТh код для их обработки, а заодно уж он может обработан и OCTaJlhHhLe символы, Подумаем, какие же клавиши люди мо!'ут нажимаТh при работе с арифметической IlрOl'раммой, ЗдеСh нужен МОЗlO60Й штурм, Запишите все клавиши, которые 'Iеловеку мож'ст LLрИЙТИ в !'олову нажаТh, ЗаI\IIшите, 1I0чему эти клавиши MOLyr I\ОказаТhСЯ уместными, ПУСТh вас не беСI\ОКО IП, еО!'j\асится ли ПрOl'раммист с вашими IlреЩlOложениями , позднее вы еще пересмотрите свой список и отберете из не!'о самое существенное, На рис, 1,8 показан список, который IIOЛУ'IИЛСЯ У нас, . Цифры, конечно, . И знак 'минус', . Если можно нажимать 'минус', то можно и 'птос', . Пробелы, Люди вводят Ilеред числами пробелы, чтобы аккуратно выровнять их в столбик, . Если можно вводить пробелы перед числом, то должно быть можно и после Hero, . А как насчет арифметических операций, таких как * и / (4/3, нanример)? . Знак доллара? . Знак процента? . Скобки  отрицательные числа часто заключают в скобки, как, например (1000) вместо -1000, . Клавиша <BackSpace>  что, если вы случайно ввели Ite IY ЦИФРУ'} . Клавиша < Delete> , . Клавиша <Insert>, Вы ввели 1 и хотите вернуться и Вllе<:IИ { '110111,1 получить 21, . Клавиши управления курсором, РИСУНОК 1.8, Моз?овпй lUтур.\I, Какие клавuши Ilo 11, 1"",/111,' /1, 1,/ \очет иа,нсать при вводе 'lUс;щ" 
I;lGea 1: IIpu.\Iep серии тестов 35 Некоторые из идей в нашем списке явно неудачны, Например, если сказан проrраммисту, что ПрOl'рамма не обрабатывает 4/3 + 2, он ТОЛh КО llOсмеется, Но для Ilервой версии списка это не имеет значения, Преж де Bcel'o, важно ничеl'О не пропуСТИТh, Л что внести в отчет, вы решите ЧУТh позже, Шаr 3. Просмотрите записи, которые вы сделали в прошлый раз, добавьте к ним новые замечание, и приступаите к тестированию Вам страшно хочется начать с TOL'O за,\IечатеЛЫlOl'О и очень СЛОЖIIOI'О теста, который вы ТОЛЬКО что ПРИДУМШIИ, не так ли'! Не ТОРОllитесь, CHa чала повторите старые и нудные тесты и убедитесь, что ПрOl'рамма llOпре жнему может сложить 2 и 2 и не IlОЛучить при этом 5, С вероятностью 1:2 IIpOl'paMMa не сработает или в ней возникнут новые неполадки, Поэтому обязательно протестируйте все сначала, Вы IlровеJlИ все "формальные" серии тестов (см, рис, 1.4), модифиuи ровав несколько примеров для L1роверки однозначных отриuатеЛhНЫХ чисел, ПРOl'рамма все их уСL1ешно прошла, По ходу дела вы заметили, 'ПО ПрOl'рамма отображает подсказку "ДJlЯ выхода нажмите <Ctrl+C>" после каждой операuии сложения, На рис, 1,9 показано, что было на экране после сложения первых двух пар чисел, ПРОl'раммист I'ОВОрИТ, что ПрOl'рамма должна работать быстро, ТОL'да все, на что тратится лишн.се время, является ошибкой, Вы составили сле дующий отчет, 1 О, Ошuбка проектuроваllUЯ, На вывод на экран подсказки "Для выхода нажмите <Ctrl+C>" тратится лишнее компьютерное время, По скольку одной И3 задач ра3работки является создание очень быст рой проrраммы, это ошибка, Почему бы просто не написан "Для выхода нажмите <Ctrl+C>" внизу экрана сразу при запуске про [раммы' и никота БОЛhше ничеl'О не ВЫВОДИТh в этой строчке? (И если это возможно, почему бы заодно не вывести также и заrоло вок проrраммы и короткие инструкuии?) Среди ваших заметок есн напоминание проверить однобайтовые CYM мы, Это диапазон значений от 127 до 127 или от О до 255, ПОСКОЛhКУ двузначных отриuатеЛhНЫХ чисел задаваТh неЛhЗЯ,  127 в допустимый диапазон не попадает, Однако сложение 99 и 99 даст праВИЛhНЫЙ реЗУЛh тат, значит, все в порядке, Однако не расслабляйтесь, Некоторые из тестов обязателЬ/1O выявят про блемы, и чем тщательнее вы продумаете свои действия, тем больше обна ру жите скрытых недостатков проrраммы, 
36 Часть 1: Основы ? 99 ? 99 198  Press CtrlC to Quit РИСУНОК 1.9. Экраl/ после очередно?о цикла тестирования ? 9 ? 9 18  press CtrlC to Quit ? Если прОi!рам.лruст достатОЧ1l0 аккурате1l, большая часть ваших тестов, включая и те, которые потребовали llаибольшей изобретателыlсти,' lIе выявит ошибок. Последним вы намсревались протестировать блок обработки ошибок, НО ВI30ДИТЬ трехзначные числа 1I0ка нельзя  здесь есть ошибка, которая в это время как раз ИСllраВJlяется, Остался ВОlIрОС с неДОIIУСТИМЫМИ КJla вишами, такими как lIеречисленные на рис, 1,8: <BackSpace>, < Пробел>, <Delcte> и <+>, В ответ на нажатие любой из этих КJIaВИШ, за исключением знака "ми нус", IlpOl'paMMa "зависает", Вот какой "Отчет о IIроблеме" вы состаВJlЯ ете, 11, Ошибка кодирования, Проблема, В ответ на нажатие КJlавиш редактирования и ДРУI'ИХ IIpeд llOложителыю допустимых КJlавиш IIpOl'paMMa "зависает", Подробное описание проблемы и как ее воспроизвести: Проблема с неuиф ровыми КJIaвишами I'ораздо более серьезна, чем следует из отчетов 7, 8 и 9, В соответствии с этими отчетами КОМlIьютер "зависал" IIрИ вводе сим волы, которых В арифметической IIpOl'paMMe никто вводить не станет, Дальнейшее тестирование 1I0казало, что к тому же результату IIРИВОДИТ и нажатие таких естественных КJIaВИШ, как <BackSpace> и <Delcte>, а также <Пробел>, которым МНОl'ие IIОЛЬЗУЮТСЯ, чтобы IIОДРОВНЯТЬ числа, Приво дит к сбою IIpOl'paMM'" и знак "плюс", а el'o МllOl'ие IIрОСТО рефлекторно нажмут меЖJ\У складываемыми числами, (Вот IIростейший IIример для воеllрои'шедеНЮI IIроблемы: введите А, затем нажмите <Enter>, и IIpol1JaM ма "з<!ниснет",) ПРI!(),IlI?(I(',I/ОС исправление, Проверять каждый вводимый символ, Heдo llустимые CII\II!(Jjf),1 ИI'норировать или выводить сообщение об ошибке, 
{(ава 1: IIpu,Mep серии тестов 37 Обраппе ВНИ\I<Iние Ila то, с 'Iel о отчет начинается: вы утверждаете, что Ilроблема ССрhез!н'с, 'IC,\I :nО оедует из предыдущих отчетов, Это даст про Iра\IМИСТу НОЗМОЖНОСII, сохранить лиuо, Он может сказать, что не испра нил ошибку в IlроUlЛЫЙ раз потому, что не понял (вы ему не сказали), lIaCKOjJJ,KO она ССРI,СЗllа, Хорuший тестировщик lIе тот, кто выявит больше всеi!О ошибок, и Ile тот, кто заставит смутиться даже caмOi!O первоклаССIlОi!О npOi!paммucma. Лучшим является тот, кто добьется исправлеllия lIаиБОЛЬШei!О количества ошибок. Что дальше? По мере дальнейшей разработки ПрOl'раммы вы будете создавать новые серии формальных тестов и ВЫIIOЛНЯТЬ их снова и снова  для каждой всрсии lIpol-раММbl, которая попадет вам в руки, Увидев, что ряд IlOследо нательных версий ПрОlраМ\IЫ успешно lIРОХОДИТ одну из серий тестов, можно будет УlеНhШИТЬ их количество, Но в llOследнем UИКJlе тестирова IIIIЯ все тесты нужно снова выполнить в IIOЛНОI объеме, Кота работа над проектом приБJlИЗИТСЯ к кониу, придет время самых СТрОl'ИХ и самых сложных тестов, К этому моменту вы уже будете знать llpol-рамму во всех тонкостях, изучите все се слабые места, И наряду с проведенuем этих последних тестов вы подумаете о том, чтобы снова \lОДНЯТЬ вопросы, которые по какимто причинам решены не так, как следует на ваш ВЗI'ЛЯД, ЭТО последняя возможность добиться ис пранления ошибок, которые вы считаете серьезными, Вы тут ВЫИl'раете далеко не каждое сражение, но вы и не ставите uелью добиться исправ ;Iения всех оставшихся ошибок, Более TOI'O, накануне завершения проек та lloпытии исправить как можно больше ошибок MOI'YT принести больше вреда, чем IIOJlЬЗЫ, Всепщ наступает момент, КОlла с некоторыми HeДOCTaT ками приходится смириться, Ваша I'лавная задача  добиться, чтобы те, кто отвечает за ход разработки, до конца понимали серьезность каждой описанной вами проблемы, 
Fлава 2 Желаемое и действительное в JlCизни тестировщика Назначение этой rлавы При ппанировании работ по тестированию проrраммноrо продукта из or pOMHoro копиче<;тва возможных тестов вам приходится отбирать пишь мапую, но зато реапьно выпопнимую часть, И как бы тщатепьно вы ни выпопнипи эти отобранные тесты, все ошибки до единой вам все равно не найти. Даже еспи в проrрамме действитепьно не останется ошибок, вы об этом никоrда не узнаете: ведь этоrо непьзя ни доказать, ни проверить. ЛЛноrие новички приступают к работе в попной уверенности, что; . MorYT попностью протестировать пюбую проrрамму; . выпопнив такое тестирование, MorYT не сомневаться, что проrрамма работает правипьно; . задача тестировщика закпючается в том, чтобы rарантировать правипь ность работы проrраммы путем проведения попноrо тестирования. Обнаружив, что их цепь недостижима, мноrие тестировщики оказываются в поп ной растерянности. Как же TorAa компания справпяется со своеЙ pa ботой? И какова их собственная ропь? Но, расставшись с идееЙ о поп ном отсутствии ошибок, они со временем понимают, что можно просто хорошо протестировать проrрамму и обучаются тому, как это сдепать, Эта rпава при звана разрушить нескопько распространенных забпуждений и ответить на вопросы, которые рано ипи поздно задает себе каждый начинающий специапист по тестированию, . Какова цепь тестирования? 
{лава 2: Желаелюе и действитеЛЬ/lOе в ЖИЗI/И тестировU(ика 39 . Чем хорошее тестирование отличается от ллохоrо? . Сколько необходимо лроводить тестов? . Как узнать, что сделано достаточно? Очевидно, что тестирование  это лроцесс лоиска ошибок, ХОРОLJJИЙ набор тестов лозволит найти больше ошибок, чем ллохой, и ошибки эти будут более серьезными. Дальше в этой книrе рассказывается о том, как выработать лравильную стратеrию тестирования (rлавным образом в rлавах 7, 8 и 13), Библиоrрафическая справка в своеЙ известной книrе ло философии науки, вышедшей в 1965 r" Карп Поулер (Karl Popper) утверждает, что лравильный лодход к лроверке Ha учной теории заключается в лоиске не лодтверждающих, а олроверrа ющих ее фактов  лолытке доказать, что в ней есть ошибки. И чем более тщаТельное тестирование выдерживает выдвинутая теория, тем больше у нас уверенности в том, что она верна, Полностью протестировать nporpaMMY невозможно Что озна'Iает IIOJIlIOСТhЮ протестировать ПрОI'рамму? Это означает, что 110 окончании тестирования в ней не должно остаться ни одной невыявлен ноЙ ошибки, Будут ли ошибки исправлены  это уже ДРУI'ОЙ вопрос, НО нсе имеющиеся проблемы должны быть известны и правильно IIOНЯТЫ, Существует популярно.с убеждение, что ПрОl'рамму МОЖI/О IIOJIlIOСТЬЮ протестировать, . В некоторых учебниках дЛЯ начинающих даже рассказывается, как это сделать; "Проверьте реакцию ПрOl'раммы на все возможные Ba рианты входных данных или все возможные IlOследовательности BЫ полнения се кода", Вскоре мы увидим, что НИ TOI'O НИ ДРУI'ОI'О недостаточно дЛЯ IIOЛНОI'O тестирования, и, как правило, ВЫIIOЛНИТЬ эти рекомендаuии вообще невозможно, . В ВОЗМОЖНОСТЬ проведения IIOЛНОI'О тестирования верят и МllOl'ие менеджеры. Они требуют ЭТОI'О от CBoel'o персонала и по окончании работ уверяют ДРУI' дрУI'а, что задача вы IIOJlнена, . Коммерческие представители некоторых компаний, спеuиаJlИЗИРУЮ щихся на тестировании ПрOl'раММllOl'О обеспечения, обещают, что код заказчика будет IIOЛНОСТЬЮ протестирован, . При продаже некоторых систем автоматизаuии тестирования вам обещают, что система сообщит, КОlла код будет протестирован пол IIOСТЬЮ, а в ходе работы будет IlOдсказывать, какие еще тесты [юзво ЛЯТ IIЫЯIII1ТЬ все оставшиеся ошибки, 
40 Часть 1: OClloebI . МНОl'ие продавuы ПрOl'раММНОl'О обеспечения верят, что их товар rlO:IlIOСТЬЮ Ilротестирован и не имест ошибок, и I'ОрЯЧО убеждают в это IlOкупателей, В миф о IIOJIlIOМ тестировании верят и некоторые несчастные тестиров щики, Их П!етет вечное чувство вины, поскольку как бы тяжело ОНII ни трудились, как бы тщательно ни планировали работу, сколькО бы ни Tpa тили времени, сколько бы сотрудников и техники ни было задействовано в тестировании, все равно в ПрОl'раммах остаются ошибки, И чтобы такому же заблуждению не подцались вы, ниже приводятся три "ричины, по которым IlOлное тестирование не может быть выполнено НИКОlла, . Количество всех возможных комбинаuий входных данных СЛИШКОМ велико, чтобы ero можно было проверить IIOЛНОСТЬЮ. . Количество всех возможных IlOследовательностей ВЫIlOлнения кода ПрOl'раммы также слишком велико, чтобы el'o можно было проверить IIOJIlIOСТЬЮ, . Пользовательский интерфейс ПрОI-раммы (ВКJlючающий все возмож ные КОlбинаuии действий IlOльзователя и el'o персмещений по про I'рамме) обычно слишКом сложен для IIOJIlIOI'O тестирования. Невозможно проверить реакцию проrраммы на каждую комбинацию входных данных В предыдущей I'лаве описывал ась совсем простенькая ПрOl'раммка, KO торая Bcel'o то и умела, что сложить два двузначных числа, И даже для нес объем возможных входных данных был Оl'рОМНЫ М, Чтобы проверить эту ПрОl'рамму IIOJIlIOСТЬЮ, нужно провести множество разнообразных тестов, Следует проверить все допустимые входные значения Даже эта l\ростая ПрОl'раммка должна праВИ,lЫIO обрабатывать 39 601 различных пар чисел, Если бы она МOI'ла СКJlадывать четырt:ХJllа'lные числа, это количество выросло бы до 399 960 001, На практике жt: БО;IЬШИНСТВО ПрOl'рамм работают с I'ораздо большими числами, Как все ')10 Ilротестиро вать? Следует проверить все недопустимые входные значения Ва\1 слелует l\оверить, как обрабатывает l\pOl'pa\I:1 11t' 1 o.'II,KO ДОl\УСТИ мыс ВХОДНЫС )\alllll,\C, 110 11 вообще все, что l\ОЛI,1\Ш:JТ\':Н. \!\)жет нвести с КJlавиатуры, Э'IО 11 буквы, 11 Уllравляющие комБНII:IIIIIII "'1;1/111111, и комби 
{лава 2: Желае,ное и действитеЛЬ/lOе в J/СИ3l/И тестИРО/iU(И/{1/ 41 н:щии букв и uифр, и ДРУl'ие символы, как, например, знак IЮllроса, Вы должны знать, как ПрОl'рамма отвечает на любые действия пользователи, 'ПО бы он ни ввел, Следует проверить все способы редактирования входных данных Если ПрOl'рамма позволяет редактировать вводимые числа, нужно убе диться, что она это делает правильно, Проверьте, сможете ли вы изменить любой введенный символ, Протестируйте повторное редактирование: BBe лите число, измсните el'O, потом измените еще раз, Сколько раз нужно это сделать? Чтобы ответить на этот вопрос, при ведем интересный при мер, Оператора, работающею за интеллектуальным терминалом, отвлека ют, Он невниателен, Нажимает числовую клавишу, затем < BackSpace>, снова числовую клавишу, снова < BackSpaee> и т,д, Терминал отображает и стирает uифры на экране, но сохраняет всю последователыюсть кодов нажатых КJJaВИШ в буфере ввода, Наконеи, пользователь вводит то, что хотел, и нажимает <Enter>, Терминал отсылает все содержимое буфера I'лавному КОМlIьютеру, Компьютер не ожидает от терминала TaKoro количества входных данных за один раз, Ь'о входной буфер переполняется, и система сбоит, Это самая настоящая ошибка, и к тому же очень распространенная: и llрOl'раммисты, и тестировщики хорошо знают, как часто сбои ПрОl'рамм бывают вызваны неожиданныlM событием, Можно очень ДОJ\!'О тестировать блок редактирования входных данных и так и не быть до конца уверенны м в ero надежной работе, Следует проверить реакцию nporpaMMbI на ввод в каждый момент ее работы Нужно l\Опробовать ввести данные, косна проrрамма их совсем не ждет, Не дожидайтесь появления знака вопроса и миrающеrо курсора  вводи те числа, l!OKa проrрамма еще обрабатывает предыдущие данные, выводит на экран результат или отображает сообщение, ВО МНОI'ИХ системах в ответ на нажатие КJlавиш I'енерируется прерыва ние, Это преры вание означает, что компьютер должен Ilриостановить pa боту и прочитать данные из ВХОДНОI'О потока, Обработав прерывание, компьютер продолжает ВЫllOлнение ПрOl'раммы, Чтобы убедиться в се Ha дежности, нужно прерывать ВЫllOлнение проrраммы после каждой KOMaH ды, О проблемах, связанных со временем и последователыlOСТЬЮ событий, расскаЗЫВ<lется в I'лаве 4 и приложении  они упоминаются под названи см ситуация ?OIЮК (race coпditioп), В этом отношении уязви мы мноrие IIPO' 
42 Часть 1: ОСllовы [paMMы' Если важное дЛЯ проrраммы событие происходит в момент, Kor да проrрамма ею не ждет, оно может быть просто не замечено или ПрОИI' норировано, неверно классифиuировано, обработано неправилыlO или даже может вызвать сбой, Временная уязвимость  вопрос очень серьезный, И протестировать эту сторону работы ПрOIраммы не менее важно, чем ДРУl'Ие, Что будет, если не проверить все возможные входные данные? Возможных тестов так MHOI'O, что выполнить ИХ все физически невоз можно, Проверьте все четыре типа ввода (допустимый, недопустимый, с редактированием и lIесвоевременный), Тщательно подберите тестируемые данные, Но помните, что, если хоть одно зна'lение ПРОlIущено, тестирова ние останется неllOЛ ны м, Если вы убеждеuы, что можете полuостью протестировать npoi!paммy, "е проверив ее реакцию "а каждую возможuую комбиuацию входиых условий,  npeKpaCIIO. Пришлите иам список предлаi!аемых вами тестов, и мы uапишем прОi!рамму, которая пройдет их все и продемоистрирует эффектllЫЙ сбой в пропущеllUОЙ вами ситуации. Если мы сможем сделать это иuмepeииo, то, без СОМllеuия, подобuая ошибка может быть допущеllа npoi!paммUCnlOM и случайuо. Вот два при мера сбоев в ситуаuиях, которые можно расuенить как слишком сложные или маловероятные, чтобы их тестировать, . Одна проrрамма управления базами данных разрушала файлы дaH ных, размер которых был в точности кратны м 512 байтам, ДРУl'ая не моrла работать с файлами, размер которых раВНЯЛСil ! 6 384 байтам или был кратен этому числу, даже если она сама их создавала, . Один текстовЫЙ проuессор сбоил на больших файлах (100 тыс, бай тов), если они были сильно фраrментированы (т,е, их части были беспорядочно разбросаны по всему диску), Редактирование прохо дило вполне успешно, но в определенный момент IlрИ персмещении курсора целый абзац внезапно исчезал, Подобные ситуаuии слишком трудно СПрОI'НОJИрОВlТh, Но В данном случае это были совершенно реальные проблемы, 11<1 KOlophIe жаловались реальные пользователи, уплативщие приличные eYIM],] 11 110лучившие за них rо;IOВНУЮ боль, ДЛЯ IIOЛНОI'О тестирования проrpаммы нужно IlpOIlCpllll, ее реакuию на каждую комбинаuию ДОilУСТИМЫХ и недопустимJ,lХ Illа'lt:ний в каждый момент се работы и IlрИ всех возможных УСJiОВШIХ Л 'НО IIt:реально, 
{лава 2: ЖелаеЛlое и действитеЛЬ/lOе в ЖU3I1И тестИI'II/{Щllh</ 4] Нельзя проверить каждую возможную последовательность выполнения команд nporpaMMbI При каждом сеансе работы ПрOIраммы можно отследить последователь ность выполнения се опсраторов от запуска до завершения, Последователь ности MOIYT отличаться фрю'ментами кода или их порядком, Для при мера даиайте снова обратимся к проrpамме из первой I'лавы, Ее можно запустить и немедленно остановить нажатием <Ctr1+C>  это первый путь, Можно запустить ПрОI'рамму, ввести два числа, посмотреть на сумму и только после ЭТОI'О нажать <Ctr1+C>  вот вам второй путь, В третий раз можно ввести uифру, а затем нажать <BackSpace>, Чтобы проиллюстрировать проблему, при ведем очень упрощенный при мер, Представьте систему, у которой есть Bcero несколько состояний и вариантов персхода между ни ми, но которую, тем не менее, очень слож но Ilротеетировать, При мер этот основан на ошибке, выявленной при Te стировании работы реальной ПрOI'раммы, . Система запускается в состоянии 1, Это се основное состояние, и она возвращается в Hero при каждой возможности, . Из соетояния 1 она Bcerдa Ilереходит в состояние 2, . Из состояния 2 она может перейти в состояние 3 или 5, . Из состояния 3 она может перейти в состояние 4 или 5, . Из состояния 4 она Мelжет перейти в состояние 3, 5 или 6, . Из состояния 5 она может переЙти в состояние 1, 4 ил и 6, . Из состояния 6 она может перейти в состояние 3 или 5, Bcel'o шесть состояний  ну что тут тестировать? Но так кажется лишь на первый ВЗI'ЛЯД, На деле же команда тестирования обнаружила, что, если система, прежде чем добраться до состояния 6, тридuать раз перейдет из состояния 4 в состояние 5, произойдет сбой, Как вы думаете, сколько дЛЯ нахождения этой ошибки понадобится поверить различных последователь ностей ВЫ!lOлнения, если не предположить се существование заранее? Ошибка эта была найдена в телефонной системе РВХ, В состоянии 1 телефон МОЛ'IИТ, КOIла телефон звонит (состояние 2), то либо ero владелеu поднимает трубку (состояние 3  соединение), либо звонящий вешает трубку (состояние 5  отключение), Ответив на звонок, владелец телефо на может нажать кнопку Hold (состояние 4) или повесить трубку (состоя ние 5), Пока звонящий ждет у телефона (ИЛИ повесит трубку), владелеu может ответить на друrой звонок (состояние 6  ожидание переключения на ждущую линию), Коrда владелеu повесит трубку, прекратив и текущий, и ожидающий разюворы, телефон вернется в состояние 1, 
44 Часть 1: Основы Телефон у оператора РВХ часто бывает занят, и оператор очень часто пользуется кнопкой удержинания линии Hold, Кота оператор нажимает кнопку Hold, КОМllьютер помещает некоторую информаuию во временное хранилище, называемое стеком, При возвращении к отложенному разl'OВО ру компьютер удаляет эту информаuию из стека, Кота оператор вешает трубку и телсфон возвращается в 1I<lссивное состояние, ПрOl'ра,\lма О'lища ет весь стек на случай, если одна из ПОДПРOl'рамм забыла стсреть свои данные, Кота звонивший по ожидающей линии вешает трубку, данные о звонке остаются в стеке, Если оператор повесит трубку до TOI'O, как повесят трубку три;щать звонивших, все будет в порядке, Но если три;щатый человек повесит трубку, Korдa оператор будет llродолжать rоворить, стек перепол нится и телефон оператора выйдет из строя, Большинство про!'рамм несравнимо сложнее этоrо при мера со стеком и шестью состояниями, И косна мы I'ОВОрИМ, что невозможно проследить все ПУ1И ВЫllOлнения IlpOl'paMMHOI'o кода,  это лишь одно ИЗ МНOI'их "невоз можно" в работе спеuиалиста 110 тестированию, Поэтому профеССИОНaJlЫ тестирования IIOЛ3l'аются на эвристические стратеl'ИИ, которые позволяют не наверняка, но зато с наиБОЛhшей веРОЯПIOСТhЮ JIOКaJlизоваТh и ВЫЯВИТh ошибки ПрOl'раммы, и в первую очереДh наиболее существенные. Какое Ol'poMllOe КОЛИ'lество Llутей ВhlllOлнения существует в любой, даже самой простеНhКОЙ НрOl'рамме, продеМОНСТРИРОВaJl в 1976 I'ОДУ Май срс (Myers), Он ОllиеaJl прOl-рамму из сотни строк, допускавшую 1 О" воз можных Ilутей ВhlllOлнения, Для сравнения он заметил, что наша вселенная существует меНhше времени  4* 1 О" секунд, в 1979 zoay Майерс описал еще более простую проzрам.лrу. В 1Iей был цикл и 1Iесколько операторов /Е. В больши1lстве языков проzрам.лruрова1lUЯ для ее реализации пО1lадобилось бы 1Iе больше 20 строк кода. Путей выпОЛ1lе1lUЯ у этой проzрам.лrы 100 триллиО1l0в. Самому быстрому тестировщику пО1lадобится для их проверки миллиО1l лет. ПрОl'раммы Майерса просты, Да, они были специаЛhНО составлены таким образом, чтобы допускать множество IlOследоватеЛhностей ВШlOлне ния, но, если для проrраммы из двух десятков строк возможны 1 00 трил лионов путей, СКОЛhКО же их возможно для TeKcToBoro редактора из 5 ТbIC, строк, простой электронной таблицы из 20 тыс, строк или наСТОЛhНОЙ издательской системы из 400 тыс, строк? Слишком MHoro, И не ТОЛhКО для тестировщика, но даже для автоматизирующеЙ el'o работу проrраммы, ОчеНh важно понимаТh, что, как и в случае со входными данными, ПрОl'рамма не будет протестирована ПОЛНОСТhЮ, если не будет проверен 
[лава 2: ЖелаеЛlOе и действитель//ое в Ж'И3//И тестировЩИkll 45 КilЖДЫЙ возможный IIУТЬ ее ВЫIlOлнения, Любой пропущенный ВiIIИ пут), останется IlOтеНЦИaJlhНЫМ источником проблем, Для серhеЗllOl'О тестирования путей ВШlOлнения ПрОl'раммы необходи IO проаНaJlИзироваТh се ЛИСТИII!', Не зашянув в код, вы не получите peaJlh 1101'0 представления о ходе се работы, СКОЛhКО бы вы ни работали с ПрОl'раммой извне, Bcel'дa останется верОЯТНОСТh прОПУСТИТh Ol'pOM ные фР3l'менты кода, которые останутся ни ра'зу не ВШlOлненными просто потому, 'ПО вы даже не подозреваете об их существовании и не знаете, в какой ситуаuии они ВhПIOЛНЯЮТСЯ, Вот еще одно интересное обстоятеЛhСТВО, Предположим, 'ПО за ОIlреде ленное ВllOлне peaJlhHoe время ПрOl'рамму можно протестироваТh IIOЛНОС ТhЮ, Решило бы это проблему? ОТНЮДh, В проuессе тестирования обнаруживаются ошибки, После их исправления ПрOl'рамму снова прихо i\ИТСЯ llOJ\!IOСТЬЮ тестирован, Обнаруживаются новые ошибки, Цикл повто ряеrся, Он может llOВТОРИНСЯ раз десян, пока llРOl'рамма будет наконец I'отова к продаже, Если вы полаzаете, что можете ПОЛ1l0стью протестировать проzрам.лrу оди1l раз  прекраС1l0. По что вы думаете о вОЗМОЖ1l0сти повторе1lUЯ этой процедуры десять раз? Двадцать? Тридцать? Невозможно выявить все ошибки проектирования ПрOl'рамма соответствует спецификаuии, если она в точности делает то, что указано в спецификации, и БОЛhше ничеl'О, Некоторые люди IlOлаl'ают, что если прОl'рамма соответствует спецификации, значит она правилышя, Но что, если в спеuификации сказано, что 2 + 2 должно раВНЯТhСЯ 5? Что будет для прOl'раммы ошибкой  точное соответствие неверной спеuифи каuии или отклонение от нес? Как и все OCTaJlhHhle произведения рук человеческих, спеuификаuии 'lacTo содержат ошибки, Одни из них случайны (2 + 2  5), ДРУl'ие же являются реЗУЛhтатами заблуждений проектировщиков, Именно с ошибка ми проектирования связаны очеНh мноrие недостатки IIOЛhзоватеЛЬСКОl'О интерфейса, Но ошибка есть ошибка  и IIOЛhзователю все равно, на Ka кой стадии разработки она допущена, Поэтому, если проrрамма разработа на по неверной спеuификации, мы rоворим, что она неверна. Как и любые дрУl'ие проблемы, все ошибки IIOЛhзоватеЛhскоrо интер фейса ВЫЯВИТh невозможно. Мы не знаем никоrо, кто утверЖДaJl бы, что может это сделан, И это еще одна из причин несостоятеЛhНОСТИ идеи о полном тестировании прОl'рамм, 
46 Часть 1: Основы Правильность nporpaMMbI нельзя доказать лоrически ОсновоЙ работы КОМПhютера является лотка. ПрОl'раммы пишутся на очень точных языках, Проанализировав ЛOl'ИКУ проrраммы, можно опреде лить се состояние в любоЙ точке кода и в любоЙ момент времени, Конечно, сразу встанут проблемы времени и количества всевозможных условиЙ, Но даже если их не учитываТh  что именно можно провеРИТh, анализируя ПрОl'раммныЙ код? ТОЛhКО соответствие прOl'раммы спеuифи кации, но никак не праВИЛЫIOСТh самоЙ спецификации, И еще одно, ДоказатеЛhства  они ведь тоже строятся человеком, а значит, МOI'УТ содержать ошибки и упущения. rде I'арантия, что ЛОl'ика TOI'O, кто анализирует ПрОI'рамму, точнее ЛOl'ИКИ се автора? Итак, мы описали уже uелыЙ ряд проблем, На самом деле их еще БОЛh ше, Времени всета слишком мало, а необходимоЙ работы  слишком MIIOI'O. !2СJlИ вопрос ВhПIOЛНИМОСТИ !IOЛНОI'О тестирования вас заинтересовал, обратитееh к работам БеЙзера (Beizer, 1984) и Данна (J)unn, 1984), Цель тестировщика  проверка правильности nporpaMMbI? Тестирование часто определяют как проuесс проверки праВИЛhНОСТИ работы ПрOl'раммы, . Это определеllие бессмысле1ll1O: невозможно так проверить ПрOl'рам му, чтобы сделаТh заключение, что она работает правильно, . Кроме тош, 01/0 ошиБОЧ1/0: ПрОl'рамма не работает абсолютно пра ВИЛЫIO, . 0110 зара1/ее предполаzает lIеудачу: если uеЛh тестировщика  пока заТh, что проrрамма работает праВИЛhНО, то он терпит неудачу каж дыЙ раз, кота находит ошибку, . Опираясь lIа 1/ezo, тестировщик действует 1/еэффектив1/0: если вы заранее наСТРОИЛИСh на то, что ошибок в прОl'рамме нет, вероятность их наЙти значителыlO умеНhшается. ДаваЙте по очереди разберемся с каждым из этих утверждений. Невозможно проверить, что nporpaMMa работает правильно Как мы с вами уже выяснили, невозможно IlOлltОСТhЮ протестироваТh ни одну Ilpol-рамму (если ТОЛhКО она не абсолютно элементарна). Отсюда 
[лава 2: ЖелаеЛlое и действите,lЫlOе в J/СU3НИ тестировщика 47 НСIlOсредетвенно вытекает еще одно утверждение: невозможно провериТh, что прОI'раМlа работает правилыlO, Сбой может произойти в любой из \IИJlJ\ИОIIOВ не проверенных вами ситуаций, Проrрамма не работает правильно 110 при мерным оценкам на обнаружение и исправление ошибок тратит ея от 40 до 80 проuентов общей стоимости разработки прОl'раММlIOI'О обес lIе'lения, Такие ()('pO\IHhle деНhI'И компании платят не за то, чтобы убеЩПhея, что ПрОI'ра,\IМЫ работают, Они вынуждены тратить деНЫI1 11OTO IY, что их ПрOl'раммы не работают  в них есп, ошибки, и владеЛhlth1 КОМllаний хотят, 'lТобы эти ошибки были исправлены, Как бы '-рамотно, 110 еаМЫ\1 современным методикам, ни была ОРПlIIизована разработка, ошиб ки остаются веста. Сколько в npOrpaMMe ошибок? по оценкам Бейзера (Beizer), сделанным им в 1990 I'ОЛУ, передаваемые на тестирование ПрОl'раммы в среднем содержат от 1 до 3 ошибок на каж j!hIe 100 иеllOJ\няе\IЫХ операторов, И хотя есть очеНh талаНТЛИВI,lе прОI'рЩ \II1CTbI, у которых ошибок мало, все же совсем без ошибок не работаст никто. Текущие ошибки  От 1 до 3 ошибок на 100 строк кода в I1рOl'рамме остается тота, кота IlрОl'раммист сдаст работу тестировщику, утверждая, что она проверсна и ошибок в ней нет. Но сам Бсйзер приводил количество ошибок, ДOIlYCKae мых им в ходе проектирования и написания прОI-раммы,  1,5 ошибок на 1 ис пОЛllяемый оператор. Сюда он ВКЛЮЧИJI все ошибки, в том '!ИСJlе и опечатки. Это Зllачит, что, если Каждый оператор записаll в отдельной строке, lIа 10 строк кода приходится 150 ошибок. БОЛhшинетво ПрOl'раммистов сами исправляют 99% своих текущих ошибок, Не удивитеЛhНО, что они IlOлаl'ают, что исправили все. Но 1% ошибок все же остается: найти их и есть ваша работа, Если проrрамма работает непраВИЛЬНО 1 значит ли ЭТО 1 что тестирование выполнено плохо? Это прозвучит смешно, но в нашей практике встреЧaJlИСh менеджеры, возмущавшисся, что тестировщики все еще выявляют ошибки, кота cpo ки работ уже подходят к кониу. Инота их недовольство выскаЗЫВaJlOСh в полушутливом тоне, а инота выражаJ!ОСh и в прямых обвинениях: "Все 
48 Часть 1: Основы ошибки да ошибки! Кота же наконец вы подтвердите, что llpOl'paIMa работает и мы можем се продаваТh?" СТОЛКНУВШИСh с таким отношением, не стоит теряться. Убедиться, что прOl'рамма работает  это мечта неОПhlТ ных менеджеров, а вонсе не ваша задача. Не стоит приступать к тестированию с надеждой на отсутствие ошибок Для работы тестировщика очеНh важно то, как он настроен (Майерс, 1979). Если вы уверены, что в прОl'рамме есть ошибки, вы будете искать их I'ораздо тuщтеJlhнее, чем если скажете себе: "Это Ilрекрасная ПрОI'рамма, и она праВИЛh!1O работает, мне нужно просто в этом убедиться". Любой пси ХОЛОI' ОХОТНО llодтвердит, что человек Bcel'дa видит ТОЛhКО ТО, что хочет видеть. Поэтому, например, так трудно при чтении текста заметить в нем орфоrрафические ошибки: ведь ум сразу корректирует увиденное lлазами. Изучая работу различных исследователей ученыеПСИХОЛОI'И выявили ряд интересных закономерностей, Они обнаружили, что, если исследова теЛh llOдсчитывает количество определенных СИПlалов, реl'Истрируемых не приборами, а el'o собственными Орl'анами восприятия, реЗУЛhТаты [lOдсче тов очеНh сильно зависят от el'o ожиданиЙ (Green & Sweets, 1966). Напри мер, если исследоватеЛh предIlOЛ3l'ает, что СИПlaJlOВ будет МЗJIO, он может час'\Ъ их просто не заметить, Если к влиянию собственных llредIlOложений исследователя добавляются еще и ДРУl'ие ПСИХОЛОl'Ические факторы, напри мер, поощрение при одних реЗУЛhТатах исследования и неIlРИЯПlOети Ilри ДРУI'ИХ, реЗУЛhТаты эти будут искажены еще СИЛhнее. То же будет и с вами: если вы ожидаете, что проrрамма IlOлна ошибок, за выявление которых вас к тому же еще и поощряют, '\() обнаружите их множество. НеСКОЛhКО выявленных ошибок будут даже ложной тревOI'ОЙ. Но если вы думаете, что ПрOl'рамма работает праВИЛhllO, а '!аказчики еще и ЖaJlУЮТСЯ на каждую найденную ошибку и очеНh tlC)!OI!O,II,I1bl, если Tpe BOl'a оказывается ложноЙ  тота вы про пустите MIIO\ (J Ct:PI.C'JIIhlX проблем. А вот еще одно наблюдение ПСИХОЛОI'ОВ: даже CaMI,\C УШlые, ОПhlТные, аккуратные и ответственные экспериментаторы llO;!CO 111;\1 СIJ.lЮ про пускают те тесты, которые MOryT опровеРПIУТh их теорию ШIII со \,!;НЬ сложности в ДaJlhнейшеЙ работе. Если же llрОПУСТИТЬ тест Hel\() \\I!IЛ-II(', CI'O реЗУЛhТаты неверно интерпретируются, ИПlOрируются или П[111 11\ ;111;I'III!e допускаются ошибки (Rosenthal, 1966). Итак, чтобы лучше Bcel'O ВЫПОЛНИТh СВОЮ ра(,о 1 \', Н;lI1ельте себя на выявление максимаЛh!IOЮ количества ошибок, "".+-НО l'lllla!h ПрОl'рамму плохой, желаТh, чтобы в неЙ произоше;l сб(lIi, 11 "Оlllll'lllрироваТhСЯ на поиске се самых слабых мест. Какой бы суровой ни казаl!аСh такая \\0\\\111111. \\\1\'1111\1 она наиболее эффективна. 
[лава 2: Желае.\I0е и действителЬ/ше в Ж'И:i/lИ тестИРUllщи/{а 49 Если вы хотите, чтобы проzрам.л,а работала, если вы этоzо ждете, то, скорее всеzо, вы увидите то, чеzо ждали, и пропустите имеющиеся ошибки. А рассчитывая "айти ошибки, вы обязатель"о их "айдете. Если за отчеты об ошибках вас ожидают "еприят"ости, вы "е только "е составите "уж"ых отчетов, 110 даже "е заметите самих ошибок. Итак, ДЛЯ чеrо же тестируют nporpaMMbI? Всех ошибок все равно не найти. И вы НИКОIЛа не сможете сказан с увереННОСТhЮ, что ПрOl'рамма работает праВИЛhНО. Так зачем же се теети рован? Проrрамму тестируют для Toro, чтобы найти в ней ошибки Смысл теетироваНI1Я заключается в поиске Ilробjlем, Ваша неЛh  найти их как можно БОЛhше, и чем серhезнее наЙ;lенные проблемы, тем ЛУ'lше. Помните, что времени всеIЛа очеНh ма.;ю, и етарайтееh иеllOльзоваТh el'o как можно эффективнее, Мы еп!е не ра3 с вами 1I00'ОВОрИМ о том, как [lравилыlO е[l;lанирован работу и как раееlаНИТh приоритеТhI (в частности, в I'лавах 7, 8, 12, 13). I'лавное же, на '11'0 нужно ОlIира rbl':>J, МОЖIIO ефор мулироваТh очень просто, Если тест позволил выявить проблему, з"ачит, о" успеШIlЫЙ. А тест, IIе выявивШий проблем, был потерей време"и. Эту МЫСЛh подтверждает одна очеНh нашядная аналоl'ИЯ (Майерс, 1979). ПредстаВhТе, что с вашим ЗДОРОВhем чтото не в llOрядке. Вы приходите к врачу, и он про водит целый ряд анализов. Однако врач ничеI'О не находит  он утверждает, что вы здоровы. Хороший ли он диатост? Если вы в самом деле БОЛhНЫ, остается признаТh, что врач некомпетеlпен, а ДОрОI'О стоящие анализы были пустой тратой сил, времени и денеl'. При тестиро вании ДИal'НОСТ  это вы, а ПрOl'рамма (абсолютно наверняка)  БОЛhНОЙ паuиент. Так найдите же, что с ней не так! Ошибки ищут для TOrO, чтобы их исправить В конечном счете БОJlhшинетво наЙденны х ошибок иенравляют, и Ka чество прОl'раММНОl'О продукта улучшается. Это и есть настоящая uеЛh тестирования  соишеитееh, что, несмотря на суровое обращение тестиров щиков с ПрOl'раммой, она весьма блаrородна. 
Fлава 3 Типы тестов и их роль в процессе разработки прО2раММНО20 обеспечения Назначение ЭТОЙ rлавы Эта rлава  обзорная, Вот какую информацию вы в ней найдете, 1, Терминолоrия, Профессиональный словарь тестировщика содержит Ha звания десятков методов тестирования и разработки лроrрамм, а также названия самих тестов и выявляемых с их ломощью лроблем, 2, Обзор процесса разработки проrраммноrо обеспечения, Тестировщи ки часто жалуются, что их лодключают к лроцессу разработки слиш ком лоздно, KorAa все лринцилиальные решения уже лриняты, На самом же деле работа для тестировщика есть с caMoro начала  он может вносить лолезные лредложения на каждом этале раз работки. Налример, на этале разработки слецификации тестировщик может лроводить анализ лоrической лравильности слецификации, ее вылолнимости, лолезности отдельных решений и тестируемости лро rpaMMHoro лродукта, 3, Описание ключевых типов тестов, В этой rлаве олисываются основные тилы тестов лроrраммноrо обеслечения, рассказывается, для чеrо лредназначен каждый тест и сколько на Hero требуется времени. Здесь же вы найдете и некоторые лолезные советы, ломоrающие лровести олисанные тесты более услешно, 
[лава з: Типы тестов 51 к некоторым темам этой rлавы мы больше возвращаться не будем, Поэтому, если вы хотите выrлядеть леред коллеrами лрофессиональ но достаточно rрамотными, изучите ее как можно внимательнее, 4, Би6лиоrрафические справки, Волросам тестирования и разработки лроrраммноrо обеслечения лосвящено MHoro лолезных книr, Чтобы ломочь вам как можно лучше разобраться в каждом рассматрива емом волросе, мы часто ссылаемся на такие издания, И в этой rлаве таких ссылок особенно MHoro, Обычно лисатели включают в свои книrи библиоrрафические ссылки для Toro, чтобы читатель Mor лознакомиться с альтернативным MHe нием, или для Toro, чтобы лродемонстрировать свою толерантность к чужим взrлядам на вещи, Мы же лользуемся ссылками еще и для Toro, чтобы читатель Mor уrлубить и расширить свои знания, Мы уломинаем только те издания, которые нравятся нам самим и кажутся лолезными для изучения волроса, Поэтому в одних разделах ссылок на дололнительную литературу MHoro, а в друrих  совсем мало, Мноrие волросы, освещенные в этой rлаве лишь концелтуально, в сле дующих rлавах будут дололнены техническими лодробностями, а лотом снова будет сделан их обзор, но уже на более rлобальном уровне (в rлавах 12 и 1 З), В rлаве 1 3 МЫ <н начала до конца лроанализируем весь лроцесс разработки лроrраммноrо обеслечения. На этот раз мы будем исходить из лредлоложения, что основы вам уже хорошо знакомы, и сделаем улор на стратеrические волросы: как лри оrраниченных сроках и бюджете так орrанизовать работы, чтобы максимально улучшить Ka чество лроrраммноrо ЛрОДУКТа, Замечание Материал этой rлавы изложен так, чтобы охватить как можно больше волросов, не вдаваясь в лодробности, Некоторым читателям она лока жется лереrруженной новыми терминами и лонятиями, а друrим самой скучной во всей Книrе, Те читатели, которые не осилили книrу до конца, rоворили нам, что остановились именно здесь, Позвольте лредложить вам несколько советов, . Прежде Bcero, не стоит беслокоиться, если вы не до конца лоймете разницу между некоторыми терминами из области разработки лро rpaMMHoro обеслечения, Вам не нужно вникать во все детали рабо ты лроrраммистов, лросто лознакомьтесь с их терминолоrией, чтобы в дальнейшем вы смоrли расслрашивать их о внутренней структуре лроrрамм и лонимать их ответы, . Отнеситесь к этой rлаве как к ознакомительному обзору, Не вникая во все детали, лостарайтесь лолучить общее лредставление о лроцес се разработки лроrраммноrо обеслечения и ero тестирования и OTMe чайте для себя в уме самые важные моменты, В дальнейшем вы еще не раз будете возвращаться к этой rлаве за слравками или уточне ниями, Имея это в виду, мы лостарались структурировать ее материал самым тщательным образом, так что она даже наломинает слравоч ник  в ней леrко найти нужную информацию, даже если лри Лf"!' вом лрочтении вы ее лролустили вовсе, 
52 Часть 1: Основы . Студентам, ппанирующим в дапьнейщем заниматься тестированием nporpaMMHoro обеспечения, мы бы рекомендовапи подытожить ин формацию этой rnaBbJ, представив ее в виде схемы, похожей на при веденную на рис, 13.3, Не тратьте спищком MHoro времени на терминопоrию разработчиков, оrраничьтесь теми понятиями, которые объяснит вам преподаватепь, В дапьнейщем для изучения rnaBbJ 13 мы рекомендуем сдепать учебное пособие в виде табпицы, представпен ной на рис, 13,4, и вкпючить в Hero материап этой rnaBbJ, Обзор в этой rnaBe мы описываем процесс разработки nporpaMMHoro обеспе чения в той же поспедоватепьности, в какой он проходит и в жизни, Параппепьно мы описываем и технопоrии тестирования, соответствующие каждой стадии разработки, Вот общий перечень раздепов этой rnaBbJ, . Обзор стадий разработки . Стадии ппанирования . Тестирование на этапе ппанирования . Стадии проектирования . Тестирование на этапе проектирования . Тестирование "стекпянноrо ящика" на стадии кодирования . Реrрессионное тестирование . Тестирование "черноrо ящика" . Сопровождение СерьеЗНhIе ПрОI'раНhlе IlpOllYKThI редко разрабатываются одиночкаи: оБЫ'111O эти заниаются I1JYll!IhI людей, ИIIOI)'\3 ДОвОЛhllO НОl'OчислеННhIе, В такой I'РУIше, называеой KU,\IGlltJOU разработчиков (deve/opmeпt (еат), у каЖJ!ОI'О сотрудника своя роль, Даже если Ba приходилось создавать про I'paы абсолютно саостоятеЛhllO или в паре с приятеле, это просто означает, что вЫ по очереди или одноврееllllO ВЬПIOЛНЯ1\И Функuии всех необходиых членов KoaHДЫ, Давайте рассотри стандартный набор Функuий, вЬПlOлняеых членаи KoaHДЫ разработчиков, I\реJНIOЛОЖИВ для ПРОСТОТhI, что каждая роль Ilринздлежит O'IдеЛhllOу сотруднику, Конечно, на практике в большинстве аленьких копаний СОТРУШillКИ часто вы!oл няют по нескольку Функuий, . Руководитель nроекта (project manager, также lIа'!Ываеh1Й software deve/opment manager И;1И рrоdисеr) отвечает за K<I'LeCTIlO ПрОI'раюlO 1'0 продукта, планирование работ и составление БЮ;tжета разработ ки, Мы буде считать, что все отчеты \lроектировщиков и разработчиков неIlOсредственно передаются ему, . ПрuектИРО(ll/(ИКО(l ((/esi,f!,пers) продукта ожет БЫII. нссколько и среди НI1Х СJlСЛУIOIIlIIС, 
I1Qea з: Типы тестов, 53 Разработчик архитектуры (architect) определяет общую BHYTpelJ нюю структуру кода и данных, принuипы обена данныи еж ду связанныи ПрОI'рааи и их cOBecТlIOI'o ИСIIOЛhзования, а также стратеl'ИЮ разработки COBeCTHO и повторно ИСIIOЛhзуеых оду;[ей, Разработчик архитектуры ожет также составлял, план тестирования "стекляннOI'О ящика" на cao BepXHe уровне, ана;lИзирован технические обзоры всех Сllеuификаuий и разра баншан тесты для приеки продукта (проверяющие COOTBeT ствие кода теХНИ'lески требования). Специалист по а//алu:lу пред,\lетIlОЙ области (sиЬjесt matter expert или software ana/yst) должен IIOНИ3'lЪ, чеl'О хотят IIOЛhЗователи и как это выразин в теРlинах, ПОНЯТlIЫХ ПрOl'раисту или ДРУI'Оу разработчику, Специалист пи Ш/WIU:Jу чеJювеческо?О фактuра, или специалист по JP?OIlU,\IUKe (hитап factor ana/yst или erxonumist), иеет ПСИХOJIOI'И ческос образование и знает, как спроектирован IIpol'pay, что бы она была IlOлеЗllOЙ и удобной, и как тестиров3'lЪ продукт (или el'o IIРОI'ОЛIII) на соответствие эти качества, Некоторые из спеuиалистов наСТОЛhКО хорошо разбираются в ВОllросах проек тирования и ПрОI'раирования, что OI'YT неIlOсредственно раз рабатываТh IlOЛhЗ0ватеЛhСКИЙ интерфейс Ilpol'pa, ВIlРО'lе, таких Сllеuиалистов I'ораздо еНhше, '!e считающих себя TaKO выи, OCTa;lhHhle же Ilриниают участие в разработке IIOЛhЗова теЛhСКОl'О интерфейса COBeCTHO с Ilр()('раистаи, Про?ра,\/,\lист пользовательско?о Иllтерфейса (иsеr interface programmer) СIlеuиализируется на создании IIOЛhЗоватеЛhCКОI'О интерфейса IlpOl'pa, Обычно это llрофессионалшый ПрOl'ра ист, который разби[-ается в оконной архитектуре и копьютер ной I'рафике, а в идеалыlO варианте еще и обладает знанияи в области КОI'НИТИВНОЙ философии. ПОЛhЗователhCКИЙ интерфейс  это, по сути, часн ПрОI'раы, предоставляющая IIOЛhЗователю инфораuию (в виде rрафики, текста, звука, в печатно виде и т,п,) и получающая от Hel'o OT ветные данные (через клавиатуру, ШllЬ и друше устройства BBO да), которые зате передаются ДilЯ обработки ОСIIOВIIOЙ проrpамме, Эту чаСТh ПрOl1Jаы часто называют слое представления и полу чения данных, ИеllllO се и пишет проrрамист IIOЛhЗоватеЛhСКО 1'0 интерфейса, В БО,1ее широко смысле IlOнятие IIO,1hЗоватеЛhскоrо интерфей са включает также содержаllие инфораuии, которой ПОЛhЗова 
54 Часть 1: OClloebl тель обенивается с IlрOl'рамюй, Наприер, разработчик IЮЛhЗО ватеЛЬСКОl'О интерфейса решает, какие ОIЩИИ нужно IJре;lOставиТh IIOЛhЗователю, как IIOНЯПIO их ОПИС3'lъ И В KaKO ВИ;lе отобра зюъ, Хотя IЮI'ие ПрOl-раисты считают, что \ЮI'УТ IIроектиро вать пользовательский интерфейс так же хорошо, как и реализовыв3'lЪ, на cao деле БО;IЬШИНСТВО из них нуждается в сотрудничестве со спеuиалисто по Эрl'оноике. Ведущие про?ра,чмисты (!ead prograтmer,\) часто заНИ\1аются разра боткой той части Сllеuификаuии (техничеСКОI'О задания), которая относится к внутренней структуре Ilродукта, ВО НОI'ИХ KOall дах, строящих работу 110 IIРИIЩИIIУ консенсуса, IIрOl'раисты разрабатывают архитектуру продукта саи, . Меllеджер по ,\lаркетИII?У (pro(lиct maпager или рrоdисt marketiпg maпager) отвечает за соответствие продукта ДОJII'ОСрОЧНОЙ стратеl'ИИ и ииджу своей КОllании, а также за apKe 1'ИIII'0ВУЮ деятел\,lЮСТЬ, продолжающуюся IlOсле ВШlуска IlpoilYKTa (реклау, выпуск и pac пространение IIOBhIX версий, обучение продавuов и дилсров), В боль шинстве КОIIаний менеджер 110 аркеТИНI'У отвечает также и за рентабеЛhlЮСТЬ продукта, Он ОlIределяет требования рынка, а также те функuии и ВОЗОЖIIOСТИ, от которых зависит el'o KOHKypeHTOCIIO соБНОСIЪ, В Оllределении набора функuий Ilpo:lyKTa и оборудования, с KOTOpЫ ОН должен быть совести, енеджср 110 маркетию'у также ИI'раt:т саую активную роль, . Представитель I'PY!l!Ihl теХllической поддержки (techпica! sирроrt)  это член или руководите;IЬ l'рУППЫ, неllосредственно контактирующей с пользователяи, Сотрудники этОЙ I'PYllllhI ана;IИЗИРУЮТ жалобы IlOльзователей, ошечают на их ВОПрОСhl и Ilредоставляют и необ ходиую информаuию, На этапе создания продукта они участвуют в проектировании ПрOl'раы и разработке докуентаuии, СТ<fраясь сдел3'lЪ се как ожно IIOНЯТllее и ИНИИЗИРОВ3'lъ количесшо звон ков, на которые и пото придется отвечать, . ТеХllические писатели (writers)  это члены ?руппы дОКУ,\lеllтироваllИЯ (dоситепtаtiоп grоир), разрабатывающие руководство IIOЛhЗоваТСJ\Я и интерактивную справку, Их советы часто IIOОI'ают сдел3'lЪ ПрOI-ра y более простой и IIOНЯТНОЙ, . Тестировщики (testers) также считаются членаи KoaHДb! разработ чиков, . В разработке спеuифических проею'ов приниают участие и ДРУl'ие Сllеl(llа:IИСТЫ: 110 КО\lllьютерной I-рафике, надежности, защите, аппа paTHOy оБССllе'lеIlИЮ, а также юристы, буна:lтера и т,д, 
Iлава з: Типы тестов .., 55 Ну а теперь, !lOзнакоившись с ОСНОВНhl\1И ИС!lOлнитеJlЯИ, давайте переЙде к обзору caol'o проuесса, Обзор стадий разработки Проuесс разработки ПрОI'раНОI'О продукта ожно разделить на He скол ько стадий, Сначала el'o придуыl!ют,' зате создают, анализируют результат, устраняют el'o недостатки, зате продукт попадает к пользова тсля, которые el'o эксплуатируют, а сотрудники отела аркеТИI!I'а KO Ilании анализируют IlOльзовательский спрос, Кота продукт заЙет свое eCTO на рынке, разработчики ПРИДУhlвают, как el'o усовершенствован, вносят изенения и т,д. MOI'YT быть выпущены десятки новых версий, IlOсле чеl'О Ilродукт наконец устареет и будет заенен ПРИНUИIlИaJlЬНО HO BЫ, Весь этот нелеl'КИЙ жизнсннЙ пун продукта, начиная от IIOЯl!Jlения у авторов саой первой IIдеи и закаН'lивая el'o yxoдo со сцены, ы наЗhl Bae J/cU3l1elll/bI'\/ цикло,\[ (/ife сус/е) , В жизненно uикле продукта llOжество ЭТ3IIOВ, Обычно их описыl! ют !lOслеJlOватеЛhllO, как если бы они шли CTpOl'O ДРУI' за ДРУI'О  закан чивается один и начинается ДРУI'ОЙ,  110 на cao деле они в знаЧИТСЛhllOЙ степени lIерекрываются, Мы тожс опише эти этапы после доватеЛhllO, а о TO, как они I!ересекаются, расскаже несколько позже  в I'лавах 12 и 13, ВОТ I!ЯТЬ основных ЭТ3IlOв жизнеНllOl'О UИКJlа ПрOl'ранOI'О продукта, . Планирование . Проектирование . Кодирование и написание докуентаuии . Тестирование и исправление недостатков . Сопровождение (после выпуска) и усовершенствование В своеЙ КНИl'е Software Mainteпaпce (Сопровожде//ие просрамм//осо обеспе чеllUЯ) Мартин и MaK Клер (Martin & mсС1ше, 1983, стр, 24) привели OT IlOсительную стоиосн каждоЙ их этих стадий, Вот эти uиФр\,], Стадии разработки Анализ требований 3% Спецификация 3% Проектирование 5% Кодирование 7% Тестирование 15% Впервые эти uифры были Оllуб;lикованы Зелковиuе, Шоу и reHHoHo (Ze1kowitz, Shaw & Gannon) 11 1979 I'ОДУ, По реЗУЛhТата их исследованиЙ Производствеllllая стадия Промышленное производство и сопровождение 67% 
56 Часть 1: Основы и дaHHЫ Мартина и МакКлера, сопровождение I1pOI'paHol'O продукта после el'o Вhlпуска обходится дороже Bcel'O, На ВТОрО\1 CCTe по стоимос ти стоит тестирование  на Hel'o приходится 45% всей стоимости разработ ки, В проuессе сопровождения Ilродукта при ИСllравлении ошибок и внесении усовершенствований зна'lитеЛhная чаСТh затрат тоже IIРИХОДИТСЯ на тестирование, Продукт тестируют и ИСIlравляют практичt:еки на каждо этапе eI'o жизнеННОl'О uикла, При это че даЛhlJJе IlрОДВИl'ается работа, Te быст рее растет СТОИМОСТh тестирования, . На этаllе разработки технических требований СТОИОСТh внесения изенений в докуентаuию ОТllOситеЛhllO невысока, Но после наllИ сания кода ситуаuия резко еняется: любое изенение проектной докуентаuии влечет за собой затраТhI и на персработку кода, 'lac то I'ораздо более значитеЛhНУЮ, 'lе ожет IlOказаТhСЯ при оценке количестна изменений в спеuификаuин, . Кота НрОI'раист ca находит свою ОШL1бку и ca се исправляет, это не влечет БОЛhШИХ затрат, Ey не нужно l!ЗаиодейетвоваТh с друПlИ сотрудникаи, не нужно НИ'lеl'О HLIKOy оБЪЯСНЯТh, Ey незаче l!IlOСИТh описание ошибок в общую базу данных, служащую для КОНТрОJlЯ за их ИСIlраВJlение, а тестировщика\I и руководите лю не нужно осущеСТвЛЯТh этот КОIПРО;[h, Такая ошибка никою не задерживает и не ешает НИЧhей работе, . До вы lIуска [lpOI'paMhI ошибку исправи1Ъ I'ораздо дешевле, че после TOI'O, кота "заплатку" И;IИ новую версию приходится BЫCЫ лаТh каждоу IIOJ!hзователю  и это еще в лучше Сilучае, ведь ожет IlOтребов3'lЪСЯ и неIlOсред ственный выезд сотрудника KO пании к заказчику, ..о g ::!; :s: О U в 1976 1', Боэ (Boehm) опубликовал ИТОl'ОВhlе данные анализа затрат на Tec тированис ПрОI'раНhlХ продуктов, про ведеННОI'О в копаниях IBM, GTE и TRW, Из них следует, что че позднее обнаруживается ошибка, Te дороже обходится се исправление, Как 1I0казано на рис, 3.1, стоимость исправления оши бок растет ЭКСIlOнеlщиалhНО: леРlе Bce 1'0 это де;lаТh на стадии планирования, а по epe lIерсхода к проектированию, KO дироваНIIЮ, тестнрованию 11 сопровож дению olla ЗН<l'lитеЛhllО уве:lичивается, r отова спецификация Завершено кодирование Выпуск РИСУНОК 3,1, Стоимость поиска l/ ИСIl{}(l/i:/ения ошибок в просрамм/(/,It (/(iеСllечснии 
Iлава з: Типы тестов ..' 57 Разработка ПрОI'раНОI'О обеспечения для аериканских воздушных сил обошлаСI, (для ОДНОI'О КОМ!II,ютера) в 575 в перссчете на одну ПрОI'раную инструкuию, а el'o СОllровождение стоило уже $4 тыс, на инструкцию, Чем ра1/ьше 1/айти и исправить ошибку, тем дешевле это обойдется. Подробное обсуждение стадий разработки ПрОI'раЮIOI'О обеспечения ожно найти в работах Де l'реЙса и Стала (DeGrace & Stah1, 1990), МаЙ ерса (Myers, 1976) и РоутзеЙа (Roetzheim, 1991), А деталhlШЙ анализ CTO иости разработки приво;rили Боэ (Boehm, 1981), Джонс (Jones, 1991) и Волвертон (Wo1verton, 1974), ' Стадии планирования В KoaHдe Iшанирования IlpOl'paHol'O IIродукта ДО;IЖНIтl быТh ведущие инженеры, персонал, отвечающий за аркеПIН1' и продажи, и руководите ли проекта, Эта KOMaH;ra вырабатывает общие характеристики продукта, В резулы'ате се работы на свет l\оявляется Bcel'O несколько ДOKyeHTOB. оп ределяющих ДШlьнейшую разработку, Определение целей Планирование начинается с фОР\lирования общеl'О видения продукта, СостаВJ\яеIтlЙ при это ДOKyeHT не отличается деТ3.ilhlIOСТЬЮ, В He o жет быТh ОПl1сан llOльзов,пельский интерфейс, требования к надежности ПрОI-раIIOI'О продукта и el'o l\роизводителыlOСТИ, В это же ДOKyeHTe оп ределяется IlреД!lOлаl'аемая СТОИОСТh продукта и затраты на ero разработ ку, Он разрабатывается прежде Bcel'o для TOI'O, чтобы llOставить перед коандой разработчиков конкретную uель, При это конечный резулыю' ожет не соответствовать первоначалыlOу описанию, Анализ требований Требования к ПрOl'раноу продукту, выраб3'lъшаеые на это этапе, ДОЛЖНЫ бьпъ выloлненыы обюателыlO, Они носят функuиона:\ЫIЫЙ xapaK тер, а как реа:lИзоваТh их IIрактически  это уже решают разраБОТ'IИКИ, Перечень требований ожет oXBaTЫBaТh стоиосп, ()УJlущеl'О IIродукта, el'o производителыlOСТЬ, надежность, а также некоторые с)лееlпы llOльзова теЛЬСКОl'О интсрфейса, То, Ilасколько подро()но все это описывается, зави сит от спеuифики разработки, В требования к IlpOl'paIIIO\IY IlpO:LyKTY или ДРУl'ие документы, Bыpa батьшае\lые на ранних cTa;rIНlx НJlанирования, включаются также и требо вания к а\lllараПIO\IУ o()eeIlC'ICIIIlIO, Чтобы не усложнять атериал, в этоЙ 
58 Часть 1: ОСllовы I'Л,lI3е \,] не буде кас3'lЪСЯ таких С!Iеuифических вонросов, как ОДllOвре енная разработка <l!шаратнOI'О и IIРOl'ранOI'О обеС!Iечения или !Iериоди ческос IIOВhlшение требований к all!IapaTHoy обеС!Iечению в соответствии с el'o развитие, Буде ИСХОДИТh из !Iред!IO;lOжения, что ТИ!IhI аПlIаратных средств, на которые ориеНТl1рован IIрOl'раIНhlЙ продукт, извеСТlIЫ с cao 1'0 начала разработки, Определение функциональных характеристик nporpaMMHoro продукта О!Iределсние ФункuионалhНhlХ характеристик ожно !IредставиТh как OCT ежду требованияи к !IpO!1JaMHoy продукту и будущии инженер 11OlIроектныи ДОКуентаи, Требования к продукту связаны !Iрежде Bcel'o с аркеТИI!I'О и ваЖНhI иенно для ЭТОI'О отдела, Инженеру же нужно нечто более Оllределенное, IlOлное и конкретное, Это "нечто" и есть фун КUИОНШlhНhlе характсристики, среди которых он найдет lIеречеНh функuий будущеl'О !IpOI'paHol'O !lродукта и О!lисание входных и выходных ДOKy eHTOB, Сllособов реализаuий этих функuий данный ДOKyeHT не KacaeT ся, ТОЛhКО в caыx неоБХОДИhlХ случаях, кота это IIOожет !IОНЯТh ДOKyeHT, в He может бhПЪ в общих чертах О!Iисана вОЗМОJlсuая реализа uия, но коне'lIIая внутренння и внешняя структура !IPO;lyKTa, скорее Bce 1'0, окажется COBce иной, Прекрасной одеЛhЮ для разработки фУНКUИОШL'lhНhlХ характеристик ожет бшъ ДOKyeHT IEEE Software Rеqиirетеnts Speciflcatioп (руководство 1 ЕЕЕ по О!Iределению требований к !Ipol'paHoy обеС!Iе'lению, стандарт ANSI/I ЕЕЕ 830 1984), Тестирование на этапе планирования На это эта!Iе пока еще тестируются не !Ipol'pa\,]  "тестируются" идеи, К их анализу !Iривлекаются СIlеl!ИШIИСТ\,] по аркеТИI!I'У, руководи тели проекта, I'лавные конструкторы и С!Iеuиалист\,] по анализу 'Iеловечес KOI'O фактора, А вот члены I1JY!IllhI тестирования участвуют в этой работе очеНh редко, (В I'лаве 13 рассказывается о TO, какую !Iолезную работу OI'YT Вh!IIOЛНЯТh С!Iеuиалисты по тестированию на эта!Iе !Iланирования продукта,) rРУIша аналитиков читает черновики проектных дoкyeHTOB, Зате она собирает инфораuию, которая ожет оказаТh IIOОЩh в их оценке и далh неЙше I\Jtalшровании, ДЛЯ ЭТОI'О существует неСКОЛhКО стандартных CIIO собов: сраВlllпеЛhНЫЙ анализ, дискуссионные I'PY!I!Ihl и обследование объекта, Ре'3УЛI;П1Т1>I каж;rой и3 этих процедур OI'YT !Iривести к значитеЛh HOy llepeC(HpY СУ1llсеrВУЮlJ\ИХ !Iланов, 
{лава з: Типы тестов .., 59 При анализе и оценке требованиЙ к продукту и е!'о функuиональных характеристик спеuиа.:IИСТЫ Ilрежде все!'о пытаются выяснить следующее, . Адекватны ли эти требования? ДействитеJlhllO ли иенно такоЙ продукт копания хочет создать? . JJОЛ1/Ы ли они? Не упущены ли какиенибудь еще полезные или даже жизненно неоБХОДИ\lые функuии? Нельзя ли ослабюъ какие либо нз персчисленных требований? . Совместимы ли требова1/UЯ между собой? Требования к продукту (и е!'о функuии) O!'YT оказ<нъся ло!'ически или пснхоло!'ически несовеСТИ\IЫИ, ;10l'ическан несовестиость означает их противо ре'lиносrь, а llСИХОЛOl'ическая  конuептуапьные раЗНOI'ласия (разоб равшись с одной ИЗ функuиЙ, IlOльзователь ожет не понять ДРУIУЮ). . ВЫПОЛ1/имы ли 01/и? Не требуется ли l.I;lЯ нораJ[hllOЙ '.Jксплуатаuии IIродукта более быстрое аппаратное обеСllечение, БОЛЫJlИЙ объе Ilаяти, более ВЫСОКШJ IlрОllуСКllая СllOсобlюеть, большее разреше нис (и т.д,), 'Je указано в докуентаuии? . РаЗУМ1/Ы ли 01/и? К сожалению, Ka'lecTBo продукта и el'o рентабель IЮСТЬ стоят по разную сroрону баррикад: с одной стороны  про изводитеЛhlЮСТЬ IlpoJlyKTa, е!'о надежность и нетребоватеЛhllOСТЬ к pecypca, а с дру!'ой  врея и СТОЮlOсть сп) разработки, Найдено ли caoe ОIIТиа;lьное соответствие ежду всеи этии характери стикаи? Не требуется ли от llродукта абсолютная безупречность, олниеносная работа и !'OTOBHOCТl, конкуриров3'lЪ С ПрOl'раны обеспечение, которOl'О еще нет и в проекте,  и все это на KO пьютерах i286? О'lДельные из тих требований ШlOлне достижиы, но не OДHOBpeeHHO и не дЛЯ ОДlЮ!'О и ТО!'О же продукта, Поэтому одни ИЗ ключевых вопросов планирования является правильная paCCTa новка приоритетов, . JJоддаlOтся ли 01lU тестироваllию? Насколько леrко ожно будет определюъ, соответствует ли инженеРlюпроектная докуентаuия требования к rlporpaHoy продукту, Если Ba нужно будет вы!oлнитh анализ требований к продукту, опи раЙтесь на персчисленные выше вопросы, О ДРУПlх важных проблеах и соображениях на эту Tey ОЖIIO llOчитаlЪ у Данна (Dunn, 1984), rayca и ВеЙнбер!'а (Gause & Weinberg, 1989) и в докужнте ANSI/IEEE Staпdard 830, Ну а теперь, выяснив, что прежде все!'о интересует !'РУШlУ аналитиков, давайте перейде\1 к более подробноу обсуждению eTOДOB их работы, 
60 Часть 1: Ос//овы Сравнительный анализ существующих nporpaMMHbIx продуктов Чтобы Вhl!I011НИТh сравните;lhНЫЙ ана;IИЗ продуктов, спеuиалиет выяс няет, какие lIохожие продукты уже иек)Тся на рынке и че продукт е!'о фир\!ы будет от них тличаТhСЯ, ЧТО IЮ\IОЖСТ ныи!'р<lТh В KOHKypeHTHO соревновании? Какие ФУНКUИИ иеющихся пролуктов необходио ВКJlЮ 'JИТh и В свой? Для TaKoro анализа неоБХОДИbl И;IИ ра60'lИе КОllИИ конкурирующих продуктов, ИЛИ, по крайней epe, их деонстраuионныt: версии И;IИ опи сания, если ниче!'о БОЛhше достать не удастся, СостаВ;IЯется lIеречеНh их функuий, ИХ еИЛhНЫХ и слабых сторон и тех характеристик, которые OTe чаются в прессе и профессионалhНЫХ изданиях как достоинства и HeдoeTaT ки этих продуктов, Продукты разделяются по зани\!аемы ии ceceHTa\1 рынка или lIО Сllеuифически назначения, 1аТС\1 еостаН,:IЯется деТШIЫlыii отчет обо всех конкурирующих lIродуктах, ВКJIЮ'Iая и те, которые ТОЛhКО собираются lIОЯВИТhСЯ на рынке, В отчет ВКЛЮ'lастся 'leTKo структурирован нос Оllисание каждоrо продукта, и такое же Оllис<\ние составляется дли бу;tуще!'о IIродукта копании, На основании отобранных таки обраЗО\1 данных ожно ответить на КJLючевые ВОllрОСЫ ПрОВОДИOI'О анализа, lIa сколько конкурентоспособен разрабатываеый LLРОДУКТ? ПО'Lеу LlOтеlЩИ альные пользователи захотят КУПИТh иенно eL'o? Вна'Jале такой анализ ведет к расширению требований к продукту и е!'о Функuиональных характеристик, СLLеuиалисту хочется реализован в He все ;Iучше, что иеется у конкурентов, ВОllЛОТИТЬ в нем сотни IlOчерlIНУ тых и заечательных идей, Но тут наступает caoe врея ВСIIOНИТЬ о здрано сысле, Реализаuия всех этих идеЙ стоит СЛИШКОМ доро!'о И не ожет быть ВЫIlOлнена в реальные сроки, Kpoe ТО!'О, они основаны на различных конuеIЩИЯХ и просто не уживутся в одной rLpOl'paMe, Но даже если отобран из них ТОЛhКО совестиые с выбранной КОlщеIщией, про L'Раный продукт, иеющий столько функuий (пусть даже caыx paClIpeK расных), будет таки сложны и !'рооздки, 'по едва ли коуниБУДI, понравится. (За ДОIЮЛНИТСЛЫIOЙ инфораuией по этоу щтросу обратитесь к кнИ!'а Рубенштейна и Херша (Rubenstein & Hersh, 1984) и lIopaHa (Norman, 1988», Бывает, что спеuиалисты ИПlOрируют проблеы совестиости ФУнк uий и с;южности ПрOl'рамнOI'О продукта, Они составляют длинный список у;Li!'JIIЫХ идей конкурентов, Ca по себе этот СIlИСОК ожет быть очень llOлезным, 110 если р<lссатривать е!'о как требования к продукту, тота el'o нужно O'lellh серhезно сократить, И IIOOI'УТ отобрать са\lOе существенное два слеДУЮllLllХ \1\:T011a: дискуссионные !'РУIIПЫ и обследование объекта, 
Тлава з: Типы тестов ..' 61 Дискуссионные rруппы Каждый продукт LlредназначаеТl:Я дая определенно!'о ceL'eHTa рынка, Целью данно!'о eToдa анализа ЯВ,Lяется ОLIределение ключевых требований это!'о Ce!'eHTa, ДЛЯ ЭТОL о анхLИТИК отбирает небольULУЮ !'РУШlУ людей, которые, по ею нению, являются наиболее типичныи представитеJLЯИ НУЖНОL'О cel'eHTa рынка, Члены !'руппы не знают ДРУI' друrа, Аналитик предлаL'ает и обсу дить определенную Tey, (Te !\oIОЖСТ быть и несколько, но очень неюLO [о,) Он ожет направлять дискуссию, заданая наводящие вопросы и конuентрируя вниание l'рУППЫ на заданной Te\le, а ожст и не Y'LacTBo вать в обсужл,ении вонсе, Если allа;lИТИК не yeeT l'PaOTHO нarlраВ:1ЯТЬ дис куссию, ОН ожет нанять для этоro соответствующе!'о спеuиалиста, Ero uель  выяснить реакuию рынка на предложенную идею, но ни в KOC е"учае ни в че не убеждаТh членов L'РУППЫ, Такая дискуссия может осветить caыe различные аспекты обсуждаеой проблеы, Аналитик ожеr LIOНЯТЬ, че!'о пользовате"LИ хотят от данноrо типа продуктов, как они е!'о ИСПОЛI,ЗУЮТ, какие функuии длн них наиболее важны, Можно сконuентрирован I'PYII пу и на одной конкретной функuии продукта или на одной uели е!'о нриенения, Можно ИСLLOЛhзонаlЪ I'РУППУ дЛЯ !'енераuии идей еще до детальноrо I1ланирования, а ожно LlроаШlJlИ зировать се реакuию на элееllТЫ уже ['ОТОIIО!'О IUlaHa, Обследование объекта Каждый продукт предназначается 1t:IЯ LLOЛНОЙ или частичной автоати заuии ВЫllOлнения некоторой зада'LИ, возможно, очень сложной, Чтобы как ожно четче представить себе эту за;Щ'LУ, аналитик ВЫllOлняет обследова ние объекта автоатизаuии, Он наблюдает людей за работой, беседует с нии, пьпаеп;я выявить все, в че Llродукт может llOОЧh свои будущи lIOJlI,зователя, Аналитик спрашивает себя, в че же конкретно состоит изучаеая и задача, Как люди ВЫILOЛНЯЮТ се без ILроектируеОI'О продук та? Какова llOследонательность их действий? Почеу она иеНIIO такая? В какой oellТ работнику нужна каждая конкретная инфораuия и для че!'о? Что особенно сильно заеlVJЯет е!'о работу, и почеу эrа ILроблеа не решена до сих пор? Работа спеuиалиста по обследованию ЯВJLяе L'СЯ частью проектирования продукта и жизненно необходиа для разработки как е!'о llOльзовательскOI'О интерфейса, так и внутренней С1'РУКТУры, Хотя обследование объекта ожет быть ВЫllOлнеlЮ и после определения требований к продукту, по еl'O реЗУj)hтата эти требования OI'YT быть сильно изенены, Более подробную инфораuию 06 анализе залания путе обследования автоатизируеоrо объекта ожно найти в кни!'ах Бейлей (Bai1ey, 1989), 
62 Часть 1: Основы Карда, Морана и Ньюэлла (Card, Moran & Newell, 1983), Хеландера (Н clander, 1991, особенно I'лава 38), HopaHa и Дрсйпера (Norman & Draper, 1986, часть 'V), Рубенштейна и Херша (RuЬепstеiп & Hersh, 1984), Kpoe ТOI'О, ряд интересных присров приведен в КНИl'е Бейкера и Баксто на (Baecker & Bllxton, 1987), Стадии проектирования На этапе проектирования I'РУlLпа соответствующих СllеUИaJlИСТОВ реша ет, как будут реализованы запланированные IЮЗОЖНОСТИ LIродукта, Они разрабатывают вllеUJ/lUЙ дизайн IIpOI'pa,\lHOI'O продукта (то, каКИ\1 будет IIрОДУКТ с точки зрения 1L0льзователя) и CI'O внутреннюЮ структуру, Обе эти составляющие тесно взаиосвязаны и IIРОСКТИРУЮП;Я OДHOBpeeILHO, Разрабатывая IIроект, СllеUИaJIИСТЫ ОlIираются на трсбования к IIРОДУК ту, Если ЭТОI'О докуеНТd нет, ссли он HCLIOJIOH ИЛИ IIOСТОЯНILО еняеТ(;я, И приходится IIланировать функuии Ilродукта <.:аи, По К;lассической одели разработки [)рOl'ранOI'О обеСllечсния коди рованис начинается ТОЛhКО 110 завершении IIроектирования, Это, конечно, не касается IIрОТОТИlIа, который создает<.:я в paKax [Iросктирования для аНaJIИза будущеrо нродукта, ВIIРО'lе, на I1 рактике ДОВОЛhНО значительная часть кода IIРОТОТИlIа ожет оказаТhСЯ в конечно IIродукте, На этане IIроектирования OI'YT быть написаны и некоторыс низкоуровневые Ilpoue дуры  те, к KOTOpЫ IIредъявляются наиболее стрОl'ие трсбования 110 скорости и 1I0треблению ресурсов, Существуют и aJIьтернативные IIОДХОДЫ к IIроектированию, ы 1IOI'ОВОрИ о НИХ В I'лавах 12 и 14, Хорошии учебникаи 110 IIроектированию IIpOl'paMIIOI'O обеСlIечения являются КНИI'И Йордана (Уоurdоп, 1975), Джонса (Jопсs, 1979) и Майерса (Myers, 1976), Внешний дизайн ОlIисание внешнеl'О дизайна IIрOl'ранOI'О IIродукта включает IlOлное описание el'o IlOльзоватеЛЬСКОl'О интерфейса, в частнОСти, все экранные и пе'IaТllые форы, Инопщ, если работа выполняется под конкретнOI'О заказ чика, внешний дизайн IIpOl'paHol'O IIродукта OI'YT ОlIределять el'o 1I0льзователи, Они саи IIИШут часть IIроектных ДOKyeHTOH н тех тери нах, которые и IIOНЯПIЫ, В IIроцессе разработки IIродукта el'o внешний дизайн ожет ЮfOl'ократ но изеняться, IIОСКОЛЬКУ IIрИ кажущейся второстепенности иенно эта часть систеы иеет ключевое значение, Koro будет интересовать, что IIрOl'раный код IIродукта беЗУlIречен, если какаято часть интерфейса вызывает у 1I0;\ьзователей затруднения, lIутает их, ведет к ошибка, раздра жает или являстся недостаточно I'ибкой и функuиона;IЫIOЙ  не делает 
Тлава з: Типы тестов .., 63 IOro, что, ПО Юfению пользователей, она обязательно должна yeTb, Однако работая над внешни дизайно, нужно пониать, что даже в наиболее 1 LЩlТелыlO продуанной систее l! проuессе се эксплуатаuии все равно обнаружатся нскоторые недостатки, Чтобы лучше познакоиться с вопросо, ожно прочесть интересную, нес\ю'rpя на то что она написана ещев 1973 [оду, работу Мартина (Martin), болсс недавнес исследованис Хеландера (Helander, 1991), а также класси 'Iсские работы Бейкера и Бакстона (Baecker & Buxton, 1987), Карда, Mopa на и НЬЮЭJlла (Card, Моrап & Newell, 1983) и Рубенштейна и Херша (Rubenstcin & Hersh, 1984), Внутренняя структура Оllисание внутрснней структуры ПрОI'раЮЮI'О продукта опреде;Jяет набор будущих ПрOl'раных одулей (nросраммную архитектуру), CTPYKТY ру, l!ЗаИОСl!ЯЗИ и ПРИIЩИПЫ хранения и обработки данных (ОРi!анизацию rJШII/ЫХ) и ал?Оритмы работы ПрOl'раы, Проектирование проrраммной архитектуры Как правило, каждую задачу ожно разбить на четкие IlOдзадачи, KOTO рые, l! Сl!ОЮ очерсдь, тоже ОЖIIO разбить на ещс сньшие элеенты и т,д, Такое разбиение, называеое декомпозицией, ВЫ!Lолняется до тех пор, пока не будут выделсны достаточно саостоятельные элееIIТЫ, которые ож но рсализовать в виде отдеЛЫIЫХ ПрOl'раных ОДУJlей или проuедур, Обычно CJlOжные ПрOl'ра\IЮlые продукты реализуются в виде системы  набора связанных ежду собой ПО;LIlOuенных ПрOl'ра, Такие проrpа ы часто называют nрОЦессамИ, особенно если они работают параллелыlO, (Не спедуст lIутать это понятис с одноиенны терино Windows,  Приеч, ред,) Хотя проuессы OI'YТ работать и независио, как правило, они взаи\юдействуют сжду собой, Наприер, они OI'YT использовать одни и те же данные, или один ИЗ НИХ ожет ВЫIIOЛНЯТЬ определенные залания по запросу ДРУI'ОI'О, Докуентаuия, определяющая ПРИIЩИПЫ и правила взаиодействия проuессов систеы, называется протоколом, В описании ПрOl'раной ap хитектуры систеы определяются се основные KOIIOHellТ'" и использую щиеся lVJЯ их взаиодействия коуникаuионные протоколы, Как и любые ДРУl'ие ПрOl'раы, проuессы IlOлдаются декопозиuии, Разбиение прOl'раы на модули называют модулыoйй декомпозицией, Под одуле в JlaHHO CJlучае IlOниают часть кода, которая ожет рассатри ваться как независиое uелое и иеет единственную точку входа, В тери НОЛОI'ИИ ПрOl'раиста этоу определению соответствуют процедуры и функции l , Обычно одуль реализует либо одно конкретное задание, либо четко определенную I'РУШlУ заданий, для выполнения которых ДРУI'ИС O, 
64 Часть 1: Оснивы дули OI'YT е!'о вызывать, Вызывающий одуль передает вызываеоу lVJЯ обработки некоторые данные, а тот, в свою очередь, возвращает результат, Хороши введение н ЛOl'ическое и структур нос проектирование ожет СЛУЖИТЬ Кllfll'а Йордана (Yourdon, 1975), После нес ожно прочесть кни!'у Йордана и Консташайна (У ourdon & Constantine, 1979), Проектирование орrанизации данных Разработчик структуры данных должен ответить на следующие принuи пиальные вопросы, . Какие да1/1/ые обрабатывает npoi!paммa и какова их структура? Обрабатываеые IIрОI'рамой данные OI'YT быть достаточно просты и, как персснныс раЗЛИ'IНhlХ типов, а OI'YT Ilредстанлять собой OI'pOHЫe ассивы нзаиосвязанной инфораUИl!, которые тщатель но анализируются и ор!'анизуются в реляuионные базы данных, . Как осуществляется доступ к да1/1/ЫМ? Данные OI'YT храниться в Ilаяти или на IIOСТО>JННЫХ носителях, и доступ к ни ожет осуще ствляться IIрОСТО 110 иени или через определенные спеuиал ьно lVJЯ этот наlIисанные Функuии, Данные OI'YT быть общеДОСТУIIНЫИ, или же их 'lтение и ИЗ\IСНСНИС ожет СТрOl'О рс!'улиронаться, . Каковы при1/ципы 1/аиме1/0ва1/UЯ даll1IЫХ? Приеняются ли в данной разработке опредсленные СOl'лашения об иенах? Должны ли иена быть достаТО'111O lIOНЯТlIhIИ, чтобы ПрOl'раиет, который будет ocy ществлять сопровождение продукта в дальнейше, O!' по ни понять назначение данных, . Как хра1/Ятся да1/1/ые? Определенные данные будут храниться на постоянно носителс, В KaKO форате они будут храниться? Как к НИ\I будет осущеСТВЛЯТhСЯ доступ? Какис для ЭТОI'О понадобятся ДОllOлнительные ПрOl'ра\IIJЫС срсдства? Из рассказа о IlроектироваНИI1 IlрOl'раной архитектуры неявно следо вало, что про!'раный IIPOilYKT прсжде нсе!'о анализируется с точки зре ния е!'о функuий, а уже зате  обрабатываеых данных, На cao же деле код и данные представляют собой единое uелое, Наприер, одули, обращающиеся к одни и Te жс ШIIJНЫ, оказываются связанныи caы TeCHЫ образо, даже если они ВЫllOЛНЯЮТ над этии данныи совершен но разные операuии, Если структура данных еняется, все обращающие ся к ни одули приходится переписывать, Вот llOчеу очень llOлезно строить КОlщеlЩИЮ ПрOl'раы с позиuии обрабаТblваеых ею данных, С этой точки зрения про!'раа  это нечто, что последовательно преобразует данные, от входной инфораuии через ряд проежуточных стадий до выходной инфораuии, которая ожет, 
Iлава З: Типы тестов ..' 65 наприер, представлять собой Сl'енерированный по запросу пользователя отчет, Модули же рассатриваются как функциональные элеенты, необ ходиые lVJЯ различных операuий, ВЫIIOЛНЯСЫХ нал данныи: один o дуль нужен для ввода инфораuии, ДРУI'ОЙ ВЫIIOЛНИТ над ней конкретные вычисления, а третий выведет результат, Таки образо, модули orYT характеризоваТhСЯ входныи и выхо\Ныи данныи и возникать по epe 1I0трсбности в их преобразовании, При TaKO анализе выявляются те свя зи ежду ПрOl'раныи единиuами, которые при изучении продукта толь ко с функuиональной точки зрения ОI'ЛИ бы быть утеряны, Сравнительный анализ различных еТОДОЛОI'ИЙ проектирования ожно найти у БСРl'ланда (Bergland. 1981), О разработке структур данных paCCKa зываеrС>J l! КНИl'ах rейна и Сарсона (Gane & Sarson, 1979) и Йордана и Константайна (У ourdon & Constantine, 1979), А об ориентированно на ;щнные I10ДХОДС к тестированию ОЖIIO прочесть у Ьейзера (Beizer, 1990), Описание алrоритмов Проектирование IIpOl'paMHol'O продукта НС заканчивается описание\1 I1рОI'раных одулей и Орl'анизаuии данных, Нужно ещс продуать, как ИСНlIo будут реализовываться IlOставпенные задачи, Обычно это делается IIрОI'раиста\IИ, Они выбирают ОIIТиальные аJII'ОрИТЫ и ОIIисывают (инота ДОВОЛhНО подробно) rlOСJlедоватеЛhllO<.:ть JlOl'ических шатв, необ ходиых Д;IЯ выполнения каждой залачи, Хороши У'lебнико по I1реобразованию высокоуровнсвых задач в про l'раЮIЫЙ код ожет служить КНИl'а Йордана (Yourdon, 1975), Моделирование Чтобы лучше представить себе будущий ПрОI'раный продукт, на этапе проектирования ожет быть разработан ero прототип  ПрОI'раЮfая o дель Bcel'o продукта или el'o части, Прототип строится очень быстро и с иниуо затрат, Ею очень леl'КО енять, и он I/e ВЫIlOлняет никакой реальной работы, Инота оделированис ВЫIlOлняется не только lVJЯ внешнеl'О дизайна, но и для внутренней структуры систеы, При I/исходящем проектировании систеа разбивается на несколько саостоятельных проuессов или одулей, они, в СВОЮ очередь, разбиваются на еньшие одули и т,д, В TO же порядке ВЫIlOлняется и их кодирование: сначала пишутся одули более высокоrо уровня, а зате те, которые они вызывают, Однако бывает и так, что ПОДПрOl'раы нижних уровней в значительной epe определяют всю разработку, Наприер, систее ожет потребоваться низкоуровневый об работчик прерывания, вся работа КОТОрOl'О ВЫIlOлняется за 60 икросекунд, Этот обработчик разунее Bcel'o будет написать заранее, чтобы убедиться, что это вообще ВОЗОЖIIO, В случае неудачи ДРУl'ие lOдули придется перс LIроектировать, -; 1.7H 
66 Часть 1: ОСllовы Как правило, прототип создастся lVJЯ оuенки функuиональности буду щей систеы и се IlOльзоватеЛЬСКОl'О интерфейса, Это исключительно по лезная теХНОЛОI'ИЯ: кота люди получают возожность собственноручно IlOэкспериентировать с систеой или се ПРОТОТИIIO, их требования зна чительно изеняются, Идеи, которые в спеuификаuии казались просто блестящии, в работающей одели OI'YT утратить всю свою привлекатель ность, (Мартин и МакКлер (Martin & mcClure, 1983), BaccepaH и Шью ейк (Wasserman & Shewmake, 1985», Мартин и МакКлер настоятельно рекоендуют писать прототипы на TO же языке, на KOTOpO будет реализован конечный продукт: если про ТОПI!I окажется удачны, то конечный продукт ожет разрабатываться пряо на el'o основе, Однако, на наш ВЗI'ЛЯД, так поступать не стоит, и ВОТ IlOчеу, . МНОПlе языки или систеы разработки не подходят lVJЯ создания быстрOl'О и дешевою IIрототипа, . Хороший совет дали в своих КНИl'ах Брукс (Brooks, 1975) и Керни I'ан и IIlIYI'ep (Kernigan & Plauger, 1974), Они рекоендуют отложить lIервый черновик ПрОI'раы и начать се разработку с ЧИСТОI'О ли ста, Особенно это касается прототипа, Ведь от Hel'o не требуется хорошая внутренняя Орl'анизаuия, Он ожет работать едленно и неэффективно, а то и вообще неправилыlO, СОI'ласитесь, что такая ПрОI'раа не лучшая основа для хорошей разработки, Да и разра ботчики прототипа будут чувствовать себя I'ораздо свободнее, если будут дyaTЬ только о скорости и не беспокоиться, что допущенные ии ошибки и неверные решения ВIlOследстнии затруднят проrра ирование, Вопросы оделирования интерфейса, стратеl'ИЙ оuенки проекта и Tex НОЛОI'ИЙ ero разработки обсуждаются в книrах Де rрейса и Стала (DeGrace & Stahl, 1990), Хеландера (Helander, 1991), Рубенштейна и Херша (Rubenstein & Hersh, 1984), Оулда (Ould, 1990) и Шнейдерана (Schneiderman, 1987), Тестирование на этапе проектирования На этапе проектирования, как и на этапе планирования, кода еще нет, IIOЭТОУ и здесь тестируются тол ько идеи, Однако на этот раз идеи rораз до лучше форализованы и описаны HaHoro подробнее, че в первона чальных планах, Анализируя проектные ДOKyeHTЫ, спеuиалисты должны составить очень четкое представление о работе будущей систеы, СпеllИ алисты по тестированию OI'YТ и не участвовать в работе I'pyтlbl анаJ\ИТИ ков, однако для планирования систеы будущих тестов такое участие очень полезно, (На с.'вещаниях l'рУППЫ аналитиков спеuиалиста по тестирова 
[лава з: Типы тести(/ 67 11111<. :iУ'LШС BCCI'O быть llассивныи участникаи и высказываться ТОJII,КО U l 'IV'I;JC нсобходиости,) На этапе проектирования в центре Вllиания aHa 'IIIIIIKOB должны быть следующие вопросы, . ДействителЬ1l0 ли проект хорош? Будет ли на el'o основе создан "Jффективный, компактный, ХОР9ШО тестируеый и леl'КИЙ в сопро вождении и одернизаuии продукт? . Соответствует ли проект требоваllUЯМ? Проект должен быть форализованны выражение требований, представленных в ДOKY ентаuии этана планирования, . ПОЛОIl ли проект? Онисывает ли npoeKT все взаиосвязи ежду одуляи и данныи, передачу данных ежду одуляи, УСЛОВИЯ работы каЖДОl'О одуля и их реализаuию, . ДостатОЧ1l0 ли 011 реалистuчеll? Удовлетворяют ли исющиеся систеные ресурсы (как аппаратные, таК и проrраные) потребно стя нроекта? Сожет ли проrрамный продукт работать достаТО'I но быстро, достаточно быстро извлекать инфораuию из баз данных и се обрабатывать? Удачно ли выбраны инструентальные средства разработчиков? . Хорошо ли описа1lа в проекте подсистема обработки ошибок? При нисходяще проектировании особенно велико искушение остаВИТh вопросы обработки ошибок на пото  как caыe неЗllачитеЛЫlые, И кота наступает это "1I0TO", О подобных элеентах 'lacTo вооб ще забывают, или же изза нехватки вреени они проектируются наспех, поверхностно и в результате  плохо, Всс возожные усло вия возникновения ошибок должны быть caы тщатеЛЫIЫ обра зо продуаны и описаны в проекте, Важно правильно определить уровень, на KOTOpO обрабатывается каждая из ошибок, чтобы се возникновение в OДHO одуле не вело к ошибка в друrих, О ЮIOI'ИХ возожных ошибках проектирования и критериях оuенки проектных ДOKYCHTOB рассказывается в книrах Данна (Оипп, 1984) и Фридана и Вейнберrа (Freedman & Weinberg, 1982), Об анализе проекта ожно также почитать и у Бейзера (Beizer, 1990), Совещания аналитиков Обычно uелью совещаний, проводиых нри анализе проектных ДOKY ellТoB, является не решение пробле, а прежде Bcero их выявление, В совещании должна участвовать небольшая rруппа сотрудников  около сеи человек, В эту rру!шу не должны входить aBTUp'" проекта, Аналитики заранее читают ДOKyeHTЫ и на совещании критикуют их и задают друr друry вопросы, Во ююrих копаниях проект вообще не C'III.. 
68 Часть 1: ОСllовы тается завершеННЫI, пока на Hel'o не будет составлсна форальная рецен- зия (разуеется, одобрительная), Таки образо, проект перерабатывает ся и снова анализируется ;10 тех пор, пока он нс будет одобрен l'рУШIOЙ аналитиков, Совещания этой [РУ[I!IЫ OI'YТ быть трех типов: обзорные, ин спекuионные и реuснзионные, . ОБЗОр1l0е совещаlluе, На TaKO совещании проектировщики деонстри руют О;lСЛЬ ПрОI'раы, ШЮ' за шаrо они показывают, что делает проrpа:-.ша с тестовыи данными, преlVюженныи аналитиками, Такая демонстраuия Iюзволяет увидеть, как взаююдействуют ежду собой различные части системы, и выявить се недостатки: неудобныс pe жиы, избыточность функuий или пропущснные детали, . И1lспеКЦUО1l1l0е совещаlluе, На TaKO совещании спеuиалисты поk робно анализируют каждый элеент проекта или CI'O отдеЛЫIЫЙ аспект: обработку ошибок, соответствие ранее выработанным CTaH дapTa, эффективность реализаuии конкретной функuии 11 Т,Д, . РецеllЗUО1l1l0е совещаlluе. К этоу совещанию аналитики I'ОТОВЯТ список возникших У НIIХ вопросов, Они дслятся своии соображе нияи и ВЬLДСЛЯЮТ элееllТЫ проекта, которые [юказались и HeTo'l ныи или СОЮIИТСЛЫIЫИ, Цель ЭТОI'О совсщания  сфорировать список всех выявленных пробле и убедиться, что каждую из них проектировщики правильно поняли, Решенис выявленных пробле н задачи совещания не входит, Идеалыюе реuензионное совещание должно направляться ОПЫТlIЫ в это деле спеuиалистом и обязательно заlIисываться, Такой спеuиалист Орl'анизатор находит подходящее [1Oещение, недет совещание, останавли вает I'ОВОРЯЩИХ, КOIла они прерывают ДРУI' дрУl'а или отк;юняются ОТ Teы, и I'ОТОВИТ ИТОI'ОВЫЙ ОТЧСТ, ОН следит за Te, чтобы от обсуждения пробле аналитики не переходили к обсуждению способов их рсшения, Это будет сделано IlOзднее еньшсй I'РУПIIOЙ спеuиалистов и вне реuеНЗИОНIЮl'О co вещания, Спеuиальный персонал записывает все важные зае'lания и с поощью проекторов или ДРУI'ОЙ аналOl'ИЧНОЙ техники выводит их на большой экран, те они видны каЖJЮУ участнику совещания, Любой, KOy покажется, что заlLисывающий упустил нечто важное, ожет попросить отобразить эту ин фораuию, ОбязателыlO ДОЛЖНО фиксироваТhСЯ каЖJlое ДОСТИПfутое СОI'ла шеНIIС, 1аlIисаны должны БЫТh и все BO[IPOChI. которые остаЛИСh открытыми до еледующеl'О совещания, Такая техника проведения совеща ний ИСКЛЮ'lитt:;IЫIO способствует их продуктивности, особенно КOIла Юfе ния ана;IИТИКОВ о'!ень СИЛhНО расходятся, Нскоторыс 1 PYIIlIhL тестирования спеUИaJlhНО обучают свой пеРСОНaJI ведеНI1Ю и IIРОIОКOJlированию таких совещаний, Это прекрасная идея, 
I:raea з: Типы тестов '" 69 ""l'I-,ОJII,КУ хороших с!\еuиалистов в это деле очеНh аJIО, Подробнее о 1,' \ IIIIKt: !\роведения совещаний ожно узнаТh из КНИI' Дойла и Страуса 11 )(\\'Il: & Straus, 1976), Фридмана и ВейнбеРl'а (Freedman & Weinberg, 1982) 11 1 :Iyca и ВейнбеРl'а (Gause & Weinberg, 1989), Анализ псевдокода Ilссвдокод (структурированный русский)  это искусственный язык, '''\It!lllIlIрУЮЩИЙ конструкuии peaJlhHol'O языка !\рОI'раирования с о!\и (,IIIIIЯМИ действий на PYCCKO языке, На!\риер, следующее о!\исание из 11;111'" 1 IIрсдстаВ;lяет собой !\севдокод, 1 F ASCII  KOД ВВЕДЕнноrо  СИМВОЛА меньше 48 (48  ЭТО АSСIIICОД для О) THEN OTBeprHYTL символ lCalC недопустимый ELSE IF АSСIIКОДВВЕДЕнноrосимвоЛА больше 57 (57  ЭТО АSСIIICОД ДЛЯ 9) THEN OTBeprHYTL символ lCalC недопустимый ELSE ЭТо цифра, принять ее, Кота I1роцесс проектирования IЮДХОДИТ к разработке наиболее !\одроб III,IX J!OKyeHToH, такая форма ОlIисания лоrики IJporpahI оказывается O'ICllh удобной и ЮlOl'ие !\роектировщики с УДОВОЛhетвие ею IIOЛhЗУЮТСЯ, L::сли ДЛЯ ОllИсанин fJpol'pahI I!ОJ\I,зованся достаточно CTpOl'O фора !III!Онанной версией !\се ндо кода, это о!\исание ОЖIIO будет !\роаНaJIИЗИрО 11:11'1, с I!ООЩhЮ СllеuиаЛhНОЙ !\pOl'paы  анализатора !\севдо кода, Эта "1)()lpaa выявит одули, которыс ни разу не нызываются, составит с!\и сок всех обращсний к каждоу одулю и Вhl!lOЛНИТ ДРУI'УЮ !\олезную pa '!ОТУ, L::сли в вашей ко!\ании IlрИНЯТО очеНh ДСТaJlhllO !\роектироваТh !\Po IpaHыe средства, обратитеСh к работе Дан на (Dunn, 1984)  в ней вы найдсте о!\исания некоторых IlOлезных инструеllТaJlhНЫХ средств, .. Тестирование стеклянноrо ящика" на стадии кодирования и вот наконеll насту!\ает эта!\ кодирования: !\рОI'раист !\ишет !\Po IpaMЫ и ca их тестирует, Мы IJреД!\ОЛ3l'ае, что вы знаете, что такое кодирование, и I!ОЭТОУ не о!\исывае el'o IlpOIteCC в этой КНИI'е, 1ато достойна о!\исания теХllOЛОl'ИЯ тестирования, которая !\риеняет 01 lIа это эта!\е, Эта теХНОЛОl'ИЯ IЩ'jывастсн тестироваltuем "стеКЛЯltliоi!O 111/(111-:/1" (f!.lass Ьох)  иноrда ес ещс lI,вывают тестировGltuем "белоi!O ЯlЦика" (\i'lli/e Ьох) в !\РОТИВОIIOЛОЖНОСТh клаССl1ческому I!ОНЯТИЮ "чеРltOi!O ЯlЦика" (bIack Ьох) , 
70 Часть 1: Основы При тестировании "черНОI'О ящика" прО!'рамма рассматривается как объект, внутренняя структура KOTOpOl'O неизвестна, Тестировщик вводит данные и анализирует результат, но, как именно работает ПрOl-рамма, он не знает, Подбирая тесты, специалист ищет интересные с eI-о точки зрения входные данные и условия, которые MOI'YT привести к нестандартным pe зультатам, Интересны для HeI'O прежде BceI'O те представители каЖДОI'О класса входных данных, на которых с наибольщей вероятностью MOryT про явиться ошибки тестируемой ПрОI'раммы, При тестировании "стеКJIЯННОI'О ящика" ситуация совершенно иная, Тестировщик (как правило, это ПРOl-раммист) разрабатывает тесты, OCHOBЫ ваясь на знании ИСХОДНОI'О кода, к которому он имеет полный доступ, В результате он получает следующие преимущества, . Направленность тестироваllUЯ, ПрОI'раммист может тестировать прО!'рамму по частям, разработать специальные тестовые IIOДПРОI' раммки, которые вызывают тестируемый модуль и передают ему ин тересующие прО!'раммиста данные, Отдельный модуль юраздо леI'че протестировать именно как "стеклянный ящик", . ПОЛllЫЙ охват кода, ПрО!'раммист BcerAa может определить, какие именно фрar'менты кода работают в каждом тесте, Он видит, какие еще ветви кода остались непротестированными и может подобрать условия, в которых они будут выполнены, В этой и одиннадцатой I'лаве мы еще вернемся к тому, как отслеживать степень охвата проrраММНОI'О кода проведенными тестами, . Управлеllие потоком, ПрОI'раммист всета знает, какая функция должна выполняться в прО!'рамме следующей и каким должно быть се текущее состояние, Чтобы выяснить, работает ли прО!'рамма так, как он думает, прО!'раммист может включить в нес отладочные KO манды, отображающие информацию о ходе се ВЫIlOлнения, или воспользоваться для этою специальным ПрОI'раммным средством, называемым отладчиком, (Отладчик может делать очень MHOI'O по лезных вещей: отслеживать и менять IlOследовательность ВЫIlOлне ния команд ПрOl-раммы, показывать содержимое се персменных и их адреса в памяти и MHOI'oe друюе,) . Dтслеживание целостности данных, ПрOl-раммисту известно, какая часть ПрОI'раммы должна изменять каждый элемент данных, Отсле живая состояние данных (с помощью тою же отладчика), он может выявить такие ощибки, как изменение данных не теми модулями, их неверная интерпретация или неудачная ОРI'анизация, ПрО!'раммист может 11 самостоятельно автоматизировать тестирование, Об aBTOMa тизироваllllO1 тестировании мы еще IIOI'ОВОрИМ с вами в rлаве \\, 
{лава з: Типы тестов ..' 71 . HllympellHue 2ра1lичные точки, В исходном коде видны те ['раничные I"O'IКИ прor'раммы, которые скрыты от вз['ляда "извне", Например, )1;1>1 ВЫ[lOлнения определенною действия может быть использовано несколько совершенно различных 3.tП-ОРIlТМОВ, и, не ЗaI'ЛЯНУВ в код, невозможно определить, какой из них выбрал про['раммист, Еще о)щим типичным примером может быть проблема псре[lOлнения fiуфера, используемor-о для временнor'о хранения входных данных, 11 рor'раммист сразу может сказать, при каком количестве данных буфер пере[IOЛНИТСЯ, и ему не нужно при этом проводить тысячи тестов, . Тестирова1lие, определяемое выбраllllЫ'м ОЛ20риmмом, Для тестиро нания обработки данныХ, использующсй очень сложные вычисли Te;JbHble а)[['оритмы, мor'ут [lOнадобиться специальные технолor'ии, В Ka'leCTBe классических примеров можно привести преобразование матрицы и сортировку данных, Тестировщику нужн'о точно знать, какие а)[['оритмы I1СIlОЛЬЗУЮТСЯ, и обратиться к специальной литера туре, Тестирование "стеклянною ящика" мы рассматриваем как часть про I(LTCa IIрor'раммирования, Ilрor'раммисты ВЫ[IO;IIIЯЮТ эту работу [lOстоянно, ОНI1 тесrируют каждый модуль после е['о написания, а затем еще раз [lOc 'I( I1l1те['рации е['о в систему, Этому их учат сще в учебных заведениях, В (ЮJII,шинстве учебников по тсстированию имснно этому е['о виду отводит (Н основная роль, OAllaKo в этой кни['е мы уделяем основное внимание тсстированию "'lepllO['O ящика", и именно ему посвящают большую часть времени все IIроФессиональные тестировщики, (Отдельную и достаточно специфичес кvю область тестирования прсдставляют собой СУБД дЛЯ мэйнфреймов, Об IIX тестировании лучше рассказывают такие авторы, как Бейзер (Beizer), Хетзел (Hetzel) и Майерс (Myers),) Тестировщик "чернor'о ящика" не изу 'laeT исходный код ПрOl-рам мы  он исследует се извне, работая с ней так, как это будет делать пользователь, И так же, как исследование прor-раммы II'JllУТрИ позволяет выявить проблемы и критические точки, которых не (111)IHO извне, так и тестировщик "черно['о ящика" выявляст ошибки и пt:)юстатки, которые про['раммист упускает, К вопросу о выборе метода тестирования мы еще вернемся в ['лаве 12, Л в следующих разделах мы пО!'оворим об основных концепциях тестиро lIания "стеКJJЯННО['О ящика", без знания которых вы не сможсте считаться !lрофессионалом в своем деле, 
72 Часть 1: Основы Структурное тестирование против функциональноrо Структурное тестирование является одним из видов тестирования "CTeK лянною ящика". Ею ['лавной идеей является правильный выбор тестиру емо['о прО!'раммнOl'О пути. В противоположность ему функциональное тестирование относится к кате['ории тестирования "черною яшика", Каждая функция прО!'раммы тестируется путем ввода ее входных данных и анализа выходных. При этом внутренняя структура прО!'раммы учитывается очень редко, Более подробное описание этих двух технолО!'ий можно найти у Бей зера (Beizer, 1984), Как указывает Данн (Dunn, 1984), хотя структурное тестирование и имеет под собой юраздо более мощную теоретическую основу, большин ство тестировшиков предпочитают функциональное тестирование, CTPYK турное тестирование ЛУ'Jше поддается математическому моделированию, но это совсем не озна'Jает, что оно эффективнее, Каждая из технолО!'ий по зволяет выявить ошибки, пропускаемые друюй, в этом C,\lblcJle их можно назвать одинаково эффективными, Тестирование nporpaMMHbIx путей: критерии охвата Мы уже упоминали о путях ВЬПlOлнения прО!'раммы  последователь ностях КОМalЩ, которые она выполняет от старта до завершения, Объектом тестирования может быть не только полный путь, но и ею отдельные уча стки, Как уже было сказано в ['лаве 2, протестировать все возможные пути выполнения прО!'раммы абсолютно нереально. Поэтому специалисты по тестированию выделяют ИЗ всех возможных путей те I'рУППЫ, которые нужно протестировать обязательно, Для отбора они пользуются специаль ными критериями, называемыми критериями охвата (coverage criteria) , В отличие от нереальной идеи полною тестирования, эти критерии опреде ля ют вполне реальное (пусть даже и достаточно большое) количество Tec тов, Критерии охвата ино[да называют ЛОi!ическиl>1и критериями охвата или критериями полноты, В этом разделе мы познакомимся с тремя критерия ми, которые используются тестировшиками чаще всею: критериями OXBa та строк, ветвлений и условий. Ко['да тестирование ор['анизовано в соответствии с этими критериями, о He1 юворят как о тестировании путей, Критерий охвата строк  наиболее слабый из всех, Он требует, чтобы каждая строка кода была ВЫ[lOлнена хотя бы один раз, И хотя это юраздо [iО;lьше, чем утруждают себя выполнить мнО!'ие прО!'раммисты, для серьез IЮН1 тсстирования ПрОl-раммы этою далеко не достаточно, Если строка co !t:рЖIIТ оператор принятия решения, провсрены должны быть все У!IР:II\,lнюшие решением значения, Для примера давайте рассмотрим следу !(I!lIllli фР:11 \ICHT кода, 
fлава з: Типы тестов Р' 73 11" (А < В and С = 5) THEN Сделать НЕЧТО ':.:'1' [) = 5 '11(\\11,1 IIронерить этот код, нужно н'роанализировать следующие четы 1" ]I,II'II;III/':!, (,.) А < В и С = 5 (НЕЧТО выполняется, затем D nрисваивается 5) (r;) А < В и С '" 5 (НЕЧТО не выполняется, D nрисваивается 5) (п) А  В и С 5 (НЕЧТО не выполняется, D nрисваивается 5) (Р) А  В и С '" 5 (НЕЧТО не ВЪ1Лолняется, D nрисваивается 5) :l'IH ВЫIlOлнения всех трех строк кода достаточно проверить вариант (а), (Iри более основательном способе тестирования  по критерию oxвa 1/1/1 Щ'II/влений  ПРOl-раммист проверяет вариант (а) и еще один из трех Щ'I;!;II,НЫХ вариантов. Смысл этоrо способа в том, что проверяются дей '11I11H IIpOl-раММbl при ВЫIlOлненном условии оператора IF и при HeBblIlOk I/ClllIOM, Таким образом ПрOl-рамма проходит не только все строки кода, но 11 IIсе возможные ветви, Инота охват ветвлений называют полным охватом кода. Но термин этот !lе"орректен: как показал Бейзер (Beizer, ] 984), охват ветвлений не может 1111C l'eHAoBaTb на полноту тестирования, поскольку в лучшем случае IIOЗВО 'НСТ обнаружить половину имеющихся в проrрамме ошибок, еще более СТРOI-ИМ является критерий охвата условий, По этому крите РИЮ следует проверить все составляющие каждOI-О лоrическоrо условия, В lIаше1 примере это означает проверку всех четырех перечисленных вари антов, Тестирование путей проrpаммы считается завершенным, KOl-да выбран вый критерий охвата полностью ВЬПlOлнен, Для автоматизации ЭТОI-О про Itecca разработаны проrраммы, анализирующие ПРОI-раммный код и вычисляющие количество подлежаших тестированию путей, а затем под считывающие, сколько их уже проверено. Такие проrpаммы называют cpeд ствами мониторинса охвата (ехесипоп coverage moпitors). Классически при тестировании путей не поощряется проверка OAHOI-O и тшо же пути на различных данных, Хотя варианты (б), (в) и (1-) нашеI-О примера MOl-ут оказаться важными, большинство средств мониторию-а ox вата посчитают их проверку пустой тратой врсмени. Все три начинаются с OAHOI-O и TOI-O же оператора и ПРИНОJ\ЯТ к выполнению одной и той же IlOследовательности команд . 11рОВСрНТЬ их все означает трижды проверять один и тот же путь. Хотя критерии охвата очеНI, IlOлезны, одною только тестирования пу тей недостаточно ДЛЯ эффеКТi!IJIIOI0 выявления ошибок, rуденаф и [ерхарт 
74 Часть 1: Основы (Goodenough & Gerhart, 1975) привели классический пример ТО!'О, что проход строки кода еше не означает выявления имеюшейся в ней ошибки. Рассмотрим такую строку прО!'раммы. SET А = в/с Она вполне успешно выполняется, если С не равно нулю, Но если С равно нулю, прО!'рамма или сообшит об ошибке и прекратит работу, или "зависнет". А разница между этими двумя вариантами не в пути, а в дaH ных. Де Милло (DeMillo, 1987) называет ПрOI'раммный путь чувствительным к ошибкам, если при ею прохождении ошибки мосут проявиться, Если же ошибки обязательно проявятся при прохождении данною пути, то такой путь называется обнаруживающим ошибки, Любой путь, проходяший через приведенную строку про!'раммы чувствителен к ошибкам, Ошибка прояв ляется только при нулевом значении переменной С. ДНЯ выявления подоб ных ошибок технолО!'ия тестирования "черною яшика" подходит лучше, чем анализ про!'раммною кода. Формальное описание технолоrии тестирования прО!'раммных путей можно найти у Реппса и Вейакера (Rapps & Weyuker, 1985), более подроб ное исследование проблемы  у Бейзера (Beizer, 1984,1990), а особенно детальное обсуждение критериев охвата  у Майерса (Myers, 1979). Тестирование частей против тестирования целоrо Любая система разрабатывается по частям  как набор процессов или модулей. Можно ее так и тестировать  сначала отдельные части, а потом уже их взаимодействие. Такая страте!'ия называется восходящей (bottomup). Выяснив, что отдельные элементы про!'раммы в порядке, специалист приступает к тестированию их совместной работы. И тут может оказаться, что вместе они работать отказываются. Например, если про!'раммист слу чайно поменяет местами параметры вызываемой функции, при выполне нии вызова произойдет ошибка. И выявлена она будет только при проверке совместной работы обеих функций  вызываюшей и вызываемой. Тестирование совместной работы прО!'раммных модулей называют иH тесрационным. В ходе такО!'о тестирования модули сначала объединяются в пары, потом в большие блоки, пока наконец все модули не будут объеди нены в единую систему. Восходяшее тестирование  это прекрасный способ локализации оши бок, Если ошибка обнаружена при тестировании единственною модуля, то очевидно, что она содержится именно в нем  для поиска ее источника не нужно анализировать код всей системы, А если ошибка проявляется при совместной работе двух предварительно протестированных модулей, значит, дело в их интерфейсе, Еше одним преимуществом восходящеrо тестирова 
fлава з: Типы тестов '" 7 5 ]11111 IIIJlнется то, что ВЫ[IOЛНЯЮЩИИ ею проrpаммист концентрируется на ,,'1"111, узкой области (единственном модуле, flередаче данных между парой \1<J:I\'ней и т,п,), Блаюдаря этому тестирование проводится более тщатель 11\\ 11 С (iольшей вероятностью выявляет, ошибки, 1';"\ВНЫ1 недостатком восходящею тестирования является необходи \1\\(11, написания спеuиально['о кодаоболочки, вызывающею тестируемый \I\\;IVJlb, Если он, в свою очередь, вызывает друrой модуль, для Hero нуж "'1 lIаllисать за2ЛУШКУ, Заrлушка  это имитация вызываемой функции, ItI'lIIращающая те же данные, но ничеI'О больше не делающая, Понятно, что написание оболочек и З3I'лушек замедляет работу, а дЛЯ "\\IIt:ЧНОЮ продукта они абсолютно бесполезны. Но написанные однажды, I! 11 элементы мо['ут использоваться повторно при каждом изменении про 1 P;IIMbI, Хороший набор оболочек и ЗaI'лушек  это очень эффективный IIl1струмент тестирования, В противоположность восходящему тестированию, стратеi!ия целостНОi!О тсстирования преД!IOЛaI'ает, что до ПОЛНОЙ инте['рации системы ее отдель 111.le модули не проходят особо тщательно['о тестирования. Ilреимуществом такой страте['ии является то, что нет необходимости в lIаlIисании дополнительно['о кода. Поэтому мнО!'ие руководители выбира !от этот способ из соображений экономии времени  они считают, что 'У'Jше разработать один обширный набор тестов и с ero помощью за один 1"1] 1!рОБерить всю систему. Но такое представление совершенно ошибоч 110, и вот почему. . Очень трудно выявить источник ошибки. Это ['лавная проблема. Поскольку ни один из модулей не проверен как следует, в большин стве из них есть ошибки, Получается, что вопрос не столько в ТОМ, в каком модуле произошла обнаруженная ошибка, сколько в том, какая из ошибок во всех вовлеченных в процесс модулях привела к полученному результату, И кота накладываются ошибки несколь ких модулей, ситуацию может быть юраздо труднее локализовать и повторить, Кроме тою, ошибка в одном из модулей может блокировать тести рование друю['о, Как протестировать функцию, если вызывающий ее модуль не работает? Если не написать для этой функuии прО!'рам муоболочку, придется ждать отладки модуля, а это может затянуть ся надою-о, . Трудно ОРi!анизовать исправлеllие ошибок, Если IIporpaMMY пишут несколько проrраммистов (а именно так и бывает в больших систе мах), и при этом неизвестно, в KaKO1 модуле ошибка, кто же будет ее искать и исправлян? Один проrраммист будет указывать на дpy roro, тот, выяснив, 'ITO е['о код ни при чем, снова обратится к пер вому, а в результате будет сильно страдать скорость разработки, 
76 Часть 1: Основы . Процесс тестировШlUЯ плохо автоматизирован, То, что на первый взтяд кажется преимушеством целостною тестирования  OTCYT ствие необходимости писать оболочки и ЗaI'ЛУШКИ,  на самом деле оборачивается е['о не:lОстатком, В процессе разработки ПрOI'рамма ежедневно меняется, и ее приходится тестировать снова и снова, А оболочки и ЗaI'ЛУШКИ [ЮМOI'ают автоматизировать этот однообразный ТРУД, Поскольку большинство руководителей проектов отнюдь не ['лупы, кота ктонибудь из них выбирает целостное тестирование, мы предпола ['аем, что в своем конкретном случае он видит такие преимушества этою подхода, о которых в разюворе с нами просто не упоминает, Есть и такие руководители, которые вообше не слишком заботятся об эффективности тестирования, rлавное для них  как можно скорее отрапортовать началь ству о завершении работ, даже если на самом деле ничею не работает, Если после этою с проектом возникнут проблемы, они будут обвинять законы Мэрфи, тестировшиков, невезение, но только не самих себя  собствен ную часть работы они будут считать выполненной успешно и в срок, Мы не понимаем такой позиции, хотя каждый из нас был в свое время PYKO водителем проекта, а также встречался с руководителями, действуюшими подобным образом, Нисходящее тестирование против восходящеrо Сушествует и еше один принцип ор['анизации тестирования, при KOTO ром про['рамма так же, как и при восходяшем способе, тестируется не целиком, а по частям, Только направление движения меняется  сначала тестируется самый верхний уровень иерархии модулей, а от нею тестиров шик постепенно спускается вниз, Такая технолOI'ИЯ называется нисходящей (topdowп), Обе технолOI'ИИ  и нисходяшую И восходяшую  называют также инкременталЬНblМи, При нисходяшем тестировании отпадает необходимость в написании оболочек, но ЗaI'ЛУШКИ остаются, По мере тестирования ЗaI'ЛУШКИ по o'Je реди заменяютсЯ на реальные модули, Мнения специалистов о том, какая из двух инкрементальных страте['ий тестирования более эффективна, сильно расходятся, Йордан (Yourdon, 1975) доказывает, что ['ораздо ЛУ'Jше нисходяшее тестирование, а Майерс (Myers, 1976) утверждает, 'ПО, хотя у обоих подходов есть свои преимуше ства и недостатки, в целом восходяшее тестирование ЛУ'Jше, По мнению же Дан на (Dunn, 1984), эти способы примерно эквивалентны, На практике вопрос выбора страте['ии тестирования оБы'ноo решается просто: кажДЫЙ lOдуль по возможности тестируется сразу после ею напи сания, в результате [lОследовательность тестирования одних частей про ['раммы может оказаться восходяшей, а ДРУI-ИХ  нисходяшей, 
{лава з: Типы тестов ..' 77 Статическое тестирование против динамическоrо При статическом тестировании прО!'раммный код вообще нс ВЫIIOЛНЯ СТСЯ  ОН тсстирустся ТОЛЬКО путсм ЛОI'ИЧССКОI'О анализа, Двс описанныс вышс базовыс стратсrии  тсстированис "чсрною ящи ка" и тсстированис "стеклянною ящика"  являются динамичсскими, ПрО!'рамма запускастся, вводЯТСЯ данныс, и ПрО!'jJаммист или тсстировщик анализируст РСЗУЛhтат, Разница только в том, на какой информации OCHO вывастся подбор тсстов, Для статическою анализа сущсствует множсство инструмснтальных срсдств, Самое извсстное из них  компилятор, Встрстив синтаКСИ'JССКУЮ ошибку или НСДОПУСТИМУЮ опсрацию, компилятор выдаст соответствующес сообщснис, Ряд полсзных сообщсний выдаст и КОМIIOНО1JШИК  О IIOВТО ряющихся И,\lснах псрсменных и ДРУI'ИХ объсктов, ссылках на нсобъявлсн ные перс\!снныс и функции, О ДРУI'ИХ полезных срсдствах автоматизации стаТИ'Jескою и динаМИ'JССКОI'О тсстирования рассказывастся в UlaBC 11, СтаТИ'JССКИЙ анализ ПрОI'р,шмы можст выполняться И ЛЮДЬМИ, ОНИ читают исходный код, возможно, обсуждают CI'O, и, как правило, находит достаточно MHOI'O ошибок, Вот примсры такой работы, . ОБЗОР1/ые, и1/сnекциО1/1/ые u реце1/3иО1/llые совеща1/UЯ, Это точно Ta кис жс совсщания, какис проводятся для анализа проскта проrpамм HOI'O продукта, Майсрс (Mycrs, 1979) прсдлщ'аст для них очснь полсзный список контрольных вопросов, Он утвсрждаст (1978), 'ПО для выявлсния ошибок обзорныс совсщания нс мснсе полсзны, чсм ЩlнаМИ'JССКОС тсстированис спсциалистом, который нс являстся автором кода прО!'раммы, А у ФСРI'ана (Fcrgan, 1976) можно найти описанис клаССИ'JССКОЮ способа провсдсния таких дискуссий, . Работа за столом, СтаТИ'JССКИЙ анализ прО!'раммною кода можст выполняться и В одиночку, Спсциалист читаст и анализируст про I'раммный код, Если он НС можст понять, что дсласт конкрстный фрщ'мснт прО!'раммы, он можст поработать и за компьютсром, но большую часть врсмсни он всс жс проводит за столом, Он работаст дольшс, чсм обы'JНО длятся совсщания, и, как правило, анализиру ст юраздо большис объемы кода, Этот вид тсстирования можст ВЫIIOЛНЯТЬ как сам автор прОI'jJаммнО!'о кода, так и КТOTO друюй  В любом случас оно будст очснь IIOЛСЗНЫМ, Вычитывать ПрОI'jJаммный код (как собственный, так и 'JУЖОЙ)  работа довольно СКУ'Jная, и МНО!'ИС СС нс любят, В пользу ЭТОЙ процсдуры юрячо высказываетСЯ ВсйнБСРI' (Wcinbcrg, 1971), а Бсйзср (Bcizcr, 1984, 1990) 
78 Часть 1: Основы советует ускорить работу за счет ю'норирования синтаксиса и всею тою, 'ПО может сделать компилятор, ОДНИI из полезных результатов чтения прm'раммною кода может быть заКJJЮ'Jение о том, AOCTaTO'JHO ли он прост И лm'ичен, Если КОД ТРУДНО 'JИтать, то O'JeHb вероятно, 'ПО прm'раммист HeAoCTaTO'JHO четко видит за Aa'JY, И, кроме тою, даже если в такой про!'раМlе и нет ошибок, в даль нейшем мт'ут возникнуть большие сложности с ее модернизаuией, Соответствие стандартам у каждой компании MoryT быть свои стандарты, определяющие, сколько в коде должно быть комментариев, какой максимальной длины MOI)'T быть отдельные модули, должен ли прm'раммист строю следовать сm'лашениям об именах переменных и функuий и каковы эти СОПlзшения, Анализ COOT ветствия кода таким стандартам прекрасно поддастся автоматизаuии, Проrраммная статистика Существует практика анализировать сложность прm'раммною кода С помощью статистических выJислений,' Мы относимся к этому весьма скеп тически, На наш ВЗ!'ЛЯД, такой математический анализ интересен разве что с теореТИ'Jеской точки зрения, практическая же ero полезность весьма m'раничена, Некоторые руководители требуют, чтобы прm'раммисты пере рабатывали код, пытаясь добиться "приемлемою", по их мнеНI1Ю, коэффи uиента сложности, Но на практике это может привести разве что к замедлению работы и появлению лишних ошибок и проблем, поскольку, как известно, лучшее  ВрЮ' хорошею, Да и как вообще можно "измерить" качество про!'раммы, Если она работает, вы!lлняетT все необходимое, если она тщательно про думана и протестирована  оставьте ее в покое, И еще не следует забывать, 'ПО краткость  сестра таланта, А относи тельно посредственный прm'раммист, пытаясь предельно сократить и о!пи мизировать код, не сможет ею как следует отладить и в результате испортит то, что прекрасно работало, НИ В КОЕМ СЛУЧАЕ НЕ СЖИМАЙТЕ про rРАММНЫЙ КОД! Если вы потребуете, чтобы пpOlpaммucmbl умеllьшили коэффициент сложности кода, можете ли вы быть уверены, что новый код будет полностью функционально эквивалентным старому? 
{лава з: Типы тестов ..' 79 Намеренные ошибки: псевдоотладка и мутационное тестирование Одной из довольно спеUИфИ'Jеских технолО!'ий тестирования прО!'рамм ЯВ;lяется псевдоотладка (bebuggiпg), В прО!-рамму намеренно внедряется рЯД ошибок, По мнению Вейнбер!'а (Weinberg, 1971), прО!'раммист, зная HaBep няка, что в прО!'рамме есть ошибки, будет юраздо тщательнее ее тестиро вать, Но !'лавное назна'Jение этой техноло!'ии  оuенить эффективность проводимых тестов, Если внедрить в прО!'рамму 100 ошибок, а затем про веети тестирование, в результате которою будет выявлено только 20 из них, значит, в прО!'рамме останется еще около 80% невыявленных ошибок, Еще одним способом проверки адекватности проводимых тестов явля ется мутационное mecmupoeaHue(mutatioп testiпg), В прО!'рамму вносится Ma ленькое изменение, называемое мутацией, В проuессе тестирования результат такою изменения должен обязательно проявиться, Если же ЭТО ro не СЛУ'JИТСЯ, это может озна'Jать, что тесты IIодобраны неудачно, Подробное описание теХН()jIО!'ИИ мутационною тестирования можно най ти у Де Милло (DeMillo, 1987), Анализ производительности Для анализа производительности прО!'раммною продукта можно приме нять технолО!'ию как "чернО!"о" так и "стекляннО!'о ящика", Однако вторая из них дает лучшие результаты, поскольку позволяет с помощью дополни тельных прО!'раммных средств фиксировать время вы!lлненияя отдельных модулей, прохождения конкретных путей или скорость обработки спеuи фических ТИПОВ данных, Одной из целей вы!lлненияя анализа производительности является ее увеличение, Если выявить модули, которые вы!lлняютсяя чаще или доль ше остальных, их можно переработать и тем самым повысить скорость работы всей системы, rруппы тестирования обычно работают с про!'раммой как с "черным ящиком", ОНИ сравнивают производительность последовательных версий про!'раммы, и, если обнаруживают, что после последней доработки она замедлилась, это является для них сИ!'налом о возможной ошибке, Производительность про!'раммною продукта анализируют и еще с ok НОЙ uелью  для выяснения ею конкурентоспособности: если имеющие ся на рынке аналО!"ичные про!'раммы работают значительно быстрее, придется "ускорить" и свою, 
80 Часть 1: Основы За более обширной информаuией об анализе производительности про rpaMMHoro обеспечения мы советуем обратиться к книrе Бейзера (Beizer, 1984), Реrрессионное тестирование Основной работой тестировщиков является ресрессионное тестирование, у этоro термина два значения, объединенных идеей повторноro ИСIIOЛЬЗО вания разработанных тестов, . Представьте, что вы провели тест, обнаружили ошибку и прО!'рам мист ее исправил, Вы снова проводите тот же тест, чтобы убедить ся, что ошибки больше нет, Это и есть реrpессионное тестирование, Можно провести несколько вариаuий ИСХОДНОЮ теста, чтобы как следует проверить исправленный фрaI'мент прО!'раммы, В данном СЛУ'Jае задача реI'рессионною тестирования состоит в ТОМ, чтобы убедиться, что выявленная ошибка полностью исправлена проrpам мистом и больше не проявляется, В некоторых коллективах в набор реI'рессионных тестов включают каж.п,ую найденную ошибку, даже если она исправлена уже дaBHЫM давно, Каждый раз, Кота в проrpаМIУ ВiiОСИТСЯ изменение, все эти тесты ПРОВОДЯТСЯ снова, Особенно важно провести такое обстоятель ное тестирование, если прО!'рамма изменяется спустя AOCTaTO'JHO длительное время или новым прО!'раммистом, Исправления O'JeHb 'Jувствительны к таким изменениям, поскольку в тексте проrpаммы, если только они не зздокументированы самым тшательным образом, вы!лядят как неIlOнятные ИЛИ неудачные фраrменты, . Второй пример применения реI'рессионною тестирования, После выявления и исправления ошибки проводится стандартная серия тестов, но уже с друюй uелью: убедиться, что исправляя одну часть проrpаммы, проrpаммист не испортил друryю, В этом СЛУ'Jае тестиру ется uелостность всей проrpаммы, а не исправление одной ошибки, При инкрементальном тестировании основой автоматизаuии прове дения реI'рессионных тестов служат разработанные ЗaI'ЛУШКИ и обо лочки, А для автоматизаuии peI-рессионною тестирования "черною ящика" можно воспользоваться прО!'раммами перехвата и воспроиз ведения ввода, описанными в !'ilaBe 11, Тестирование "черноrо ящика" KorAa кодирование завершено, проrpамма передается rpYI\![e тестирова ния, Вы ищете ошибки, составляете о них оиеты, затем получаете новую 
{лава з: Типы тестов .., 81 версию прО!'раммы и снова ищете ошибки, Вы находите старые ошибки, не шмеченные на первом ЭПlIIе, и новые, hоявившиеся после доработки, Вот как Мартин и МакКлер (Martin & IncClure, 1983) подытожили собранные ()оэмом (BoehIn) данные об эффективности исправления найденных оши бок, . Если для исправления ошибки нужно изменить не более десяти операторов, вероятность тою, что это будет сделано правильно с первою раза, составляет 50%, . Если для исправления ошибки нужно изменить около пятидесяти операторов, вероятность тою, что это будет сделано правильно с первою раза, составляет 20%, Проблема не только в том, 'по прО!'раммист может не исправить ошиб ку до конца, rораздо хуже ApYI'oe  то, что исправления MOI)'T иметь пo ()очные эффекты, Исправление одной ошибки может привести к появлению ;lРУЮЙ, А бывает и так, 'по одна ошибка скрывает ДРУI)'Ю, которая прояв :lЯется только после ее устранения, К сожалению, ПрОI'раммисты часто конuентрируются только на поставленной перед ними проблеме и, решив се, С'Jитают свою работу сделанной  реI'рессионною тестирования, пусть ;taже самою поверхностною, они не ВЫIIOЛНЯЮТ, У'JИтывая все сказанное, приютовьтесь тестировать одну и ту же про [рамму мноюмною раз, На ранних стадиях тестирования исправленные версии ПрОI'раммы МО!'УТ поступать каждые несколько 'JaCOB или дней, Поэтому среди спеuиалистов распространена практика не ПрИНИ!'dать новую версию, IlOка не будет самым тшательным образом протестирована преды ;tущая, Такое полное тестирование очередной версии с составлением ито I'OBOI'O отчета обо всех известных проблемах и всех найденных в этой версии ошибках называют полным циклом, Руководители проектов часто рассчитывают О!'jJаничиться двумя uикла ми тестирования: в первом выявить все ошибки, а во втором убедиться, что все они исправлены, Но на caIOM деле для тестирования может понадо биться порядка восьми uиклов, а если на каждом из них тестировать про l'paMIY менее тщательно  тоща от 20 до 30, Стандартная процедура тестирования ящика" " черноrо В этом разделе описывается стандартная IlOследоватеJ\ЬНОСТЬ событий, свойственная тестированию "черною ящика" в мире персональных компь ютеров, В мире мейнфреймов все ина'Jе, Друзья, работающие в банках, рассказывают, 'по они приступают к разработке тестов задолю до офиuи альною начала тестирования, 
82 Часть J: Основы Планирование Как и всякая работа, тсстированис про!'раммноrо продукта на'JИнастся спланированин: опрсдслястся стратс!'ия, разрабатываются ссрии тсстов, распрсдсляются мсжду сотрудниками задания, Начинать планированис можно сразу послс тою, как команда просктировщиков выработаст трсбо вания к проrраммному продукту, Однако чащс подробнос планирование начинастся на псрвом uиклс тестирования, кота псрсд вами ютовый про I-раммный продукт, О разработкс тсстов мы с вами поюворим в !'ilaBC 7, а в rлавс 12 обсудим составление общсrо плана тсстирования, Приемочное тестирование При поступлснии каждой новой всрсии пршраМ!>IНОro продукта тссти ровщики прсждс Bcero проверяют, достаточно ли она стабильна, Если она "обрушивается" при малейшсй провокаuии, возиться с нсй нс стоит, Такос псрвос бс!'лос тсстированис называют приемочным или квалификационным, Лучше вссю, ссли присмочныс тссты будут стандартизированы, То!Да их копии можно псрсдать прО!'раммистам, чтобы тс проводили их сами и не сдавали вам проrpаммы раньшс времени, Это позволит избсжать возвра тов тсстировщиками нсработающих прО!'рамм  моментов, психолО!'ичсс ки нсприятных Д;IЯ обсих сторон, Присмочныс тссты должны быть короткими, В них должны провсряться только основныс функuии И основныс данныс, Если прО!'рамма нс прой дст дажс такой тсст, вы с полной увсрснностью сможстс утвсрждать, 'ПО эта сс всрсия никуда нс юдится, Во мнО!'их компаниях присмочныс тссты частично автоматизированы с помощью спсuиальною прО!'раммною обсспсчения, ВЫ!lOлняющсю тссти рованис "ЧСрНО!'О ящика", Проверка стабильности nporpaMMbI Насколько стабильна !IOЛУ'lснная вами всрсия про!'раммы? Сколько uиклов тсстирования она выдсржит  чстырс или 24? Вас MOI)'T IIОIIрОСИТЬ оuснить стабильность про!'раммы для составлсния калсндарною плана работ, оuснить стоимость услу!' по сс тсстированию сторонним ш'снтством или оuснить качсство прО!'раммнО!'о продукта, который компания собира стся КУIIИТЬ и распространять, В этом случас ваша задача состоит IIС в поискс ошибок, а в ОПРСДСЛС нии самых нснадсжных частсй ПрОl'рЗММЫ, Если вам кажстся сомнитсль ным какойнибудь особснно сложный элсмснт, то!Да рассчитывайтс, что тсстированис будст ДОЛI'им, Начните с ИЗУ'IСНИЯ ПРИЛaI'асмоrо к прО!'рам мс руководства  в нсм должны быть ОIIисаны всс функции проrpаммы, а ссли IIОВСЗСТ, сщс И привсдены простыс и наrлядныс примсры, Провсдитс сщс нссколько тсстов, на которых, как вам кажстся, проrрамма ДОЛжна 
[лава з: Типы тестов .., 83 сбоит!', В конце такою оuеночною тестирования у вас должно сложиться 01lределенное 1Iредставление о том, с чем вы имеете дело: сколько в 1IpO I рамме ошибок и насколько тяжело будет ее протестировать, К сожалению, Щ,I не сможем сказать, как транслировать это 1Iредставление в человеко '!аСЫ  вам 1Iридется IIOЛaI'аться только на собственный 01lЫТ и IIрофесси ональное чутье, Обычно IIредварительная оценка стабильности ПрOl'рамы занимает около недели, Если для тестирования всех ее функuий этою времени He ,юстаточно, проверьте часть из них, Но обязателыlO включите в свой отчет обзор каждою раздела руководства, И не стоит раСС'JИтывать разобраться с IIрО!'р;:ММОЙ меньше чем за неделю, если только она не элементарна и если это не очередная версия IlpoAYKTa, который вы мною раз 1Iротестировали, Функциональное и системное тестирование, сверка и аттестация продукта КО!'да 1IрО!'раммный 1IрОДУКТ ютов и 1Iротестирован, он должен 1IрОЙ I'И ряд завершающих тестов, Прежде BceI'O, 0[[ должен быть еше раз сверен с наиболее 1Iодробными и близкими к нему 1Iроектными документами, В частности, должно быть 1Iроведено функциональное тестирование, 1IрИ KOTO ром 1IрОДУКТ сверяется с внешней С1lеuификаuией, Затем 1IporpaMMa сверяется с ОIIубликованной 1Iечатной документаuией . 1Iользовательскими (тестирование целостности) и системными (cиcтeM I/ое тестирование) требованиями, Эти две IIроцедуры носят название aттe стационносо тестирования, В раЗI'оворах о тестировании вы можете встретиться с одним из 1I01lY JlЯРНЫХ терминов  lndependent Verification and Validation (lV&V  неза висимая сверка и аттестаuия), Он означает сверочное и аттестаuионное тестирование, 1Iроводимое независимым ю'ентством, Более IlOдробное 01lисание 1Iроцедуры сверки и аттестаuии можно найти у Андриоле (Andriole, 1986) и в документе JEEE Staпdard for Software Verificatioп aпd Validatioп Plaпs (AN SljIEEE Standard 1 О 1 2 1 986), Бета-тестирование и вот наконец вы IIодтверждаете, что 1IpOI'paMMa достато'! но стабильна и документаuия в 1Iорядке, Это значит, что наСТУ1lИЛО время для обратной связи с IIользователями  бетатестирования, На этом эта1lе с 1IрО!'раммой работают ее IlOтенuиальные 1Iользователи, Они ЭКС1lлуатируют 1IрО!'рамму и 1Iрисылают или высказывают вам свои 'щмечания, Поскольку бетатестировщики знают, что в IIpOI'paMMe MOI'YT оставаться еще очень серьезные ошибки, они не работают с ней 1IОЛНЫЙ день  на 20 часов тестирования у них уходит около трех недель, 
84 Часть 1: Основы 20 часов работы бетатестировщика для KOMпaHии разработчика вовсе не бесплатllЫ. Вам или apYi!OMY сотруднику КОМIIШlии приходится тратить на каждоi!O из "их от 4 до 8 часов, вербуя новых людей, давая им консультации и отвечая на их вопросы. Кроме mOi!O, НУЖ1l0 писать для "их и1lструкции и разрабатывать вопросники. Однако в опрсдслснных ситуаuиях бстатсстировщики работают с про дуктом rораздо болес основатсльно, Вот какими MoryT быть их мотиваuии, . Пользователю очснь нужсн ваш продукт, дажс ссли он и нс надсжсн, а ДРУП1Х подобных продуктов на рынкс нст, . Вы достаточно платитс, Обычно в качсствс платы за бстатсстиро ванис пользоватсль нолучаст или бсснлатную копию продукта, или значитсльную скидку, Если продукт дороюй, этою достаточно, Но ссли pC'Jb ИДСТ О прО!'раммс, нредназна'JСННОЙ для доступа к важНОЙ информаuии, и в этой прО!'раммс нроисходит сбой, нотсря данных можст обойтись пользоватслю юраздо дорожс стоимости прО!'рамм ною продукта, . Вы дастс пользоватслю выюдную !'арантию, Нанримср, вы обсщас тс, 'ПО в случас сбоя нрО!'раммы сотрудник вашсй компании бсс платно ввсдст потсрянныс данныс, Здссь мы НрИБСЛИ лишь краткий обзор нроцсдуры бстатсстирования, а подробное сс описанис вы найдстс в rлавс 13, Тестирование целостности rOToBoro продукта и тестирование распространяемых копий с завсршснисм тсстирования послсднсй бставсрсии roтовою прО!'рамм Horo продукта ВОЗМОЖНЫС проблсмы нс закаН'JИваются, Всдь нужно сщс убсдиться, что ОН В uслости И сохранности попадст к клиснту, Нсрсдко И на этом этапс случаются вссвозможныс НСНРИЯПIOСТИ: напримср, компании отсылают пользоватслям пустые или инфиuированныс диски, Для тестирования распространяемых копий ВЫ собирастс всс, 'ПО будст отправлсно пользоватслю или производитслю, Ilроверястс, всс ли на MCC тс и В порядкс, И дсластс архивныс копии, Только послс этою продукт отправлястся по назначснию, Комплскт дисков провсрить прощс вссю: нужно просто выполнить их ДВОИ'JНОС сравнснис с послсднсй всрсисй продукта, Нс прснсбрс!'айтс этой ПРОЦСДУРОЙ, дажс ссли для создания дисков вы пользовались ужс провсрсн 
[лава з: Типы тестов ..' 85 Iloii копией, Такое сравнение обойдется вам юраздо дешевле, 'JeM отправ ";1 Iюльзователям новой партии, если ,!TOTO будет не так, Мы настоятельно рекомендуем вклю'шть в эту проuедуру тестирования l'ще и проверку на вирусы, Если прО!'раммное обеспечение поставляется в l'ЖIТОМ виде, не останавливайтесь на тестировании сжатых файлов: YCTaHO IIИТС прО!'раму, запустите ее, перезапустите компьютер и убедитесь, что он 1It: заражен, Имейте в виду, 'ПО за заражение вирусами пользователь может Ilo;laTb на вас в СУД, Тестирование целостности проrраммнО!'о продукта  работа более об L l'Oятельная, Это ваш последний шанс 'полибо изменить перед тем, как IIЫilУСТИТЬ свое детище в жизнь, Тестировщик старается спрО!'нозировать IIСС жалобы и КРИТИ'Jеские заме'Jания, которые МО!'УТ появиться в прессе и IIОСТУПИТЬ от пользователей в ближайшие несколько месяuе!), Этим может !;lНИ,\lаться ведущий спеuиалист, который не У'Jаствовал в данной разработ "С, или даже сотрудник независимою ю'ентства, В ero зада'ш не входит IЮИСК ошибок, Напротив, он предIlOЛaI'ает, 'ПО и системное и функuио lIa.i/bHoe тестирование проведены самым тщательным образом, Спеuиалист 1I11I1\lательно сравнивает про!'рамму с пользовательской документаuией и ,lOкументами, в которых описаны требования к продукту, Кроме тою, он \южет выполнить сравнение с конкурирующими продуктами, В рамках тестирования uелостности продукта выполняется и анализ .\lаркетинrовых материалов  ведь возможности прО!'раммы обязательно ,'LOлжны соответствовать рекламе, Потому и рекламная копия, и все печат "ые и электронные рекламные материалы перед публикаuией должны lIодверПIУТЬСЯ самой строюй проверке, Тестирование uелостности прО!'раммною продукта ЛУ'Jше !lOру'шть не "olaHAe, а одному 'JeiIOBeKY, Для однопользовательской прО!'раммы cpeд IIСЙ сложности на это уйдет около двух недель, Окончательная прием ка и сертификация Если ваша компания разрабатывает прО!'раммное обеспе'Jение но KOH 'ракту, для ею нриемки клиенты должны будут провести собственные I'CCTbI, Если продукт невелик, тестирование может быть неформальным, Однако для большинства проектов проuедура приемочною тестирования '!аранее СОПlасовывается и фиксируется в контрактных документах, Поэто IY, прежде чем нередать нршрамму клиенту, нужно убедиться, что она абсолютно безупре'JНО проходит серию приемочных тестов, оБы'ноo при t:MO'JHoe тестирование занимает не более ОДНО!-О дня и не является особен 110 тщательным, Как !1OД!'ОТОВИТЬ и провести формальное приемочное I'Сl:'шрование, подробно рассказывает Бейзер (Beizer, 1984), Хорошим учеб IIИКОМ по разработке приеМО'JНЫХ тестов является КнИ!'а Перри (Репу, 1986), Особенно полезной эта кнИ!'а может быть для тех, кто разрабатывает IIриемочные тесты совместно со своим клиентом, 
86 Часть J: Основы Сертификация всета вьшолняется сторонней фирмой  независимой или работающей на вашеrо клиента, Сертификационное тестирование может быть как коротким и поверхностным, так и более тщательным, По контракту оно может выполняться вместо приемочно!'о тестирования, При этом уровень сертификаuионною тестирования и стандарты, которым AOk жны соответствовать прО!'рамма и проuесс ее разработки обязательно AOk жны быть записаны в контракте, Если же сертификаuия проводится по желанию компанииразработчика, например, из маркетинювых соображе ний, ТОIда она сама и определяет, какие провести тесты, Примеры тестов, проводимых при функциональном и системном тестировании Чтобы более НaI'ЛЯДНО пояснить суть описанною в предыдущих разде лах функuиональною и системною тестирования, приведем примеры Tec тов, вьшолняемых на этом этапе, Сверка со спецификацией Проверяется соответствие разработанной проrраммы каждому слову в спеuификаuии, Правильность Правильно ли проrрамма выполняет нужные вычисления и формирует отчеты? Лабораторные испытания Спеuиалист по тестированию нанимает нескольких человек из числа будущих пользователей и наблюдает за их работой с продуктом, Фактичес ки бетатестирование является IIoпытойй получить ТОТ же результат с MeHb шими затратами, Но поскольку вы не являетесь непосредственным свидетелем тою, что происходит, и не можете давать тестировщикам зада ния, бетатестирование юраздо менее эффективно, чем лабораторные ис пытания, rраничные условия Проверьте реакuию прО!'раммы на I'раничные значения входных дaH ных, Введите данные, в ответ на которые она сформирует максимальные или минимальные выходные значения, Производительность Обзаведитесь хорошим секундомером и измерьте время выполнения ПрОI'раммой различных задач, особенно тех, которые пользователь будет ВЫIIOЛНЯТЬ чаще всею, 
{лава з: Типы тестов .., 87 Переходы между режимами Правильно ли прО!'раММ<l псрсходит из СОСТОЯНИЯ В состоянис? Это особснно важно для приложсний, ПОЗВОЛЯЮЩИХ параллсльно выполнять 11t:t:KO;lbKO различных дсйствий или ПСРСКJ\ючаться мсжду рсжимами, нс \аВt:ршая их работу, Что, ссли попьrrаться распсчатать рсдактирусмую таб JIIlIlY или сформировать по нсй OТ'JCT? Что, ссли ВО врсмя IIOДЮТОВКИ OT 'Iua ввести в таблиuу новыс данныс? Эксплуатация в реальном режиме IIопробуйтс поработать с прО!'раммой в том ЖС рсжимс, В каком с нсй GYAYT работать рсальныс пользоватсли, Выполнитс с сс ПОМОЩЬЮ рсальную работу, Вы будстс O'ICHb удивлсны, УВИДСВ, сколько ошибок выявляст Ta кос тсстированис, Нсдостатки, которых при формальном тсстировании вы нс за,\lСТИЛИ вовсс или посчитали их нсзначитсльными, в рсальной работс IOI'YT оказаться очснь ссрьсзными, Наrрузочные испытания При насрузочных испытаниях (/oad testing) провсрястся рсакция ПрОI'рам ,\lЫ на прсдсльныс условия эксплуатаuии, . Тестирование на максимальный обьем входных данных, Какос макси мальнос заданис окажстся вашсй проrраммс по плсчу? Компилято ру можно ПРСДЛОЖИТЬ ОТКО\l!lилировать очснь большую прО!'рамму, тскстовому процсссору  открыть ОI'рОМНЫЙ тскстовый файл, В интсрактивной прО!'раммс можно попробовать нспрсрывно вводить очснь большой объсм информаuии, чтобы провсрить, насколько надсжсн сс входной буфср, (Для тою чтобы быстрсс рСaI'ировать на ДСЙСТВИЯ пользоватсля, проrpаммы часто сохраняют информаuию о нажатиях клавиш в нсб()льшом буфсрс, а КОIда пользоватсль на cc кунду приостанавливастся, обрабатывают сю содсржимос,) Нужно l!OCMOTPCTb, как ПОВСДСТ ссбя прО!'рамма в отвст на нсстандартныс данныс, напримср, как КОМПИЛЯТОР или тскстовый проuсссор посту пят с абсолютно пустым файлом, . Испытания в утяжеленном режиме, Как РСaI'ирует ПрОI'рамма на рсзкос увсличснис активности? Напримср, можно провсрить, как ПОВСДСТ ссбя тскстовый проuсссор, ссли IIOJ\ьзоватсль будст вводить текст со скоростью 120 слов в минуту, Если Iаксимально допусти мая активнОсть пользоватсля оюворена в спсuификации, нужно провсрить, ДСЙСТВИТСЛЬНО ли прО!'рамма хорошо справлястся с YKa занной ню-рузкой, . Анализ требований к ресурсам, Нсобходимо изучить трсбования про rpaMMbI к двум важным рссурсам компьютсра  опсративной памяти 
88 Часть J: Основы и дисковому пространству, Если в спеuификаuии записаны о['рани чения на использование этих ресурсов, необходимо удостовериться, что ни при каких условиях прО!'рамма не занимает больше памяти и дисково['о пространства, че,\! ей положено, Мноrопользовательская и мноrозадачная работа Если ваш продукт представляет собой сложную мноюзадачную или мноюпользовательскую систему, ею тестирование значительно усложняет ся, Необходимо проверить, как он справляется с параллельным ВЫ[lOлне нием нескольких задач и как координируются действия нескольких пользователей, Типичным примером таких систем являются мноюпользо вательские систеIЫ управления базами данных, !'Де несколько пользовате лей, сидящих за различными и, возможно, даже достаточно удаленными компьютерами, мо['ут одновременно вводить данные в одну и ту же табли иу, Для тестирования такой системы нужно ор['анизовать ее эксплуатаuию в реальном режиме, привлечь для работы большое количество людей и Tex ники и, возможно, написать спеuиальные проrpаммы, имитирующие OДHO временный ввод данных, Более подробное обсуждение ЭТО['О вопроса можно найти в кнИ!'е Бейзера (Beize[', 1984), Обработка ошибок Проrpамма должна корректно реaI'ировать на неправильные, HeCTaHдap тные или не предусмотренные документаuией действия пользователей, Постарайтесь сделать как можно больше ошибок и своими ['лазами посмот реть на каждое описываемое в документаuии сообщение, Может быть, вы столкнетесь с сообщениями об ошибках, которых в документаuии нет, Проводя такое тестирование, вы соберете наибольший урожай ошибок, I!ОСКОЛЬКУ этой части прО!'раммы обычно уделяется меньше всею внима ния, Защита Сложно ли неавторизированному пользователю 11O;/У'If1ТЬ доступ к си стеме? Что дЛЯ ЭТОЮ нужно? О тестировании зашиты прО!'раммною обес печения немною рассказывается у Бейзера (Beizer, ! 990) и более подробно у Фернандеса (Fernandez, 1981), Совместимость и преобразование форматов данных Два прО!'раммных продукта называют совместимыми (compatibIe), если они МО!'УТ работать с одними и теми же фаЙJlа\1И данных или если они блаrо[IOЛУЧНО сосуществуют в оперативной "аМИПI компьютера и работают, 
J'лава з: Типы тестов .., 89 не мсшая APYI' APYI)'. Поэтому, получив заданис провсрить прО!'раммы на t:овместимость, обязатсльно выяснитс, о какой имснно совмсстимости идст рсчь, Если двс прО!-раммы нс МОI)'Т HCIIOCPCACTBCHHO работать с данными APYI' :lpYI'a, это сщс нс значит, что они абсолютно нссовмсстимы, Возможно, что IlOльзоватсли CMOI)'T воспользоваться спсuиальными конвертерами  про I раlмаМИIlOсрсдниками, прсобразующими данныс из одною формата в пруюй, Одной из самых распространснных ситуаuий, трсбующих конвсртиро вания данных, являстся выпуск НОВОЙ всрсии прО!'раммы, В этом случас новая проrрамма должна умсть опрсдслить, ЧТО прсдложснныс сй данныс сохранены в фОРlате прсдыдущсй всрсии, и самостоятсльно выполнить их прсобразованис, Кромс TOI'O, прО!'раммы одною класса часто умсют читать и сохранять данныс в форматс APYI' Apyra, Это позволяст пользоватслям еовсршснно бсзболсзнснно псрсходить с одной прО!'раммы на ДРУI)'Ю или JLажс эксплуатировать их совмсстно, Аппаратные конфиrурации Очснь важно, чтобы ПрОI'рамма успсшно работала на компьютсрах ca мых разнообразных конфю'ураuий, Дажс ссли прО!-рамма ориснтирована на конкрстную модсль проuсссора, всс равно в систсмах, [дС сй придстся работать, псрифсрийныс устройства будут различны, Поэтому вам нужно выявить тс устройства, с которыми проrрамма должна быть совмсстима, но на ДСЛС нс работаст, Установка и обслуживание Вмсстс с прО!'раммным продуктом обычно поставлястся и прО!'рамма сю установки, Она автоматизируст проuссс ИНТСI'раuии продукта в систс IY И CI'O настройки ДЛЯ нужд КОНКрСТНО!'О пользоватсля, Работаст ли эта прО!'рамма? Насколько она проста и удобна? Сколько врсмсни в СРСДНСМ трсбустся на установку? Если прО!'рамму будст устанавливать нс пользоватсль, а спсuиалист, напримср сотрудник фирмыдилсра, возникаст и сщс нссколько вопросов. связанных с сс обслуживанисм, Напримср, ссли произойдст сбой прО!-рам мы, как быстро квалифиuированный спсuиалист сможст устранить сю послсдствия или установить заплатку? Эффектные тесты Есть срсди тсстов И такис, которыс служат нс для рсальной работы, а для TOI-O, чтобы произвссти впсчатлснис на публику, Их проводят псрсд зритслями (напримср, администраuией, ПРИШСДШСЙ посмотрсть, как идст работа), чтобы показать, как "ужасно нсстабильна" прО!'раМ1a и как про фсссиональны тсстировщики, 
90 Часть J: Основы Понастоящему эффектный тест должен быть очень простым и приво дить К немедленному сбою, Как подбирать такие тесты, сказать сложнее, Здесь приходится основываться на своем собствеННО1 профессиональном опыте, знании слабых мест прО!'раммиста, операuионной системы и резуль татах тестирования аналО!'ичных продуктов, Сопровождение Значительная часть средств, которые компания затрачивает на про !'раммный продукт, УХОДИТ уже после завершения ею разработки, Вот Ka кие данные приводят в своем учебнике Мартин и МаКК.ilер (Martin & mcClure, 1984), На сопровождение прО!'раммнО!'о обеспечения затрачивается 67% е!'о общей стоимости, Распределяется эта сумма так, . 20% бюджета сопровождения тратится на исправление ошибок . 25% уходит на ада!IТаllИЮ продукта к новому аппаратному обеспе чению и новой прО!'раммной среде . 6% тратится на исправление документаuии . 4% тратится на повышение производительности . 42% тратится на внесение изменений и усовершенствований . 3% на дру!'ие нужды На этапе сопровождения прО!'раммнО!'о продукта в вашей работе не будет ничею особенною  вы будете делать то же самое, что уже делали в конце разработки во время функuиональною и системною тестирования, Если у вас есть серия ре!'рессионных тестов, которые к тому же еще и частично автоматизированы, вам остается только повторять ИХ после каж дою изменения прО!'раммы, И не забывайте, что сделанные на этом этапе изменения, как и всякие дру!'ие, чреваты побочными эффектами, Поэто му проявите предусмотрительность и обязательно проверьте не только измененный фрaI'мент, но и всю прО!'рамму в uелом, Адаптационное тестирова ние Этот вид тестирования вы!Iлняетсяя только на этапе сопровождения, кО!'да прО!'рамма переносится с одной аппаратной или прО!'раммной плат фор.\lЫ на дру!'ую, Если прО!'рамма долЖна работать на нескольких типах компьютеров, нужно проверить ее совместимость с каждым из них, Вот краткое Оllисаllие страте!'ии такою тестирования, . Общее ФУIlКЦUОlluрованuе, Выполните серию ре!'рессионных тестов, Если се у вас lIeT, ра:!работайте набор тестов, выполняющих каждую 
Тлава]: Типы тестов ,,, 91 из основных функuий прО!'раммы, При этом [lOстарайтесь хотя бы частично проверить прО!'рамму j<aK на ['раничных, так и на OCHOB ных данных, Если какаято из функuий плохо совместима с новой платформой, то, скорее Bcero, она не будет работать вообще, так что не стоит опасаться, что возникшие проблемы останутся незамечен ными, Как правило, при переносе прО!'раммы на ДРУI)'Ю платформу тесты на общее Функuионирование она проходит вполне успешно, Поэтому не стоит тратить на них слишком MHoro времени, . Клавиатура, Если у компьютера спеuифическая клавиатура, в рабо те с ней МО!'УТ быть нсбольшие отклонения от стандарта, Поэтому нужно обязательно нажать каждую клавишу, и к тому же в различ ных ситуаuиях, Особое внимание обратите на управляющие клави ши  <Shift>, <Alt> и т,п, . Терминал, Проверьте, как ПРОI-рамма работает с новым терминалом, Как отображается ['рафика? Если прО!'рамма работает в текстовом режиме, то все ли символы отображаются правильно, нет ли про блем с цветом, подчеркиванием или [lOдсветкой? . Номер версии и идентификация системы, Если номер версии про l-раММbI изменился, убедитесь, что он ниrде не остался старым, Если при запуске прО!'рамма идентифиuирует аппаратуру или операuион ную систему, убедитесь, что она делает это правильно, . Диски, Емкость и формат дисков МО!'УТ сильно отличаться, Убеди тесь, что прО!'рамма правильно работает с файлами, размер которых кратен 2, Если новая система поддерживает размер дисков, KOTOpO [о не поддерживала старая, попробуйте поработать с TaKJlM большим диском, . Обработка ошибок операционной системой, Как действует операuи онная система в таких ситуаuиях, как ошибка доступа к диску? Позволит ли она прикладной проrрамме самой обработать эту ситу аuию и выдать корректное сообщение или просто остановит !!po ['рамму и сообщит о системной ошибке? А как сам прО!'раммный продукт защищает пользователя от ошибок и странностей операuи онной системы? . Установка, При установке прО!-раммноro IIpoAYKTa инсталляuионной проrpамме может потребоваться определить arll!аратную и прО!-рамм ную конфи['ураuию системы, Убедитееь, что она делает это правиль но, Протестируйте проrрамму установки как можно тщательнее, Выполните установку продукта 11 системах с различной конфИ!'ура uией, в сети и на OTAeJlbHOM КОlIIьютере, попробуйте установить ею поверх IIредыдущей нсрсии, 
92 Часть J: Основы . Совместимость, Предположим, что на исходном компьютере ваша проrpамма была совместима с проrpаммой Икс, Если проrрамма Икс также была перенесена на новый компьютер, остались ли они COBMe стимы? . Интерфейс, В различных rрафических средах (Windows, Мас, AтigaDOS, Motif и т,п,) действуют различные сО!'лашения о пользо вательском интерфейсе, Перейдя в новую среду, прО!'рамма должна ВЬШlядеть в ней достаточно естественно, . Дpyzue изменения, Поинтересуйтесь у прО!'раммиста, какие еще из менения он вносил в прО!'рамму для ее адаптаuии, и как следует их протестируйте, Если прО!'раммный продукт впервые адаптируется к новой платформе, не рассчитывайте на быстрый успех, Тестирование может занять у вас четверть TOro времени, которое вы потратили на разработку, Перенос на следующую платформу может пройти и быстрее, особенно если эти плат формы достаточно совместимы, 
Fлава 4 ПрО2раммные ошибки Назначение этой rAaBbI rлавной задачей тести ров щи ка является поиск и документирование оши бок, Найденные ошибки исправляются, решаются описанные тестировщи ком проблемы, и тем самым улучшается качество nporpaMMHoro продукта, В этой короткой rлаве мы определим понятия качества и nporpaMMHbIX ошибок, а также расскажем о том, какими бывают про rpaMMHbIe ошибки и как они классифицируются, Зная cBoero лротивни ка, вы сможете бороться с ним более целенаправленно, Более подробно nporpaMMHbIe ошибки описываются в приложении, rAe кроме основной классификации, разделяющей все возможные ошибки на 13 катеrорий, рассматривается около 400 ИХ видов, БиБАиоrрафия Хорошими пособиями для изучения вопросов качества nporpaMMHbIX про дуктов и классификации ВОЗМОЖНЫХ ошибок являются книrи Деминrа (Deming, 1982), Фейrенбаума (Feigenbaum, 1991). Ишикавы (Ishikawa, 1985) и Джурана (Juran, 1989), Качество Если про!'раммный продукт создастся по заказу KOHKpCTHOro клиснта, TorAa клиснт можст принимать в cro просктировании самос НС!lOсрсдствсн нос участис, Он прсдоставляст подробную Сllеuификаuию с описанисм своих трсбований и собствснноro видснии IlpoAYKTa, а разработчик соrла шастся всс это рсализовать, В таком СЛУ'lае качество будст означать точнос соотвстствис спсuификаuии КЛиента, 
94 Часть 1: Основы у большинства разработчиков npozpaм.мHOZO обеспечения таких zpaмomHbIX и обстоятельных клиеltтов нет. для них критерием качества служит не соответствие спецификации, а то, насколько пользователи удовлетворены npozpaм.мHbIM продуктом и сопутствующими услуzами компании. Спеuификаuия  спеuификаuией, но если конечный результат пользо вателю не нравится, значит, е['о качество не на высоте, И не важно, что пользователь ознакомился со спеuификаuией и СО['jlасился с ней или даже сам ее составил, Если в конечном ечете продукт ею не удовлетворяет, то только это и будет иметь для не['о значение, Еще 011110Й составляющей качества является ltaдежность прО!'раммнО!'о продукта, А надежность ею тем выше, чем реже в нем происходят сбои, особенно такие, которые влекут за собой потерю данных и дру['ие непри ятные последствия, Хотя надежность прО!'раммы исключительно важна, она не является единственным критерием ее качества, и не правы те тестировщики, KOTO рые так думают, Если прО!'рамма не позволяет пользователю вы!Iлнитьb чтото, 'ПО он С'lИтает важным, пользователь не будет ею доволен, А если пользователь недоволен, значит, качество прО!'раммы нельзя назвать BЫCO ким, Итак, качество прО!'раммы определяется: . возможностями, блаюдаря которым она понравится пользователю; . недостатками, которые вынуждают пользователя приобрести дру['ую прО!'рамму, rлавное, что тестировщик может сделать для улучшения качества про ['раммы,  это выявить ее недостатки, сбои в ее работе и явные ошибки, Если руководитель проекта при!ет решение в последний момент добавить какуюнибудь очень важную функuию, это тоже может способствовать повышению качества, даже несмотря на то, что ОТ этою прО!'рамма станет менее надежной, Ни надежность, ни функuиональность прО!'раммы не МО!'УТ быть абсолютными, и ее качество в конечно\! счете означает разум ный баланс между этими двумя характеристиками, (Подробнее данный вопрос рассматривает в своей кнИ!'е Джуран (Juran, 1989),) Оставшаяся часть этой ['лавы посвящена недостаткам и ошибкам про ['рамм, Как их выявить и как определить степень их серьезности? 
Тлава 4: Ilросрам"tllые ОlUиб;;и 95 Что такое проrраммная ошибка? Одним из распространснных опрсдслсний прО!'раммной ошибки явля ёlСЯ расхождснис мсжду прО!'раммой и се спсuиФикаuисй, Нс ПОЛЬЗУЙТССЬ !ТИМ опрсдслснисм, Расхождение между nрО2раммой и ее спецификацией является ошибкой тО2да, и только тО2да, КО2да спецификация существует и она правильна. ПрО!-рамма, которая соотвстствуст плохой спсцификаuии, и сама никуда Ht: юдится, Поэтому слсдующис два определсния болсс TO'JHbI, . Если прО!'рамма нс дсласт ТО['О, 'JC['O пользоватсль от нсс вполнс обоснованно ожидаст, зна'JИТ, налиuо прО!'раммная ошибка (Майсрс (Mycrs, 1976, с, 6)), . Нс сущсствуст ни абсолютнО!'о опрсдслсния ошибок, НИ ТО'! ною критсрия наЛИ'JИЯ их в проrраммс, Можно лишь сказать, насколько прО!'рамма нс справлястся со свосй зада'JСЙ,  это ИСКЛЮ'JИТСЛЬНО субъсктивная характсристика (Бсйзср (Bcizcr, 1984, с, 12)), KOHC'JHO, второс опрсдслснис нс касастся таких явных ошибок, как ошибки ВЫ'JИСЛСНИЙ по TO'JHO извсстным формулам, Майсрс вообщс ис КЛЮ'JИЛ ИЗ СВОС['О опрсдслсния ошибки, связанныс с 'JСЛОВС'JССКИМ факто ром, О'JСВИДНО, 'ПО это совсршснно самостоятсльная ['руппа ошибок, трсбующая СПСUИфИ'JССКО['О подхода к их анализу и устранснию, Бываст довольно сложно убсдить прО!'раммиста, 'ПО нсдостаток пользоватсльско ro интсрфсйса являстся ошибкой или 'ПО эта ощибка O'JCHb ссрьсзна или дажс в том, 'ПО тсстировщик вообщс имсст право заниматься такими воп росами, Но пользоватсли жалуются на подоБНbJС ошибки нс мсньшс, 'JCM на О'JСВИДНЫС сбои, Катеrории nporpaMMHbIX ошибок В этой ['лавс описываются 13 катс['орий, охватывающих все возможные ошибки в прО!'раммном оБССПС'JСНИИ, Нссколько ОТJlичаюшуюсн, но такжс O'JCHb полсзную классификаuию ПрСДЛaI'аст в своей КilИI'е Ьейзср (Bcizcr, 1990), Ошибки ПОЛЬЗ0вательскоrо интерфейса с прО!'раммой можст быть ТРУДНО (ИJlИ дажс нсвозможно) работать по множсству ПРИ'JИН, Мы оБЪСДИНИJlИ их ВСС под названисм "ошибки пользо ватсльскою интсрфсйса", Вот НССКОJlЬКО разновидностсй таких ошибок, 
96 Часть J: Основы ункциональность Функuиональныс нсдостатки имсют мссто, ссли прО!'рамма нс дсласт тою, 'ПО должна, выполняст одну из СВОИХ функций плохо ИЛИ НС полно стью, Хотя функuии прО!'раммы AOCTaTO'JHO подробно описываются в сс спсuификаuии, ОКОН'Jатсльнос прсдставлснис о том, 'ПО прО!'рамма долж на дслать, сущсствуст только в умах сс пользоватслсй, Функциональные недостатки есть абсолютно у всех nр02рамм, поскольку ожидания пользователей  вещь субьективllая: у раЗllЫХ пользователей они различны. Оправдать их все просто невозможно, а попытка эт020 добиться может привести лишь к усложнению и потере концептуальной целост1l0сти nр02раммН020 продукта. Однако во мнО!'их СЛУ'Jаях функuиональный нсдостаток вполнс О'JСВИ дсн, Если прсдусмотрснную прО!'ра\IМОЙ зада'JУ трудно вы!Iлнить,' ссли она рсшастся нсуклюжс или при ОIlРСДСЛСННЫХ обстоятсльствах вообщс нс может быть рсшсна  проблема налиuо, И КОIда ожидания пользоватслсй вполнс разумны и обоснованны, эту проблсму бсз колсбаний можно Ha звать ошибкой, Взаимодействие nporpaMMbI с пользователем Насколько сложно пользоватслю разобраться в том, как работать с прО!'раммой? Откуда вообщс он об этом узнаст? Как обстоит ДСЛО с экран ными инструкuиями и IlOдсказками? ДостаТО'JНО ли их? Понятны ли они? Имсстся ли в прО!'раммс интсрактивная справка и можст ли пользоватсль в СЛУ'Jас затруднсний найти в нсй рсальную помощь? Насколько KOppCKT но прО!'рамма сообщаст пользоватслю о СЮ ошибках и объясняст, как их исправить? Нст ли в прО!'раммс элсмснтов, которыс MOI-YT раздражать пол ьзоватсля , сбивать СЮ с толку ИЛИ просто вы!лядстhh неуклюжс? Орrанизация npOrpaMMbI Насколько ЛСI'КО потсряться в вашсй прО!'раммс? Нет ли в нсй НСIIOНЯТ ных команд или таких, которыс ЛСI'КО спутать меж;tу собой? Какис ошиб ки 'Jащс ВССЮ дсласт пользоватсль, на 'ПО он тратит б();IЫUС ВССЮ врсмени и ПО'JСМУ? Пропущенные команды ЧСI'О в прО!'раIМС не хватаст? Нс застаВ;lilет ;Iи прО!'рамма вы!Iлнятьb нскоторыс дсйствия странным, нссстсствснным IЦИ крайнс нсэффсктив ным способом? НСЛhЗЯ ли привссти сс В соотвстствис С ПРИВЫ'J ным стилсм 
J'лава 4: Просраммные ошибки 97 работы пользоватсля? Допускаст ли она отя бы нскоторую стспснь Ha стройки? Производительность в интсрактивном прО!'раммном оБССПС'JСНИИ O'JCHb важна скорость, Плохо, ссли у пользоватсля создастся ВПС'Jатлснис, 'ПО прО!'рамма работа ст мсдлснно, ссли он чувствует задсржки в сс рсакuии (особснно ссли конкурирующис прО!'раммы работают ощутимо быстрсс), Выходные данные Больщинство прО!'рамм так или ина'JС формируют выходныс данныс: отображают информаuию на экранс, ПС'Jатают сс или сохраняют в файлах, ПОЛУ'Jастс ли вы то, 'ПО хотитс? Правильно ли формируются OТ'JCTЫ, Ha ['лядны ли ДИ3I-раммы и AOCTaTO'JHO ли отчстливо ОНИ вы!лядятT на БУМaI'С? Сохраняются ли данныс в форматс, доступном и для дру['их аНЗ)Ю['И'JНЫХ прО!'рамм? Обладаст ли про['рамма достаТО'JНОЙ ['ибкостью, 'побы можно было подстраивать сс ПОД нужды конкрстною пользоватсля? Обработка ошибок Проuсдуры обработки ошибок  это O'JCHb важная 'JaCTb прО!'раммы, Но, к сож3)[снию, В них ТОЖС O'JCHb 'JaCTO ВСТРС'Jаются ошибки, Кромс тою, правильно ОПРСДСЛИВ ошибку, прО!-рамма нс всс['да выдаст о нсй AOCTaTO'JHO информативнос сообщснис, Ошибки, связанные с обработкой rраничных условий Простсйшими l-раНИ'JНЫМИ условиями ЯВЛЯЮТСЯ 'JИСiЮВЫС (такис, как в ПрИМСрС ИЗ псрвой ['лавы), Но сущсствуст И мною дру['их ['рани'JНЫХ си туаuий, Любой аспскт работы прО!'раммы, к которому примснимы ПОНЯТИЯ большс или мсньшс, раньшс или позжс, псрвый или послсдний, KOpO'JC или длиннсс, обязатсльно ДОЛЖСН бьrrь провсрсн на rpаниuах диаlIазона, Внутри диапазонов прО!'рамма оБЫ'JНО работаст прскрасно, а вот на их ['раниuах ПОрОЙ СЛУ'Jаются самыс нсожиданныс отклонсния, Ошибки вычислений Про['раммированис дажс самых простых аРИфМСТИ'JССКИХ опсраuий всста 'JpCBaTO ошибками, НС'JСЮ и юворить О сложных формулах и pac'Jc тах, Одними из самых распространснных СРСДИ матсмаТИ'JССКИХ ошибок являются ошибки окру['лсния, Послс нсскольких ПРОМСЖУТО'JНЫХ ВЫ'JИСЛС ний можст оказаться, 'ПО 2 + 2  l, дажс ссли на ПРОМСЖУТО'JНЫХ этапах нс было ЛО['И'JССКИХ ошибок, 4 
98 Часть J: Основы к этой катеюрии относятся и ошибки, вызванные неправильным выбо ром а:J['оритма, Сюда можно отнести неправильные формулы, формулы, неПРИlснимые к обрабатываемым данным, неверные способы разбиения СЛОЖНЫХ выражений на более простые элементы, В СЛУ'Jае а:J!'ОрИТМИ'Jес кой ошибки КОд в ТО'JНОСТИ ВЫIlOлняет то, 'ПО имел в виду прО!'раммист,  он правильно закодировал неверную идею, Начальное и последующие состояния Бывает, 'ПО ПрИ выполнении какойлибо функuии прО!'раммы сбой ПРОИСХОДИТ только однажды  при самом первом обращении к этой фун кuии, На экране может появиться искаженное изображение или странная информаuия, Возможно, неверно выполнятся paC'JeTbI, запустятся беско He'JHbIe uикЛЫ или операuионная система выдаст сообщение о нехватке памяти, ПРИ'JИНОЙ такО!'о поведения прО!'раммы может быть отсутствие файла с иниuиализаuионной информаuией, После первою же запуска про I'рамма создаст такой файл, и дальше все будет в порядке, ПОЛУ'Jается, 'ПО такую ошибку невозможно повторить (TO'JHee, для ее повторения нужно установить новую копию прО!'раммы), Но не стоит думать, 'ПО ошибка, проявляющаяся только при первом запуске проrpаммы, безвредна: ведь это будет первое, с 'JeM столкнется каждый новый пользователь, И HOIДa, прО!'раммируя проuесс, связанный с последовательными пре образованиями информаuии, разрабоТ'JИКИ забывают о том, 'ПО пользова телю может !!онадобиться вернуться к исходным данным и изменить их, Насколько корректно новедет себя I!porpaMMa в такой ситуаuии? Позволит ли она внести нужные изменения И не будет ли изза этою I!отеряна вся ВЫI!олненная I!ользователем работа? Что увидит I!ользователь I!рИ возвра щении к исходному состоянию нрО!'раммы: свои данные Или стандартные зна'Jения, которыми I!porpaMMa иниuиализирует неременные I!рИ заI!уске? Ошибки управления потоком Если но лО!'ике нрО!'раммы вслед за нервым действием должно быть ВЫI!олнено второе, а она ВЫI!олняет третье, зна'JИТ, в управлении потоком ДОI!ущена ошибка, Такие ошибки ТРУДНО I!рОI!УСТИТЬ: в худшем СЛУ'Jае в работе прО!'раммы I!роизойдет сбой, а I!рИ менее серьезной ошибке она нросто "забредет не туда", Ошибки передачи или интерпретации данных Один модуль может нередавать данные друюму или даже ДРУI'ОЙ HpO I'раЛlме, Некоторые данные MOryт I!ередаваться между модулями множество раз, и на KaKOMTO этаI!е они МО!'УТ бьrrь разрушены или неверно интерI!ре 
Fлава 4: Ilросраммные ошибки 99 1 ;11'1)j!aHI,J, Изменения, внесенные одной I-IЗ 'Jастей прО!'раммы, МО!'УТ по 1',"I,СЯ или достичь не всех 'Jастей системы, ['де они важны, Ситуация rOHoK К:!аССИ'Jеская ситуация санок описывается так, Предположим, в систе \!l' ожидаются два события, А и Б, Первым может произойти любое из них, 11" l'C;IH первым произойдет событие А, выполнение проrраммы продол IIII\.'}{, а если первым наступит событие Б, то в работе проrpаммы произой 1"[ \.'6011, ПрО!'раммист I!Олю'ал, 'ПО первым все['да должно быть собьrrие А, 11 IIl' ожидал, 'ПО Б может выИ!'рать ['ОНКИ, l'еСl'ировать ситуаuии ['онок довольно слоЖно, Наиболее ТИ!!И'JНЫ они 11',/ ,'!!стем, [де параллельно выполняются взаимодеЙствующие проuессы и 1"",..11, а также для МНО!'Ol!Ользовательских систем реальнО!'о вреlени, 1 IIIII/()КИ в таких системах трудно воспроизвести, и на их выявление оБЬ!'JНО '1','fjYCTeH O'JeHb мною времени, Переrрузки IlpO!'paMMa может не справляться с I!Овышенными наrpузками, Напри \1<'1', Оllа может не выдерживать интенсивной и длительной эксплуатаuии 11 /1/ /!е справляться со слишком большими объемами данных, Кроме ТО['О, ,оон Ю[)'Т происходить изза нехватки памяти или отсутствия ДРУ['ИХ He ",)\о;tИмых ресурсов, У каждой прО!'раммы свои пределы, Вопрос в том, ,'Jt'/lIетствуют ли реальные возможности и требования ПрOl'раммы к pecyp ,,1\/ се спеuификаuии и как прО!'рамма себя поведет при пере['рузках, Аппаратное обеспечение IlpOl'paMMb! MOl'YT посылать устройствам неверные данные, И!'НОрИрО II," 1, ИХ сообщения об ошибках, пытаться использовать устройства, которые I,JJ/HThI или вообще отсутствуют, Даже если нужное устройство просто сло \1,1110, ПрOl'рамма должна понять это, а не сбоить при I!OIlhITKe к нему 1" )ратиться, Контроль версий ()ывает, 'ПО старые ошибки ВДРУ[' ВСIlлывают снова изза тою, 'ПО про 1 р:шма скомпонована с устаревшей версией одной из подпрО!'рамм, Поэто \/" версии всех составляющих проекта обязательно долЖны J/l'/lI'рализованно контролироваться, Кроме тою, следует убедиться, 'JTO l/palНHbHЫ все появляющиеся на экране сообщения об авторских правах, 
100 Часть J: Основы названии и номере версии проrраммною продукта, Обязательной провер ке подлежат десятки мелких деталей, ОБЬ!'JНО контроль версий прО!'раммы и ее исходною кода осуществля ется I'рУППОЙ контроля Ka'JeCTBa (Quality Assurance), Но, на наш ВЗПIЯД, это скорее зада'Jа rруппы тестирования, Документация Сама по себе документаuия не является прО!раммным обеспе'Jением, но все же это 'JaCTb прО!'раммнО!'о продукта, И если она плохо написана, пользователь может подумать, 'ПО и сама прО!'раМма не намною ЛУ'J\uе, Хотя подробное рассмотрение ошибок документаuии не входит в зада'JИ этой кнИ!'и, В ['лаве 1 О мы I!О['ОВОрИМ О ее тестировании, Ошибки тестирования Если прО!'раммист допускает по полторы ошибки на каждую строку прО!'раммною кода, то сколько их допускает тестировщик на каждый тест? Обнаружение ошибок, допущенных тестировщиками,  дело оБЬ!'Jное, KOHe'JHO, если таких ошибок будет слишком мною, вы быстро потеряете доверие остальных 'Jленов команды, Но нужно иметь в виду, 'ПО ино!'Да ошибки тестировщика отражают проблемы пользовательскою интерфейса: если ПРОlрамма заставляет пользователя делать ошибки, зна'IИТ, с ней 'IТO то не так, KOHe'JНO, мнО!'ие ошибки тестирования вызваны просто HeBep ными тестовыми данными, 
Fлава 5 Документирование и анализ ошибок Назначение этой rAaBbI Вероятность исправления ошибки зависит от Toro, как ее задокументи ровать, В этой rлаве вы научитесь составлять отчеты, позволяющие наи более эффективно взаимодействовать с руководителем проекта и проrраммистом, Примечание Приведенная в этой rлаве форма отчета наиболее функциональна на бу Mare, В тех компаниях, rAe принимаются рукописные отчеты, они затем вводятся в базу данных, и дапьнейший процесс их обработки и анализа автоматизирован, Отчеты об ошибках и проблемах не BcerAa составляются тестировщика ми' Иноrда такие отчеты поступают от сотрудников rруппы технической поддержки, rруппы документирования, а также продавцов, бетатести ровщиков и пользователей, Поэтому в данной rлаВе используется обоб щенное понятие составитель отчета. Обзор В этой и следующей rлавах описывается эффективная и проверенная Bpe менем система документирования и дальнейшеrо отслеживания проблем и ошибок, выявляемых rруппой тестирования проrраммноrо обеспечения, В данной rлаве подробно рассказывается о каждом поле составляемо ro в рамках этой системы отчета о проблеме, Следующая rлава посвя щена системе в целом и тому, как ее модифицировать в соответствии с требованиями конкретной компании. Поэтому, чтобы лучше понять назначение и дальнейшую судьбу каждоrо поля отчета, можно заrляды вать и в rлаву 6, Итак, сейчас вам предстоит: . познакомиться со структурой типичноrо отчета об ошибке; . освоить наиболее эффективный стиль составления отчета об ошибке; . научиться анализировать воспроизводимую ошибку; . познакомиться со стратеrией поиска способа воспроизведения ошибки, 
102 Часть J: Основы Если OТ'JCT об ошибкс HCAoCTaTO'JHO чсткий и I!ОНЯТНh!Й, прО!'рамIИСТ НС сможет СС исправить, ПОЭТО\IУ докумснтированию ошибок необходимо УДСЛЯТh самос ссрьсзнос вниманис: OPICT должсн составляться быстро, но при этом СЮ тон и содсржанис должны максимально способствовать рСШС нию ВЫЯJз.:IСННОЙ проблсмы, Целью составления отчета об ошибке является ее исправление. Если вы хотитс, 'побы найдснная ошибка была быстро и надсжно ис правлсна, прсжде вссю сдслайтс слсдующсс, . Обьясните, как воспроизвести ошибку или проблемную ситуацию. ПрОI'раIМИСТЫ ш'норируют OТ'JCTЫ об ошибках, которых нс МО!'УТ увидсть своими ['лазаш, . Тщательно проанцлизируйте ошибку, чтобы описать ее предельно кратко. Слишком пространное описанис проб;zсмы затруднSlСТ по ниманис СС сути, Кромс ТОЮ, встрстив Д;IИнный OТ'JCT, !IрО!'раIМИСТ подумаст, 'по pC'Jb идет о 'JCMTO сложном, И С большой всроятно стью отложит сю рассмотрснис, . Составьте полный, пОllятllЫй и 1tепротиворечивый отчет. Если OТ'JCT путаст прО!'раммиста или НСiюстаТО'JНО ОТ'JСТЛИВО и ЯСНО co ставлен, он сдва ли послужит хорошсй мотинаuисй для устрансния ошибки, Отчет следует составлять немедленно Обнаружив ошибку, слсдуст сразу жс составить о нсй отчст, Хотя В нсм довольно мною ['раф, нс стоит откладывать cro заполнснис, написав лишь короткис замстки, O'JCHb важно, 'побы во врсмя составлсния OPJCTa ВСС, о 'JCM вы пишстс, было У вас псрсд I"ilазами, особснно это касастся ОI!Ilсания проuсдуры ВОСПРОИЗВСДСНИЯ ошибки, Отчет ни в косм СЛУ'Jас нельзя COCTaB лять по памяти, ина'JС O'JCHb лс['ко ошибиться  прО!'раммист нс сможст повторить ситуаuию и отложит OT'JCT, Эта проблсма ДОВОЛЬНО ТИПИ'JIIа: тсстировщики жалуются, что прО!'раммисты !IОСТОЯННО ш'норируют их OT чсты, утвсрждая, что НС MOI)'T воспроизвссти ошибку, На caMO1 ЖС ДСЛС причина в нсаккуратности самих тсстировщиков, Столкнувшись с проблемой в работе пр02раммН020 обеспечения, сразу же составьте о ней полный отчет. 
Fлава 5: Документирование и aI/Ш/U3 ОlUибок 103 Структура отчета о проблеме Во всех компаниях, занимающихся разработкой и тестированием про 1 paMMllOl'O обеспечения, форма отчета о нроблеме одна и та же, Разумеет ('/, порядок и названия е['о полей мо['ут несколько отличаться, но IJРС:<СТ,lВjlенная в He1 информация неизменна, На рис, 5,1 показана фор \/а oPleTa, которую преJUlзтаем мы, а далее подробно описываются все ее II();IH, Проrрамма Если тестируемый про['раммный продукт состоит из нескольких про I р;шм и;rи же компания разрабатывает несколько прО!'раммных продуктов ()IIIOBpeMeHHo, следует обязательно указать, в какой именно прО!'рамме ()()наружена ошибка, Выпуск и версия в OТ'JeTe обязательно должно быть указано, к какой именно версии IJIЮl'раммною кода он относится, Например, идентификатор версии может iiЫlh таким: 1.01д, Он означает, 'ПО речь идет о пятой (д) черновой версии IIJ,I!lycKa прО!'раммы номер 1.01, Поскольку прО!'рамма все время находится в проuессе усовершенство "ания, прО!'раммист может не наЙти ошибку в ее текущей версии, В этом l"IY'Iae он посмотрит, с какоЙ версией работал тестировщик, и обратится к IIt:ii, 'побы всетаки воспроизвести ошибку и ['арантировать, что она ис Ilравлена, Кроме тою, наличие в отчетах номеров версий тестируемых прО!'рамм IJ()31юляет избежать путаниuы с уже исправленными и повторно выявлен IJI,I\IИ ошибками, Если про['раммисту попадет в руки отчет об ощибке, ,,()юрую он уже исправил, без номера версии прО!-раммы будет ТРУДНО "IJределить, в чем дело  ведь это может быть как старый отчет, так и новый, означающий, что ошибка исправлена плохо или не ПОЛНОСП,Ю, Тип отчета в ['рафе Тип отчета указывается тип обнаруженной проб;lемы, 1, Ошибка кодироваllИЯ, ПрО!'рамма ведет ce(jH не так, как должна по мнению тестировщика, Например, ес;/и !lpt1/'paMMa утверждает, что 2 + 2  3, ТО это явная ошибка кодирования, ПрО!'раммист же в OT вет на отчет о такой ошибке вполне может написать Соответствует проекту, 
104 Часть 1: Основы НАЗВАНИЕ КОМПАНИИ проrрАММА ТИП отчЕТА (1-6) 1 . Ошибка кодирования 2 - Ошибка пpoeкrирования 3 . Предпожение 4 . РаСХОJ/Щение с документацией 5 . Взаимодействие с аппаратурой 6 . Вопрос КОНФИДЕНЦИАЛЬНО ОТЧЕТ О ПРОБЛЕМЕ  ВЕРСИЯ ПРИЛОЖЕНИЯ (д/H) Если да, какие: ВЫПУСК СТЕПЕНЬ ВАЖНОСТИ (1.З) 1 . Фатальная 2 . Серьезная 3 - Незначитепьная ПРОБЛЕМА МОЖЕТЕ ЛИ ВЫ ВОСПРОИЗВЕСТИ ПРОБЛЕМНУЮ СИ1УАЦИЮ? (Д/Н)  ПОДРОБНОЕ ОПИСАНИЕ ПРОБЛЕМЫ И КАК ЕЕ ВОСПРОИЗВЕСТИ ПРЕдлдrАЕМОЕ ИСПРАВЛЕНИЕ (НЕОБЯЗАТЕЛЬНО) ОТЧЕТ ПРЕДСТАВЛЕН СОТРУДНИКОМ дATA..J.J СЛЕДУЮЩИЕ (РАФЫ ПРЕДНАЗНАЧЕНЫ ТОЛЬКО для РАЗРАБОТЧИКОВ ФУНКЦИОНАЛЬНАЯ ОБЛАСТЬ ОТВЕТСТВЕННЫЙ КОММЕНТАРИИ СОСТОЯНИЕ( 1.2). 1 . Открыто 2 . ЗакрЫТО ПРИОРИТЕТ (1.5) РЕЗОЛЮЦИЯ (1.9) 1 . Рассматривается 2 . Исправлено 3 . Не воспроизводится ИСПРАВЛЕННАЯ ВЕРСИЯ 4 . Отпожено 5 . Соответствует проекту 6 . Не может быть исправлено 7 . Отозвано СОСТдвитепем 8 . Нужна допопнительная информация 9 . Не соrпасен с Пpeдl10жением РАССМОТРЕНО ПРОКОНТРОЛИРОВдНО СЧИТАТЬ ОТЛОЖЕННЫМ (д/H) дATA..J..J  дATA..J..J  РИСУНОК 5.1 Форма документа "Отчет о проблеме" 
Fлава 5: Документировallие и анализ ошибок 105 2. Ошибка проектироваllИЯ. Проrра1a соответствует проектной ;LOку !ентации, но в определенно! вопросе тестировщик с этой ДOKy!eH тацией не соrласен. Так особенно часто случается с эле!ента1И пользовательскоro интерфейса. На отчете AaHHOro типа ПрОI'Ра!IИСТ не lOжет написать Соответствует проекту, и если он считает, что проект верен, тоща он пишет Не соrласеll с предложеllием. 3. Пред.тlOжеllие. Отчет TaKoro типа не означает, что в проrра!!е что то не так, В Нб! описывается идея, реализация которой, по !нению тестировщика, lOжет улучшить ПрОI'Ра!!у. 4. Расхождеllие с докумеllтацией. Проrраша ведет себя не так, как описано в руководстве или интерактивной справке. В это! случае в отчете следует указать, в KaKO! и!енно ДOKy!eHTe и на какой CTpa нице найдено несоответствие. При это! в отчете вовсе не утвержда ется, что ошибка и!енно в доку!ентации, а не в саюй ПрОI'Раше. Отчеты о расхождении с доку!ентацией обязательно должны COB!e стно расс!атриваться проrра!IИСТО! и aBTOpo! ДOKy!eHTa ции. О функциях проrра!!ы, которые вообще нище не описаны, также следует составлять отчеты AaHHOro типа. 5. Взаимодействие с аппаратурой. Пробле!ы этоro рода связаны с He удачньш взаююдействие! проrра!!ы и определенноro вида аппа paTHoro обеспечения. Если причина неудачи заключается в неисправности устройства, отчет о ней составлять не нужно, OДHa ко если ПрОI'Рам!а не южет работать ни с одной ILlатой или устрой CTBO! KOHKpeTHoro типа  это уже пробле!а, которую следует документировать. 6. Вопрос. Проrраша делает чтото, чеrо тестировщик не ожидает или не понимает. Отчетвопрос стоит составить при любых сомнениях. Если они окажутся основанньши на действительной ошибке, про rра!IИСТ ее исправит. Если же проrра!IИСТ откажется исправить ошибку или ero объяснение не покажется Ba! достаточно разуIНЬШ, lOжно будет составить отчет об ошибке проектирования. Степень важности в этой rрафе тестировщик указывает, насколько, по ero !нению, cepb езна выявленная пробле!а. К сожалению, для определения степени важности пробле!ы не суще ствует cTpororo критерия. Бейзер (Beizer, 1984, с. 20), напрю!ер, предлаrаст шкалу от 1 (lIезllачителыlяя ошибка, напрю!ер rрашатическая) до 10 (фа талыlя,' вызывающая сбои в друrих систе!ах, войны, убийства и т.д.). Однако при это! Бейзер не С'Jитает зна'Jительньши недостатки, которые вызывают у пользователя раздражение или заставляют ero терять время, 
106 Часть 1: Основы Такой взrляд на вещи свойствен IНОI-ЮI проrрашистаl. Но на деле Иlен но такие субъективные характеристики влияют на впечатление пользовате ля о проrраlе. А во сколько, [1OвашеIУ, обойдется раздражение пользователей, выраженное в появившихся в прессе обзорах? Можно CKa зать только одно  у каждой конкретной кошании юrут быть свои кри терии важности ошибок. В дальнейшей судьбе выявленных теСТИРОВЩИКО1 ошибок существует одна четкая тенденция: calbIe незначительные из них 'JaCTO не исправля ются. Но так быть не должно. Хотя rраlатические ошибки и не влияют на функционирование ПрOl-рашы, они подрывают доверие пользователя к проrраШНОIУ продукту. Учтите, что пользователь видит такие ошибки. Ha1 приходилось сталкиваться с продавцаlИ, которые критиковали xopo шие и надежные продукты, ДБЮНСТРИРУЯ их calbIe незна'JИтельные Heдo статки. ПОЭТОIУ, если в проrраIlе множество Iелких и незна'Jительных ошибок, Составьте о них единый oТ'JeT, привлекающий внимание разработ чиков к ИХ КОЛИ'Jеству, а в rрафе описания проБЛБlЫ СтепеllЬ ваЖIIОСТИ напишите СерьеЗllая. Приложения к oТ'JeTY о найденной ошибке можно приложить дисксту С тестовьши данньши или проrраIIУ, ЭIУЛИРУЮЩУЮ действия пользователя, при KOTO РЫХ проявляется данная ошибка. Можно приложить распечатки, копии экрана или собственные дополнительные пояснения. Проще юворя, все, 'ПО [1Oюжет проrраIIИСТУ разобраться в ситуации и понять вашу точку зрения, следует передать eIY BlecTe с отчеТО1 и пере'JИСЛИТЬ в rрафе ПриложеllИЯ, чтобы эти Iатериалы случайно не затерялись. Проблема в этой l-рафе суть проблеIЫ фОРlулируется O'JeHb коротко  в одной двух строчках. Но при ЭТОI описание должно быть и AOCTaTO'JHO lIНфОрlа ТИВНЫI, 'побы прочитавший eI-о сотрудник сюr сразу составить себе четкое представление о проБЛБlе. Иlенно по НбlУ ОН будет искать нуж ный отчет, если захочет возвратиться к HeIY повторно. Кроме тою, следует Иlеть ввиду, ЧТО В сводных перечнях ошибок, как I1равИЛО, будут присут ствовать всею несколько полей: Номер отчета, СтепеllЬ важности, ВОЗЮЖ но Тип отчета и Проблема. Если по ЭТОIУ короткому описанию проБЛБla 1I0кажется leHee серьез ной, че1 есть на саЮ1 деле, существует риск, что руководитель проиrно рирует OТ'JeT. Но и слишком сrущать KpacKII тоже нельзя, иначе вы прослывете паникеРОI, 
Fлава 5: Локу,иентирование и al/a,/lIl ошибок 107 Даже если две проблемы очень похожи, в отчетах их краткие описа1lUЯ 1Iи в коем случае не должны совпадать. в l-рафе Проблема не следует рассказывать, как воспроизвести ошибку. IlрИlеро! хорошеro описания южет быть такая строчка: "Сбой ПрОI-ра! ,\IЫ при Iюпытеe сохранения файла IIOД недопусти!ьш и!ене!". Можете ли вы воспроизвести проблемную ситуацию? OTBeтo! южет быть Да, Нет или Не всеrда. Если с повтореНИб! ситу аЦИII ВОЗНИК;IИ с;южности, ,:JУ'Jше отложить составление отчета до тех пор, Iюка дело не прояснится: либо вы убедитесь, 'ПО не знаете, как ее воспро извести (и напишете Нет), либо Iюй!ете, 'ПО она носит нереrулярный характер (и напишете Не BcerAa). В IlOслеДНб! случае описать способ BOC lIроизведенин ситуации нужно особенно тщательно, указав, при каких обстоятельствах ошибка ПРОЯВЛSlется, а при каких  нет. Следует поIНИТЬ, 'ITO, если написать в OPJeTe Да или Не всеrда, проrра!IИСТ южет IIOПрО сить продеюнстрировать описанную ситуаuию, и если вы не сюжете этоro C:le;JaTb, то зря потратите ero Врб!Я и потеряете доверие. С друrой CTOpO ны, отчет о IIробле!е, которую невозюжно воспроизвести, ПрОI-рамIИСТ с БО;IЬШОЙ вероятностью просто отложит, пока не появятся ДОllOлнительные OPJeTbI. Подробное описание проблемы и как ее воспроизвести Прежде Bcero следует подробно написать, в че! состоит пробле!а, и если это не очевидно, то IlOче!у вы считаете, что чтото не в порядке. Опишите все шаrи и СИЮIТО!Ы, все подробности, включая и сообщения об ошибке. В это! разделе отчета лучше предоставить ПрOl-рашисту избыточ ную инфор!ацию, че! написать слишко! !ало. Здесь снова нужно учесть ПСИХОЛОШЮ ПРOl-рашиста: он южет оставить ошибку неисправленной, IЮТОУ что не сюжет ее воспроизвести, или же отложить отчет, IЮТО!У что e!y не удалось повторить ошибку с первоro раза. Стоит поберечь ero вре!я и не заставлять повторно искать уже выяв ленную ва1И ошибку. Если слишком часто предоставлять отчеты, по KOTO рьщ ошибки ТРУДНО будет воспроизводить, ПрОI-ра!исты начнут их просто иrнорировать, Составляя данное описание, тестировщик часто обнаруживает, что не знает точно, при каких условиях проявляется ошибка. Лучше увидеть это сразу и Iютестировать проrраI!У еще He!HOrO, чб! давать проrра!шсту повод УСОIНИТЬСЯ в вашей аккуратности. 
108 Часть 1: Основы Если же воспроизвести ошибку не удается даже после !ноrих !Ioпытк,' но при это! вы абсолютно уверены, что видели ее, составьте о ней !акси мально подробный отчет. Хороший проrpа!IИСТ сюжет ее найти по ваше !y описанию, проанализировав проrрашный КОД. Опишите все сообщения об ошибках, расскажите, что пытались делать. Но никоrда не иrнорируй те проБЛБ!У только !IOТО!У, 'ПО она не ВОСПРОИЗВОДИТСЯ. Предлаrаемое исправление Эта rрафа отчета не является обязательной. Если решение проБЛБ!Ы очевидно или, наоборот, у вас нет конкретною предложения, оставьте ее пустой. Но не стоит пренебреrать ею, если вы знаете, как исправить найденный недостаток проrра!!ы. Особенно это касается пользовательскою интер фей са: проrрашист южет не исправить ею просто пото!у, что не бюжет быстро приду!ать, как это сделать. В то же Врб!Я неудачный текст на экране или неудобное расположение эле!ентов фор!ы будут исправлены очень быстро, если предложить ПрОI-ра!IИСТу ютовый вариант решения. Отчет представлен сотрудником Обязательно укажите здесь свою фаIИЛИЮ. Если у ПРОI-рашиста воз никнут вопросы, ОН должен знать, к KO!y обратиться. А анони!ные отче ты часто вообще иrнорируются. Дата в этой l-рафе следует указать дату обнаружения проБЛБ!Ы. Это не дата написания отчета и не дата Ввода ею в кошьютер. Поскольку ПрОI-ра!IИ сты не Bcerдa !еняют HO!ep версии ПрОI-рашы после внесения в нее оче редных из!енений (иноrда просто забывая это сделать), указанная в отчете дата !1Oюжет идентифиuировать версию Проl-раМ,\IЫ, к которой ОН относится. Прuмечание. Следующие срафы отчета предназначены только для команды разработчиков. Внештатные составители отчетов, такие как бетатестировщики и просто пользователи, Не должны их заПОЛнять. Cl>ункциональная область в этой rрафе указывается, к какой катеюрии относится выявленная проБЛБ!а. Их полный перечень должен быть единьш, 'Iтобы во всех отче тах названия функuиональных областей бьти одинаковыlИ. Kpo!e тою, их не ДОЛЖНО быть слишко! !ною, И ОНИ ДОЛЖНЫ быть o'leHb четко опреде лены. Десяток функuиональных областей часто является О!IТИ!3J!ЬНЫ! количество!, 
['лава 5: Документирование и анализ ошибок 109 Поручено в этой rрафе должно быть указано, кто из СОТРУДНИКОВ отвечает за рёшение описанной пробле!ы. Как flравило, это решает руководитель IlpoeKTa, который передаст отчет KOHKpeTHO!y ПРОI-ра!IИСТУ. Тестировщик 11:111 даже руководитель I-РУШIЫ тестирования не должен решать, кто KOH кретно должен внести исправления. Комментарии Если отслеживание ошибок и их исправления не авто!атизировано, а ведется на бу!аrе, эта l-рафа используется ПрOl'рашисто!. Он южет KO ротко записать, IIOЧб!У отчет отложен или как решена пробле!а. В !ноrОIlOльзовательских СИСТб!ах отслеживания ошибок данное поле IIспользуется сораздо более эффективно. Прежде Bcero, оно южет быть любой длины, и каждый, кто ю!еет доступ к отчету, южет внести соб ственный кошентарий. Для исправления сложных ошибок или решения CllOpHbIX проБЛБ! иноrда южет потребоваться целая дискуссия с несколь ки1И участникаlИ. Свое !нение южет высказать проrра!IИСТ, один или несколько тестировщиков, члены I-РУШIЫ технической поддержки, авторы доку!ентации, !(:неджер по !аркеТИНI)', руководитель проекта и др. Это быстрый и очень эффективный способ об!ена ИНфОРlaцией и !нениюlИ. I'Oраздо более эффективный, че! электронная почта. Некоторые опытные сотрудники rрупп тестирования считают это поле базы данных одни! из ca!ыx важных, Состояние в поле Состояние только что написанноro отчста записывается OTKpЫ то. После исправления ошибки или принятия решения, не требующеro дальнейшей работы с отчето!, значение этоro ПОЛЯ из!еняется на Закрыто. В некоторых кошаниях используются три варианта состояния вопро са: Открыто, Закрыто и РешеllО. ПрОI-ра!IИСТЫ ищут в базе данных отчеты по состоянию Открыто, а тестировщики по состоянию РешеllО. В нашей СИСТб!е ПрОI-ра!мисты ищут отчеты по резолюции Рассматривается. а Te стировщики  ПО СОСТОЯНИЮ Открыто с любьши резолюuияlИ, KpO!e Рассматривается. Обе эти систе!ы ЛOl'ически эквивалентны, но у каждой из них есть убежденные сторонники. Приоритет Приоритет вопроса определяется руководитеЛб! проекта, обычно по 5 или lОбалльной шкале. Ошибки исправляются в порядке их приоритета. Определения приоритетов в разных кошаниях различны. Вот хороший при!ер. 
11 О Часть 1: Основы (1) Исправить не!еД;lенно  ошибка задерживает работу друrих СОТРУДНИКОВ, (2) Исправить как можно быстрее, (3) Исправить в текущей версии (альфа, бета и т,д,), (4) Исправить до выхода окончательной версии. (5) Исправить, если возюжно, (6) Не обязательно  сделайте, как посчитаете нужны!, На практике ОДНИ руководители проекта юrут пользоваться 3балльной шкалой приоритетов, а друrие  15балльной, Мы peKO!eHдye! каждо!у руководителю проекта саю!у выбрать способ оценки приоритетности работ, l-рафу I1риоритет имеет право заполнять только руководитель проекта, а rpафу СтепеllЬ важности  только составитель отчета или руководитель rруппы тестирования, Руководитель проекта и составитель отчета юl)'т кореllНЬШ образо! расходиться во !нениях о важности описанной в He! пробле!ы, но ни один из них не должен исправлять оценку Apyroro, Слу чается, что тестировщик оценивает ошибку как фатальную, а руководитель проекта назначает ей сравнительно низкий приоритет. И поскольку у каж AOro из этих сотрудников в отчете и!еется собственная rрафа, они оба юrут зафиксировать в ДOKy!eHTe свои !нения. Резолюция и Исправленная версия В rрафе Резолюция определяется текущее состоянИе вопроса или при нятое [10 He!y решение, Если в ответ на данный отчет в проrрашу были внесены из!енения, в rрафе Исправлеllllая версия проrра!IИСТ указывает HO!ep исправленной версии проrрашы. Вот каки1И юrут быть варианты резолюции. . Рассматривается. Это начальное состояние каждоro отчета. Отчеты с резолюцией Рассматривается руководитель проекта должен про сютреть, назначить и! приоритеты и решить, кто должен внести ис правления. Если в отчете появляется новая инфор!ация, ero полю Резолюция снова присваивается значение Рассматривается. Напри !ep, если тестировщик обнаруживает, что ошибка, которую ПрОI-ра! IИСТ посчитал исправленной, все еще проявляется, он из!еняет резолюцию соответствующею отчета с ИсправлеllО на Рассматрива ется. . ИсправлеllО. Эту [1O!eTKY ВНОСИт ПрOl'ра!IИСТ после TOI'O, как ис правит описанную в отчете ошибку. OДHOBpe!eHHO он указывает HO!ep исправленной версии Проl-рам!ы в l-рафе Исправленная версия. 
Fлава 5: Документирование и а//ализ ошибок 111 . Не воспроизводится. Такую IIO!ет,КУ проrра!IИСТ ставит, коща не lOжет воспроизвести описанную в отчете ситуацию. Если отчет возвращен с пометкой Не воспроизводится, тестировщику следует еще раз тщательно проверить HO!ep версии ПрОI'рашы и убедить ся, что способ воспроизведения ошибки описан в отчете правильно и достаточно подробно, Скорректировав отчет, снова поменяйте еro резолюцию на Рассматривается и при необходиIOСТИ допишите в поле Коммеllтарии дополнительные пояснения, . ОтложеllО. Руководитель проекта признает существование пробле !ы, но реШИ;I не исправлять ее в данном выпуске проrрам!ы, Ta кое решение может быть принято для любой ошибки, допущеllНОЙ при проектировании или кодировании. . Соответствует проекту, Описанное в отчете поведение проrраМIЫ Ht: является ошибкой  и!енно так она и должна работать в COOl  ветствии со спецификацией, . ОтозваllО составителем. Если СОТРУДНИК, составивший oPIeT, обна руживает, что ошибся, он южет отозвать свой отчет, Никто, KpO!e нею, не и!еет этоro права, . Нужна дополlIителыlяя Иllформация, У ПрОI'ра!миста есть вопросы к составителю данноrо отчета. . Не соrласеll с преД.'lожеllием. Никаких из!енений в проrрам!у BHe сено не будет. . Дубликат, Во !НOl'ИХ rруппах эта резолюция оп!е'Jает отчеты о различных проявлениях одной и той же ошибки, после чеrо связан ные отчеты закрываются, Однако существует риск закрыть отчеты об очень похожих ошибках, причины которых различны, Проrpашист южет исправить одну из них и не понять, что вторая осталась, ПОДПИСИ В некоторых кошаниях отслеживание ошибок не аВТОlaтизировано, и сотрудники IlOдписывают бу!ажные отчеты, Однако подписан южет быть и электронный отчет, В каждой кошании на этот счет свои правила, На наш взrляд, в rрафе PaCCMOTpellO должна стоять подпись сотрудника, pe шившеro пробле!у (или исправившеI'О ошибку), или же IIOДНИСЬ ею PYKO водителя, Во !ноrих КОl!Iаниях здесь же подписывается руководитель, одобривший решение, В I'рафе ПрОКОlIтролироваllО ставит свою подпись тестировщик, проверивший, что ошибка и в саю! деле исправлена, и подтверждающий, что отчет южно закрыть. 
112 Часть J: OClloebl Считать отложенным Исправление ошибки или решение пробле!bI южет бbIТЬ по решению руководителя отложено до следующею ВbIпуска проrра!!bI, Так южно поступить с любой ошибкой, которую по определеННbI! причина! уже нет вре!ени или возюжности исправить, Если отслеживание ошибок орrанизовано правильно, обо всех пробле !ax с резолюцией Отложено обязательно печатается СВОДНbIЙ отчет, KOTO рbIЙ может бbIТЬ направлен руководству более BbIcoKoro уровня и использован при работе над следующи! выlIско!! ПрОI'РаШbI, Некоторые пpozpaммucmbl намеренно прячут под спорными или неверными резолюциями леzко воспроизводимые и исправимые ошибки, чтобы скрыть от руководства халтурную работу или то, что они не укладываются в сроки. Как же бbIТЬ, KOrдa вы не соrлаСНbI с резолюцией руководителя проек та или проrраМlИста, не соrлаСНbI с определенньш для пробле!bI приори TeTO! или столкнулись с ЯВНbI! саботаже!? . В некоторых rpYIIIIax тестирования разрешается !енять резолюцию, Но лучше этоro не допускать, иначе не избежать ШУlНbIХ споров, . Некоторые rpYIIIIbI тестирования возвращают руководителю проек та отчеТbI с резолюцией Соответствует проекту, на которых, по их !нению, должна стоять резолюция Отложено, Но, на наш взrляд, не стоит этоro делать без серьезной поддержки руководства, . Во !ноrих rpYIIIIax тестирования даННbIЙ вопрос вообще иrнориру ется, а в результате ряд пробле! так и остается нерешенньш, Для решения пробле!bI !ы IIO!естили в отчет rрафу Считать отложен IlhIM, Расхождение во !нениях !ежду руководителяш проекта и тестиров щикаlИ, на наш взrляд, явление совершенно нор!альное, Систе!а отслеживания ошибок ДОJIжна бbIТЬ построена так, чтобbI отражать все эти расхождения, И и!енно для этой цели в отчете о проблс!е присутствуют поля Приоритет, Комментарии и Считать отложенным, Если тестировщик не соrласен с резолюцией Соответствует проекту, e!y следует оставить эту резолюцию как есть, а в I'рафс Считать отложен IlhIM написать Да, Таким образо!, в отчете будет при<':утствовать и мнение тестировщика, и lНение руководителя проекта, блаrодаря че!у он не бу дет окончательно заКРbIТ, Такие отчеТbI южно псрсдаТh для рассютрения ВbIсше!у руководству или вернуться к ни! позднсс, 
{лава 5: Докумеllтироваllие и аllализ ОUlибоК 113 . .. .. Каким должен быть' отчет о проблеме Хороший отчет должен представлять собой реальный ДOKy!eHT, и!ею щий HO!ep, Он должен быть простым, IIOНЯТНЫ!, разборчиво написанньш и беспристрастньш, И ес;IИ только это вообще возюжно, по He!y должно быть леrко воспроизвести описанную ситуацию, Реальный документ Некоторые руководители проекта поощряют устные описания ошибок, передачу записок по электронной почте или друrие нефор!альные CIIOCO бы об!ена ИНфОРlaцией, Но это совершенно неправильно, Если только проrра!IИСТ не исправит ошибку сразу же, как только вы о ней расскаже те, она должна быть описана, Иначе о некоторых подробностях, а то и о саюй ошибке очень леrко забыть, Но даже если проrра!IИСТ исправит ошибку сразу, исправления позднее нужно будет протестировать, а для этоro Ba! понадобится отчет, Следует иметь в виду, что вы и проrрашист  не единственные, кто должен знать о выявленных при тестировании пробле!ах, После вас с проrрашой южет работать друrой тестировщик, который захочет просют реть ваши отчеты, В будуще! проrра!IИСТ, сопровождающий проrрашу, южет захотеть узнать, не является ли заинтересовавший ero странный фраr!ент кода исправление! какойлибо ошибки, А если найденная ошиб ка не исправлена, запись о ней обязательно нужно сохранить Д;IЯ дальней шеrо раСОlOтрения PYKOBOДCTBO!, а также для rpYIIII !аркетинrа и технической 1 IOдде ржки , Описания ошибок южно не заlIисывать только в OДHO! случае: Bpe!eH ной работе в Ko!aHдe проrра!IИСТОВ задолro до начала официальноrо Te стирования, Большинства обнаруженных на это! этапе пробле! к ю!енту начала фОр!3JlЬНОro тестирования проrра!IНОro продукта уже давно не будет, и, как правило, записи о них не вносятся в базу данных, Более TOro, проrра!IИСТЫ ЮI)'Т попросить вас не доку!ентировать найденные ошиб ки, и, соrласовав этот вопрос с PYKOBOДCTBO!, лучше Bcero соrласиться, Это не означает, что составлять отчеты о найденных ошибках вообще не сле дует, Просто не вносите их в общую базу данных, а после исправления ошибок выбрасывайте, KorAa первая версия проrра!мноro продукта будет передана для фОр!3JlЬНОro тестирования, оставшисся oPIeTbI южно будет внести в базу данных, Нумерация Отчет о пробле!е, как и всякий настоящий ДOKy!eHT, должен и!еть УНИК3JlЬНЫЙ HO!ep, В КОlIIьютеризованной базе данных этот HO!ep должен быть ключевым полем таблицы отчетов, т,е, однозначньш идентификаторо! 
114 Часть J: Ос//овы oT'ICTa в систсмс, В этом случас HO,\lcpa должны присваиваться аВТОlаПl '{сски, Простота в каждо! отчстс ДО;Jжна быть опJlсана только одна проБЛС!а, Дажс ссли IIЯТЬ пробле! кажутся очснь тссно С!1язанньши, всс равно слсдуст составить о них пять разных отчстов, Подобным образо! и пять прсдложсний ПО I\ОВОДУ усовсршеНСТlювания одной ч;JСТИ пршраммы следуст описать в пяти отдсльных отчетах, Если отчсты связаны, включитс в них псрскрсстныс ссылки, но никоrда нс объсдиняйте их в один докумснт, Если в OДHO! отчстс описать нссколько связанных ошибок, то lOжно 1I0ЧТИ НС со!нсваться, что проrра!IИСТ не исправит их всс, Он помстит отчст как ИсправлеllО, и вам придстся составлять новый отчст о тсх ошиб ках, о которых он забыл или KOTOpbtC просто пропустил, Болсс Toro, OCTaB шисся ошибки часто вообщс остю'rся нсза!счснны1И и так никоrда и нс испраюяются, И!сйтс такжс в виду, что ошибки, которыс кажутся связан НЫIИ, на AC;IC юrут имсть совсршенно разныс причины, и в этом случас сдиный отчст о них Te! болсс HCy\ICCTCH, СостаВ':IЯЯ отчсты об ошибках, стоит учссть и психолоrию читающеrо их проrра!lИста, Отчст о нсскольких связанных ошибках производит впсчат лснис большоrо и СЛОЖ!Iоrо заданиЯ, и вполнс всроятно, что проrрамшст отложит cro, занявшись сначала тс1И отчстами, которыс выrлядят прощс, Понятность Чсм IIOНЯТНСС отчст, TCI болыUС всроятность, что описанная в HC! ошибка будст исправлсна, Суть проблс!ы должна быть описана очснь просто и чстко, а путь воспроизвсдсния ситуации  !акси!ально KOpOT ко, бсз лишних подробностсй, Чтобы составить такос описанис, придстся как слсдуст проанализировать проб:!С!у, Это!у анализу посвящсн отдсль ный раздсл данной rлавы, Воспроизводимость Слсдуст сщс раз подчсркнуть, 'jl0 воспроизводиюсть описанной в OT чстс ошибки исключитсльно важна JJIЯ СС исправлсния, Неопытныс COCTa витсли отчстов, такис как I\оЛhЗОI;атсли проrра!! и сотрудники rpYIIII тсхничсской поддсржки, часто прс;lOставляют отчсты, по которьш нсвоз южно воспроизвссти описанныс в них ошибки, И, зная это, проrра!IИ сты часто откладывают их отчсты на I\OTO!, Болсс TOro, !НОI'ие руководитс,1И просктов наста1fвают на том, чтобы проrра!IИСТЫ вообщс нс тратили I;РС!Я на отчеты о невоспроизводи!ых ошибках, Поэтому, ссли вы знасте, как воспроизвссти ситуацию, опиши 
{лава 5: Документирование и анализ ошибо к 115 те этот процесс очень аккуратно, шаr за ШaI'ОI, чтобы проrраIIИСТ оюr сразу ero повторить, А если нет, пряю напишите об ЭТОI в отчете, Разборчивость Рукописный отчет должен быть разборчивьш, ПОДУlaйте о TOI COТPYk нике, который будет ero читать, а также о пользе для собственной работы  с неразборчивьш отчеТО1 никто не захочет Иlеть дело, Конечно, чтобы облеl'ЧИТЬ работу с отчетами и сделать их максималь но разборчивыми, лучше всею пользоваться аВТОlатизированной системой отслеживания ошибок (см, I'лаву 6), Но даже если отчет вводится в компь ютер, это все равно нужно сделать аккуратно, не пьrrаясь вместить на одну страниuу максимум информаuии. Беспристрастность Как известно, ;IЮДИ не любят, КOl'да критикуют их работу. Никому не нравится постоянно слышать, что он сделал чтото не так. А тестировщи ку приходится юворить такие вещи сотрудникам постоянно, Поэтому сле дует проявлять особую деликапlOСТЬ и осторожность в выражениях. Ни в коем СЛУ'lае нельзя допускать оценок работы ПрOl'раммиста. Даже если вы и в самом деле думаете, что он неаккуратен, I'ЛУП или плохой профессио H3JI, в отчетах не должно быть и намека на качество ею работы, Иначе вы наживете массу неприятностей, и в конеЧНО1 счете это не пойдет на пользу :tелу. Если ПрOl'раммист почувствует в ваших отчетах предвзятость, он может IlOжа:lOваться наЧ3JlЬСТВУ, А такие Ж3JlOбы MOI'YT иметь самые серьезные II0следствия, отразиться на вашей карьере или даже стоить вам работы. Прежде всею, для решения вопроса наЧ3JlЬСТВО может установить цeH JYPY, В результате не все отчеты будут доходить до ПрOl'раммиста, и OTce 11ваться MOI'YT не только те из них, которые действительно написаны в слишком резком тоне, но и те, политические последствия которых пока жутся uензору нежелательными, При такой uензуре некоторые тестировщи ки и сами перестают составлять отчеты, которые, по их мнени ю, ее не IIрОЙДУТ, Кончится тем, что MHOl-ие вполне решаемые проблемы так и oc lанутся нерешенными  пострадает качество разрабатываемOl-О ПрOl11амм 1101'0 продукта, Следует тысячу раз подумать, прежде чем объявлять войну ПрOl'рамми <.:raM, выражая в отчетах личностные оuенки, Слишком мало шансов ее lIыю-рать, а потери будут большими, Если вы и сохраните работу, свободу II<1писания отчетов наверняка потеряете, а отношения с разработчиками c'l анут очень напряженными, И даже если ваши суждения абсолютно Bep IIЫ, результаты работы от bceI-о этою отнюдь не улучшатся, 
116 Часть 1: Основы Все это не означает, что высказывать свои суждения о работе ПрОI11ам мистов тестировщику нельзя никосоа, Бывают случаи, KOI-Aa ПРИХОДИТСЯ писать резкие критические отчеты, чтобы привлечь внимание руководства к серьезным проблемам, которые никакими иными средствами решить не удается, Но это средство следует использовать в самую последнюю очередь, очень серьезно взвесив и ситуаuию, и все возможные 1 IOследствия, Не стоит идти на подобные конфликты чаще, чем дважды в I'ОД, А заметив, что они учащаются, лучше поискать друryю работу, Анализ воспроизводимой ошибки Оставшаяся часть Пlавы посвящена только ошибкам кодирования, при чем преДПОЛа!'ается, что каждую ошибку можно воспроизвести, О том, как найти способ воспроизведения ошибки, коротко рассказывается в отдель ном разделе. Если проблему можно воспроизвести, это означает следующее, . Тестировщик может описать, как перевести прOl11амму в определен ное состояние, По el'o описанию перевести ПрOl'рамму в указанное состояние может любой достаточно хорошо знакомый с ней человек, . Тестировщик может описать конкретные действия, которые в YKa занном состоянии ПрОl'раммы приводят к проявлению проблемы, Не следует торопиться с составлением отчета о только что найденной ошибке, Часто стоит потратить время на дополнительный анализ, который llOMol'aeT не только составить более эффективный отчет, но и выявить ряд связанных проблем, Такой анализ особенно важен, если обнаруженная пробле1a сложна, например, если для ее воспроизведения требуется пройти очень IНОЮ этапов или если последствия определеННtAХ действий пользо вателя ТРУДНО описать, j'лавные uели анализа таковы: . Выявить все наиболее серьезные последствия проблемы, . Найти простейший и кратчайший путь ее воспроизведения, . Найти альтернативные действия, приводящие к такому же результату, . Выявить связанные проблемы, Наиболее серьезные последствия проблемы Чтобы привлечь к проблеме внимание, нужно представить ее достаточ но серьезной, Незначительный недостаток ПрOl'раммы с большой вероятно стью останется неисправленнь\Ч, ПреДlIOЛОЖИI, например, что в УI'ЛУ экрана появляется случайный текст, Эту маленькую ошибку леl'КО описать и воспроизвести, и, скорее всею, она будет исправлена, Но что, если эта ошибка обнаружится перед 
[лава 5: ДОКУ,1tеНlllирование и ана:lИЗ ОlUибок 117 с'амым завершением разработки? ИНOI'да, искажение информаuии на экра Jlе возникает вследствие совершенно изолированной ошибки и больше ни Jlа что не влияет . в такой ситуаuии решение оставить ею как есть может l>bITb ВllOлне разумным, Однако часто подобные вещи являются симптома \1И {'ораздо более серhезных проблем, Если IlрОДОЛЖИТЬ работу с IlpOl'paM \!ОЙ, очень скоро в ней lOжет произойти сбой, Это и есть то IIOС_1едствие, которое вы ищите. И, исправив настоящую ошибку, ПрOl'раммист исправит заодно и искажение на экране, Сбой проrраммы  это: . ее переход внепредусмотренное IlрОl'раммистом состояние или . переда'lа управления блоку обработки ошибки, Если речь идет о непредусмотренном состоянии, дальнейшие ошибки почти неlИнуемы, ведь у ПрОl'раммы в этом случае совершено неправиль ное представление о том, что ПРОИСХО;lИЛО ранее, Что касается IIOДПРо\- рам м обработки ошибок, то здесь ситуаuия не HaMHOl'O лучше: эти IIOДПРОl11аммы обычно являются самым слабым местом ПРOl-раммнО\-о про :\укта, наименее ПрОДУlаННЫ1 и отлажеННЫI, Часто случается, что блок обработки ошибки сам содержит ошибку юраздо более серьезную, чем та, изза которой ему передано управление, Итак, еС;IИ I1рО\'рамма сообщает об ошибке, искажает ИНфОРlаuию на экране или делает чтолибо, чею ПрОl'раммист не преДIlOлаl'3JI, С;lедует ждать Д3Jlьнейших ошибок, Простейший и кратчайший путь воспроизведения ситуации Бывает, что повторить обнаруженную ошибку не TaKTO просто, Она может проявляться исключительно в полночь, причем только в високосном юду, или может возникать в 01 вет на сложную IlOследовательность HeCTaH дартных или редко ВЫIlOлняемых действий пользователя. Но в любом слу чае, описывая путь ее воспроизведения, имейте в виду следующие обстоятельства, . Если ошибка понятна и се леI-КО исправить, это будет сделано, . Если для исправление ошибки требуется мною времени и усилий или ПрOl'раммисту кажется, что это так, он возьмется за работу с большой неохотой, . Если проблема проявляется при calbIx типичных действиях пользо вате;IЯ ПрОI11аммы, руководство будет заинтересовано в ее исправле нии, . Если кажется, что недостатка практически никто не заметит, в оче реди на исправление он будет последним, 
118 Часть 1: Основы Описание более I1рОСТОЮ Сlюсоба ВОСIlроизведения ошибки не TO;lbKO увеличивает вероятность се ИС/Jравления, но и оБJlеl'чает работу I1pOl'paM миста, Уменьшая количество ш3l'ОВ, вы сужаете область поиска источника ошибки, БЛ3l'одаря ЭТОIУ ошибку в I1pOI'paMMe леI'че найти, а результат IIроще I1ротестировать, Альтернативный способ демонстрации ошибки Бывает, что найти БО;Iее I1РОСТОЙ Сllособ ВОСIlРОIJЗве;rения I1роблемной ситуаuии так и не удаетсн, Ilосле;!Овательность шаюв остается такоЙ длин ной, что может l!Оказаться редко НЫllOлняеюй на I1рактике. В реЗУ;lьтате, оцснивая важносrь I1роблемы, руководитель I1роекта ИJШ I1рОI'раммист может llOдумать, что ма:ю кто из 1I0льзоватслей с ней вообще КOI'л.аilИбо столкнстся, Чтобы И3lенить это нне'lатление, можно llOискать ДРУПlе действия, которые "рино;rят к I1роянлению этой же Ilроблсмы. Дна разных способа вызнать ошибку .,' это уже !'ораздо более серьезный СИПlа:! треВОПI. Их существование наво;rит на 1ЫС.:JЬ, что ошибка может И,\lеть 1'.10бальный характер: I'де есть дна СIlособа, там может найтись и третий, 11 'Iетнертый, Кроме тою, между днумя рюньши СI!Особа\IИ ВОСIlроизведенИЯ ошиб ки \южет быть нечто общее, Дажс если тсстировщику снязь ,\lежду ними не видна, I1рОIраммист можст ныяснить, что В обоих случаях НЫI!О;JlIнется одна и та же I!оДllрOl'ра,\lма, а зна'\Ит, ЮIСННО в ней и содержится ошибка, Итак, ОIlисан в отчете HeCKOJlbKO различных СIlособов ВОСIlроизведения ошибки, вы не только I1РИН;lечсте к ней ВНИlаlIие, но и I1редоставите I1роrраммисту ДОIlолнительную инфОР13цию, I10лезную ,]jIЯ се ИСIlравлсния, Связанные проблемы Подумайтс, нет ли еще в I1pOI'paIMe ана:!ОI'ИЧНО!'О фр3l'\lента, в KOTO ром МOI'ла бы нроявиться такая же I1робilема, Возможно, I10льзователь I1pOl'paMMbI в нескольких ее режимах ВЫIlолняет сходные действия, Про верьте, как I10ведет себя I1pOl'pa\IMa во всех этих реЖИ\lах, Встретив ошиб ку, I1родолжайте работу, чтобы I10смотреть, какие еще I!роблемы MorYT возникнуть вслед за ней, Ошибка  это всеI'да ноная возможность для теСТИРОВЩl1ка, После нее I1ро!'рамма I1ереходит в состояние, которое иным СIlособом может быть недостижию, Чаще всею НЫIlолняется ко;! обработки ошибок, который трудно I1ротестировать иначе, как встретив реа:lыiюю ошибку, И I10СКОЛЬ ку КOI'л.анибудь этот код может быть ВЬ\IJолнен и IIРИ реальной ЭКСIlлуа таuии I1pOI'paMMbl, перед вами раскрывается I1рскрасная возможность ею I1роверить, Поиск связанных I1роблем требует ОIlределснною навыка, Здесь важно I1равильно ОIlределить, КOI'да следует остановиться, а КOI'да стоит I10тратить 
[лава 5: Документирование и анализ ОlUибок 119 l'ще нем ною времени: опытному тсстировщику ИНТУИЦI1Я может IIодска ;ать, что остались еще скрытые и весьма серьезные проблемы, Методика анализа воспроизводимой ошибки Итак, цели ана:lИза найденной ошибки пере'IИСЛСНЫ, Далее приводит ся ряд советов по их достижению, Выделение критическоrо момента Обнаружив ошибку, теСТИРОIJЩИК видит только симптом, но не знает ею IJРИ'IИНЫ, Нестандартное поведение ПрОI'раммы lJызвано ошибкой в ее исходном коде, которою у нею нет, И ошибка эта может произойти BOB се не в той TO'JKC, В которой IJрояви;rся ее результат, а юраздо раньше, Если IJЫЯВИТЬ момент, н который она произошла на самом деле, это IIOюжет IIрОJ'рамIИСТУ локализовать и испраlJИТЬ найденную ошибку, Выполняя каждый ШaJ' воспроизнедения ошибки, вниматеЛhНО наблю :taйте за IlOведением ПрОJ'раМIЫ, стараясь заметить любое отклонение, малейший намек на то, 'ПО 'пото идет не так, Такие нсзна'lИтельные OT КJlонения леr'Ко ПрОIlУСТI!ТЬ или ПрОИl'норировать, а Iежду тем, они MOJ)'T быть первыми симптомами ана:lизируемоii ва1И ошибки, Вот какими MO J)'T быть эти симптомы, . СообщеllUЯ об ошибках. Выясните TO'JHO, н какой момент IlOявляет ся сообщение об ошибке, rlOпытайтесь понять почему и сверьте eJ'o с пере'JНС1 сообщений об ошибках, пере'lИсленных в документаuии к ПрОJрамме, . Задержки в обработке да1l1lЫХ. Если ПрОJраМlе для отображения на экране О'Jередной информации или ВЫIlOлнения некоторых опера uий требуется неоБы'ноo мною времени, это может озна'Jать, что она 'ПОТО делает не так, Она может ВЫIIOЛНЯТЬ не относящиеся к делу IIOДПрOl'раммы, неправильно обрабатывать данные и Т,П, Поэтому всеl'да обращайте внимание на подозрительно дою'ие задержки и тщательно проверяЙте результирующие данные, . Muzullue и об1l0вле1lие :JKpalla. Если экран ВДРУI' неожиданно IИl'НУЛ, это может озна'Jать, 'ПО он был обновлсн IIOДIJрOl'раммой обработ ки ошибок, Это может быть первое, '!то она сдсласт, чтобы I'apaH тировать корректную ИНфОРlацию на :JКpaHe, а остальные ее действия MOJ)'T проявиться позднес ИjlИ не проявиться вовсе, . Перемещеllие курсора. Курсор 1Ожст ВДРУI' перемсститься в друте место, Как и в предыдущем случас, это может быть сделано проuе 
120 Часть 1: Ос//овы дурой обработки ошибок, а может быть и рсзультатом сбоя в рабо тс самоЙ ПрOl'раммЬ!, которая потеряла контроль над ситуаuисй, . Несколько курсоров. Если на экране появилось сразу два курсора, это можст озна'Jать, 'ПО ПрOl'раМlа находится в промсжуточном состоянии или 'ПО СС нормальная работа нарушсна, . Сдвинутый текст. Строки тскста на экранс или на БУlaJ'е C;ICI'Ka сдвинуты, Можст быть, смсстилась ТОЛhКО одна строка, а возможно, нссколько, . Повторяющиеся или nроnущеНllые символы. Если компьютср псча таст слово Оlllииибка вмссто Оlllибка, это ,\lOжст быть ОПС'Jаткой ПрOl'раммиста, а можст СИl'нализировать и о проблсмах с 'ПС1НIСМ или записью данных, . Fорящий UllaUKamOp активности устройства, которое не дОЛЖ1l0 участвовать в работе. Индикаторы активности имсются у МНСJ!'ИХ устроЙств  они IlOказывают, КOI'да компьютср читаст или зarIИСЫ вас т данныс в 11Х память, Если, напримср, индикатор активности диска заюрслся, КOI'да точно извсстно, что ПРOl-рамма не должна обращаться в это врсмя К диску, это можст озна'Jать, 'по, работая на языкс достаточно НИЗКОЮ уровня, ПрOl'раIМИСТ записал данныс нс по тому адрссу, и ВМССТО опрсдслснною мсста памяти они IIOП3JIИ на ДИСК, При низкоуровнсвом ПрOI'ра\lМировании это достаточно pac пространснная ошибка, послсдствия которой MOI'YT быть самыми разрущитсл ьн ьши, Отслеживание действий nporpaMMbI Чтобы лучшс ОТСЛСДИТЬ работу ПрOl'раммы, можно воспользоваться OT ладчиком ИСХОДНОЮ кода, С СЮ помощью можно узнать МНОЮ полезною, напримср, какой проuссс в данный момснт активсн, какой объсм памяти И сколько ДРУПIХ рссурсов компьютера он ИСIЮilЬЗУСТ, насколько заполнсн стск и ТД, ВОТ примсры ошибок, о которых можно узнать с помощью отладчика, . Опрсдслснная IIOДПрOl'рамма забываст освобождать послс ссбя стск, и, ссли она выlIлнитсяя мною раз, это привсдст к СЮ ПСрСIIOЛНС нию, . Послс получсния сообщсния ОТ ДРУI'ОЮ процссса опрсдслснный проuссс ПрOl'раммы забываст сообщить опсраuионной систсмс, что она можст освободить выдслснную для ЭТОI'О сообщсния память, (Сообщсния, которыми обмсниваются процсссы,  это просто структуры данных в памяти, При создании сообщения опсраuион ная систсма выдсляст для нсю память, а послс сю получсния aдpc 
[лава 5: Документирование и анаЛllЗ ОlUибок 121 саТО\1 ДО:lжна Э1У память IIOЛУ'JlПЬ обратно,) Если проuессы актив но обмениваются сообщениями, в определенный момент изза их неаккуратности свободная память может быть исчерпана, Это вы и увидите в отладчике, как и то, кто является узурпатором, Это только дна ПрИlера, но они IlOказывают, какис Н03\1Ожности pac крываются перед тестировщико!, ВjlадеЮЩИ1 основами ПрOl'раммирования, Однако не стоит тратить на работу с отладчиком слишком мною времени, Не забываЙте, 'по основная ваша работа  это тестирование "чернOI'О ащика", а с отлад'JI!КОМ ПрOl'рамIИСТ может поработать и сам, Еще о;!ним способом анализа работы ПрOl'раммы является распечатка ее ')Кранов и изменений в фай;/ах данных, Помните, что с листом БУМaI'И IJceuJ,a леРJе работать, 'JeM с экраном компьютера, ЕС:IИ содержимое экрана очснь быстро меняется, можно попробовать 1I0работать на менее скоростном компьютере, или наЙти еще какойнибудь способ замеД;IIПЬ работу ПрОl'раммы  например, эксплуатировать ее в \lIlОЮIlOльзовательской среде с IIOi3ышенной НaJ11УЗКОЙ, В результате ИНOI'да \lOжно увидеть нечто важное, 'по в противном СЛУ'Jае Ml'HOBeHHO промель кнет на экране и останется неза!еченным, Выявив критический шаr, тщательно протестируите ero последствия Предположим, что если пользователь ВЫIlOлняет шап! А, Б, В, то на ШaJ'е В 'пото происходит не так, Вы выяснили, 'по виновником происше ствия является ШaJ' Б, Попробуйте поменять IlOследовательность действий, IIOСlOтрите, как поведет себя ПрOl'рамма, если после ШaI'а Б ВЫIIOЛНИТЬ не В, а r, Будут ли последствия такими же? Возможно, обнаружится более серьезная проблема, 'JeM та, которую вы встретили вначале, Например, IIPOl11aMMa не просто отобразит неверную информаuию, но вообще "завис нет". Поищите дальнейшие ошибки Даже если вам не УДЮlOсь TO'JНO установить, на каком именно ШaJ'е в ПрОI'раМlе происходит ошибка, все равно продолжайте ее тестировать, 'побы посмотреть, как она поведет себя дCUlьше, За найдснной ошибкой с большой вероятностью последуют друп!е, и информация об этих llOслед ствиях первой ошибки может очень помочь ПрОI'раммисту в ее поиске и исправлении, Однако не забывайте, 'по СЛСJ!ующан найденная вами ошибка не обязательно является следствием преды;tущСЙ, Ilоэтому постарайтесь протестировать ее отдельно, особснно СС;IИ се можно вызвать какимнибудь друп!м способом, IJ котором IlepBaH ошибка У'Jаспювать не будет, 
122 Часть 1: ОСllовы Варьируйте последовательность действий Если проБЛС\f<1 ДОСТ,ПО'IIIO С;lOжна и для се IЮСПРОИЗВС)(СНИЯ нужно выполнить цслый ряд действий, попробуйтс изменить их lIоследователь ность, Что будет, ССJIИ I/рОПУСППЬ один нз шаюв или HC\IHOI'O сю ИЗIС нить'? Повсдет ;IИ себя ПрОI'ра\I\lа так жс'? Может быrь, прОНВЯ'lСЯ сщс какиенибудь неrю;шдкн, Чем больше шаюв удастся y.:IД;I1ПЬ из IIOСЛСJЮlJате;IЬНОСТИ, тсм ЛУ'Jше, поскольку это позволяет IJрСДС;JЬНО лока:lизовать пробле\fУ, Оставьтс в отчете только те действия, которыс дейспнпсльно нсоБХОДИIЫ лля воспро изведения ситуации, Проверые, имелась ли такая же ошибка в предыдущих версиях nporpaMMbI Если окажстся, что найдснная ваfИ ошибка появилась только в опре дслснной всрсии IJpOI'palfbI, а до этою ес не бы;1O  заме'Jательно, Это будет означать, что ошибка IЮЯВИ,lась kJ результате конкретных ИЗ:Vlенений, и прО!'раммист ее леl'КО найдет, Особенно часто так бывает ближе к KOH цу разработки, Проверые, не зависит ли поведение nporpaMMbI от конфиrурации системы Сбой в работе прО!'раммы \1Ожет быть вызван нехваткой ресурсов, KOH ФЛИКТЩ1 с ДРУПIМ ПрOl'раммным обеспе'Jение1 системы или же ее ориен тацией на конкретную аппаратную КОНфlll'урацию, Попробуйте добавить память или наоборот, уменьшить ее объем, IlpoBepbTe, как IlрО!'рамма pa ботает в сети, Попробуйте выlрузитьb все лишние прО!'раммы, в том числе резидентные, Смените монитор, видеоплату или "pYI'oe устройство, с KO торым связана проблема, Подробнее о проблемах, связанных с аппаратной и прО!'раМ\IНОЙ КОНфlll'урацией СИСТСIЫ, расскаJЫlJастея в Iлаве 8, Поиск способа воспроизведения ошибки Как мы уже юворили, ошибка ВОСПРОИЗВОДИ\lа, се:IИ ес \ЮЖIIO увидеть, ВЫIIOЛНИВ описанные в отчете действия, Зада'Jа CI'() СОСI'аIJИТС;J}I  объяс нить, как достичь определенною состояния IIрОI рШIЫ 11 какис дсЙствия ВЫIIOЛНИТЬ в не\1 дЛя воспроизведения ошиБКIf, а lакЖС рассказать, IJ чем она состоит, Чтобы точно знать, что проблеlа IIС /11,1 '.\1\'111 а lюслt:дствия\!И какойнибудь друюй ошибки, найденной IJCPL':I)III\I, ;1\"lше IJсею переЗaI' 
[шва 5: ЛОJ.:Уllеl/lIlироваНlIе и аllализ ОLUибо;; 123 1'\' 3ИТh кО\шьютер, повторно занусппь ПрО'I'рамму и воспроизвести пробле \1'/ "с 'JИСТОI'О листа", Но бывает, 'ПО 1J0спроизвести ОUlибку повторно не удастся, Более тою, illЮl'да тестировщик нообщс не знаст, как именно он ее получил, Что дe I;II'!, в этом случае'? IlреЖ.'1е Bcel'o следует записаТh все, 'ПО вы помните: в чем состояла Оlllнбка 11 'ПО вы дела;IИ, перен тсм как ес увидели, Кроме деЙСТВlIЙ, HellOC рt:дственно связанных с ее ПОЯВ;lеНl1ем, опишите и более ранние, Запишите каЖ:1УЮ \lеjIOЧЬ, которую С\1Ожете ВСllOШIИIЪ, Затем спросите себя: "Поче \IУ же эту ошибку трудно воспроизвссти'?" \1НОI'ие тсстировщики дслают видсозаписи своей работы, тем более что ТЮ можно сдслаТh средства\IИ са\1ОЮ КО\ll1ьютсра, Это IIOMOl'aeT сэконо \IИТЬ МНОПlе часы работы, Кроме 1'01'0, если ошибку так и не удастся BOC произвести, видсозапись 1I0СЛУЖИТ подтверждением, что она всетаки была, КрО\lе видеозаписей, некоторые ТССТИрОIJЩИКИ пользуются ПрOl'раммами lIерехвата клавиатурною и ИНOI'О Вlюда, с помощью которых впоследствии \1Ожно воспроизвести свои нействия, В некоторых случаях все эти ClIOCO бы только задерживают работу, но если ПрОl'рамма полна трудновоспроиз IЮДИМЫХ ошибок, их значение невозможно переоценить, ЕС;IИ простое повторение деЙСПJИЙ ПОЛЬЗОlJателя не срабатывает, это еще ничеl'О не значит, Существует lножестно ошибок, которые ПРОЯВ;IЯЮТ ся ТОЛhКО при опреде;lенном сочстании УСi\овиii, иноrда весьма неожидан ных, Любая ошибка на ca1OM дсле Iюспроизнодима, Вопрос только в ТО\I, как найти условия, которые се нызывают, И ИНOI'да это проще сделать IIрOl'раМЛ1ИСТУ, перед 1':Iазами KOTOpOl'O IIрOl'раммныи код, Однако не CTO IП ollycKaTb руки IIреждс времени, Вот нссколько направлений поиска ис точника ошибки, Повышенная наrрузка Обычно тестировщик выполняет привычный тест очень быстро, Стол кнушuись С ошибкой, он 1I0IJторяет выявинший ее тест, но уже I'ораздо медленнее и внимате;Jьнее, И если на этот раз ошибку повторить не yдa ется, все дело \1Ожет быть как раз в разнице скорости: в первый раз про l'paMMY заставили работать быстрее, че,\1 она может, Стоит попробовать снова выполнить тест с обычной скоростью  сделаЙте это несколько раз, Попробуйте увеличить НaI'рУЗКУ на компьютер IHH перейти на менее CKO ростную машину, Пропущенные детали Если проrрамма тестируется неформально, без строюю Ilлана, тестиров щиК \lOжет просто забыть, что И\lенно он деЛ,L1, или упустить какуюни будь \Iел кую деталь, которая на самом деле была ключевой, Бывает, 'по 
124 Часть 1: Ос//овы тестировщик просто, не rлядя, нажимает какие попало клавиШи  как тут разобрать, изза чеlО произошел сбой'? Но даже при ШIaНОВОМ тестировании можно отвлечься и случайно ВЫП()jI нить 'Iтолибо дважды IСIИ просто нажать не на ту к'/звишу, Причиной неудачи с воспроизведение\! ситуации ожет быть ваша собственная ошибка или слу чайное незапланированное действие, В этом случае нужно постараться как можно точнее вспомнить, до KaKol'o 11Омента работы все шло по плану и I'де именно вы отвлек;1ИСЬ, чтобы \lакси\!ально локализовать проблему, Ошибка пользователя: вы сделали вовсе не то, что думаете Разумеется, как пользователь ПрOl'раммы тестировщик может просто напросто ошибиться, Например, ес;1И исчезли нужные данные. это может означать не ошибку ПрОI'раммы, а то, что вы их случайно удалили, Но прсдпо;шrап, собственную ошибку тестировщику следует в саIУЮ после днюю очсредь, у этою вопроса есть еще один аспект, ТеСТИРОВIlIИК ,\1Ожет допустить ошибку, которую очень часто будут допускать и пользователи ПрOl'ра\!мы, И если она реaI'ирует на эту ошибку нсадекватно или последствия разру шительны для данных, это уже серьезная проблс\!а, о которой необходи мо составить OPJeT, Не IlI'норируйте такие ошибки, лучше тщательно проанализируйте происходящее и подумайте, как усовершенствовать про ['ра\!му, 'побы сделать ее более дружественной и надежноЙ, Ошибка с разрушительными последствиями Бывает, что последствия ошибки настолько разрушительны, что ее He возможно сразу повторить, а может быть, вы и не захотите этою делать, Например, прО!'рамма может разрушать файлы, выполнять запись в крити ческие области памяти, блокировать систему, Прежде че\! приступить к ВОСПРОИЗlJедению ошибки, придется сначала восстаНОНI1ТЬ работоспособ Hoc'rb системы, Вот пример ситуации, связанной с IIодобной ошибкой, Ilользователь присылает вам дискету с данными, при обработке которых прО!'рамма сбо ит, Вы запускаете ПрОI-ра\!\!у, и она разрушает дан ныс на этой дискете, Ошибку удалось воспроизвести, но, чтобы сделать это сщс раз, придется просить пользователя снова прислать данные, Чтобы избежать подобных пробле\!, перед ВОСПРОИ:Н!(:;lсние1 ошибки следует все['да делать резервные копии данных, HUKozaa, HUKozaa, IlUKozaa не работайте с UCXOallbLMU данными  только с копиями. 
[лава 5: Докумеllтироваllие и аllализ ошибок 125 Ошибка, зависящая от объема' памяти Сбой прО!'ра\!\!ы \южет происходить только при определенных услови ях, связанных с типо\!, объемом и структуроЙ доступноЙ па\!яти, В это\! случае полезно вставить в про!'ра\!му отладочные сообщения об объе\!е доступной па\!яти при ее ЗaI'рУЗКС и в ключевые \ю\!енты выпол нения. Эти сообщения проrpа\I\1a чожет выводить при нажатии определен ной клавиши, и ино!'да их даже оставляют в окончательноЙ версии продукта для е!'о ДХlьнейшей поддержки. Ошибка, проявляющаяся только при первом запуске Первое, что делают после запуска очень \!ноп!е про!'ра\!\!ы,  это считывают с диска инициализационную инфОР\IaЦИЮ. Если при само\! перво\! запуске прО!'ра\!\!ы инициализационные файлы не содержат нуж ной инфОР\IaЦИИ, проrpа\!\!а \южет вести себя непредсказуе\ю. Однако при выходе про!'ра\!\!а сохранит в этих файлах корректные данные, и дх!ьше все пойдет хорошо, Данная ошибка проявляется только однажды, и ее \южно бьulO бы считать безвредноЙ, если бы не тот факт, что с ней стол кнется каждыЙ пользователь. Еще одной сходноЙ ошибкой \южет быть неправильная интерпретация прО!'ра\!\юй собственной неиницих!изированной па\!яти, Напри\!ер, про !'ра\!\II!СТ \южет забыть иницих!изировать пере\!енную сразу после ее co здания, и при обращении к ней про!'ра\!\!а использует содержи\!ое пере\!енной как оС\!ысленное значение, 'ПО вызывает отклонения в ее работе, Через некоторое вре\!я пере\!енная будет иницих!изирована и все пойдет правильно, Такая ошибка \южет проявляться при одной последова тельности выполнения про!'ра\!\!ы и отсутствовать во всех дру!'их случаях, В данном случае вся пробле\1a в ТО\!, как найти то состояние про!'рам \!ы или данных, в которо\! проявляется ошибка, В перво\! из описанных случаев это проще  следует только еще раз установить исходную, ни разу не запускавщуюся КОI!ИЮ про!'ра\!мы, Во втором \!ожно попробовать BOC становить исходное состояние данных и вспо\!нить все деЙствия, выпол нявшиеся с прО!'ра\!\юй от ее запуска до завершения, даже если они никак \!ежду собой не связаны, Ошибка, связанная с разрушенными данными Если данные проrpа\!\!ы по какойлибо ПРИ'lине разрушены, это \южет вызвать сбой в ее работе, При этом неважно, в 'JeM IIричина их разруше ния  это мо!'ла сделать са\1a про!'ра\!\Ia, а \!ожет быть, дело в абсолютно внешних обстоятельствах, В любо\! случае прО!'ра\!\1a \!ожет обнаружить разрушение данных и выдать вполне корректное сообщение об ошибке, а может повести себя совершенно непредсказуе\!о, Для воспроизведении 
126 Часть 1: Ос//овы подобной ошибки необходюю снова запустить прш'ра\!\!у с те\1И же дaH ны\l,' Ошибка, являющаяся побочным эффектом друrой проблемы Если в процедуре обработки ошибок ю!еется ошибка, восстановление после О'Jередно['о сбоя \!ожет пройти неудачно, В это\! С;Iучае \!ожет про иЗОЙТI1 все 'ПО у['одно, и В TO1 числе новая ошибка, Для ее повторения понадобится воспроизвести причину первш'о сбоя, Нереrулярные аппаратные сбои Как правило, аппаратные пробле\!ы, если уж они и\!еются, носят pery лярный характер, Напрю!ер, микросхема па:\lЯТИ либо работает, либо нет, Н о бывает, что и>за плохо['о контакта или СЛУ'Jайно['о колебания напря жения происходит единовре\!енный сбой, который больше не повторяется, В результате сбоя может, напри\!ер, быть повреЖ:lена определенная область па\!яти, TO'JHee, хранящиеся в ней данные или про['ра\!\!ный код, Однако не стоит торопиться с выводами, На аппаратн ый сбой ошибку следует списывать в са\!ую последнюю О'Jередь, Дата и время Прш'рамма, работа которой зависит от даты или вре\!ени, \южет выпол нять некоторые специфи'!еские действия в полночь, первш'о января или в конце февра:IЯ в високосный ['од, Общеизвестна" Пробле\!а 2000 ['ода"  воз\южность сбоев са\!ых ра> нообразных прш'ра\ш при переходе от 31 декабря 1999 ['ода к 1 января 2000 ['ода изза ошибок, связанных с проверками попадания даты в определен ный диапазон, фор\шрование\! даты по у\юлчанию и ДРУПl\fИ подоБНЬ!\lИ \!омента\IИ, Поэто\!у в любой прш'ра\!\!е, работающей с дата\1И и BpeleHeM, слеilует ВНИ\laтельно проверить зна'Jения, попадающие на ['раницу СУток, недели, \!есяца, ['ода, високоснш'о ['ода и столетия, Зависимость от ресурсов в \!нш'озадачной систе\!е ряд процессов мш'ут совместно испо:н,зовать ее ресурсы  процессор, внешние устройства, па\!ять и ilP, Пока один процесс печатает данные, дру['ой ДО:lжен ждать освоБОЖ'1ения принтера, ЕСЛl1 одному процессу выделено 90% всей па\!яти, дру['ому придется обхо диться десятью, Поэто\!у в про['ра\!ме должны быть нредусмотрены дей ствия, ВЫПОЛШlе\!ые в случае отсутствия необходимых ресурсов, сСЛИ здесь и\!еется ошибка, для ее воспроизведения потребуетсн 1J0сстановить COCTO 
[лава 5: Доку.меllтll/'<I(({[III/" и аllализ ошибок 127 нние среды выполнения  снова заПУСТИТh "ро!'ра\!\!Ы, зани\!ающие па ШIIЪ, принтер, ком\!уникационный порт и Т,/I, Пауза между ошибкой и ее проявлением сСЛИ в про!'ра\!ме происходит ошибка, вовсе не обязательно, что она сразу же проявится, се результаты \юryт оставаться скрытыми, l\ОЗ\!ОЖНО, ошибка должна будет повториться \!НО!'О раз, и видимый результат \южет проявиться при выполнении совсе\! дру!'ой, абсолютно правильной и TЫ СЯ'JУ раз проверенной подпро!'ра:'1\IЫ, ТИПИЧНЬ!\l при\!еро\! подобной ситуации является переполнение стека или дру!'ой ана:Ю!'И'JНОЙ структуры, Стек  это облаСТh па:\lЯТИ, зарезерви рованная для вре\!еннО!'о хранения данных, Про!'раМ\1a по\!ещает в не!'о информацию, работает с ней, а после использования удаляет, Если одна из процедур забывает выполнять этот последний ШaI', через KaKoeTO вре\!я стек окажется переполltеltltЫМ и дру!'ая, вполне исправная процедура не сможет по\!естить в не!'о данные, Переполнение стека часто вызывает ce рьезный сбой про!'ра\!мы, Чтобы повторить эту ошибку, нужно выполнить "провинившуюся" часть про!'ра\!мы столько раз, сколько необходи\!о для пере!юлнения CTe ка, Если процедура, в которой происходит сбой, выдерживает тестирование, следует выяснить, какая из процедур ВЬ!l!олнялась до нее, Особые фраrменты кода Тестируя про!'ра\!\!у извне, вы понятия не и \!еете, какие критические точки и !'раничные условия присутствуют в ее коде, Поэтому IIро!'ра\!\IИСТ может ино!'да сэконо\IИТЬ ва\! часы и дни работы, \II'новенно найдя ошиб ку, проявляющуюся только В очень специфических обстоятельствах, Однако в кни!'е этот способ поиска причины ошибки не случайно стоит последни\!, Дони\!ая про!'ра\!\lИста ПОСТОЯННЫ\IИ отчета\1И о невоспроизводи\!ых ошибках, \южно серьезно испортить с ни\! отношения, ОН \южет ПОДУ\IaТЬ, что вы ленивый или неква:rифицированный тестировщик и IIерекладыва ете на не!'о собственную работу, KTOTO поэкспериментировал с вашим компьютером Такое случается, Вы проводили тестирование и вышли ненадоЛ!'о, Пока вас не было, KTOTO подошел к ко\шьютеру, ввел некоторые данные, пора бота:! с проrpа\I\!ОЙ, выключил принтер, Это МОlла быть намеренная шутка, А \южет быть, шеф де\!онстрирова:! прО!'ра\IМУ I'ОСТЮ и заБЫ,l вас предуп редить, Оставляя ко\шьютер включеННbJ\!, вы всеи:щ рискуете, вернувшись, найти е!'о в Дру!'о\! состоянии, 
Часть. 11 Приемы" техиОЛОlUU тестирования r лава 6. Система отслеживания . проблем r лава' 7. Разработка тестов r лава 8. "Тестирование принтеров и . v друrих устроиств rлава 9. Адаптационное тестирование r лава 1. о. Т естироание. доку мент ации , ., , ' , rлава 11. Инструментальные средства тестировщика rлава12. Планирование и документ!J.ИЯ 
Fлава 6 Система отслеJlCивания nроблем Назначение этой rAaBbI в предыдущей rлаве рассказывалось о том, как составить отчет о BЫ явленной проблеме. Теперь вам предстоит узнать о дальнейшей судьбе этоrо отчета, В данной rлаве речь пойдет о структуре базы данных, являющейся основой системы отслеживания процесса исправления оши бок и решения иных проблем, выявляемых в ходе тестирования про rpaMMHoro обеспечения, Основное внимание будет направлено на рассмотрение потоков циркулирующей в системе информации и нуждам использующих ее людей, Приведенные формы и отчеты применяются в одной из вариантов реализации данной системы, но, разумеется, мож но разработать и друrой ее вариант, более rибко отражающий специ фику работы конкретной компании, Примечание До сих пор под словом "вы" в этой книrе имелся в виду начинающий Te стировщик, В этой rлаве ситуация меняется, и дальнейший рассказ об ращен уже не к новичку, а к профессионалу, rOToBoMY взять на себя руководство проектом, Предполаrается, что читатель руководит rруппой тестирования и ero слово в разработке системы отслеживания проблем имеет значительный вес, Однако и тем, у Koro еще нет столь серьез Horo лрофессиональноrо опыта, прочитать эту rлаву будет небезынтерес но, Ее материал охватывает множество аспектов работы специалистов rpYnnbI тестирования и их взаимодействия с остальными сотрудниками компании и изложен на вполне доступном уровне даже для новичка, Обзор Первая часть rлавы посвящена вопросам наиболее эффективноrо исполь зования системы отслеживания проблем. 
[лава б: Система отслеживанuя проблем 131 . Она начинается с общеrо обзора преимуществ системы и орrаниза ционных проблем, связанных с ее внедрением, . Затем рассматривается rлавная цель внедрения системы и ее OCHOB ная задача, Мы видим ее в том, чтобы добиться исправления макси мально возможноrо числа ошибок. . Для достижения этой цели система должна решать определенный комплекс задач, Вы узнаете и об этих задачах, и о предъявляемых к системе требованиях, . Далее рассматривается весь процесс отслеживания и решения про блемы, Что происходит с отчетом после ero составления Как реша ется описанная в нем проблема, как исправляется ошибка и как система nOMoraeT выполнить эту работу наиболее эффективно. . Не меньшеrо внимания, чем сама система, заслуживают и ее пользо ватели. С ней работают очень мноrие сотрудники компании, обраща ясь к ней по самым разным причинам. Какая информация им нужна и каковы должны быть средства ее получения Какую информацию они вводят в систему Без точных ответов на все эти вопросы нельзя спроектировать ни одно средство автоматизации работ. Во второй части rлавы рассматриваются некоторые подробности постро ения системы отслеживания лроблем. . Прежде Bcero, при водится подробное описание основных форм и OT четов, применяющихся в большинстве подобных систем, . Далее предлаrается несколько способов орrанизации ее структуры, позволяющих максимально повысить эффективность работы с каждым из отчетов и минимизировать возможные конфликты между пользо вателями. . В последнем разделе приводится несколько важных советов по про ектированию интерактивной формы ввода отчета о проблеме. Отчет о проблеме представляет собой первый и наиболее очевидный результат работы тестировщика, Но в то же время он  только начало работы по решению проблемы, и от тою, как будет ор!'анизована эта pa бота, зависит эффективность всею процесса создания прО!'раммною про нукта, Ор!'анизационная часть процесса решения проблем может быть aBTOMa тизирована, Минимум, что можно сделать,  это хранить все отчеты в системе в электронном виде и по ним автоматически составлять сводные документы, Кроме тою, в хорошей системе должны быть средства ор!'ани зацИИ взаимодействия между сотрудниками, участвующими в процессе решения проблем и исправления ошибок, До сих пор во мнО!'их фирмах, занимающихся разработкой прО!'раммною обеспе'lения, применяется бу мажная форма отчетности или системы, которые сами сотрудники счита ют чересчур уж примитивными, В ТО же время создать удобную и эффективную автоматизированную систему отслеживания проблем не так 
132 Часть J!: IIриемы и технолоcuи тестирования уж трудно, и даже для сравнительно неБОЛhШИХ проектов она стоит усилий, которые придется на это затратить, В данной ['лаве преД!IOЛaI'ается, что ваша компания достаточно велика, чтобы в ней имелись руководитель ['руппы тестирования, менеджер по :vшркетию'у, руководитель проекта и ['РУШlа технической поддержки, Это предположение позволяет юворить о людях, чьи роли четко распределены, но вовсе не означает, что на практике сотрудников не может быть юраз до меньше, l'pY[l!la из двух человек, один из которых пишет прО!'рамму, а второй ее тестирует, может работать по точно такой же схеме, Какой бы маленькой фирма ни была, все равно имеет смысл внедрить в ней aBTOMa тизированную систему отслеживания проблем  хотя бы внекотором объеме, Выбор конкретной ор['анизаuии системы отслеживания проблем бази руется на нашем собственном опыте  мы описали систему, [lOказавшую себя наиболее эффективной, В кнИ!'е при водится ['лавная форма ввода данных, ряд стандартных отчетов и некоторые замечания по реализаuии, Всею этою достаточно, чтобы написать собственную прО!'рамму автома'rи зации описанных задач, А кроме чисто технических подробностей, из этой ['лавы вы узнаете об основных uелях создания системы отслеживания про блем, ее роли в работе компании и влиянии на качество конечною продук та, Автоматизированная система отслеживания проблем прежде всею реша ет вовсе не технические, а политические вопросы, Это мощное ор['аниза !lИонное средство со следующими возможностями, \, Система является средством отслеживаltия хода работ. Информа uия, которая традиuионно имелась в распоряжении только у PYKO водства и нескольких про['раммистов, становится доступной широкому кру['у сотрудников самых разных уровней, Система пре доставляет своим пользователям объективную и независимую oцeH ку хода выполнения работ и их соответствия ['рафику, В любой момент можно просмотреть полный список задач, которые еще дол жны быть решены, Текущее состояние продукта и ею качество Bce !'Да известны, И каждый может увидеть, как продвИ!'аются работы и насколько быстро решаются поставленные задачи, 2, Система является средством Ор2аltизации взаимодействия между сотрудltиками. В каждой компании так или иначе решается uелый ряд ор['анизаuионных вопросов, КО!'да проuесс их решения aBTOMa тизирован, мноюе становится I1роще: действия сотрудников CTaHO вятся боле ре['ламентиронанными и упорядоченными, Более тою, система высвечивает некоторые ннутренние проблемы компании, pa нее оставаВlIIиеся скрIлыIи,' Хорошая система, особенно сетевая, 
[лава б: Система отслеживанuя проблем 133 позволяет практически полностью отслеживать взаимодействие меж ду сотрудниками, участвующими в выявлении и исправлении Heдo статков про!'раммною продукта, чтобы вовремя решать спорные вопросы и принимать меры по оптимизаuии работ, В частности, с ее помощью можно зафиксировать случаи некорректною поведения OT дельных сотрудников или !'рупп, злоупотребления чужим рабочим временем, необоснованных претензий и т,п, При внедрении системы отслеживания проблем необходимо решить uелый ряд ор!'анизаuионных и политических вопросов, что уже само по себе достаточно полезно. Вот наиболее важные из них. . Кто имеет право составлять отчеты о проблемах? Кто решает, следует ли ввести представленный отчет в базу данных? КТО OT вечает за отнесение отчета к конкретной катеюрии и определение ею приоритета? . Кто имеет право доступа к базе данных для просмотра ее инфор маuии? Кто может обращаться к ней с запросами и получать итоювые и статистические данные? . Кто отвечает за формирование результирующих документов, co держащих качественные и статистические !lOказатели? . Кто и почему имеет право задевать чьелибо самолюбие? . Кто имеет право на рабочее время дру!'их сотрудников и чье именно? Не требуют ли прО!'раммисты слишком подробных отче тов о каждой ошибке? Не предоставляют ли тестировщики слиш ком мало информаuии, изза че!'о про!'раммисты вынуждены тратить на поиск ошибок больше времени? . Какая степень расхождений в оценках качества продукта счита ется допустимой? . Кто имеет право делать заключение о качестве продукта? MOryT ли одни сотрудники опротестовывать решения дру!'их и настаи вать на том, чтобы конкретная ошибка была исправлена? За кем остается окончательное решение? 3. Система отражает производителыtoсть работы КаждО20 coтpyд "ика. Из базы данных нетрудно получить любую статистическую информаuию, например, о количестве отчетов, сдаваемых тестиров щиком за день, среднем количестве ошибок, допускаемых про!'рам мистом в неделю, среднем времени задержки, допускаемой прО!'раммистом до исправления ошибки и т,п, Руководители проек тов обычно очень любят подобные uифры, И они действитеЛl,ПО MOryт быть полезны для анализа хода разработки и решения TCKYIIIII\ 
134 Часть П: IIриемы и технолоши тестирования проблем, Ино[ла они MoryT даже служить основанием для взысканий или увольнения сотрудника. Однако у данной функuии системы есть серьезный побочный эффект, сильно Ol-раничивающий ее примене ние: хорошие сотрудники MoryT воспринимать эту функuию систе мы как давящую, а плохие, наоборот, манипулировать ею, чтобы создать впечатление большей производительности. 4. Система может служить оружием для меЖ2рупповых войlt. Преk положим, что сотрудники, работающие над проектом Х, выбивают ся из l-рафика, а ею руководитель не хочет этою признавать. В этом случае руководитель ['PY!l!IbI тестирования или друюю проекта, свя занною с первым, может воспользоваться предоставляемой системой статистикой ДЛя доказательства тою, что для завершения проекта Х необходимо больше времени, людей и дене[', чем запланировано. В данном случае информаuия системы используется по назначению, Однако возможна и иная ситуаuия, KOl'Aa корпоративные политика ны манипулируют ею ради собственных интересов, доказывая, Ha пример, что ситуаuия хУже, чем есть на самом деле, Итак; ['лавным преимуществом системы автоматизированною отслежи вания проблем является повышение эффективности взаимодействия co ТРУДНИКОВ, участвующих в их решении, Однако у этой системы MOl'YT быть и свои издержки, связанные прежде всею с психолошческими и [lOлити ческими вопросами. Сотрудники будут осторожнее документировать най денные ошибки и свои соображения по их поводу, опасаясь, что некоторая информация может быть использована против них, В этой кни['е будет подробно рассказано и о достоинствах, и о недостатках данной системы, чтобы вы смо['ли извлечь максимальную пользу из первых и минимизиро вать вторые. Основное назначение системы ОТО1еживания проблем Система отслеживаltuя проблем служит прежде все20 для исправлеltuя максималыtD возможltО20 числа ошибок. Все, что Itе служит достижеltию этой цели, является поБОЧItЫМ эффектом. Проектируя систему отслеживания проблем, к ее функuиям стоит OTHe стись очень внимательно. Некоторые из них, как, например, формирова ние ИТО['ОВЫХ отчетов ДЛЯ руководящею персонала, вполне СО['Jlасуются с ее основной uелью, Но каждую новую преДЛaI'аемую функuию СJlсдует 
{лавJ б: Система отслеживанuя проблсм 135 обязательно проанализировать на соответствие задачам системы, и, если она не способствует их решению, ее лучше отклонить. Задачи системы Для достижения основной uели системы отслеживания проблем необ, ходимо следующее: 1, Каждый, кому следует знать о проблеме, должен узнавать о ней сразу же после составления отчета, 2, Ни одна из ошибок не должна остаться неисправленной просто по тому, что о ней забыли или потому что так решил ПРOl-раммист. 3, Минимум ошибок должны оставаться неисправленными изза про блем взаимодействия сотрудников, В этом списке не случайно так мало задач. Они, и только они являют ся ключевыми, и к добавлению дополнительных задач следует относиться крайне осторожно. Процесс ОТО1еживания проблемы Определив основные uели и задачи системы отслеживания проблем, можно перейти к рассмотрению ее работы: отследить, что происходит с отчетами после их составления, и разобраться с основными трудностями и проблемами, возникающими на их пути. Проблема документируется С чею все начинается, рассказывалось в ['лаве 5, Тестировщик обнару живает проблему, изучает ее и составляет ее подробное описание в форме отчета. Далее отчет должен быть введен в систему отслеживания проблем, В одних компаниях составители отчетов сами вводят их в базу данных. В дру['их отчеты пишутся вручную, а в базу данных их вводит отдельный сотрудник. Бывает и так, что тестировщики вводят свои отчеты самостоя тельно, а дру['ие сотрудники, например администраторы, сотрудники rруп пы технической поддержки или I-РУШIЫ маркетиН!'а, сначала предоставляют свои отчеты ответственному сотруднику (тестировщику, системному ан3JIИ тику или руководителю проекта), который решает, следует ли их вводить в систему, Система отслеживания проблем может быть как OДHO, так и мною пользовательской, Типичная однопользовательская система устанавливается на компьютере в отделе тестирования, Не[lOсредственный доступ к ней имеют только тестировшики. Для ОСТЗl[ьных исходные и итоювые OT'ltTJ,J 
136 Часть JJ: IIриемы и технолоши тестирования распечатываются одним из тестировщиков, который спеuиально назначен для этой работы, В случае же с мноюпользовательской системой ситуаuия принuипиально иная, База данных системы устанавливается на одном из компьютеров корпоративной сети, НеIlOсредственный доступ к ней полу чают все тестировщики и руководители проекта и, как правило, также ПрОI'раммисты и авторы технической документаuии, Сотрудники I'РУШI маркеТИНI'а и технической поддержки MOl)'T работать с системой не во всех компаниях, хотя, на наш ВЗI'ЛЯД, у них должно быть это право, Права доступа к системе различных сотрудников MoryT включать возможность вводить собственные отчеты, вводить данные в определенные поля отчетов, составленных ДРУI'ИМИ сотрудниками, запрашивать сведения из базы дaH ных и печатать итоювые отчеты. Отчет поступает руководителю проекта Как только отчет введен в базу данных, ею копия должна поступить руководителю проекта. В мноюпользовательской системе это происходит автоматически  у руководителя проекта имеется неIlOсредственный дoc туп к базе данных, а значит, и к только что введенному отчету. В однопользовательской системе сотрудник l-РУППЫ тестирования периодичес ки передает руководителю проекта распечатанные копии отчетов. Как правило, руководитель определяет приоритеты проблем и переда ет отчеты ПРOI'раммистам, Однако здесь возможны варианты. . В большинстве случаев руководитель проекта оuенивает важность проблемы, добавляет собственные комментарии и передает отчет ПРOl-раммисту. Отчет с наиболее низким приоритетом не рассматри вается ПрОI'раммистом до тех пор, пока не будут исправлены боле важные недостатки ПрOl-раммы. В некоторых компаниях ПрOl'рамми сты все же просматривают такие низкоприоритетные отчеты, чтобы исправить описанные в них ошибки по ходу исправления более важных ошибок в той же части кода. Как правило, если определить, что ошибки относятся к одному фрar'менту кода, их юраздо проще и быстрее исправить все вместе. Однако компании, в которых при нята такая технолOl'ИЯ работы, обычно IIOЛaI'аются на правильную rpУIIIIИРОВКУ отчетов тестировщиками или ПрOl'раммистами, а это в некоторых случаях может и не сработать. . Руководитель проекта может попробовать воспроизвести проблему самостоятельно. В случае неудачи он возвращает отчет тестировщику на доработку. . Руководитель проекта может вернуть отчет тестировщику на дopa ботку, и не пытаясь воспроизвести проблему. Например, он может запросить дополнительную информаuию  данные о КОНфИI'ураuии 
[лава б: Система от слеживания проблем 137 системы, дополнительные пояснения или тестовые файлы. Хорошая система отслеживания проблем позволяет руководителю проекта и ПрОI'раммисту записать все свои вопросы в отдельных полях отчета, а тестировщику  внести в этот же отчет ответы. Таким образом, вся информаuия, касающаяся решения конкретной проблемы, xpa нится в одном месте. Тестовые файлы обычно нельзя включить прямо в базу данных, но ничто не мешает включить в отчет ссыл ки на эти файлы. В ОрI'анизаuии работ по тестированию ПрОI'раммною обеспечения важную роль И!'рает достижение правильною баланса между коли чеством работы, выполняемой тестировщиком для ДOKY ментирования проблемы, и количеством усилий, затрачиваемых прО!'раммистом на ее воспроизведение. ИНОI'да от тестировщиков требуют чересчур подробных отчетов и тестовых файлов для каждой, даже самой маленькой и очевидной ошибки. В друrих компаниях, наоборот, пытаются обойтись самыми краткими описаниями, и в результате прО!'раммисты тратят массу времени на повторный поиск найденных тестировщиками ошибок и воссоздание тестовых данных, вместо тою чтобы просто запросить дополнительные материалы. Какой баланс будет "правильным", однозначно ответить нельзя. Но ниже приводится ряд соображений по этому поводу. . Время тестировщика оБЫЧltо дешевле, чем время пРО2раммиста. Однако опытный в отладке ПрОI'раммист по короткому, но xopo шо написанному отчету часто находит и исправляет ошибку ю раздо быстрее, чем тестировщик собирает всю связанную с ней информацию, . В коltце разработки важltость быстРО20 и ltадежltО20 исправле Ituя ошибок резко возрастает  чем быстрее проблемы будут решены, тем быстрее продукт выйдет в продажу. В этом случае важно, чтобы прО!'раммИсты получали от тестировщиков макси мум информаuии, сколько бы ни стоил труд последних. Кроме тою, на завершающих стадиях проекта юраздо проще подключить к нему ДОIlOлнитеЛЬНblХ тестировщиков, чем прО!'раммистов. . Иltо.?да у тестировщиков 20разоо больший опыт отладки, чем у пРО2раммистов, или они больше заинтересованы в обнаружении и исправлении ошибок, В подобных случаях основной упор мож но сделать на ресурсы I'РУIIПЫ тсстировщиков, особенно если прО!'ра\IМИСТЫ упрямы и 11Х lIеНI;ШlаМt:нить, Так бывает, КОIда контракт с IIpOI раМ\IИСТОМ IIJll1XO составлен, и в нем не предус мотрсно Нl1каКI1Х IlOlHHpCHl1ii 11 санкций, связанных с качеством ею работы. O;11l3KI) (11),) ПIЫt: тсстировщики требуют, чтобы пере 
138 Часть 11: Приемы и тех//оЛоcuи тестирова//ия распределение наrрузки н таком случае было ныполнено офиuи ально и ИХ rруппа была llOполнена дополнительным персоналом, . Ни при каких обстоятельствах недопустимы намеренные потери чьеlолибо времени, Тестиронщик никоrда не должен лениться нключить н отчет дополнительную информаuию или тестоные данные, если сущестнует нероятность, что проrраммисту они MOIYT понадобиться, А ПРОl1'аммист или руконодитель проекта, н сною очередь, не должны требонать от тестиронщика дополни тельных исследонаний, которые не являются дейстнительно необ ходимыми, . Наконеи, руконодитель проекта может нообще oTHeprHYТb отчет или написать на нем резолюuию Соответствует проекту, Возможно TaK же, что он попросит тестиронщика классифиuиронать отчет как Расхождение с документаlщей и передаст ero анторам документаuии, чтобы они отразили н ней соответстнующий нопрос (скорее Bcero, н разделе разрешения проблем), После Toro как дополнительная информаuия по отчету будет предостан лена, руконодитель проекта решит ero окончательную судьбу  напранит проrpаммисту или отложит (с резолюuией Соответствует проекту, Не BOC производится или по иным мотинам), Некоторые руководители проектон случайно или намеренно задержинают отдельные отчеты, не отнечая на них KaKoeTO нремя, но хорошие итоroные отчеты системы отслежинания про блем немедленно ныянляют такие нещи, Руководитель проекта передает отчет проrраммисту Переданая отчет проrpаммисту, руконодитель проекта ожидает от Hero исправления проrраммы или HeKoToporo исследонания и пояснения TOro, почему описанная проблема не может бытb решена, Ошибки, разумеется, обычно испранляются, Вместо испранления проrраммист может запросить у тестиронщика дополнительную информаuию или отнетить (иноrда и нполне обоснонанно), что ошибку ненозможно носпроизнести, слишком сложно испранить, что (,писанная ситуаuия нообще не ЯR!lяется ошибкой, что ни один норма;IЬНЫЙ : IOльзонатель проrpаммы с ней никоrда не столкнется, что тестоный при !ер составлен некоррсктно или проблема не стоит ннимания по какойлибо iIНОЙ причине, Некоторые ПРОl1'аммисты нсячески избеrают испранления ошибок, Бывает, что проrраммист иrнорирует отдельные отчеты, на;Iеясь, что этоro никто не заметит, пока уже не будет слишком поздно, Или же проrраммист нсячески усложняет жизнь тестиронщику, на;Iеясь, что тот сдастся и БУJlСТ документировать меньше ошибок: спорит, требует ДОIIOJI нительных матсриалов, IIOBhIX иссле;юваний, подтнерждений, что в таком 
I'лава 6: Система отс.леживаиuя проблем 139 ниде IIporpaMMa дейстнитеЛhНО не устраинает 1I0Лhзонателей, Или требует IIроверки TOro, что ошибка oCTa;Iach и н следующей нерсии IIporpaMM\'! (хотя IIроrраммист ее не ИСllранлял, а IIрОСТО на;Iеется, ндруr она исчезла сама собой IIрИ ИСllранлении друrих ошибок), Друrой тактикой 1I0добн\'!х недобросонестн\,!х IIроrраммистон янляется так наз\'!наемая lIесчаная буря: на профессиона;IhНОМ жарrоне, неllОНЯТНОМ тестиронщику, IIроrраммист lIутанно объясняет, что ннесение изменений н эту чаСТh IIpOI1'aMMHoro кода может 1I0дорнать оснон\'! нсей систем\,! и сам\'!м серhеЗНhIМ образом OTpa ЗИТhСЯ на ее надежности, С 1I0добн\'!м СОllротинлением можно БОрОТhСЯ, В частности, для это.. uели может 1I0СЛУЖИТh 1I0ле отчета Комментарии, В Hero следует ННОСИТh кажд\,!й комментарий, объяснение, каждое нозражение или IIредложение, В мноrОIlОЛhзонатеЛhСКОЙ системе IIроrраммист сам должен будет ннести н отчет нсе снои aprYMeHT\'!, В ОДНОIIОЛhзонатеЛhСКОЙ их нужно заllисать ca мостоятеЛhНО, Тон этих заllисей должен бhlТh абсолютно нейтра;IhН\'!М, и н них точно ;IОЛЖНО бhlТh отражено нсе сказанное, Хороший руконодитеЛh IIроекта обязатеЛhНО IIРОСМОТРИТ эти комментарии и сам IIримет необходи м\'!е мер\'!, На IIрактике почти н Каждом IIроекте тестиронщики с Оllределенноro момента начинают чунстнонаТh необоснонаннос СОllротинление со сторон\'! IIроrраммистон, Часто они ошибаются, Подробн\'!е комментарии н каждом отчете о IIроблеме MorYT 1I0МОЧh руконодителю IIроекта или rpYIIII\'! тести ронания разобраТhСЯ н недоразумениях и ослаБИТh наllряжеННОСТh, нозник шую между тестиронщиками и IIроrраммистами, Коrда проблема объявлена решенной ИСllранин ошибку, IIроrраммист делает на отчете 1I0метку ИспраВJIено и, нозможно, добавляет некотор\'!е комментарии, Однако на этом работа с отчетом нонсе не заканчинается, Проrраммист часто ошибается, Проблема может остаТhСЯ нерешенной, или ннесенн\'!е н IIporpaMMY изменения MOryт ПОРОДИТh нон\'!е ошибки, Наш собстненн\'!й ОIl\'!Т разработки коммерческо, [о IIporpaMMHoro обеСllечения 1I0каз\'!нает, что 10% неудачн\'!х ИСllравлениi:  это еще очеНh хороший 1I0казатеЛh, Если IIроrpаммист работает с такиы коэффиuиентом, значит, нам 1I0НСЗЛО, и ОН ИСКJIючитеЛhНО IIрофессиона лен и ннимателен, Если же 25% отчетон, 1I0меченн\,!х IIрОl'раммистом как ИСllранленн\'!е, на самом деле не н\'!держинают IIроверки, м\'!, конечно, не н HocTopre, но и не считаем это чемто из ряда вон н\'!ходящим, Как oтмe ча;IOСh н rлане 3, IIрИ разработке KPYIIHhIX систсм зафиксирован\'! rораздо БОЛШIИе коэффиuиент\'! неудачных ИСllрашlt:lIИЙ, НIIЛОТh до 80%, Ilонторное тестирование Ilpol'pa\!MhI 110 OТ'Icтy, нознращенному IIporpaM мистом с 1I0меткой ИсправлеllО, ЛУ'lше Hcero IIронедет тот тестиронщик, котор\'!й состанил данный отчст, Если же ero состанил KTOTO, кто не HXO 
140 Часть 1/: Приемы и тех//олосии тестироваиия дит Н rpYllllY тестирования, стоит сначала НОСllроизнести IIроблему в исход ной нерсии IIporpaMMhI, а 1I0ТОМ уже тестиронаТh ИСllранленную нерсию, (СтарайтеСh работаТh так, чтобы три 1I0следние нерсии IIporpaMMhI Hcerдa бhIЛИ у нас 1I0Д рукой, TOrдa ны н любой момент сможете сраННИТh 1I0Heдe ние IIporpaMMhI с тем, каким оно было до ннесения ИСllранлений,) Получин обратно отчет об ИСllравленной ошибке, начните с 1I0нторения TOro теста, который Оllисан н отчете, Вы будете немало удивлены, как часто даже эти исходные тесты не срабатынают, Если исходный тсст IIpOI1'aMMa IIройдет УСllешно, 1I0llробуйте ero нари ации. ОбязатеЛhНО IIрочтите нсе IIримечания IIроrраммиста и друrие име ющиеся н отчете комментарии, Какие части IIporpaMMhI затраrинают ннесенные изменения? Что они моrли наРУШИТh? Пронедите неСКОЛhКО recToH на НОЗМОЖНЫС 1I0бочные эффекты, Еще раз IIротестируйте ИСllран ленную чаСТh IIporpaMMhI, [де была одна ошибка, возможны и друrие, Подумайте о нозможности сущестнонания более rлоба;IhНОЙ IIроблемы, чаСТhЮ которой была та, что уже решена, и о том, какие еще IIроблемы MOryT бhIТh с ней снязаны, Тестиронщики часто тратят на ана;IИЗ и тести ронание уже решенных IIроблем и ИСllранленных ошибок rораздо меНШlе нремени, чем они Toro заслужинают, Если IIporpaMMa не IIРОХОДИТ lIернонача;IhНЫЙ тест, наllишите об этом н исходном отчете и ИСllраНhте ero резолюцию с Исправлено на PaCCMaT ривается, 1I0сле чеrо снона отошлите отчет руконодителю IIроекта или IIроrpаммисту, Если же исходный тест IIpOI1'aMMa IIрОIllла и "заСЫIlа;IаСh" на снязанной ошибке, лучше заКРЫТh отчет, останин на нем резолюuию Исправлено, и наllисаТh НОl3ый, БОЛhШИНСТНО руконодителей IIроектон и IIроrрitММИСТОН IIреДlIочитают именно такой Сllособ работы, Отчеты 1I0лучаются меншIИ ми и более IIрОСТЫМИ, чем те, н которых отслежинается uелая uеllочка ИСllранлений снязанных ошибок, Невоспроизводимые проблемы Если IIроrраммист и руконодитеЛh IIроекта не MorYT НОСllроизнести Оllисанную н отчете ошибку и не знают, н чем ее IIричина, они отмечают 'лчет как Не воспроизводится и нознращают ero нам, В этом случае OCTa ;:тся ТОЛhКО 1I0llытаться нсе же НОСllроизнести ситуаuию, IIрибеrнун к TaK rике, Оllисанной в rлане 5, Если это удастся, ннесите н отчет l\ОllолнитеЛhные комментарии, В случае необходимости можно даже лич но IIродемонстриронаТh ошибку IIроrраммисту или руконодителю IIроекта, Передайте им нидеозаllИСИ или тестоные файлы, Все, что будет IIриложе но к отчету, обязатеЛhНО lIеречислите н соотнетстнующем разделе, Если н текущсй нерсии IIpOI1'aMMhI НОСllроизнести ошибку не удается, зато удается н IIредыдущей, лучше Hcero 1I0меТИТh отчет как Исправлено и 
/'лава 6: Система отслеживаиия проблем 141 закрыть ero, Как пранило, это означает, что при последнем изменении соотнетстнующеrо фраrмента кода ошибка была испранлена, Однако перед закрытием отчета Hcerдa лучше уточнить у ПРOl1'аммиста, дейстнительно ли было именно так, Обязательно нпишите н план тестиронания COOTHeTCTHY ющую заметку и н нескольких последующих нерсиях проrраммы пронеди те понторные тесты, чтобы убедиться, что ошибки и н самом деле болыне нет, Если ошибка не носпроизнодится ни н одной из нерсий проrраммы, останьте отчет еще на некоторое нремя открытым  нозможно, до следу ющеrо этапа разработки, При поступлении каждой ноной нерсии пронодите понторное тестиронание: может быт,' ошибку нсе же удастся обнаружить, И только если найти ее так и не удастся, закройте отчет окончательно, Отложенные отчеты и спорные вопросы Если на отчете стоит резолюuия Отложено, это означает, что PYKOHO дитель признал сущестнонание ошибки, но решил не испранлять ее н дaH ной нерсии проrраммноrо продукта, В некоторых коллектинах разработчикон ИСllOльзуется и еще одна похожая формулиронка  Не может быть исправлено, означающая, что испранление ошибки отложено на неопределенное нремя, В каждом проrраммном продукте, даже сделанном со нсей тщательностью и хорошо отлаженном, нсе ранно остается HeKOTO рое количестно подобных ошибок, В самом конце разработки, коrда Hpe мени остается н обрез, риск побочных последстний, снязанных с исправлением каждой ошибки, перенешинает необходимость испранления самых незначительных из них, То же самое касается и усонершенстнонания проекта  эта работа может нсячески поощряться, но за несколько недель до занершения разработки ее необходимо прекратить, Вся отнетственность за то, какие ошибки будут испранлены, а какие  нет, лежит на PYKOHO дителе проекта, Мноrие руконодители объясняют сотрудникам, почему решение той или иной проблемы отложено, нписыная снои соображения н отчет н поле Комментарий, В случае, если у сотрудникон поянятся нозражения, и oco бенно при разработке следующеrо ныпуска проrраммы, эти записи будут очень полезны. Приступая к работе над следующим ныпуском продукта, необходимо прежде Hcero OTKpbIТb нсе отложенные отчеты и IIOBTOpHO их проанализи ронать, К этому моменту после занершения нрсдыдущсrо ныпуска может пройти уже несколько лет, может смениты:я нсрсонал, Для HOHoro PYKOHO дителя нсе записи отложенных отчетов бу;tуТ нрсдстанлять БОЛhlНУЮ цeH ность, да и прежний за такое врсмя ВlIOJlIlt: может забытb подробности и собстненные мотивации, 
142 Часть 11: Приемы и тех//олосии тестирова//ия Если руководитеЛh написал на отчете Соответствует проекту, значит, именно так проrрамма и должна работаТh  описанная в отчете ситуаuия не является ошибкой, Если такая пометка сделана на отчете, классифиuи рованном вами как Ошибка проектирования, посмотрите, что руководитеЛh написал в поле Комментарий, Необходимо убедиться, что руководитеЛh понял: вы знаете, что работа проrраММhI соответствует проекту, однако, на ВШII нзrляд, в данном случае она неверно спроектирована, Если из KOMMeH тариев это не очевидно, лучше СПрОСИТh у caMoro руководителя, Некоторые руководители проекта боятся ответственности, связанной с отклаДhIванием проблем, Они относятся к каждому отложенному отчету как к разрешению остаВИТh в проrрамме сеРhеЗНhIЙ недостаток, и, вместо TOro чтобhI написаТh на подобном отчете Отложено, пишут Соответствует npo екту, Так они чувствуют себя спокойнее: хотя ошибка при этом никуда не девается, однако общая статистика разработки ВhIrлядит rораздо лучше, В ходе разработки IIРОВОДЯТСЯ спеuиаЛhНhIе совещания для обсуждения отло жеННhIХ отчетов, И разумеется, такие непраВИЛhНО помечеННhIе отчеТhI окаЗhIваются просто "спрятаННhIМИ под сукно"  на совещания они не попадают, Конечно, бhIвают ситуаuии, коrда руководитеЛh проекта и тестировщик действитеЛhНО расходятся во мнениях, Честен руководитеЛh в своей oцeH ке или нет, но во МНOI-их коллективах в таких случаях принято, чтобhI тестировщики самостоятеЛhНО меняли резолюuию на спорном проекте на Отложено, Однако наш ОПhIТ покаЗhIвает, что резолюuию руководителя проекта лучше остаВИТh неизменной, а вот в поле Считать отдоженным написаТh Да, В Этом случае отчет блаrополучно попадет на совещание по отложеННhIМ пробле,lа,I, KorAa начнется работа над слеДУЮЩИ,1 ВhIПУСКОМ проrраммноrо продукта, отчет можно будет OTKpbIТb снова, КаждhIе неСКОЛhКО недеЛh, а ближе к завершению проекта и ЧaIце, py ководитеЛh rpYllllhI тестирования собирает совещание для обсуждения OT клаДhIваеМhIХ проБЛОl, На этом совещании рассматриваются все накопившиеся отчеТhI с резолюuией Отложено или значением Да в поле Считать отложенным, Лучше Bcero, если на этих совещаниях присутству ют ,Iенеджер по маркетинrу, руководитеЛh или представитеЛh rРУШIhI Tex н и ческой поддержки, руководител h ил и П редставител h rРУППhI документирования, руководитеЛh проекта, ведущий тестировщик и, воз lОжно, их непосредствеННhIЙ начаЛhНИК, На совещании принимается окончатеЛhное решение о СУДhбе каждой из ОТЛОЖСННhIХ проблем, Именно здеСh представитеЛh rРУШIhI тестирования может ВhIсказаТh свое мнение о важности решения части обсуждаеМhIХ вопросов в тскуще! ВhIпуске продукта, Для совещания следует подroТОВИТh копии ВССХ ОТ;lOжеННhIХ отчетов (в полном объеме, а не ТОЛhКО краткие описания IlроБJIt:\I), КаЖ;IhIЙ приrлашеННhIЙ имсст право ВhIсказаТh соб 
f':/aea 6: Система отс:/е,ж;иваиия проб:/ем 143 ственное суждение, И если, несмотря на возражения тестировщиков ИJIИ друrих сотрудников, ПРИНИ,laется решение ОТЛОЖИТh определенный отчет, он окончатеЛhНО считается закрытым, ТОЛhКО приступив к работе над сле дующей версией продукта, ero \южно будет снова открыть, Для успешноro проведения работ подобные реrулярные совещания исключитеЛhНО важны, Прежде Bcero, если у тестировщиков и персонала rРУШIhI технической поддержки не будет офиuиаЛhНОЙ возможности опро тестовывать принятые руководителем решения, они найдут для Этоro He формаЛhные средства, Они MorYT деюнстрироваТh ошибки, которые считают особенно важными, lIерсоналу rруппы маркетинrа, директорам, виuепрезидентам. IIрезиденту компании, rазетчика,1 и т,д, В реЗУЛhтате ма;IеНhкая производственная проблема может превраТИТhСЯ в БОЛhlIlУЮ политическую, Если же ПОЗВОЛИТh каждому заинтересованному сотрудни ку офиuиа;IhНО высказаТh свои aprYMeHThI, до политических бата;IИЙ дело не дойдет, И коrда участники совещания соrласятся с решение,1 руководи теllЯ проекта ОТЛОЖИТh ОIlределенный отчет, это решение будет окончатеЛh ным и БОЛhlIlе ВОlIрОСУ не будет уделятhCЯ ни вни!ания, ни рабочеro времени сотрудников, Для сравнения предположим, что единственное co вещание по отложенным проблемам IIРОВОДИТСЯ в самом конце разработ ки  за две недели до завершения тестирования, Если на нем будут пересмотрены решения более чем по ДBYMTpeM отчетам, то разработчики рискуют не УЛОЖИТhCЯ в сроки, В реЗУЛhтате участники совещания не бу дут имеТh полной свободы выбора: им придется прежде Bcero учитываТh остаНlIlееся время, а от этоro IIострадает качество конечноro продукта, Зная это, все заинтересованные лиuа будут стремитhCЯ IIОДНЯТh важные вопро сы задолro до офиuиа;lhноrо совещания, а значит, снова производственные вопросы IIревратятся в политические, Поэтому безусловно, лучше Bcero решаТh все IIодобные проблемы на реI'УЛЯрНОЙ н офиuиа;IhНОЙ основе, т,е, с caMoro нача;ш тестирования проrра,IМНОro продукта IIРОВОДИТh достаточ но частые совещания по откла;Iывае,IЫМ отчетам, Нерешенные проблемы Случается, что отдеЛhные отчеты о IIроблемах теряются, их paCCMOTpc ние намеренно откладывается, о них забывают или им назначают С;IИШКОМ низкий приоритет, До завершения разработки все они обяз,Нt:JlhНО ДOJIЖ ны быть рассмотрены, Это очеНh важное праВИ;IО, и, t:C; 11 1 e:vJY Ile СI<:ДОВЮЪ, это IIОРОДИТ беза;IабеРНОСТh со всеми В\,Iт<:каЮIItИ\11I IIOСJIt:;lCТВИЯIИ, Чтобы I'арантироваlЪ обязате;ll,ное P<:III<:III!<: ВС<:Х зафиксированных в системе IIробllем, \южно pel'Y;I}IPIIO ФОРЩlроваll, сводные отчеты с переч нем всех раСС\lатриваЮIllИХС}1 01 '1<: )(JI\ о IIpoG;I<::vJax, O'lellh 11l);JC'JlIO II<:p<:,t 1Ii1'I;\.I()\! K;\JКjtOI о IIOBOro этаlIа разработки IIpO cMaTpllВa'lb ЭЛI СIЮ;II/J.I<: 0/'1"11,1 I!.\I<:Cle С руководителе,1 IIроекта, чтобы 
144 Часть 11: Приемы и тех//олосии тестирова//ия реШИТh, какие из ИСllравлений лучше внести до начала HOBOro ЭТaJlа, Таким образом можно не ТОЛhКО rарантироваТh, что чаСТh серhезных недостатков проrраммы будет быстро ИСllравлена, но и твердо, но ненавязчиво НШlOм НИТh руководителю, что и менее важные IIроблемы все же обязатеЛhНО должны БЫТh решены, Кроме TOro, коrда все открытые IIроблемы сведены вместе, руководитеЛh может сделаТh некоторые выводы о работе отдеЛhНЫХ сотрудников или несколько lIерераСllредеЛИТh между ними наrрузку, Отчеты о состоянии проекта Эти IlOлезные отчеты 1I0казывают, СКОЛhКО ошибок выявлено в ходе тестирования, какая их чаСТh еше ожидает ИСIIравления, каково соотноше ние количества ИСIIравлснных и отложенных ошибок, СКОЛhКО ошибок выявили тестировшики и СКОЛhКО  ОСТaJlhНОЙ персонал, В OT'leTax фикси руются как данные за неделю, так и общие I1тоrи, Отчеты о состоянии IIроекта помоrают руководству оuеНИТh эффектив НОСIЪ работы тестировщиков и IIроrраммистов, текущее качество IIpol'PaMM HOro IIPo;lYKTn, а также ОllрелеЛИТh соотношение количества выявляемых и ИСllравляемых ошибок, 110 которому можно состаВИТh IIреДllоложения OT носитеЛhНО даты завершения разработки, Пользователи системы отслеживания проблем в IIредыдушем разделе рассказыва;IOСh о том, какой IIУТЬ IIРОХОДЯТ ис ходные отчеты в сист<:ме отслеживания IIроблем: что с ними IIРОИСХОДИТ, кто их читает и ;lOIIолняет новой ИНфОр,lаuией, как они теряются и Haxo дятся снова, Telleph на этот же IIроиесс IIолезно 1I0смотреть rлазами COTPYД ников КОМllании, Каковы их нужды и требования? И чем может им IIOМОЧh автоматизированная система ОТС;lеживания IIроблем? ПОЛhЗователями систе:vJЫ являются составители исходных отчетов, те кто их читает, вносит собствснную информаuию или IIолучает итоroвые сведения, ОчеВИ;lНО, что ре'!ь идет нс ТОЛhКО о тестировщиках, но и о uелом рядс друrих сотрудников, У'lаствующих в разработке и тестировании Ilporpa:vJMHoro IIродукта, Поэтому система IIринадлежит не ТОЛhКО rpYlllle тестирования  она IIрина;щежит всей КО:vJllании, Ведущий тестировщик )TOT СОТРУ;lНИК руководит работами 110 тестированию IIporpaM:vJHoro IIpO;lyK I а 11 lHBt:'laeT :!а их качество и за документирован ие выявляе!ых IIроБJlе\I, 011 :НI:IJlllщрvет все cllophIe отче'!ы, ВК:Jючая и те, которые B03 вращены It:CIIII)()HlltI!Ka\1 I1зза невозможности ВОСllроизвести ситуаuию, 
[лава 6: Система отслеживаиия проблем 145 или с заllрОСОМ ДОllOлнитеЛhНОЙ информаuии, Ведущий тестировщик IlpO сматривает все отчеты с резолюuиями Отложено и Соответствует проекту и решает, какие из них следует 1I0ВТОРНО оБСУДИТh на соответствующс:vJ совещании, Он rотовит и lIередает руководству итоroвые отчеты, а также IIросматриваст их сам, чтобы вовремя ВЫЯВЛЯТh возникающие IIроблс:vJЫ, Из отчстов он узнает о неэффективном взаимодействии сотрудников, низ кой IlроизводитеЛhНОСТИ работы отдеЛhНЫХ тестировщиков (недостаточно:vJ количестве IlредостаВ;IЯСМЫХ ими отчетов или, наоборот, слишком БОЛhlllОМ КОJНIЧССТВС отчстов О lIустяках), а также о раЗНОI'JIасиях или IIроблсмах, связанных с ИСllравлением ошибок, которыс стоит оБСУДИТh С руководите лем IIроекта в личной беседе, Рядовые тестировщики Рядовые теСТИРОВlIlИКИ составляют OPICThI о IIроблемах и IIросматрива ЮТ их IIOCJle Toro, как зти IIробле:vJЫ рсшаются, Они IIOBTOpHO тестируют IIporpaMMY, IIроверяя Ka'leCTBo ИСlIравлений, OT'ICThI, которыс отложсны И;IИ oTBcprHYThI с ре:Ю;IЮI\!\СЙ Соответствует IIроекту, они анализируют 1I0ВТОРНО и в ОТДСЛhНЫХ случаях составляют НОIIЫС отчсты с болсс убсди ТСЛhНЫМИ Оllисаниями IIроблем, Руководитель проекта РуководитеЛh IlpoeKTa отвечаст за качество IIродукта и своевре\!сннос завсршение еl о разработки, Ero задача , 1I0ддерживаТh ОIПИ:vJаЛhное соот' ношенис мсжу СТОИ:vJОСТhЮ работ, их IIРОИЗlюдитеЛhНОСТhЮ, наДСЖI!ОСТЫО IIродукта, CI'O ВОЗ:vJожностя:vJИ и срока:vJИ разработки, IIOДКJIЮЧ<lЯ IIрИ нсоб ХОДИ:vJОСТИ ДОllOлнитеЛhные рссурсы или IIсрсраСllределяя И:vJеющисся, В этой работе база данных системы ОТСЛСЖlIвания IIроблем становится ис КJIючитеЛhНО важным источником информаuии о текущем состоянии IIpO дукта и ero соответствии календарному IlJIaHY, РуководитеЛh IIроекта Оllредсляет, какие из выявленных IIроблсм дол жны БЫТh решены и в каком IlOрядке, Ряд BOllpOCOB он откладывает, и они MOI'YT БЫТh IIOBTOpHO рассмотрсны на соответствующем совсщании, Мноrие руководители каждую недслю IIросматривают всс ОТКРЫТl,IС отчеты, выявляя IIроблемы взаимодействия сотрудников (в том 'IИСЛС свя занные и с мсжличностными отношениями), БОЛЫllИС I'РУIIIIЫ ошибок, СI!rнаЛИЗИРУЮЩI!С о слабости отдеЛhНЫХ фрal\lеlПОВ IIpOl pa:vJ:vJHol о кода, ошибки, IIЛОХО IlOддающиеся ИСllраВЛСIIИIO 11Jlll IIOI\IOP}It:\lhIe реIУJIЯРIlО, Если IIрOl'ра:vJ\IИСТ или I'PYlllla IIpOI'pa\I\!I1CmB IIOCTO}{IIHO IlOвторяет О;lНИ и те же ошибки, ВОЗ\IOЖIIО, СЛС;lУСТ oGpa'lllll. lIa 'НО 11Х внимание и IIрИЮПh ДОllOлнитеЛhllые :vJephI, EC,111 OLIII1()КI1 СШII<lIlIlI,1 С не;lOстаточны:vJИ знания :vJИ I1ЛИ ОllhПО:vJ В OI!pe;lc:lcllllO\1 1\00IрОСС, '10 \IOЖIIО Ilровести консультащш или найти lIеобходиую JlIHt:pal\'py: IЮЗ\ЮЖIIO такжс, что IIроrраммиста\1 
146 Часть 11: Приемы и тех//олоcuи тестирова//ия требуются ДОllОлнитеЛhные средства отладки I1ЛИ не хватает какихлибо ресурсов, Одной из основных :>адач руководителя IIpoeKTa является имен но выяснение и удовлетворение потребностеЙ lIерсонала в технической IIOМОЩИ, ИнформаUI!Ю об этих lIотребностях он lIолучает, в частности, и IIрИ анализе отчетов о IIробле:vJах и И:vJеюшихся в них КО:vJ:vJентариев, СеРhезное неДОВОЛhСТВО руководителя \lOrYT вызваТh слеДУЮШl1е обсто ятел ьства, . Отсутствие оперативных ответов. Это ситуаuия, коrда руководи теЛh 1I0звращает тестировшика:vJ oPleT о IIроб!lе:vJе, которую не :vJo жет воспрои звести ИJII1 110 КО! орой требустся ДОIIOЛН итеЛhная ИНфОр:vJаНI1Я, и этот отчет оетаеТС}1 без ОТlIета, Будет Оllисаllная в ОТ'lете IIроблема решена ИJIИ нет, но в JIIобо:vJ случае важно ОIlреде JII1ТЬСЯ, Если такие нереl1lенные BOllpOChI накаIlJIИВ:lЮТСЯ, зто Hapy шает НОР:vJаЛhНЫЙ IIPOUeCC разработки и С'lаllИТ IIOJ! уrрозу ее калеllдарный IIЛ:lН, IIОСКОЛhКУ б:юкирует В03:vJОЖНОСТh IIраВИ;lhноrо IlрlIНЯТИЯ решений о TO:vJ, СКОЛhКО еше ИСllравлений необходи:vJО внести в IIpol'pa:vJ:vJY ;10 :швершеllИЯ 0'1 epe;lHoro л аllа, . ВlIесеllllые в nрОlрaJИМУ исnравЛСllия lIе тестируются по lIескольку д1lей или даже lIедель. В такой СИ'lуаl\Иll состоя н ие Ilpol'pa:vJ:vJHol'O IIрОДУКlа становится неОllределеНIIЫ:vJ, [ели ИСllраШlение не IIpO'le CTl1pOll<lHO, то неизвестно, ИСllраюеllа JIИ ОШllбка на ca:vJo:vJ ;leJle и не IIOЯВИЛИСh JIИ в IIpOI pa:vJ:vJe НОllые ошибки, О IIJIOХИХ новостях PYKO ВО;lителю IIpoeKTa необходи:vJО узнаваТh сразу же, чтобы cBoeBpe:vJeH но IIрИНИ:vJа'lh соответствуюшие :vJephI, . Од1lа и та же отложеllllая проблема рассматривается по lIескольку раз. Добаlll1l1 очсре;lIlОЙ неубедитеЛhНЫЙ aprY:vJeHT в IIОЛh:!У решения 11 (1 об JI С \1 1>1 , ТССТI1РОВШИК снова И3:vJеняет резолюuию отложеННОl'О ОlчеТ<1 lIа l'аСС:vJатривается, Как IIравило, руководители IlpocKTa 1I00IНРЯЮТ IIOBTopHoe раеС:vJотрение отложенных oPleToB, но ТОЛhКО IlрИ условии, если новые aprY:vJcHThI и :vJатериалы, приведенные TC стировшиками, действитеЛhНО заслуживают вни\!ания, И без очеНh весомых IlрИЧИН этоro не следует делан более одноro раза, . База да1l1lЫХ изобилует дублирующими дру;? друш и lIе заслуживаю Щ/l.Ми вllимаllия отчетами. Особенно серьезной эта Ilроблсма CTa новитея в конце разработки или коrда lIохоже, что это делается Ha:vJcpeHHo ;L1Я завышения lIоказателей IIРОДУКТИВНОСТИ раБO'l ы OT :IСЛhIlI.lХ теетировшиков И:IИ необоснованной де:vJонстраuии TOro, 'ПО 11(101(1<1\!\!a все ешс IlOлна ошибок, Kpo:vJe TOro, БОЛhlllое количество ОIЧt:IОВ о lIe;loeTaTKax исходноro IIpoeKTa, даже если они абсолютно обl,t:КIIII!III,I, \1Ожет ОКа3ывать обескураживаюшее lIеИХОJlOl'ическое BOJ:lt:IiL:II!IIC, 111(1()Чl'\I, ХОрОШI1I'j руководитеЛh lIоошряет такие отче 
[лава 6: Система отслеJlСllваиия прой,,/,',н 147 ты даже в конце разработки, KOrдa никакие ИЗ:vJенения IIOJlьзоватеJII.. CKOro интерфейса и функuионаЛhlЮЙ структуры IIporpa:vJ:vJhI уже 1It: ДОllускаютея , ведь со Bpe:vJeHe:vJ выйдет и СJlедуюший вы lIyeK IlpO дукта, в который \южно будет внести все IlOлезные ИЗ:vJененин, предложенные в ходе тестирования, ТОЛhКО не lIереуеердствуйте с таки:vJИ IIредложениями, они ;lOлжны CTPOro соответетвовать обшей кон цеlЩИИ IIporpa:vJ:vJHol'O IIродукта, . В ито,ювых отчетах с переЧllем lIеисправлСllllЫХ ошибок имеются ошибки, которые уже исправлеllЫ, но ешс не протестированы, или ошибки, которые вообше не воеllРОИЗВОДЯТСЯ, В резулыате создается невсрная картина ВhlllOЛllения работ  IIроизводитеJIl,НОСТh Ilporpa:vJ :vJистов пре;lCтаВ;IЯСТСЯ :vJеНhШСЙ, че:vJ на ca:vJo:vJ деле, а состояние ПрОlра:vJ:vJЫ  ХУДlllИ:vJ, . В ито,ювых отчетах lIевеР1l0 иllтерпретируются текущие даll1lые. НаllрИ:vJер, если в конце разрабlПКl1 за ОllредеЛСНIIЫЙ lIериод ис IIравлсно 40 ошибок и выявлено 40 новых, ИЗ которых 35 нвляются незна'lИтеЛhНЫ:vJИ нсдоеПlТка:vJИ IIроектирования, а в итоroво:vJ 0'1 чсте сказано, '1'1'0 БО;IЫlIИНСТlЮ ИСllравлений ВJIC'leT за собой новые ошиб ки, это lIeBepHO, На ea:vJo:vJ ;lеле ошибки ИСllравляются IlpeKpaCHo, и раGоты уСllеШIЮ Ilродвиrаютея, Все дсло IIpOCTO внекорректности составлсния отчста  достаточно ТИIIИЧНО:vJ явлении в ситуациях, Kor;la КОJlИ'lесТlЮ обнаруживае:vJЫХ ошибок IIрИ:vJерно равно или даже IIревышает КОЛИ'IССТlЮ ИСllравлений, . Высшему руководству реi!УЛЯр1l0 передаются упрощеllllые итОlOвые отчеты, особснно тс, в которых отражается КОЛИ'IССТВО ошибок, оставшихся НСИСllраВJlенны:vJИ в конце каждой недели, Как будет рассказано далес, руководители 'шсто очеНh любят lIодобllЫС "IIOKa затеЛI,ные" отчсты, а их IlOдчиненны:vJ (в ;laHHo:vJ случае PYKOBOДH теля:vJ IIpoeKTa) они IIРИНОСЯТ ТОЛhКО лишние неудобства и заставляют flреДIlРИНИ:vJаТI, деЙСТВЮl, блаrодаря КОТОрЫ\1 цифры выrJIЯДЯТ лучше, а :)ффеКТИВНОСТh IIpoIlecca ;lOКУ:vJентирования и ИСllравления ошибок страдает, что в конечно:vJ счете отражается на качестве IIродукта, . Иllформация базы даllllЫХ используется для лиЧIlЫХ Ilападок на py КОВО;lителя IIpoeKTa или друrих сотрудников И;IИ ;l;IЯ иекажснноro IIредставлсния IIpoeKTa и el'o IIpolpecca, Проrраммист ПрОI'ра:vJ:vJИСТ 'lитае'l () IЧСТ () IIP()GJlC\IC I! отвечает на Hero, Ero неДОВОЛh ство :vJOI'yT ВI,IЗВП 1, C:IC;IYI()IIIIIL' ()Gc I ()}II СJII,ства: 
148 Часть 11: Приемы и технолоcuи тестирования . Отчет не cOBce:vJ четкий и IIOНЯТН\,)Й, он недостаточно Сllособствует ИСllравлению ошибки, . Из отчета неясно, IIрОТИВ чеrо возражает теСТИРОВlIlИК или что дол жен сделаТh IIроrра:vJ:vJИСТ, Б\,)вает, что отчет БОЛhlllе похож на абет рактное описание поведения IIporpa:vJ:vJ\,), Ilрочитавший ero человек :vJожет оетаТhСЯ озадаченн\,):vJ: "Ну хорошо, а в че:vJ же, собственно, 11 робле:vJ а? " . Оllисанная в отчете ситуаl\ИЯ не ВОСIlРОИЗВОДИТСЯ, . Отчет, возвраlllенн\,)й с заllроео:vJ о ДОllOЛНИТСЛhНОЙ ИНфОр:vJаI\ИИ, снова lIocTYllaeT I1роrра:vJ:vJИСТУ в исходно:vJ виде, . Теетов\,)й IIрИ:vJер очеНI, сложен, а теСТИРОВlIlИК не IIРИЛОЖИЛ к OT чету ВСПО:vJоrатеЛhные :vJатериал\,) для ero ВОСllроизведения, . ФОр:vJулировки отчета :vJorYT б\,)Тh ВОСIlРИНЯТ\,) как lIереонаЛhная критика, . Руково;lCТlЮ ИСlIользует статистические данн\,)е систе:vJ\,) отслежива ния IIроБJlе:vJ JUIЯ ана..1иза личной IIроизводитеЛhноети t:отрудников, Менеджер по маркетинrу Менеджера 110 :vJ<lpкеТИНI'У интересует все, что связано с KOHKypeHTOC IlOсоБНОСТhЮ БУДУlllеl'О I1porpa:vJ\IHOrO IIродукта и СТОИ:vJОСТhЮ ero техничес кой IIО;1держки, Поэто:vJУ :vJенеджер\,) 110 :vJаркетинrу IIродукта часто являются са:vJ\,):vJИ активн\,):vJИ заlllитника:vJИ ero качества, В НСКОТОР\,)Х елу чаях они считают более важн\,):vJ УЛОЖИТhСЯ в сроки разработки, но и Tor да отказ\,)ваются В\,)IIУСТИТh на Р\,)НОК IIРОДУКТ с КО:vJ:vJерчески неllрие:vJле:vJ\,):vJИ недостатка:vJИ, Как IIравило, :vJенеджер 110 :vJаркетинrу слишко:vJ занят, чтоб\,) читаТh отчет\,) обо всех отложенн\,)х IIробле:vJах, он не хочет или не :vJожет эффек тивно IlOльзоваТhСЯ базой данн\,)х, Поэто:vJУ стоит раСllечат\,) вать для Hero lIepcoHa..1hH\,)e итоrов\,)е отчет\,) и в\,)деЛЯТh в них наиболее важн\,)е IIробле :vJ\,), rруппа технической поддержки Сотрудники rpYIIII\,) технической lIодпержки будут отвечаТh на BOllpOC\,) lIользователеЙ IIродукта, Они заи нтересованы в TO:vJ, чтобы СНИЗИТh CTO И:vJОСТh поддержки IIродукта и IIраВИJlhНО отраЗИТh в технических обзорах еl'O качествО, Поэто:vJУ сотрудники этой rpYIIII\,) возражают IIрОТИВ каждой ОТЛОЖL'1II10Й Оlllибки  ведь И:vJ IIредстоит отвечаТh за нее lIepeJ! lIользова теля:vJИ, ОIlИ lIастаивают на ИСllр3l!JIении всех ошибок, решении всех IIpO бле:vJ, ИСllр,шлеlll1ll всех недостатков исходноro IIpoeKTa и всех неточностей ДОКУ:vJент<щии, И t:СJIИ иеllравление не вносится, они ДОЛЖН\,) знаТh, что 
[лава 6: Система отслеживаuи}/ пр(}()л{'м 149 отвечаТh IIOЛ, hЗователя:vJ Незадолrо до BhIllycKa, коrда IIporpa:vJ:vJ<I уже Jtoc. таточно стаБИЛhна, rРУШlа технической 1I0дпержки обычно IIрОС:vJаТрИВ<lСI ее B:vJecTe с Руководство:vJ и составляет ряд собственных отчетов о IlроБJIС' :vJax, В этих отчетах отражаются BOllpOChl, которые ВhlЗОВут наиБОЛhlllее количество звонков неДОВОЛhНhlХ или не СУ:vJевших разобраТhея в IIporpa:vJ:vJe IIOЛhЗователей, Вообше, звонки IIOЛhЗователей  ЭТО один из наиболее ТОЧНhlХ и ваЖНhlХ индикаторов качества IIporpa:vJ:vJhI, Kpo:vJe TOro, они об. ходятся КО:vJllания:vJ в значитеЛhные cY:vJ:vJhI, ПОЭТОМУ, если [руlllШ техничес кой IIOДilержки СИЛhНО обеСlIокоена неКОТОРhl:vJИ недостатка:vJИ IIродукта, лучше Bcero He:vJHoro ОТЛОЖИТh ero ВhlПуск или начаТh работу над следую шей, ИСllравленной версией сразу IlOсле выхода текушей, Сотрудники rpYllllhl технической 1I0ддержки очеНh часто IlOсешают еовешания 110 IIcpec:vJoтpy отложенных IIробле:vJ и настаивают на решении тех из них, которые ВhlЗОВУТ наиБОЛЫllее количество звонков IIOЛhЗовате. лей, Во :vJноrих КОЩlаниях к их :vJнению IIрислушиваются rораздо ВНИ:vJа те1lьнее, че:vJ к довода\! остаЛhНЫХ сотрудников, включая и тестировшиков, Часто rpylllla технической 1I0дпержки требует IIредоставления ей отче тов обо всех отложенных IIробле:vJ<lХ с объяснения:vJИ TOro, что следует rОВОрИТh неДОВОЛhНhI:vJ IIOЛ, hЗователя:vJ ПОСКОЛhКУ на внесение в отчеты этой информации требуется вре:vJЯ, а IIроrра:vJ:vJИСТhI и так заrружеНhI до Ilредела, ЭТУ работу часто 1I0ручают тестировшика:vJ, Однако не все KO:vJlla. нии Вhlбирают такую стратеrию, В некоторых B:vJeCTO этоrо IIрИНЯТО вклю чаТh в руководство 1I0льзователя БОЛЫllие разделы о разрешении ВОЗ:vJожных 11 роблe:vJ, Каждое BhlДaBae:vJoe IIроrра:vJ:vJОЙ сообшение об ошибке 1I0дробно ОIlИСhlвается, и IIРИВОДЯТСЯ инструкции, как избежаТh 1I0доБНhlХ ошибок, Перед IlечаТhЮ очереднOI'О тиража ДОКУ:vJентаIIИИ, в нее вносится ИНфОр:vJа ция обо всех обнаружеННhlХ ошибках и ответы на наиболее часто задава e:vJhle IIOЛhЗователя:vJИ BOllpOChl, Kpo:vJe TOro, су шествует IIрактика, коrда lIерсонал технической IIOJщержки руководит бетатестирование:vJ IIродукта (преДllродажной стадией тестирования с участие:vJ IIOЛhЗователей), изучает ero резулыаТhI и roтовит :vJатериа1hl, которые будут ИСllOЛhЗоваТhСЯ для 1I0Д держки IIOЛ hЗователей IlOсле BhlllycKa IIродукта, Сотрудники ['PYllllhi технической 1I0дпержки IIOЛhЗУЮТСЯ базой данных отслеживания IIробле:vJ и IlOсле BhlllycKa IIродукта, Коrда IIOЛhЗователи co обшают о новой ошибке, о ней составляется отчет и вносится в базу дaH ных, Зате:vJ СОТРУДНИКИ 11'yllllhl сообшают об ошибке руководству и выясняют, KOrдa и Ke:vJ она будет ИСllравлена, При ЭТО:vJ ЖCJlатеЛhНО ИСllравить ошибку как можно быстрее  1 IOльзоватеЛh , как известно, ждаТh не любит, Авторы технической документации Авторы технической ДОКУ:vJентации (технические lIисатели) отвечают за руководство IIOЛhЗователя, друrие технические :vJатериа1Ы, СОllровождаюшиL' 
150 Часть 11: IIриемы и технолоcuи тестирования проrра:vJ:vJН\,)Й IIРОДукт, а также за са:vJостоятельную техническую и :vJapKe ТИНl'ОВую ДОКУ:vJентаI\ИЮ, Они должн\,) отслеживать все ИЗ:vJенения иеход Horo IIроекта и знать обо всех отложенн\,)х ошибках, влияюlllих на IlOведение IIpol'pa:vJ:vJ\,), Поэто:vJУ они тоже 1I0ЛЬЗУЮТСЯ систе:vJОЙ отслежива ния IIроблем, IIриче:vJ делают это и IlOеле окончательноro В\,)lIуска IIродукта, Kpo:vJe ea:vJoro IIродукта, технических IlисатеJlей интересует и то, как IIpO двиrается работа и уклад\,)ваются ли разработчики в I'рафик . от этоrо зависит, следует ли техничееко:vJУ Ilисателю 1I0ТОРОIIИТЬСЯ или, наоборот, IIOДОЖJЩТЬ, IIOKa Оllределенная часть IIродукта будет завершена и :vJожно будет IIРИСТУIIИТЬ к се Оllисанию, Особен но И:vJ важно знать, КОlла будут IlpeKpallleH\,) ИЗ:vJенения IlOльзовательскоrо интерфейса, При наllисании ДОКУ:vJентаI\ИИ ее автор\,) нередко ста..1киваются с ошиб ка:vJИ IIporpa:vJ:vJ\,), Как и тееТИрОВlIlИКИ, они :vJorYT составлять отчет\,) об обнаруженн\,)х IlроБJlемах и вводить их в базу данн\,)х, ТееТИРОВlIlИКИ, в свою очередь, lIеРИОДИ'lески в\,)являют ошибки в дo КУ:vJеIП.щии, Часто они IIИШУТ свои за:vJС'lания IIрЯ:vJО на КОIIИИ ДОКУ:vJеllта I\ии, но, если расхождение :vJежду ней и IIроrра:vJ:vJОЙ достаточно серьезно, и особенно КОlла ДОКУ:vJентаI\ИЯ соответствует еllеl\ификаl\ИИ, обязатеJlЬНО состаВШlется отде;IЬНЫЙ oPleT о Ilробле:vJе, И если зате:vJ в IIporpa:vJ:vJY BHO сятся ИЗ:vJенеIlИЯ, они обязатеЛI,НО ;lOJlЖНЫ б\,)ть отражен\,) в ДОКУ:vJентаI\ИИ, Отчеты о HeKoppeKTHo:vJ lIоведении IIроrра:vJ:vJЫ Ilере;lаются техническо:vJУ Ilисателю и в TO:vJ С;lучае, KOrдa ошибка не ИСllраВ;lяется  для внесения co отвеТСТВУЮlllей ИНфОр:vJаI\ИИ в раЗ;lел разрешения IIробле:vJ, МОЖIIО сказать, 'ITO работа автора ДОКУ:vJентаI\ИИ во :vJHOI'O:vJ сходна с работой Ilроrра:vJ:vJИ ста: он 11Oлу'lает отчет о IIроб;lе:vJе, вносит ИСllравления в ДОКУ:vJентаI\ИЮ, Ilишет на отчете реЗОЛЮI\ИЮ Исправлено 11 возвраlllает ero для 1I0BTOpHOro тестирования, Руководитель rруппы тестирования Руководитель rpyllll\,) тестирования отвечает за аД:vJинистративную 'lacTb орrанизаl\ИИ работ 110 тестированию и их качество, Анализируя отчет\,), составляе:vJ\,)е кажд\,):vJ СОТРУДНИКО:vJ, он Оllределяет, не требуется ли JТo:vJy теСТИРОВlIlИКУ IIрОЙТИ ДОllOлнительное IIрофессиона;lьное обучение, Kpo:vJe TOI'O, он соrласов\,)вает работу rpYIIII\,) тестирования с работой друrих IIOД разделений, отвечает за их нзаИ:vJодеиствие и решает ряд друrих ад:vJИНИС тративн\,)х BOllpOCOB, Некотор\,)е руководители rpYlll1 тестирования 1I0ддаются искушению собирать IIредостаВJlяе:vJУЮ систе:vJОЙ статистическую ИНфОр:vJаI\ИЮ работ\,) ОТ;lеJII,IIЫХ ТССТИРОВlIlИКОВ, Сколько, наllрИ:vJер, каЖJl\,)Й теСТИРОВlIlИК ДOKY \Iеllп!рует ошибок за неделю? Такая статистика fЮ:vJОПlет отслеживать TeH деНI\ИII в pa(ioTe rpYIIII\,), но, IIрежде че:vJ делать на се основании В\,)ВОД\,) об эффеКllll\llОС ПI ра(iоIы сотрудн иков, следует ответить на слеДУЮlllие BOII росы: 
[лава 6: Система отслеживаuия 1/f!()(i../eM 15 1 . Кто докумеllтирует больше ошибок: тестировщики, теХllическul' писатели, i!pyппa теХllическоu поддержки или руководитель пpoeK та? Обычно БОЛhlне Bcero ошибок находят тестировшики, однако :vJноrие нробле:vJhI Вhlявляет и руководитель нроекта или ero IIO:vJОш ник, ПО:vJошник руководителя нроекта тестирует нродукт независи :vJo и не так, как )то делают тестировшики: он Нhlтается работать с нроrра:vJ:vJОЙ как обhlЧНhlЙ IlOльзователь, ориентируясь не на IIOИСК ошибок 110 CTPOro заданной cxe:vJe, а скорее, на недостатки обшеl'О фУНКЦИОlIирования, ЕС;IИ такая работа ВЫllOлняется в течение He скольких недель, она \lОжет IIринести Оllределенную 1I0ЛЬЗу, 110 если она длится до ca\lOro конца разработки, то фаКТl1чески ;lублирует работу rpYllllhI тсстирования, Однако, еС;IИ оказhlвается, что IlOдоб ный сотрудник работает эффективнее IIрофеССИОllаЛЬНhlХ тестиров шиков, И:vJеет С:vJhlСЛ lIepec:vJoTpeTb выбраllНУЮ стратеrию тестирования  IlOхоже, что она не:JффеКТИВllа, . jJ,ействителыlO ли количество выявлеllllЫХ за lIеделю проблем ()mpa жает производитеЛЫlOсть работы тестировщика? В ca:vJo:vJ нача Jle теСl'ирования оБЫ'IНО обнаруживается очень :vJHoro ошибок, СJlедуюший IlOдъе:vJ этоrо 1I0казателя наблюдается 110 окончании IlepBoro лаllа ра:!работки, 1I0СКОЛЬКУ код к ЭТlщу вре:vJени еше очснь нестабилен, Далее все зависит от KOHKpeTHoro IIpoeKTa, Если IIрОДУКТ нестабилен, IlеРИО;lhI с очеНI, ВhlСОКИ:vJИ IlOкюателя:vJИ обнаруженных ошибок :vJOryT чередоваться с недеШI:vJИ затишья, KOIJta состаВJlяется Ilятьшесть отчетов за неделю, На друrих IlpoeKTax вначале наблю ;lается уВСJlичеl!ИС количества обнаруживае:vJhlХ ошибок, 110 :vJepe TOro как тестировшики Зllако:vJЯТСЯ с IIPO;lY, KTO:vJ а затс:vJ IIOCTelleH ный Clli\Jl, отражаюший стабилизацию IlpOlpa:vJ:vJhI, Таки:vJ образом, невоз:vJОЖНО СОСТ3I!ить универсальную схсму  развитие собhlТИЙ :vJожет бhlТЪ O'letlb раЗЛИЧНhI:vJ, и зависит оно от множества обстоя.. тельств, Пожалуй, сдинственное, на что стоит обратить IIристальнос ВНИ:vJание, . это IIOСТОЯНl!ое и нс слишко:vJ БОЛhlное КО;lичесТlЮ отчетов у какоroлибо тестировшика, Так бhlваст, еСJIИ 'leJIOBCK 110" стоянно :vJеняет область тестирования: ставит одну J,lJla'ly, IIOСIНlшаСl' ей несколько ;lней, составляя 110 нескольку ОТ'IТ(lI\ '\а ;tt:III" JaTt:\! lIереКJlючается lIа друrую задачу, ДOIIOJllIитеJIЫllДI Ilок,шпеJlе:vJ He ;lOбросовестности южет служить то, '110 1\ OT'I I ах ')ТОI о сотрудни ка 011ИСhlваются БОЛhlнеij чаСТI,Ю C,I\II,IC О'It:IНI;lные не;lостатки IIроектирования и наиGот:т nt:1 ко !\1.1\II\:lно!ые ошибки, Kpo:vJe TOro, стаБШIЬНhlС IlОка'JаlТЛI! \ЮIУ' fil,lll. у IССI11РОВЩИКОВ, работаюших 110 II;IOХО составленному 1I:1,lIIy, 
152 Часть 11: Приемы и тех//олоcuи тестирова//ия Наш собственный ОIIЬП lIоказывает, что в оценке IIроизводительности работы теСТИРОВlIlИКОВ не стоит lIолаrаться на IIpocThIe данные о количестве составляе\IЫХ ии отчетов, а следует вниательнейши образо! изучить саи отчеты, Наllриер, некоторые теСТИРОвtl1ИКИ исследуют IIporpay Тll1ательнее друrих, БОЛЫllе вреени тратят на 1IOIIЫТКИ ВОСllроизвести TPYД НОУЛОВИ\1hIе ошибки или работают с более сложныи 'Iастяи IIporpahI, Не удивитеЛI,НО, что они ВЫЯВ1IЯЮТ \!eHЫJJe ошибок, че их коллеrи, OДHa ко та часТl, IIроrраы, с которой они lIоработали, в реЗУJlьтате rораздо 60Jlее надежна, че у ;lРУI'ИХ, Таких сотрудников ы наЗhlвае старшии теСТИРОВlIlика\IИ и уж никак не считае\I их ра60ТУ наименее IIРОИЗВОДИ тельной, Мы вееl-да резко возражаеI I1рОТИВ любhlХ ссылок на количество ВhlЯВ ляеых теСТИРОВlIlИКО ошибок, в личной ли беседе или пу6J1ИЧНЫХ заяв лен иях, Некоторые люди реаrl1РУЮТ на такие УlIоинания очень БОJlезненно, у них возникает чувство, что РУКОВО;ll1Тель HaepeHHO ВlIима Te;JbHO ОТС;lсживает иенно их IIРОlIзводитеЛI,НОСТЬ, хотя на деле это \lОжет бhlТЬ и COBce не так, Te более неДОIlУСТИО явно интерl1ретировать 11O добные данные как lIоказатеJIИ rrРОИЗВОДИI'ельности  это наверняка будет ВОСllрИНЯТО как неСllраведливая оценка раБОТhI и Вhlзовет бурю эоций, Ilосле таких выскаЗhl ван ий ру ководства РЯДОВhlе сотру дн ики нееДJlен но начнут корректировать свои действия, I1bIT,HICI, IIOAol'HaTb lIоказатели IIOJ! желаеhlе, BeДl, они Tellepb будут IIOJlaraTb, что руководство отслеживает их Ilроизводительность, оценивая ее 110 количеству составляеых отчетов, А чтобhl IlOдоrнаlЪ 11ОказатеJIИ, и IIридется работать eHee добросовестно: составлять oT'leThI TOJII,KO о леrко выявляеых ошибках и не тратип, HO ;'0 вре\lени на тшаТС;lьное ИСС;lеДОВ<1ние тестируеоi; области rrporpahI, Некоторые из сотрудников заходят еше да;IЫllе, заllO;IНЯЯ базу данных отчетаи о совершенно незначительных, lIe СТОЯlllИХ вниания недостатках IIporpaIhI или ()тчетаи с чуть различаЮlllИИСЯ Оllисанияи одних и тех же IIp06;le, И нота  ы IIросатривае статистику выянления ошибок, но де;lае это не кажлую неделю и не афишируе результаты, BeCTO этоro, еСJlИ какие Jlибо lIоказатели IIривлекают наше вниание, ы ТlIlательно изучае COOT веТСТВУЮlllие отчеты и, если IIроблеа действительно иеется, IIриниае epы, Высшее РУКОВОДСТВО Руконодители Вhlсшеrо уровня не заниаются отдеЛI,НЫИ ошибкаlИ, если только речь не идет об исключитсльно серьезных Ilроблеах, решение которых I1РИХОДИТСЯ отложить, О таких IIроблеах они ЮIУI' узнать от Be;lYlllcro тееТl1ровшика, руководителя rpYllllhl теетироваНIIЯ, руководителя IIpoeKTa, а также от :110601 о сотрудника, lIосчитавшеrо, 'ITO к Оllределенной 
[лава 6: Система отслеживаиия проблем 153 IIроблее необходио I1ривлеЧh вниание руководства, Среди ошибок, заслуживаюших вниания высшеrо руководства, ожно ВhщеЛИТh следую шие: . Поведеllие nр02раммы дискредитирует комnаllию. Так ожно CKa заТh о rрубо тоне сообшений об ошибках, 1I0рноrрафических или не ВllOлне IIРИСТОЙНЫХ изображениях и текстах, руrатеЛhствах, ВКJIЮ ченных в IIрOl1'аный код, Даже если IIporpaa не выводит их на экран и БОЛhШИНСТВО 1I0льзователей IIporpah) их не увидит, HaBep ня ка найдутся энтузиасты, которые IIрОЧТУТ текст IIporpa ных файлов и IlOделятся своии открытияи с окружаюшии, так что в конечно счете эта инфораl\ИЯ BCllJIhIBeT в lnternet и lIечатной периодике, . Ошибки nр02раммы лишают ее тех nреимуществ или блокируют те ее фУllкции, которые были обьявлеllЫ в реКЛUМIlЫХ аllОllсах, либо блокируют вОЗМОЖllости, которых ожидает от Ilее каждый разум IlЫЙ пользователь. Если текстовый IIРОl\ессор не СflOсобен раСllеча тывать тексты и руководитеЛh IlpoeKTa решил не ИСllраВЛЯТh этот недостаток, Torдa должен вешаТhСЯ руководитеЛh более BhICOKOro уровня, То же caoe касается и более елких ФУНКI\ИЙ IIporpahI, от которых, Te не eHee, зависит ее кон куреНТОСllосоБНОСТh, . llоведеllие nр02раммы вызовет резкое Ilедовольство здравомысляще 20 пользователя. Если 1I0дсистеа зашиты от несанкционирован Horo КОlIирования стирает всю информаl\ИЮ на жестко диске нарушите ля, об это необходио IlOстаВИТh в извеСТНОСТh IIрезидента или юриста КОlIании, IIрежде че BhIllycKaTh такую IIporpay в flрода жу, О менее серьезных IIробj\еах руководству сообщать не стоит, как и о тех, которые IIOKa еше не отложены руководителе IIроекта, Иначе вы IIрОСТО 1I0теряете доверие руководства, Руководство IIрежде Bcero интересует состояние IIроекта, ey требует ся наrлядная и объективная итоroвая инфораI\ИЯ, а на анализ 1I0дробно стей у Hero нет вреени, Ba IIридется IIредостаВЛЯТh отчеты с еженедеЛhНЫИ данныи о количестве выявленных, ИСllранленных и ожи даюших ИСllравления ошибок, С этии I\ифраи следует обрашаТhСЯ oco бен но осторожно, избеrая их интерllретаl\ИИ как lIоказателей IIроизводитеЛhНОСТИ работ, Иенно на этой IIO'IBe возникает ножество IIробле и конфликтных ситуаl\ИЙ, Вот неСКОЛhКО IIриеров, . НевеРllая иllтерnретация руководством статистических даllllЫХ nреnятствует nривлечеllиlО к работе Ilад nроектом Il0вых тecти ровщиков. Коrда НОВЫЙ тестировшик начинает работаТh с IIporpa 
154 Часть 11: Приемы и техиолосии тестироваиuя ой, он, как IIравило, вносит ряд IIроектных IIрещюжений и 1I0BTOp но 110дниает BOllpOChl о некоторых отложеННhlХ IIроблеах, В pe зулыате количество составляеhlХ отчетов IIoвыllaется,' и это создает Вllечатление, что качество Hpol'pahI неожиданно УХУДlllИJIOСЬ, Py ководитеJlЮ IIроекта нриходится объяснять все это начальству каж дый раз, коrда к работе IlaJ! IIpoeKTo IIOДКJlючается НОВhlЙ сотрудник, и В конце концОВ он просит руководителя rpYllllhl тести рования не расширять БОЛhlllе свою I'РУПlIУ, . JJевеРllая иllтерnретацuя руководством статистических да1l1lЫХ nреnятствует nроведеllию nоследllею критическо;ю аllализа и1lтep фейса продукта перед тем, как все далыlйшиеe ею измеllеllUЯ будут заnрещеllЫ. Незадолrо до заllрешения дальнейших изенений IIOЛ I,зовател bCKOl'O интерфе йса 11 porpahI ру ководител и IlpoeKTa часто раснростраНЯI()I' среди как ОЖIIО более широкоrо Kpyra co трудников копии экранов, нскоторые нроектные ДOKyeHTЫ и бета копии Hpol'paHOI'O обсенечения. Цель этой акции  собрать как ожно БОJlhlllе :\аечаний от теХНИ'lеских flисателсй, тестировшиков, <:отрудников rpYIIH аркетинrа и теХIIИЧССКОЙ 1I0ддержки и внссти в<:е ИЗСIiСНИЯ, которые будут найдены IlOлезнЫИ, IIOKa это еше возожно, Поскольку все критичсские засчания и IIрсщюжения будут внессны в базу данных, это вЫзовет резкий [lOдъе статисти 'Iеских 110казатслей количества ВhlявляеhlХ нробле, и, хотя на cao деле Нa.Ilежность IIродукта IIрИ это не изенится, руководи теJlЮ IlpoeKTa нридется онравдываться lIеред на'lальсТlЮ, объясняя настояшие IIРИ'IИlihl TaKoro "обвала" ошибок, Чтобhl избежать 'ldКИХ ситуаций, руководители проекта ЧdСТО ОТКdЗhlваются от нроведения таКОI о фИНaJlьноrо маССИРOl!dнноrо анализа IlpoeKTa или же не BHO сят CI'O РСЗУJlыаТhI в базу данных, Нечеrо и rоворить, что в резуль тате CTpaAdeT качество разрабаТhlваеОI'О IIродукта, . КОllтроль руководством статистических да1l1lЫХ заставляет PYKO водителя nроекта следить, чтобы в базу да1l1lЫХ lIе попадали отче ты об од1l0Й и той же nроблеме, составлеllllые раЗllыми тестировщиками. Если чеТhlре тестировщика обнаружат одну и ту же IIроблеу и составят о ней отчеТhI, статистическая сводка IIOKa жет чеТhlре ошибки BeCTO одной, Чтобhl улучшить 1I0казатели, py ководитель IIроекта Вhlнужден будет ОТСJlеживать IIO;lOБНhlе ситуации, 1I0llyCTY тратя рабочее врея  свое или сотрудников, . Под давлеllием статистическою КОllтроля со стОРОIlЫ руководства руководитель nроекта может попросить тестировщиков lIе co ставлятr, отчеты об ошибках nроектироваllUЯ. Обратив вниание, '1'10 IleKOI'Opl.le теСТИРОВlI1ИКИ ДОКу'ентируют СЛИlIIКО HOro Heдo 
[лава 6: Система отслеживаиия проблем 155 статков исходноro IIроекта IIporpahI, руководитеЛh rpYlll1hI тести рования ожст 1IOIIрОСИТh сокраТИТh количество 1I0добных отчетов, В IIрОТИВНО случае руководство ожет интеРllретироваТh БОЛhlllое количество составляеых отчетов как IlOказатеЛh ненадежности IIpO 11'ahI, На cao же деле значитеЛhная чаСТh недостатков IIроекти рования так и не будет ИСllравлена, особенно ближе к КОНI\У разработки  а раз так, вероятно их не стоит докуентироваТh, Такая лоrика конечно же не идет на 1I0ЛЫУ разработке, BOllepBhIx, те ошибки кодирования, которые IIрИНЯТЫ тестировшико за ошиб ки IIроектирования, не докуеIiТИРУЮТСЯ и в резулыате остаются неИСllравленныи, А IЮIПОрЫХ, коrда HacTYllaeT черед следуюшеro BhIllYCKa IlporpaHol'O IIродукта, база данных, в которой оrла бы IIрисутствоваТh инфораl\ИЯ о недостатках lIepBoro BhIllycKa, оказы вается IIУСТОЙ, и все IIРИХОДИТСЯ начинаТh "с нуля", . Под давлеllием статистическою КОllтроЛR со стОРОIlЫ руководства руководитель проекта закрывает отложеllllые отчеты раllьше вpe ме1lи. Некоторые руководители IIроектов СЛИlllКО IIOСllешно откла дывают IIроблеы, которые, возожно, еше оrли бы БЫТh решены, Безаllелшщион н ы  решение он и закры вают соответствуюшие OT четы, чтобы УЛУЧШИТh статистические 1I0казатели, Более разуные и Оllhпные руководители назначают отклаДhlВаеы отчета низкий IIриоритет, с Te чтобы, если у IIроrраиста останется врея, он or все же ИСllраВИТI, Оllисанные в них ошибки  возожно, 110 ходу ИСllравления друrих ошибок в той же части кода, В резулыате ноrие елкие ошибки и косетические недостатки IIporpa1тJ ИСllравляются 110 ходу основных работ 110 отладке, НИЧУТh не затя rивая разработку, Хотя один такой елкий недостаток не влияет на качество резулыируюшеrо IIродукта, если ИСllраВИТh 50 из 100 таких недостатков, IIрОДУКТ наверняка IIроизведет более достойное Вllечат лен ие, А.аинистраI\ИЯ КОlIании нередко требует IIредостаВИТh наrлядные сведения, IlOзволяюшие Оl\еНИТh IIроизводитеЛhНОСТh работы KOHKpeTHoro сотрудника, особенно если хочет ero УВОЛИТh или оказать на Hero давление, И конечно, в lIервую очереДh источнико такой инфораl\ИИ считают базу ;(анн IтJX, Вед!' в ней acca rотовой 1I0дробной инфораl\ИИ о каждо Tec тировшике, IIроrраисте, ру ководителе IIроекта, Практически отражен IIОЧТИ каждый их шаr, Можно узнаТh среднее количество ошибок, выявля eыx KOHKpeTHЫ тестировшико и сраВНИТh ero с 1I0казателяи друrих <:отрудников, Можно сраВНИТh количество ошибок, ДОllускаеых разныи IIрl)l'раистаи, Можно сраВНИТh количество ошибок, выявляеых в раз 1I1,IX IlpoeKTax, и 110 ни сраВНИТh работу их руководителей, Kpoe тот, I()ЖI(() сраВНИТh количество откладываеых и oTBepraehIx ии OPIL'IOB 
156 Часть 11: Приемы и технолоcuи тестирования Против всех 1I0добных 1IOIIЬПОК Оl\енки IIроизводительности сотрудни ков 110 статистически дaHH\'[ необходимо возражать ca\,[ решительны образо, кто бы ни заllрОСИЛ соответствуюшие данн\,[е, Это orYT сделать как руководители, так и саи сотрудники, но в любо случае, какии бы настойчивыми ни б\,[ли требования, как бы ни давило на вас руководство, сколько беСlIокойства ни IIрИЧИНЯЛ бы сотрудник, оказавшийся в I\ентре вниания,  не сдавайтесь, Систеа IIредназначена для отслеживания IIробле с тестируеы IIporpaMH\,[ обеСllечение, а не IIроизводитель ности lIерсонала, которую храняшиеся в ней данные не отражают с ДOCTa точной объеКТИВНОСТhlО, Если се ИСIIОЛI,зовап, для анализа IIроизводитеJIЬНОСТИ сотрудников, это безнадежно 1I0дорвет их доверие к систее (c, lIеречни литературы о КОlIыотеризированно анализе IIрОИЗ водительности lIерсонала в обзоре Ирвинrа, Хиrrинса и Сейфейни (lrving, Higgins, Safayeni, 1986», в резулыате сопротивления lIерсонала нораЛI, нос функuионирование систе\,[ отслеживания IIробле будет нарушено, и из 1I0лезноrо и эффективноro сре;ктва орrанизаl\ИИ работы она Ilревратится в ее тороз и инструент для В\,[ЯСllения отношений, Ba, как руководи те;IЮ rpYfIIl\,[ тестирования, это дороro обойдется, Поэтоу ИСIIOЛI,зование базы данных }UIЯ анализа IIроизводительности lIерсонала  это одна из ca(,[x серьезных тактических ошибок, какие только ожно допустить, lIере'lиеленн\,[е в\,[ше IIроблеы в OCHOBHO каса;IИСЬ 11ОI[ЫТОК отслежи вания IIроизводительноци тестировшиков, Они будут еше серьезнее, если дело коснется сотрудников, котор\,[е Ba не IIOДЧИНЯЮТСЯ,  IIроrраис тов и руководителей IIроектов, Если и их работа будет отслеживаться 110 статистически дан н ы, IIредоставляе\,[ систеой отслеживан ия про бле, то кажд\,[й раз, коrда в базу ;13НН\,[Х будет вноситься инфораI\ИЯ, так или иначе ухудшаюшая их 1I0казатели, эти сотрудники будут IIрОСИТЬ ее удалить, Если в\,[ откажетесь, IIроrраист или руководитель IIроекта об ратится за 1I0ддержкой к CBoey нача;IЬНИКУ, руководителю отдела ана;IИ за 'Iеловеческою фактора, и неизвестно, к KOy еше, И это будет только Сllраведливо, Если систеа IIредоставляет руководству инфораl\ИЮ о IIpO изводительности сотрудников, затраrивая Te ca\,[ их жизненные инте рес\,[, и IIридется зашишаться, Начнется саая настоящая война, и вот как будут действовать в ней ваши IIрОТИВНИКИ, . Вас будут просить удалять из базы даииых все дублирующиеся отчеты о проблемах. Если отчет\,[ и в cao деле дублируют друr друrа, это еше ничею, хотя и будет стоип, Ba врееJlИ, Но как быть с отчетаи о IIOХОЖИХ ситуаl\ИЯХ, которые orYT б\,[ть в\,[званы oд ной и той же OlIlибкой, но orYT и разныи, Если удалить все 11O хожие отчет\,[, оставив только один из них, это южет означать 1I0терю инфораl\ИИ о связанн\,[х с нии ошибках, 
J'лава 6: Система отслеживаuи}/ /1f!ol;'fCM 157 . Вас будут просить удалять из базы даииых все, пусть даже и и(' похожие, отчеты о проблемах, вызваииых одиой и той же виyтpeи ией ошибкой npolpaммbI. Нередко случается, что совершенно раз личные СИМIIТОЫ вызываются одной и той же ошибкой IIporpahI, Следует ли в это случае отозвать все связанные с ней отчеты, Kpoe ОДНОI'О? Хорошо бы, но только как Оllределить, что IIРИ'lина всех Оllисанных в них ситуаций одна и та же? Довериться IIporpa исту') Саостоятельно IIроанализировать rrроrраный код? Не lIоверить IIроrраисту и IIOЛОЖИТЬСЯ на собственное суждение? (Иейте в виду, что lIодобное недоверие всеrда ВОСllриниается крайне болезненно,) . Вас будут просить удалять из базы даииых все вопросы, IIОСКОЛЬКУ они не являются отчетаи об ошибках, Соответственно нечеrо и ждать, что вы получите на них ответы, . Вас будут просить удалять из базы дштых все предложеиия и боль шииство отчетов об ошибках проектироваиия. Конечно, если IIO ведение IIpOl'pabI соответствует Сllеuификаuии, оно не считается ошибкой, Однако, 110 нашеу ОIlЫТУ, около 15% всех IIредлаrаеых теСТИРОВlIlикаи изенений ВОl1JlOlIlаются, если не в теКУlllе, то, 110 крайней epe, в слеДУЮlllе выпуске IIporpaHoro IIродукта, Они очень lIооrают усовершенствован IIporpay, сдслать ее более удобной и lIолезной, Стоит ли удалян из базы данных такую иeH ную инфораuию') . llриi!Oтовьтесь целые дии проводить в спорах о том, какая ошиб ка отражеиа в коикретиом отчете  ошибка кодироваиия или проектироваиия. Особенно rорячии эти СIIОрЫ будут в случае, если вы соrласитесь включать в статистические отчеты о IIроизводитель ности IIроrраистов только ошибки кодирования, . llриi!Oтовьтесь к резким иападкам ие ваших подчииеииых каждый раз, КОlда оии сами будут допускать ошибки в отчетах или при тестироваиии. . Вас будут просить удалять из базы даииых все отчеты о иeвocп роизводимых ошибках. Бывает, что ни ВОСllроизвести ситуаuию, ни найти ее IIрИЧИНУ и в cao деле не удается даже lIосле caoro доб pocoBecTHoro анализа кода OIштны IIроrраисто, У HeKoppeKT Horo или неожиданноrо lIоведения IIporpah! orYT быть caыe разные IIрИЧИНЫ, и не всеrда это ошибки в ее коде, Наllриер, ошибку ожет ДОIlУСТИТЬ ca lIользователь, IIроблеа ожет быть вызвана allllapaTHЫ сбое или скачко наllряжения lIитания, И если IIроrраист не находит ошибки, отчет ухудшает статистичес кис 110казатели качества ero работы, Как долrо он должен искаТI, Оllисанную в отчете ошибку? 
158 Часть 11: Приемы и тех//олосии тестирова//ия . Не ждите, что npolpaммucmbI или руководитель nроекта будут докумеитировать ошибки, выявляеые ии в проuессе разработки, . И одиажды вам будет nредьявлеи судебиый иск. Нередко люди, которых уволили с работы или которые сами уволились изза OKa зываеоrо на них давления, подают на своих бывших работодателей в суд, Если вы являетесь руководителе rруппы тестирования и на основе своей базы данн ых предоставляли руководству сведен ия о производительности работы сотрудника, который судится с вашей копанией, то обвинение ожет быть предъявлено и лично вам, Адвокаты будут беседовать с ваи перед судебны заседание rораз до более серьезно, '1e если бы вы являлись просты свидетеле, Звучит сешно? Но кто будет платить в конечно счете? ЕСJIИ вы дyaeTe, что копания, то rлубоко ошибаетесь, Вероятно, Ba будет позвОлено воспользоваться услуrаи штатноrо юриста, Но если он найдет способ поочь копании за ваш счет, как вы дyaeTe, что будет ТОlда? Наверное, это зависит от копании и от юриста, Назиачеиие базы даииых  способствовать исnравлеиию ошибок, а ие собирать статистические сведеиия для руководства. Юристы Вся инфораuия базы llанных открыта для ИЗУ'lения юристаи при любо судебно проuессе, иниuиированно вашей копании или возбуж дeHHO против нее, . Отчеты о проблеах, в коентариях которых теСТИРОВlIlИК обвиня ет проrрамиста в непрофессионализе, orYT быть использованы против вас, даже если эти обвинения абсолютно справедливы, . В пользу копании ожет rоворить тот факт, что инфораuия базы данных lIодтверждает Тll1ательность тестирования проrраноrо продукта и проведение обстоятельноrо анализа каждой выявляеой проблеы, учитываЮlllеrо интересы пользователей, . Удаление инфораuии из базы данных в uелях сокрытия важных для судебноro процесса сведений считается противозаконны, Реализация базовых функций системы отслеживания про6лем ОднаЖJlhI Ba придется проектировать собственную систе!у отслежива ния пробле\! либо настраивать или перерабатывать уже roтовый проrра 
[лава 6: Система отслежива//ия прvб.'I(',\1 159 ный КОIIЛСКС, В это! разделе предllОлаrается, что ВhIбор структуры IfllфОР' аuии и функuий систеhI IIОЛНОСТЬЮ зависит от вас, Ряд советов 110 t:l: реализаuии, которые IIриведен hI далее, ОСНОВhIваются на наше собствен HO опыте ЭКСlUlуатаuии IlОдоБНhIХ систе, Разуеется, возожны и друrие нарианты решений, которые OI'YT быть и Уllобными, И IlОлезныи, но данный вариант показался Ha о[пиraЛЬНhI. Документирование новых проблем Отчет о пробле,\!l:, ПРИВl:деННhIЙ на рис, 5.1 (ишва 5), является CTaHдap тной форюй докуентирования ВЫЯВJlяеых пробле, Все ею поля бhIЛИ lIодробно описаны в Iлаве 5, Мы peKoeHдye разрешить составление OT 'leToB о I1роблеах B<:e! сотрудника копании, Одни из них, и преЖJ!е Bcel'o тестирОВlIlИКИ, БУllУТ саостоятельно вводить свои отчеты в базу llallHhIX, llруrие же OI'YT предостаВJIЯТЬ отчеТhI в Ilисьенно ВИllе, а BBO дить их БУllУТ сотрудники вашей IPYlll1hI, При вводе оТ'!ета в базу llаНIIЫХ систеа IIронеряет ею IIНфОр\IaUИЮ на ;ЮIlУСТИОСТЬ, Неверные или неПOJlные oT'leThI она oTBepraeT, Поэтоу, еСJIИ КТОJlибо из сотрудников не знает, как правильно заllOЛНИТЬ все поля форы, 11ОIIросите el'o составить oPlel' lIа бумаl'е, СОТРУllНИК l'py!II1hI Tec тирования ВОСIIРOllЗведет IIроБJlеу, откорректирует отчет и введет el'o в KO111>10Tep, В ОIlНОllOльзовательской систее, а также в lIeKOTophIX НОI'О!lользова теJIЬСКИХ после ВВОllа отчета в базу данных систеа раСl1ечатывает три ero КОII ИlI , Первую оставляет у себя составитель отчета, Вторая передается IIрOl'раисту, как правило, через ею руководитеJIЯ, Третья КОI1ИЯ OCTaeT ся в архиве l'рУППЫ теСТlfрования, (В случае возникновения пробле с электронн ыи носителяи инфораuии вы будете счаеТJIИВЫ, что сохран и ли твердую копию каЖДОI'О отчета,) Еженедельные итоrовые отчеты В коние каждой недели форируются итоroвые отчеты, В работе с НЮIИ требуются аккуратность и последовательность: передавайте их всеlда одни и Te же людям и делайте это реIУЛЯРНО, каждую неделю, Сводные отчеты о выявле////ых за //еделlO проблемах содержат ИНфОР\lаuию обо всех проблеах, обнаружеННhIХ за истекшую неделю, На рис, 6,1 по казан приер одноrо из таких отчетов, отсортированноrо по Функuиональ HЫ областя, На рис, 6,2 приведен отчет с теи же даННhIИ, но отсортированныи по степеням важности пробле, Одни руководители предпочитают пеРВhIЙ способ сортировки, а друrие  второй, так как здесь лучше проявить rllбкость и предоставить данные в той форе, которая кажется каждоу из них наиболее удобной, 
160 Часть 11: Приемы и тех//оло.!ии тестирова//ия Новые отчеты о проблемах 08/07 j98 Выпуск 2,10 Проrрамма Calcdog Фv н кu иональная область Незначительная 9900 Незначительная 10000 Фv  кu иональная область Фатальная 9998 Фатальная 10001 Серьезная 9996 Инте DФ ейс табли ц ы Не MOry сделать ширину столбца равной 17, При этом 1-16 и 18-32 попучается прекрасно, Хочу выдепить стопбец попужирным шрифтом Вычисления в таБПИL l е Бесконечный цикл по табпицам, в которых бопее 100 строк Сбой nporpaMMbl, еспи резупьтат вычиспений оказывается длиннее пяти цифр Неверное чиспо отображается в правом нижнем уrлу РИСУНОК 6.1. Свод//ый отчет о выявле////ых за //еделю проблемах, отсортирова///lЫЙ по Фу//кцио//аль//ым областям Новые отчеты о проблемах 08/07/98 Выпуск 2,10 Проrpамма Calcdog Степень ваЖНО GJИ,.", Фатальная Вычисления в таблице 9998 Вычисления в таблице 1 000 1 Бесконечный цикл по таблицам, в которых более 1 00 строк Сбой nporpaMMbl, если результат вычислений оказывается длиннее пяти цифр Степень важности  СеDьезная Вычисления в таблице 9996 Неверное число отображается в правом нижнем уrлу Степень важности := Незначительная Интерфейс таблицы Интерфейс таблицы 10000 Не MOry сделать ширину столбца равной 17, При этом 1-16 и 18-32 получается прекрасно, Хочу выделить столбец полужирным шрифтом 9900 РИСУНОК 6.2. Свод//ый отчет о вЬUlвле////ых за //еделю проблемах, отсортирова////ый по степе//ям важ//ости Еже//едель//ые отчеты о состоя//ии проекта (рис, 6.3) отражают теКУlllее состояние разработки и изенения, произошедшие в нем за неделю, Этот отчет очеНh популярен и, безусловно, полезен, но приведеННhIе в He uифры обязательно следует сопровождаТh подробными коентарияи о ПРИ'lинах нсоБЫ'LILЫХ изенений показателей, 
[лава 6: Система отслеЖИ//{/IIШ/ 111'''1' 1" \1 I () I Состояние проекта Выпуск 2,10 Проrpамма Calcdog Отчет сrенерирован 08/07198, Предыдущий отчет датирован 01/07198. Колво неисправленнbIX ошибок Колво Фатальных ошибок Колво серьезных ошибок Колво незначительных ошибок Bcero  113 265 333 711 С момента составления последнеro отчета выявлено проблем: 182 С момента составления последнеrо отчета исправлено ошибок: 85 С момента составления последнеro отчета отложено решение проблем: 7 Bcero отложено решение проблем: 118 На дату предыдущеrо отчета 100 220 300 620 РИСУНОК 6.3. Ежеиедельиый отчет о состояиии проекта Конец цикла тестирования в коние каждоrо uикла тестирования печатается отчет 3авершеиие цик ла тестироваиuя (рис, 6.4), В течение одноro uикла тестирования проводит ся полный набор тестов очередной рабочей версии проrраноrо продукта, Например, если тестируется проrpаный продукт Calcdog 2,10, в OДHO из ЦИКЛОВ тестируется версия CaIcdog 2.10д, а в слеДУIOl\1е цикле  CaIcdog 2.10е, Завершение цикла тестирования Проrpамма Calcdog Выпуск 2, 1 О Версия л Колво нерешенных Колво Колво Кол во проблем до новых решенных оставшихся т екvш ей ве DC ИИ проблем проблем проблем Фатальные 8 10 9 9 Серьезные 48 12 16 44 Незначительные 80 15 14 81 Bcero 136 37 39 134 Пооб л е м ы в текvше й веос ии: Исправлено 22 Не воспроизводится 5 Отложено 6 Друrие 6 (, 1.7)( РИСУНОК 6.4. Завершеиие цикла тестироваиия 
162 Часть /1: Приемы и теХIIОЛОсИИ тестироваllИЯ в отчете 3аверше//ие Цикла тестироваllИЯ су\ншруются данные о COCTO янии IIpoeKTa, Он очень IIОХОЖ на еженедельные отчеты о состоянии IIpO екта, но функuии их различны, Еженедельные отчеты удобны тем, что формируются достаточно часто, но сравнивать их данные не имеет CMЫC ла: в течение uикла тестирования IIроверяются разные участки и функuи ональные области IIporpaMMhI, и итоroвые данные за одну неделю MorYT сильно отличаться от данных за ДРУI)'Ю, А вот отчеты, состаВ:lяемые 110 завер шении uикла, IЮЗВОЛЯЮТ сравнить lIоказатели, IIОСКОЛЬКУ относятся к одному и тому же набору тестов, Решенные и нерешенные проблемы После внесения в IIporpaMMY изменений или IIрИНЯТИЯ иноro решения 110 отчету о IIроблеме он снова возврашается к вам, Изменения в IIporpaMMY вносятся не всеrда, Одни отчеты откладываются, друrие отверrаются BOB се, ЕСJlИ на отчете стоит резолюuия Исправлено, ВОСllроизведите Оllисан ную в нем ситуаuию, чтобы убедиться, что это и в самом деле так, Если окажется, что IIроблема решена только частично, закройте отчет и составьте новый, в который включите ссылку на lIервый отчет, Если ИСllравление вообше не работает, откройте отчет снова с корректным замечанием, Для каждой неИСllраВJlенной ошибки (отчет о которой возврашен с резолюuией Не может быть исправлено, Соответствует проекту или Не соrласен с предложением) необходимо решить, следует ли наllисать Да в lIоле Считать отложенным (см, ПIаву 5, раздел "Структура отчета о IIробле ме: Считать отложенным"), КОIIИИ возврашенных I1рOl'раммистами отчетов о решенных IIроблемах следует lIередавать их составителям, Именно они эффективнее Bcero CMO [ут IIроверить результативность ИСllравлений, Бывает, что отчеты о IIроблемах теряются или иrнорируются, Поэтому lIериодически, IIримерно раз в две недели, имеет смысл раСllечатывать СводllЫЙ отчет о lIерешеllllЫХ проблемах (рис, 6,5), Этот отчет, составляемый в uелях выявления затерявшихся документов, должен носить совершенно обыденный и беСllристрастный характер, Никоrда не высказывайте ника ких личностных оиенок ни в нем, ни Оllираясь на ero данные, Проблемы rРУlIlIИРУЮТСЯ 110 стеllеням важности без указания TOro, кто конкретно отвечает за их решение, На рис, 6,6 lIоказана более lIерсонифицированная модификация отче та о нерешенных IIроблемах, В ней указывается, какой конкретно COTPYД ник или отдел отвечает за решение Оllисанных в отчетах IIроблем, Не стоит раСllространять такие отчеты lIублично  лучше lIередавать их конкретным руководитслям IIрИ личных встречах, 
[лава 6: Система отслежива//ия проблем 163 Отчеты о нерешенных проблемах 08/07/98 2,10 Проrрамма Calcdog Степень важности = Фатапьная 02/07/98 07/07/98 Степень важности Выпуск 1000 1 Сбой nporpaMMbl, еспи резупыат вычиспений оказывается длиннее пяти цифр 9998 Бесконечный цикл по табпицам, в которых бопее 100 строк 9996 Се р ьезная Неверное чиспо отображается в правом нижнем yrny 06/07/98 Степень важности 22/02/98 Незначитепьная 07/07/98 9900 Не MOry сдеnaть ширину стопбца равной 17, При этом 1  16 и 1 832 попучается прекрасно, 10000 Хочу выдепить стопбец попужирным шрифтом в отчет включены все документы, в поле Код резолюции которых стоит о. Сюда не включены отложенные проблемы, oTBeprHYТbIe предложеНИII и т.п. РИСУНОК б.5. Свод//ый отчет о нереше/l//ЫХ проблемах Отчеты о нерешенных проблемах 08/07/98 Выпуск 2,10 Проrрамма Calcdog rpyo na разработки: интерФейс 06/07/98 Серьезная 22/02/98 Незначитепьная 07/07/98 Незначитепьная Неверное число отображается в правом нижнем yrny Не MOry сдепать ширину стопбца равной 17, При этом 1-16 и 18-32 попучается прекрасно, Хочу выдепить стопбец попужирным шрифтом 02/07/98 rpynna разработки: вычисления Фатальная Сбой nporpaMMbl, еспи резупыат вычиспений оказывается длиннее пяти цифр Бесконечный цикл по табпицам, в которых более 100 строк 07/07/98 Фатальная в отчете представлена та же информаЦИII, что и на рис. 6.5, но акцент сделан на ответственность rруппы разработки за решение перечисленных проблем. РИСУНОК б.б. Свод//ый отчет о //ереше////ых проблемах 
164 Часть 1/: Приемы и тех//олосии тестирова//ия Отложенные проблемы Если в вашей копании не проводятся реryлярные совешания по пере COTpy отложенных пробле, иеет сысл, по крайней epe, каждые две недели распростраНЯТh среди сотрудников Свод//ый отчет об отложе/{//ых проблемах (C, рис, 6,7), В это отчете перечисляются все Ilроблеы, в отчетах о которых стоит резолюция Отложено, наложенная проrраисто или руководителе Ilроекта, Эти отчеты сожет IlpocoтpeTh высшее PYKO водство и В случае необходиости изенить решения, принятые по отдеЛhНЫ вопроса, Kpoe ТOJ'О, все отложенные проблеы остаются перед rлазаи сотрудников, и иноrда случается, что Ilроrрамист Ilридуывает простое и быстрое решение проблеы, которая была отложена изза трудоекости или просто потоу, что хорошеro способа ее решения до сих пор никто не Пред л ожил, Если же совешания 110 пересотру отложенных пробле Ilроводятся в копании реryлярно, сводные отчеты будут на них BeCba Ilолезны, ТОЛh ко стоит добавить в них еше поля Подробное описание проблемы и как ее воспроизвести и Комментарии, Можно ПОСТУПИТh и иначе: распечатаТh отчет в TO виде, в KOTOpO он приведен на рис, 6,7, а к Hey ПРИЛОЖИТh полные копии всех исходных отчетов, Сводные отчеты лучше раздаТh уча стника совешания заранее, чтобы они оrли подrОТОВИТhСЯ к их обсуж ден ию, Отчеты о нерешенных проблемах Проrрамма Calcdog 08/07/98 Выпуск 2,10 Степень важности Ф атальная Вычисления 10001 Вычисления 9998 1 00 строк Степень важности С е о ь е зная Вычисления 9996 С т е п е нь в аж н ос ти Не з н а чит е льн а я Интерфейс 9900 Интерфейс 10000 Сбой nporpaMMbl, если результат вычислений оказывается длиннее пяти цифр Бесконечный цикл по таблицам, в которых более Неверное число отображается в правом нижнем уrлу Не MOry сделать ширину столбца равной 17, При этом 1  16 и 1 8З2 получается прекрасно, Хочу выделить столбец полужирным шрифтом РИСУНОК 6.7. Свод//ый отчет об отложе////ых проблемах 
[лава 6: Система отсле:исиваиия проблем 165 Итоrовые показатели хода работ На рис, 6,8 приведсн отчет Ежеиедельиые итоси, в KOTOpO отображаетс!! ход работ по тестированию и отладке проrрамноrо продукта, Этот отчет ПОllOлняется новыи сведенияи каждую неделю, отражая текущий про I'pecc, а еще один аналоrичный отчет содержит укрупненные итоrи, вычис ляеые в конце каждOI'О uикла тестирования, Можно состаВИТh третий отчет, показывающий, СКОЛhКО незначитеЛhНЫХ, серhезных и фаталЫIЫХ пробле было выявлено в течение каждой недели, В четверто аналоrич HO отчете выявляеые проблеы можно сrруппироваТh по фун кuионалh HЫ! облаСПI, Еженедельные итоrи 08/07/98 Проrрамма Calcdog Выпуск 2,10 Дата конца Новые Друrие Bcero недели ЛDоблемы ИСЛ D авления Dешения н е D ешено 19/06/98 7 2 3 24 26/06/98 6 4 4 22 03/07/98 5 8 2 17 08/07/98 3 4 7 9 РИСУНОК 6.8. Ежеиедельиые итоcu Каждый из перечисленных отчетов llOзволяет увидеrь разработку в проuес се, проанализироваТh ВhlIIолненную часть работы и оuенить перспективы, Для сравнения можно ПОДНЯТh аналоrичные отчеты преДhЩУШИХ проектов, Напри ep, ожно ИСПОЛhЗоваТh их дЛя деонстраuии следующих фактов, . //еобходим еще месяц тестироваllИЯ продукта. Как правило, коли чсство ВЫЯНJlяеых пробле (за неделю или в течение одноro uик ла) в начале тестирования растет, а затем, достиrнув определенноro максиуа, начинает снижаТhСЯ, Неразуно выпускаТh продукт в продажу до TOro, как этот показатеЛh стабилизируется и достиrнет достаточно низкоrо уровня, . Не стоит nрекращать тестирова1lие lIа lIеделю или две раllьше заnлаllироваll1l020 срока и, Te болсе, делаТh это без предупреждения, ОчеНh часто на последне uикле тестирования сотрудники работа ют более напряженно, че обычно,  они выкладываются, ПhlТаяСh найти аксиум оставшихся ошибок, Из итоroвых отчетов видно, что в cao кон це разработки наблюдается всплеск активности и ВЫЯНJrяется и испраВ:lЯется uелый ряд серhезных ошибок и HeдocтaT ков проrраы, 
166 Часть 11: Прие,I,fЫ и техиолосии тестироваиия . OzpOMиoe количество отчетов об ошибках полыоваmеЛЬСКО20 Щ{ терфеuса иа раииих стадиях проекта является иормалыlм.. ОбязатеЛhНО распечатывайте отчеты с итоrовыи показателяи хода работ в коние каждоro проекта  в далhнейше! они orYT очеНh приrо ДИТhСЯ, Что касается текуших отчетов, то это ВОllрОС личных предпочтений, rенерируйте их по epe необходиости и lIередавайте Te, KOy они по требуются, Во ноrих rруппах принято реrулярно предстаНJIЯТh итоroвые показате ли хода работ в виде диаrра и BeCTe с еЖСНСДСЛhНЫИ отчетаи о co стОянии проскта вывешиваТh их для всеобшеrо обозрения, Коrда разработка завершена Korдa разработка подходит к кониу И окончаТСЛhная версия проrра Horo продукта уже практически [отова, насту паст врся ЩIЯ ряда завсрша юших действий, Прежде Bcero следует внести в проrрау все оставшиеся испраНJlения, чтобы не оста;ЮСh ни одноro OTKPhITOro отчета, Коrда продукт будет roTOB окончатеЛhНО и вся буажная работа завершена, составые Акт о выпуске (рис, 6,9), Форма акта о выпуске rруппа тсстирования докладываст, что всс отчсты О Про6лсах paCCOT рсны и нс06ходиыс испраНJIСНИЯ впсссны, ПСРСЧСНh про6лс, рСШС нис которых отложсно, прилаrастся к JЩННlШУ акту, Мы, нижсподписавшисся, утвсрждас выпуск данноro продукта в про изводство, Фаилия OTBCTcrncHHoro лиuа, ставящсro ЗДССh свою ПОДПИСh Фаилия OrnCTCTBcHHoro лиuа, ставящсro здеСh свою ПОДПиСh Фаилия OTBCTcTBCllIlOro лиuа, ставящсrо здссь свою ПОДПИСh ФаИJlИЯ OrnCTcrnCllIlOro лиuа, ставящсro здеСh свою ПОДПИСh Отчст подroтовлсн от исни rРУШIhI тсстирования РИСУНОК 6.9. Акт о выпуске 
[лава 6: Система отслеживаllllЯ проблем 167 В этом акте приводится только одна uифра  количество отложенных проблем, К нему прилаrается копия СводllОЮ отчета о lIерешеllllЫХ пробле. мах (c, рис, 6,7), В последний обязательно следует включить поле Подроб ное описание проблемы и как ее воспроизвести, поскольку это последний шанс изменить принятое решение и всетаки исправить проrрау, Черновую копию акта о выпуске следует передать каждому, кто должен ero подписать, Черновые копии не подписываются (Их поля подписей ожно заполнить сиволаи ХХХ), Раздать их лучше Bcero за день до TOro, как будет принято окончательное решение о выпуске продукта в производ ство, чтобы предоставить OTBeTCTBeHHЫ сотрудника последнюю возмож ность еше раз пересотреть все отложенные проблеы и, если необходио, высказать свои возражения, На следуюший день обойдите их всех и собе рите их подписи на настояше экзепляре акта (все подписи должны быть на OДHO документе), Кто должен подписать акт о выпуске, решаете не вы  это сделает руководство, Акт подписывают все те сотрудники, которые должны одоб рить окончательную версию продукта перед Te, как она уйдет в производ ство, Te, кто не ожет наложить вето на ero выпуск, незаче lloдписынтьb акт, Обратите вниание, что подпись руководителя [РУllIШ тестирования ставится внизу ДOKyeHTa, в rpафе Акт подrотовлен, Это означает, что вы только составляете данный ДOKyeHT, одобрение выпуска продукта в ваши функuии не входит, Вы отвечаете за конкретную техническую часть про изводства, а все стратеrические решения приниает руководство, Если вы чувствуете, что тестирование проведено неадекватно, напишите об это в докладной записке, приложите ее к акту и в ней же объясните, почеу вы так считаете, Открытие отложенных отчетов для подrотовки следующеrо выпуска проrраммноrо продукта После Toro как работа над выпуско продукта 2,10 завершена и он отправлен в производство, копания приступает к планированию выпуска 3, И прежде Bcero, открываются все отчеты с пометкаи Отложено, Счи тать отложенным и, как правило, также Соответствует проекту, Это одна из наиболее важных функций систеы  rарантировать, что отложенные I1роблеы не будут забыты, Ведь они отложены не HaBcerдa, а как прави ло, до следуюшеrо выпуска проrраы, и предполаrается, что все они в свое врея будут решены, Проrpаное обеспечение, управляюшее базой данной, должно скопи ровать все отчеты, отложенные в преJщдуше выпуске проrраммноrо про дукта, во BpeeHHыe файлы, изенить их, как указано ниже, а зате 
168 Часть 11: Прие,I,fЫ и техиолоши тестироваиия [1Oестить в файлы данных HOBOro выпуска, Зате все отчеты должны быть распечатаны, При переносе в файлы очереДНОI'О выпуска отчеты одифиuируются слеДУЮЩI1 образо: . Значение поля Резолюция изеняе'fСЯ на Рассматривается, . Изеняются значения полей Выпуск и Версия, . Отчета присваиваются новые Hoepa (поле Отчет о проблеме N2), . Очищаются все поля подписей и соответствующих дат, за исключени e подписи составителя отчета, . Очищается поле Комментарии, Значения остальных полей отчетов следует оставить прежнии, После поещения в новую базу данных все эти отчеты ИСПОЛhЗуются как обыч но, На практике некоторые копании сначала анализируют отчеты и отби рают те, которые ПОДлежат повторному открытию, Но даже авторы данной книrи разделились во нениях, стоит ли осуществлять такой IIредваритель ный отбор или лучще открывать все отложенные oPleThI, Отслеживание заплаток Некоторые копании в ответ на жалобы ПОЛhЗователей пищут так Ha зываеые заlUlатки, Они представляют собой небольшие изенсния, BHO сиые в проrрау для исправления конкретной ошибки, При такой технолоrии работы нетрудно пропустить 110бочные эффекты, ПОСКОJIЬКУ изенения вносятся на скорую руку и не слишко тшательно тестируют ся, Заплатки рассылаются ПОЛhЗователя и сохраняются в архивах копа нии, Новые ПОЛhЗователи [1Oпрежнеу получают исходную версию проrpаноrо обеспечения и при желании OryT обратиться в копанию за заплаткаи, При подroтовке очередноro выпуска проrраноrо обеспечения в Hero интеrрируются все заплатки предыдущеro выпуска, Однако нередко случа ется, что о какойнибудь из них просто забывают, Убедиться, что ни одна из заплаток не забыта, обязана rруппа тестирования HOBOro выпуска, Если в вашей копании приеняется описанная стратеrия поддержки проrрамноrо продукта, в набор возожных резолюuий на отчетах о про блеах стоит добавить еще одну  Написана заплата, Такая резолюuия будет означать, что проблеа решена BpeeHHO и исправления необходи o будет внести в новый выпуск проrрамы, Korдa это будет сделано и соответствующий код HOBOro выпуска будет как следует проверен, вы из ените резолюuию на Исправлено, Чтобы напонить сотрудника о необ 
[лава 6: Система отслеживаиия проблем 169 ХОДИМОСТИ внесения в IIporpay оставшихся заllлат, ожно lIериодически раСllростраНЯТh СВОДНhIЙ отчет Текущие заплаты (рис, 6,10), Текущие заплаты Проrрамма Calcdog 08/07/98 Выпуск 2,1 О Серьезная 9996 Незначительная 10000 Фатальная 9998 Неверное число отображается в лравом нижнем уrлу Хочу выделить столбец лолужирным шрифтом Бесконечный цикл ло таблицам, в которых более 100 строк РИСУНОК 6.10. Сводиый отчет о текущих заплатах Дополнительные замечания о документировании про6лем rлаВНhI IlрИНUИIIО 1I0строения и ЭКСllлуатаuии СистеhI отслеживания IIробле должна бhIТh конuентраuия на ВhIявлении и устранении ошибок, Никакой 1I0ЛИТИКИ, никаких оценок, никаких а;щинистраТИВНhIХ функuий  ТОЛhКО ОllIибки, Зада<Iей I'РУШlhI тестирования является ВhIявление аксиуа IIробле, их основатеЛhНhIЙ анализ, составление аксиа;IhНО эффеКТИВНhIХ отчетов и IIредоставление Te, кто будет с нии работаТh, IIpOCTOro и удобноro средства их анализа и ДОlIолнения, Это средство должно IIредостаВЛЯТh 1I0JIьзователю ВОЗОЖIIОСIЪ поиска и отбора информации  как итоrовой, так и 110 отдеЛhНhI отчета, и в конечно счете аксиалhНО Сllособство вать ИСllравлению ошибок и недостатков IIporpahI, За roДhI раБОТhI ы усвоили неСКОЛhКО очеНh ваЖНhIХ уроков, О некоторых из них уже paCCKa ЗhIвалОСh в IIреДhIДУЩИХ разделах этой rлаВhI, а сейчас Ba IIредстоит узнаТh о тех, которые заслуживают особоro вниания, Выработка критериев оценки важности выявляемых проблем КаЖДhIЙ тестировщик и вся rpYlllla тестирования 1I0СТОЯННО 1I0дверrа ются критике за IIРОllущеННhIе ошибки и отчеТhI о елочах, не заслужива ющих вниания, В течение разработки руководитеЛh IIроекта жалуется на излишние отчеТhI, а 1I0сле ее завершения, коrда начинают IIРИХОДИТh жа лобhI от 1I0льзов,пелей, ВhIскаЗhIвает недовольство 110 11 О воду каждой най денной ии ошибки, РуководитеЛh rpYllllhI тестирования шкет 1I0ВhIСИТh эффеКТИВНОСТh работы своих 1I0дчинеННhIХ, если будет 1I0СТОЯННО IIpocaT риваТh отчеТhI и IIрОВОДИТh обучение lIерсонала, но каких бhI УСllехов он 1111 
17 О Часть 11: Приемы и тех//олоcuи тестирова//ия добился и какюlИ бы классныи спеuиалистаи ни стали все без исклю чения тестировщики, жалобы все равно не прекратятся, Каждый тестиров щик периодически сталкивается со спорныи особенностяи поведения проrраы, которые ожно докуентировать как ощибочные или не[юнят ные, а ожно и пропустить, Если пропустить такую особенность, то в консчно счете может оказаться, что это была саая настоящая ошибка, А если составиТh отчет, возожно, ero рассотрение будет для друrих COTPYД ников пустой потерей вреени, В хорощо орrанизованных rруппах тести рования обсуждению подобных вопросов и выработке оптиальной стратеrии принятия рещений уделяется достаточно HOro вниания, Балан сируя ежду риско пропустить ощибку И вероятностью впустую потр,,!'ить рабочее врея сотрудников, спеuиалисты rруппы тестирования должны заранее расставить приоритеты: какая из ЭТих двух неприятностей будет иеть худшие последствия, Каждый раз, составляя отчет о проблее, тестировщик оuенивает, CTO ит ли она внесения в базу данных  стоит ли то изенение, которое он пре;wаrает, вреени и усилий разработчиков, . В каких случаях неверное поведение I1porpahl стоит докуенти ровюъ? Одни тестировщики считают, что докуентированию подле жит любое неверное действие проrраы, Друrие впадают в противоположную крайность и докуентируют только те ошибки, которые вызывают разрущение данных или препятствуют дальней щей эксплуатаuии проrраы, Если же существует обходной путь выIIлненияя необходиых действий, они не докуентируют найден ную ощибку, . Если в проrрае Ba чтото не нравится или вы считаете, что некоторые ПОЛhЗователи будут недовольны какойлибо ее особенно стью, стоит составить отчет и указать в He, что данная особенность проrpаы ожет считаться ее HeДOCTaTKO, или описать изенения, которые, на ващ нзrляд, значительно ее усоверщенствуют, . Если неверное поведение проrраы похоже на то, которое уже описано в OДHO из отчетов, ожно не составлять новый отчет до тех пор, пока в ходе дальнейщеrо тестирования не будут выявлены достаточно значительные различия, . Если не удается воспроизвести увиденную ошибку, но при это вы хорощо пониТе, в чем она заключалась и что вы делали, перед Te как она проявилась, отчет о ней впОлне ожет оказаться полезньш, . Если в проuессе эксплуатаuии проrрамы вы допускаете слищко HOro ошибок, стоит [юдуать, не является ли их причиной неудоб ный или нечеткий интерфейс проrраы, 
[лава 6: Система отслеживаиия проблем 171 . Стоит ли докуентировать недостатки интерфейса после TOro, K<lK этап разработки, на KOTOpO разрешено ero изенять, завершен? Критерии оuенки необходиости докуентирования пробле еняют ся по epe продвижения разработки, На ранних стадиях тестирования, коrда проrраа сбоит каждые несколько инут, возожно, иеет сысл докуентировать только наиболее серьезные ошибки, По epe Toro как проrраа будет становиться все более стабильной, вы будете докуенти ровать все больше елких деталей  все, что покажется Ba спорн ы или неправильньш, Ближе к кониу разработки ожно снова оставить елкие недостатки интерфейса и сконuентрироваться на наиболее серьезных ошиб ках кодирования, Точность и уверенность оценок приходит с опыто, Их критерии при ходится несколько корректировать, приспосабливаясь к требования каж доro HOBOro руководителя проекта или руководителя rpYIIIIhI тестирования, CTaHдapTa каждой новой КОI1ании, Иенно нзrляды руководства и выб ранная и стратеrия разработки в конечно счете определяют принuипы отбора докуентируеых пробле, Однако какии бы ни были выбранные критерии, они не rарантируют для вас полное отсутствие ошибок, Рассотри Приер, коrда найдена ошибка, очень похожая на одну из тех, отчеты о которых уже включены в базу данных, Тут возожны два варианта действий; (, Вы решите не докуентировать новую ошибку изза ее сходноСти с предыдушей, . Если вы правы и действительно иеете дело с одной и той же ошибкой, то СЭКОНОите врея сотрудников, читаюших ваши отчеты, . Однако, если вы ошибаетесь, проrраист исправит одну ошиб ку и оставит друrую, поскольку никоrда о ней не узнает, В pe зулыате рискует пользователь  он ожет получить плохо работаюшую проrрау, 2, Вы решите, что, вероятнее Bcero, столкнулись с разныи ошибкаи, и составите новый отчет, . Если вы правы, обе ошибки будут исправлены, . Если нет, будет зря затрачено врея сотрудников копании: ваше  на составление отчета, руководителя проекта  на ero чтение и оценку, проrраиста  на исследование и анализ, в результате KOTOpOro он выяснит, что ошибка уже исправлена, и снова ваше  на повторное тестирование и закрытие отчета, Это риск проuз водителя  ведь в конечно счете все это выливается для Hero в дополнительные атериальные и BpeeHHыe затраты, 
172 Часть 1/: Приемы и техноло<uи тестирования Вы документируете ошибку ВЫ ее и2Норируете Это новая Ошибка Ошибка остается ошибка исправляется (риск пользователя) Это старая Потеря времени Ошибка ошибка (риск производителя) исправляется РИСУНОК 6,11, Проблема пОХОЖIIХ ошибок Получается, что за каждую вашу ошибку IUlатит одна из сторон, Как же БЫТh и че лучше рискнуть? Внедряя в коллективе тестировшиков определенные принuипы и BЫC казывая требования и пожелания, необходио ПрИНЯТh во вниание ряд психолоrических особенностей исполнителей, которые отразятся на каче стве их работы, Канер описал эти особенности на основе исследований уже упоинавшейся теории интерпретаuии сиrналов (Grсеп & Swcets, 1966), Вот к каки BЫBoдa он пришел, 1, Иея дело с опытны и квалиФиuированны тестировшико, не ПhпайтеСh искаТh СIlособы наУЧИТh ero лучше различаТh, являются ли две похожие ситуаuии реЗУЛblато одной и той же ошибки проrра Ы или разных, Для достаточно отличаюшихся ситуаuий он будет состаВЛЯТh два отчета, иноrда ошибаЯСh и приниая одну ошибку за две, В более похожих случаях он будет состаВЛЯТh ТОЛhКО один отчет, ОПЯТh же, иноrда ошибаЯСh и приниая две разные ошибки за одну, Если под ваши давление он будет старатhCЯ ВЫЯВИТh БОЛhше ошибок, то неизбежно начнет чаше состаВЛЯТh дублируюшиеся отче ты, а если llOПhпается уеНhШИТh количество дублируюшихся отче тов, то возрастет количество пропускаеых и ошибок, 2, ВЛИЯТh на производитеЛhНОСТh работы тестировшика ожно, но He обходио знать о последствиях, Если ПОПрОСИТh ero сокраТИТh коли чество дублируюшихся отчетов, он это сделает, Но при это БОЛhше похожих, но различных ошибок останутся недокуентированныи, Мало кто из руководителей проектов пониает неизбеЖНОСТh TaKO [о побочноro эффекта, 3, Влияние на производитеЛhНОСТh работы тестировшика ожет быть и неявны, однако с теи же последствияи, Если убедить ero, что в данной конкретной Проrрае источнико похожих ситуаuий с БОЛhШОЙ веРОЯТНОСТhЮ будет одна и та же ошибка, он уеньшит количество дублируюшихся отчетов и при это больше похожих, но различных ошибок останутся нсдокуентированныи, 
[лава 6: Система отслеживаиия пробле,\f 173 4, Еще одни приеро неявноro влияния на производитеЛhНОСТh pa боты тестировщика ожет БЫТh сознание различных последствий допускаеых ошибок, Если руководитеЛh проекта не предъявляет особых претензий за пропущенные ошибки, зато очеНh недоволен, кота в двух отчетах описывается одна и та же проблеа, БОЛhШИН ство тестировщиков будут реже составлять дублирующиеся отчеты (и пропускаТh БОЛhше похожих, но различных ошибок), Все сказанное о взятой для приера проблее похожих ошибок прие нио и к любы друrи решения, которые приходится приниаТh тести ровщика, Каждый из них будет врея от вреени допускать ошибки, и Ba как руководителю проекта или руководителю rруппы тестирования He обходио реШИТh, последствия каких из этих ошибок будут более серhез НhШИ, Что хуже, ycop в базе данных или недокуентированные ошибки, Можно ли ПРОПУСТИТh серhезную ошибку, которая показалаСh не стоящей вниания или лучше рИСКНУТh ВКЛЮЧИТh в базу данных пустяковый отчет, по KOTOPOy никто никаких изенений ВНОСИТh не будет? Можно ли про пустить серhезную ошибку в утвержденной спеuификаuии иЛи лучше рис кнуть потраТИТh врея сотрудников на рассотрение вопроса, который поднят слишко поздно, OTBeTO на все эти вопросы ожет БЫТh ТОЛhКО заранее выработанная политика, которая позволит Ba и ваши подчинен НhШ действовать более llOследоватеЛhНО и уверенно, Похожие отчеты Как следует поступаТh, кота непраВИЛhные действия проrраы в двух различных ситуаuиях очеНh похожи? Десяток отчетов об одной и той же проблее  это явно недопустиая трата вреени проrраиста и руководителя проекта, Если ее ожно избе жаТh, следует сделаТh для этоro все возожное, А вот apryeHThI в полыу свободноro включения в базу данных отчетов о похожих непраВИJlhНЫХ действиях проrраы, . В двух похожих отчетах OryT описываться различные ошибки, Если не ВКЛЮЧИТh в базу данных один из этих отчетов, соответствующая ошибка не будет исправлена. . Одна и та же ошибка ожет быть допущена в двух разНbIХ фраrен тах кода, Если докуентироваТh ТОЛhКО один экзепляр, как про rраист узнает о BTOpo? . Второй отчет о сложной проблее ожет предоставить проrpаи сту дополнитеЛhНУЮ инфораuию, которая поожет ВЫЯВИТh ее источник, Чем саостоятеЛhНО решаТh, какой из отчетов будет по лезнее проrpаисту, лучше предостаВИТh ey аксиу ИНфОр\!:I ции, 
174 Часть 11: Приемы и теХIIОЛОCUИ тестироваllИЯ . Если возвраТИТh сотруднику отчет с поеткой, что проблеа уже зареrистрирована, как ey lIOСТУПИТh, СТОЛКНУВШИСh с ней повторно? Следует ли состаВИТh отчет снова? При работе с сотрудникаи, не являюшиися членаи rруппы тестирования, следует опредеЛИТhСЯ в это вопросе, А вот неСКОЛhКО рекоендаuий, относяшихся к обязанностя тестиров шиков, способствуюших УЛУЧIII,.! Iltю орrанизаuии работ: . Каждый тестировшик обязан ознаКОИТhСЯ со всеи проблеаи, выявленныи в той части кода, которую он тестирует, Он не должен состаВЛЯТh нОвых отчетов о проблеах, которые уже зареrистриро ваны в базе данных, Если появилаСh дополнитеЛhная инфораuия, ее ожно внести в поле Комментарии  для этоro оно и предназна чено, Второй отчет в это случае ТОЛhКО создаст путаниuу, PYKOBO дители rрупп тестирования расходятся во нениях о TO, сколько вреени новый сотрудник должен затрачиваТh на изучение уже иеющихся отчетов, Одни считают, что тестировщик должен озна КОИТhСЯ со всеи ранее составлеННЫ11 отчетаи до TOro, как co ставит свой первый отчет, Друrие предлаrают делаТh это постепенно по ходу работы и допускают БОЛhшее количество повторений, . Тсстировшики должны реrулярно просатриваТh базу данных, что бы Бытh В курсе всех выявляеых пробле, СТОЛКНУВШИСh с ситуа uией, похожей на одну из уже описанных, и следует включаТh в отчеты перекрестные ссылки (Hoepa связанных отчетов в поле Комментарии), . До TOro, как будет совершен но точно установлено, что похожие отчеты действитеЛhНО относятся к одной и той же проблее, ни один ИЗ них не следует закрываТh как дублируюшийся, rораздо лучше ПОЛhЗоваТhСЯ перекрестныи ссылкаи, Не стоит и объеДИНЯТh по хожие отчеты в один, Реrистрация различных мнений Тестировшики, руководители проекта, проrраисты и друrие члены KoaHДЫ orYT очеНh СИЛhНО раСХОДИТhСЯ во нениях по поводу отчета о какойлибо проблее, Иноrда их разноrласия вызывают отчаянные споры, Чтобы ПООЧh делу, необходио прежде Bcero обеспеЧИТh ВОЗОЖНОСТh реrистраuии в систее нения каждоrо из участников разработки, Вот какии средстваи это реализуется: . Степень важности и Приоритет, СтепеНh важности проблеы опре деляет тестировшик, а ее приоритет задает руководитеЛh проекта, Если в систее будет ТОЛhКО одно из этих полей, постоянные спо 
rлава 6: Система отСлеживаиия проблем 175 ры ежду тестировщикаи и руководителе проекта неизбежны, Наприер, тестировщик ожет llOсчитаТh ошибку фатаЛhНОЙ, в то врея как руководитеЛh проекта по какимлибо соображен ия Ha значит ей низкий приоритет, Если не IIOЗВОЛИТh каждоу из них зареrистрироваТh свое нение и в ходе обсуждения они не придут к единоу выводу, то ЧhЯ оценка должна побеДИТh'? И почеу вообще одна из них должна побеЖJI3Тh'? Не проще ли включить в отчет обе оuенки и позволить сортироваТh отчеты по любоу из полей: как по полю Степень важности, так и по полю Приоритет, . Считать отложенным, РуководитеЛh проекта может НaJlOЖИТh резо люuию, 110 которой проблема не просто откладывается, а вообще не будет решена (например, Соответствует проекту или Не воспроиз водится), Если тестировщик считает, что к oТ'JeTY необходимо будет еще веРНУТhСЯ, он может ВОСllOЛhзоваться отдеЛhНЫМ полем , Счи тать отложенным, Еели н этом ноле отчета написано Да, он С'lита ется отложенным и ВКЛЮ'lается во все сводные отчеты об отложенных проблемах, . Комментарии, ДЛЯ ЭТОI'О IIOЛЯ oPleTa в базе данных ;IOJlЖНО быТl> зарезервировано ДОСТ,IТО'IНО места, ПОСКОЛhКУ оНо I1С[IOЛ ьзуетея J.;I}I документирования хода обеуждеНI1Я проБJlеы и реrиетраuии раз личных мнений сотрудников, В ОДНОПОЛhЗоватеЛhСКОЙ системе оно излишне, а вот во МНОЮПОЛhЗоватеЛhСКОЙ применяется чрезвычай но активно, С ero ПОМОЩhЮ просто и эффективно решается БОЛЫIlая чаСТh коммуникаuионных проблем, В частности, оно представляет собой своеобразный электронный фОРУ\-I, [де тестировщик \-lOжст рассказаТh, почему он считает данную проблему исключитеЛhНО важ ной, проrраммист может показаТh, наСКОЛhКО рискованно корректи ровать соответствующую чаСТh кода, а руководитеЛh проекта может оБЪЯСНИТh, почему нелhЗЯ ОТЛОЖИТh эту проблему до следующеro BЫ пуска, . Пересмотр отложеииых отчетов, Мы рекомендуем реryлярно про ВОДИТh совещания для пересмотра отчетов, помеченных как Отложе но и Считать отложенным, Ни один из таких отчетов не должен БЫТh закрыт до Toro, как он будет рассмотрен на одном из совеща ний. Если между руководителем проекта, тестировщиками, rруппой технической подпержки, техническими писателями и менеджером по маркетинry ОСТaJIИСh хоть какието разноrласия по поводу KOHKpeT HOro отчета, все они MOryт БЫТh улажены в ходе общеro обсуждения, Участники совещания обсуждают проблему, ее возможные послед ствия, риск, связанный с исправлением проrраммы, и принимаЮ'l' решение, 
176 Часть 11: Приемы и тех//олоcuи тестирова//ия . Решено и Закрыто. РуководитеЛh проекта может посчитаТh пробле му решенной. если она отложена или проrрамма исправлена. но заКРЫТh отчет вправе ТОЛhКО тестировщик. Если pe'lh идет об исправ лении, необходимо еще провеРИТh, праВИЛhНО ли оно работает, а отложенный отчет должен БЫТh обсужден на соответствующем COBe щании. . ТОЛЬКО автор отчета может ею исправить, БОЛhlIlИНСТВО людей обижаются, Korдa ктониБУДh изменяет их отчеты. Но rлавная при чина указанноro правила не в обидах, а в том, что исправление отчета не ero автором может привести к серhезным недоразумени ям и разноrласиям. Можно добаВИТh в отчет комментарии, можно ПОilрОСИТh ero автора чтото измеНИТh, но ни в коем случае не сле дует делаТh этоrо самостоятеЛhНО. И автор отчета может внести предложенные изменения, а может и отказаТhСЯ  это ero право, которое не должен нарушаТh даже руководитеЛh проекта, Единствен ным исключением из этоrо правила может БЫТh ситуаuия, коrда отчет предоставлен пользователем или сотрудником, не янляющимся членом rРУIIlШ разработки, В этом случае отчет может БЫТh плохо составлен, а ero автор заранее [отов к тому, что документ будет из менен, . Отчеты ие должиы подвеРlаться фильтрации. Некоторые ведущие тестировщики не позволяют ВВОДИТh в базу данных отчеты, с KOTO рыми они не соrласны, Такая фИЛhтраuия часто ВhlIlолняется по I1риказу или с соrласия руководителя проекта, Однако наш опыт показывает, что персонал rpYIIlIhl технической подпержки, техничес кие писатели и друrие ответственные сотрудники компании MOryT смотреть на вещи иначе, чем ведущий тестировщик, и при этом их мнение может быть очеНh полезным. Проектирование продукта  не ero работа, и, если предложенные KeMTO из сотрудников изменения ему не нравятся, это еще не значит, что предложение не может БЫТh ХОрОlIlИМ. Проrрамма изнутри [руппа проrраммирования может ПОПрОСИТh тестировщиков указывать, в каком модуле находится выявленная ошибка или к какой ФункционаЛh ной области проrраммы она относится, Если таких областей 1 О или даже 30, это несложно, но если их 50 или 500, задача тестировщика СИЛhНО yc ложняется, Чтобы предостаВИТh проrраммистам нужную информаuию, придется заrЛЯНУТh в проrраммный код. Само по <:ебе изучение кода проrраммы для ее отладки полезно, Оно позволяет rораздо быстрее ВЫЯВИТh некоторые спеuифические ошибки, 
[лава 6: Систем" отсле:исиваиия проблеJlI 177 Если определенный МОДУЛh очеНh плохо написан, ero можно ПОЛНОСТhЮ переписаТh, Если обнаРУЖИТh, что проrраммисты постоянно допускают одни и те же ошибки, руководство может орrанизоваТh занятия для по вышения их квалификаuии, Однако собрать всю эту информаuию не так просто, Быстро найти ошибку может ТОЛhКО проrраммист, занимающийся отладкой данноro про 11'aMMHoro продукта, ТОЛhКО он знает, что в каком модуле делается, и ТОЛh ко ОН может точно опредеЛИТh функuионаЛhНУЮ облаСТh, к которой относится выявленная ошибка, Проrраммисты просто не хотят занимаТh ся документированием этих вопросов для системы отслеживания проблем, Опытиые и квалифицироваииые тестировщикu MOlym доволыю точио определять, в каком модуле и в какой фуикциоиальиой области npOlpaммbI произошла ошибка. Одиако ие всеlда их предположеиuя вериы  точиый ответ иа эти вопросы даст только npOlpaммucm, заиимающийся отладкой продукта. Наш опыт показывает, что иа выясиеиие тестировщиками подобиой ииформации тратится иеоправдатю МIЮlO времеии. Мы рекомеидуем предоставить эту работу npOlpaммucmaм. Не стоит изучаТh проrраммный код, собирая информаuию для отчета, разве что в особых случаях, Это работа ПрOl'раммистов, и они IlpeKpacHo с ней справятся и без вашей помощи, Несколько замечаний о форме отчета о проблеме в пятой rлаве ПРИВОДИЛОСh llOдробнейшее описание формы отчета о проблеме. Этот раздел содержит неСКОЛhКО полезных советов, которые приrодятся вам при создании собственной системы отслеживания проблем. Если же вы не собираетеСh этим занимаТhСЯ, можете их смело ПРОПУСТИТh. . Списки названий, имен и ДOlIУСТИМЫХ значений полей отчетов луч ше храНИТh в виде отдеЛhНЫХ файлов данных. При вводе ПОЛhЗова телем данных в поля отчета система должна сразу же провеРЯТh их ДОПУСТИМОСТh. Например, это может касаТhСЯ полей Проrрамма, Функциональная область и Т.П, Для некоторых полей можно разре ШИТh значения Неизвестно или ?, Например, знак вопроса можно постаВИТh в поле Версия, если автор отчета не знает точно, в какой версии он обнаружил описанную проблему. Ответ на вопрос Може те ли вы воспроизвести проблемную ситуацию? может записываТh ся сокращенно и иметь одно из трех значений: Д, Н, И (ИНОIЛ;t), 
178 Часть 11: Прие,I1Ы и техиолоcuи тестироваиия . Для 11'аф отчета Функциональная область и Ответственный в базе данных лучше имеТh по два поля, Первое из них длиной от 3 до 5 символов предназначается для ускорения ввода: в Hero можно BBO ДИТh иниuиалы или аббревиатуру, ассоuиированную с полны зна чением, автоматически подставляемым системой во второе поле, Korдa приходится ВВОДИТh 110 MHory отчетов за раз, это очень эко номит время, Поле аббревиатуры можно и ПРОПУСТИТh, введя во второе поле полное значение, . При вводе отчета в систему она должна автоматически IIрисваиваТh IIОЛЮ Резолюция значение Рассматривается, . Никто, кроме тестировщика, не должен имеТh право ВВОДИТh значе ние Закрыто в lIоле Состояние. По умолчанию этому полю должно присваиваТhСЯ значение Открыто, Терминолоrия в этом разделе определяются некоторые ключевые термины орrаниза uии баз данных. Система управлеllия базами даНIIЫХ (СУБД) представляет собой набор КОМПhютерных проrрамм, позволяющих ОllредеЛИТh CTPYKTY ру базы данных, ВВОДИТh и редактироваТh данные и rенерироваТh OT четы, Скорее Bcero, вы выберете для разработки системы отслеживания Ilроблем одну из имеющихся на рынке современных СУБД или срсдств разработки приложений, обладающих возможно стями работы с база1И данных (это может быть Oracle, MS Access, Delphi и т,п,), По отношению к выбранному инструментаЛhНОМУ средству ваша система будет приложением, но для пользователей, считая и вас, ее можно назваТh СУБД, Файл  это набор информаuии, которую операuионная система хранит вместе под одним именем, База данных может СОСТОЯТh из множества файлов. Вот упрощенный пример орrанизаuии данных для системы отслеживания проблем, . В rлавном файле данных хранятся все отчеты о проблемах, Если их очеНh MHOro, можно раздеЛИТh их на неСКОЛhКО файлов, воз можно, по типам или датам. . В индексных файлах хранится информаuия о местоположении каждоro отчета в rлавном файле данных. В одном индексном фаЙJlе эта информаuия может БЫТh отсортирована по датам отче тов, в ;lPYI'OM по функuиона;IhНЫ\-1 областям и т,д. 
[лава 6: Система отслеживаllИЯ прuбле,1/ 179 . Во ВСПОМOI'атеЛhНЫХ файлах хранятся перечни допустимых значе ний отдеЛhНЫХ lIолей, Они используются для проверки вводимых данн ых и для предоставлен ия llO"1hЗоватеJIЮ возможности выби рать значения полей из списка, Отчеты с недопустимыми дaHHЫ ми системой отверrаются. Поле  это простейший значимый элемент данных записи, Напри мер, Дата, Приоритет, Резолюция являются полями отчета о пробле ме, Форма (или Форма ввода даиlIЫХ)  это аналоr бумажной формы, отображенный на экране компьютера, В форме показано, какая информаuия и куда должна БЫТh введена, Во мноrих системах ПОЛhЗователи MorYT заПОЛНЯТh распе'lатываемые бумажные формы для IlOследующеrо ввода данных оператором, а MorYT ВВОДИТh ин формаuию и самостоятеЛhНО, Запись  это лоrИ'lеский элемент базы данных, Например, в систе ме отслеживаНIIЯ Ilроблсм записью ЯН;lяетси отчет о проблеме. Отчет  это сводная или итоroвая информаuия, которую можно ПОЛУЧИТh на основе ИСХО;lНЫХ данных, Обычно определение отчета создастся один раз е IЮМОЩhЮ соответствующих инструментаЛhНЫХ средств (языка ПрОl'раммирования или l'eHepaTopa отчетов), а затем сам отчет формируетея IlеРИО;lически или ТОlда, KOrдa в нем возни каст неоБХОДИМОСТh, ('еllераторы отчетов позволяют описываТh не ТОЛhКО информаuию. которая должна быть пре;tcтавлена в отчете, но и ее форматирование  отступы, выделении и Т.II, Современные средства IIOЗВОЛЯЮТ rенерироваТh IlpeKpacHo оформленные профес СИОНaJlhные отчеты, в которых данные представлены в текстовом виде, а также в виде разнообразных ;lllill'paMM. В системе отслеживания проблем входные данные также называются отчетами. Эта неБОЛhшая путаниuа не должна вас смущаТh. Для определенности входные данные в книrе обычно называются исход //Ый отчет или отчет о проблеме, а выходные  своо//ый или итОi!О вый отчет. 
Fлава 7 Разработка тестов Назначение этоii rлавы Эта rлава посвящена разработке эффективных наборов тестов "черноrо ящика" . . "Черный ящик" против "стеклянноrо". Хотя в предыдущиХ разделах и рассказывалось о методах тестирования "стеклянноrо ящика", данная кни ra rлавным образом посвящена первой технолоrии. В этой rлаве подроб но рассказывается о том, в чем состоит эта технолоrия и как анализировать проrрамму в целях разработки наиболее олтимальных и эффективных тестов. . Наборы Тестов против плана тестирования. В центре внимания этой rлавы находятся отдельные тесты и небольшие наборы связанных тестовых при меров. В двенадцатой rлаве этот рассказ продолжается рассмотрени ем процесса разработки плана тестирования  набора тестов, охватывающих всю проrрамму. Но чтобы rлубже понять и оценить то, о чем в ней рассказывается, стоит сначала на практике изучить TeXHO лоrию данной rлавы и самостоятельно протестировать хотя бы одну про rpaMMY. Упражнениямя читателеii (и не ТОЛЬКО.l1ля студентов) Выберите для тестирования какуюнибудь проrрамму. Вполне подойдет и коммерческий продукт, создатели KOToporo утверждают, что он полностью протестирован. Весь продукт тестировать не нужно, достаточно выбрать пять полей ввода данных  они обычно имеются в любой лроrрамме. Наиболее очевидным выбором может быть небольшая база данных, но и текстовый процессор как минимум позволяет ввести размеры отступов, размеры CTpa ницы документа и друrие пара метры настройки проrраммы. Особенно xo рошо, еспи можно вводить такую конфиrурационную информацию, как объем памяти, выделяемой для определенной функции проrраммы. Обыч но подобные опции протестированы хуже Bcero, и некоторые их установки MorYT привести к сбою системы. Поэтому перед экспериментами с памятью, 
[лава 7: Разработка тестов 181 портами и конфиrурированием жесткоrо диска не забудьте сделать ето pe зервную копию. Для каждоrо поля ввода данных вылолните следующее: 1. Про анализируйте значения, которые в Hero можно вводить. Сrруппируйте их в классы. 2. Проанализируйте возможные rраничные условия. Их можно описать, ис ходя из определений классов, но возможно, что в ходе этоrо анализа добавятся и новые классы значений. 3. Нарисуйте таблицу, в которой перечислите все классы значений для каж Aoro поля ввода и все интересные тестовые при меры (rраничные и дpy rие особые значения). При мер такой таблицы приведен на рис. 7.1. Если у вас будет плохо попучаться, прочитайте раздел rлавы 12 "Таблицы rpa ничных значений". 4. Протестируйте nporpaMMY, используя записанные значения (а если их слишком MHoro, то некоторое их подмножество). Протестировать про rpaMMY, означает не только запустить ее, ввести данные и посмотреть, не произойдет ли сбой,  важно, чтобы nporpaMMa правильно ИСПОПЬ завала введенные данные. Получаются ли, например, при печати указан ные пользователем отступы? Обязательно придумайте тестовую процедуру, в которой nporpaMMa использует введенную вами информацию. Обзор :JTa rлава начинается с анализа характеристик хорошеrо набора тестов. В ней описываются пять технолоrии: . Анализ классов эквивалентности. . Анализ rраничных условий. . Тестирование переходов между состояниями. . Тестирование ситуаций rOHoK и друrих аспектов работы nporpaMMbI, за висящиХ от времени. . Проrнозирование ошибок. и J данной rлавы вам предстоит узнать о rpynne исключительно эффективных ","нолоrии, называемых тестированием функциональной эквивалентности. В "'''' описывается методика про ведения реrрессионноrо тестирования  HeOTъeM п"мой части любоrо процесса разработки nporpaMMHoro обеслечения. в завершение рассказа о разработке эффективных тестов приведены несколь но замечаний по поводу их выполнения. Иноrда у тестировщиков имеются прекрасные идеи, но не доведенные до лоrическоrо завершения или ллохо реализованные, они не выполняют своей задачи, и ошибки остаются ненай денными. В этой работе существует несколько ловушек, о которых следу ет знать. 1;lIб,шоrрафия () вопросах, освещаемыХ в этой rлаве, подробно рассказывается у Майер (" (Myers, 1979)  особенно хорошо он пишет о классах и rраничных yc 
182 Часть 11: Приемы и тех//олосии тестирова//ия ловиях, О различных технолоrиях тестирования "черноrо ящика" можно про читать в любой из книr Майерса, Данна (Dunn), Хезела (Hetzel), Бейзера (Beizer) или Эванса (Evans), Некоторая полезная информация в понятном изложении имеется и у Йордана (Vourdon, 1975), Можно разработаТh иллионы и триллионы тестов  было бы ТОЛhКО врея, К сожалению, ero хватает от силы на неСКОЛhКО сотен или тысяч тестов, Поэтоу выбираТh приходится тщатеЛhНО, Характеристики хорошеrо теста Хороший тест должен удовлеТВОРЯТh следующим критериям: . Существует обоснованная верОЯТНОСТh ВЫЯНJlения тестом ошибки, . Набор тестов не должен БЫТh избыточным, . Тест должсн БЫТh наилучшим в своей катеrории, . Он не должен БЫТh слишко простым или слишком сложным, Обоснованная вероятность выявления ошибки ЦеЛhЮ тестирования является поиск ошибок, Поэтому, придумывая тестовые примеры, проанализируйте все возможныс варианты сбоя про [раммы или ее непраВИЛhноrо поведения, Если в проrрамме может про изойти определен ная ошибка, подумайте, как ее пой мать. Хороши м источником идей о возожных ошибках ПрOl'рамм может liослуЖИТh при ложение этой книrи, Набор тестов не должен быть избыточным Если два теста предназначены для выявления одной и той же ошибки, зачем ВhlIlOЛНЯТh их оба? Тест должен быть лучшим в своей катеrории в rруппе похожих тестов одни MOryT быть эффективнее друrих, Поэто му, выбирая тест, нужно ВЗЯТh тот, который С наиБОЛhшей верОЯТНОСТhЮ выявит ошибку, В первой rлаве уже рассказыва;IOСh о том, что на rраниuах каждоrо диапазона значений параметров прOl1'амм ошибки проявляются чаще, чем на средних значениях этоrо же диапазона. Поэтому для тестов БОЛhше подходят rраничные значения. Не слишком сложен и не слишком прост Объсдинив два теста в один, можно СЭКОНОМИТh время на их ВШlOлне нии. Но не псрсуссрдствуйте  оrромный и сложный тест трудно понять, 
[лава 7: Разработка тестов 183 ('рудно ВШIOЛНИТh И долro создаваТh, Поэтому лучше Bcero придерживаТh ся золотой середины, разрабатывая простые, но все же не совсем элемен ('арные тестовые примеры, Кроме трудоемкости, у сложных тестов есть и более серhезный HeДOCTa ток, Скомбинировав неСКОЛhКО неверных входных значений, нельзя сказаТh наверняка, как ПРOI1'амма интерпретирует каждое из них, После первоro же I!сдопустимоrо значения поведение проrраммы может выйти изпод KOHT роля, например, она может просто отказаться принимаТh все OCTaJlhHhIe данные, Такие примеры иноrда строятся и намеренно  если необходимо IIроверИТh, как проrрамма реаrирует на серию недопустимых значений, Однако для начала лучше протестироваТh их по отдеЛhНОСТИ, проверив работу блока обработки каждой из ошибок, Некорректное поведение nporpaMMbI проявляется с достаточной очевидностью Как узнаТh, прошла ли проrрамма тест? Ответ на этот вопрос не так О'lсвиден, как может показаться на первый нзrляд, Тут есть над чем поду aTb, Даже неверные выходные данные на экране или на бумаrе тестиров щик ожет случайно пропуСТИТh, не rоворя уже о том, что реЗУЛhтат ошибки может оказаться скрытым, . Разрабатывая тест, подробно опишите ожидаемые выходные данные или реакuию ПрOI1'амы. Выполняя ero, сверяйтеСh со своими ЗaJIИ сями, . ПостарайтеСh разрабатываТh тесты так, чтобы объем выходных дaH ных был минимаЛhНЫМ, В километровой распечатке или orpoMHoM файле едва ли леrко будет найти непраВИЛhНУЮ uифру, Классы эквивалентности и rраничные условия Одними из ключевых понятий теории тестирования являются классы 'JКвивалентности и rраничные условия, Классический тест rраничных yc JIOВИЙ позволяет с наиБОЛhшей веРОЯТНОСТhЮ ВЫЯВИТh имеющуюся в I!pOrpaMMe ошибку. Обдумывая наборы таких тестов, специалист разделяет все возможные тесты на 11'уrшы, выделяя в каждой из них наиболее эффективные. Классы эквивалентности Если от выполнения двух тестов ожидается один и тот же рсзулыат, они С'lИтаются эквивалентными. rруппа тестов представляет собой класс экви IIШlентности, если выполняются следующие условия. 
184 Часть 11: Приемы и техиолосии тестироваиия . Все тесты предназначены для выявления ОДНОЙ и той же ошибки, . Если один ИЗ тестов выявит ошибку, oCTa;IhHhIe, скорее Bcero, тоже это сделают, . Если один ИЗ тестов не выявит ошибки, остаЛhные, скорее Bcero, тоже этоro не сделают, Разумеется, кроме этих абстрактных критериев, необходимы еще и практически е, позволяющие отнести к одному КiIассу конкретную rруппу тестов. Вот на чем может основываться этот отбор. . Тесты включают значения одних и тех же входных данных. . Для ИХ проведения ВШlOлняются одни и те же операuии ПрOI1'аммы. . В реЗУЛhтате всех тестов формируются значения одних и тех же выходных данных, . Либо ни один ИЗ тсстов не вызываст ВШlOлнения блока обработки ошибок проrраммы, либо выполнсние этоro блока вызывается Bce ми тестами rруппы, Поиск классов эквивалентности Поиск классов эквива;Iентности  проuесс субъсктивный, Два челове ка, ана;IИЗИРующих одну и ту же проrрамму, составят различные перечни классов, Однако постарайтеСh все же ВЫЯВИТh как можно БОЛhше классов эквивалентности: это сэкономит время в да;Ihнейшсм и сделает тестирова ние более эффективным, избавляя вас от неНУЖНОl'О повторения эквива;Iен тных тестов, Разбив все предполаrаемые тесты на классы, можно затем выдеЛИТh в каждом из них ОДИН или неСКОЛhКО тестов, которые покажутся вам наиболее эффективными  oCTa;IhHhIe ВЫПОЛНЯТh ни к чему, Вот неСКОЛhКО рекомендаuий для поиска классов эквивалентности: . Не забывайте о классах, охватывающих заведомо неверные или недопустимые входные данные, . Орrанизуйте формируемый перечеНh классов в виде таблиuы или IUlaHa, . Определите диапазоны числовых значений, . Для полей или параметров, принимающих фиксированные перечни значений, выясните, какие из значений входят в перечеНh, . Проана;IИзируйте возможные резулыаты выбора из списков и меню, . Поищите псременные, значения которых должны БЫТh равными, . Поищитс классы значений, зависящих от времени, 
[лава 7: Разработка тестов 185 . Выявите rруппы переменных, совместно участвующих в определен ных вычислениях, реЗУЛhтат которых оrраничивается конкретным набором или диапазоном значений, . Посмотритс, на какие действия проrрамма отвечает эквивалентны ми событиями, . Продумайте варианты операuионноrо окружения, Не забывайте о классах, охватывающих заведомо неверные или недопустимые входные данные Часто недопустимые или неверные входные данные вызывают в про I-pae самые разнообразныс ошибки, ЛИШh очеНh немноrие проrраммис ть! тщатеЛhНО продуывают и отлаживают реакuию своих проrрамм на lIодобные данные, Поэтому, чем БОЛhше вы выделите типов HeBcpHoro ввода, тем БОЛhше найдете ошибок, Напримср, если ПрОl'рамма должна "ринимаТh числа от 1 до 99, существует как минимум четыре класса экви валснтн ы х тсстов, . ДОIlУСТИ ввод чисел от 1 до 99, . Любос число еНhШС 1 слишком мало, Данный диапазон включает О и всс отриuатеЛhные числа, . Любое число БОЛhШС 99 слишком велико, . Если введена нсчисловая информаuия, она не принимается, (Дей СТВИТСЛhНО ли это верно для Bcero, что не являстся числом?) Орrанизуйте формируемый перечень классов в виде таблицы или плана Обычно классов эквивалентности оказывается очеНh MHOro, так что не О()ОЙТИСh без удобноro и продуманноrо способа орrанизаuии собранной 111нjJOрмаuии, Мы ИСПОЛhЗуем два подхода, Обычно вся информаuия CBO II1ТСЯ в БОЛhШУЮ таблиuу, при мер которой приведен на рис. 7,1, Иноrда ее чожно предстаВИТh и в форме плана, как на рис, 7,2, Обратите внимание, '1'1'0 в любом случае в персчеНh включены тесты не ТОЛI,КО допустимых, но 11 недопустимых или нестандартных входных JЩlllli>lХ, Оба способа орrанизаuии инфораuии, 11 та()JIИltа и план, достаточно \';tобны, У каждоrо из них есть прсиущеСТl\а и IIсдостатки, Табличный формат информаНИI1 БOJlее IIОllитен, ero леrче читаТh, и (чни нзrлядом можно охватить БОJII,III\.' I1l1фораuии, В нем более очевид II() разделение на допуСТИМblС и IIс;tОIlУСТИblС варианты, На наш взrляд, 
186 Часть 11: ПриеJ'/Ы и техиолоcuи тестироваиия коrда информаuия Ilредставлена в TaKO виде, се леrче анализировать, чтобы выяснить, все ли недопустиые варианты входных данных охваче ны перечисленныи классами эквивалентности, Вход1l0е или Допустимые классы Недопустимые классы выход1l0е эквивале1lт1l0сти эквивалеllтllости событие Ввод числа Числа от 1 до 99 О > 99 Выражение, результатом KOToporo является недолустимое число, налример, 5  5, результат KOToporo равен О, Отрицательные числа Буквы и друrие нечисловые символы Ввод лервой Первый символ является Первый символ буквы имени заrлавной буквой не является буквой Первый символ является лролисной буквой Рисование лрямой От одной точки до Отсутствие рисунка четырех сантиметров длиной Длиннее четырех сантиметров Линия не является лрямой Таблица ВЗlIта из книrи Майерса IMyers, 1979). РИСУНОК 7.1. Табличиый формат описаиия классов эквивалеитиости К сожалению, таблиuы часто бывают очень l'рООЗДКИ, Как правило, в них больше столбuов, че IlOказано на рис, 7,1,  в этих столбuах отража ется взаиодействие ежду различными ЭJlементаи данных, события раз биваются на подсобытия, или классы эквивалентности разделяются на подклассы, Наприер, событие" Ввод имени" ожет быть разбито на co бытия "Ввод первой буквы иени" и "Ввод оставшейся части иени", Можно нарисовать оrроную черновую таблиuу, а зате превратить ее в таблиuу с трея столбuаи, ИСПОЛhЗуя для развития одной и той же Teы новые строки, Но при TaKO способе представления данных теряется oc новное преиушество таблиuы  ее наrлядность, Сразу исчезают все лоrи ческие связи, так прекрасно представленные в широкой таблиuе, 
[лава 7: Разработка тестов 187 1, Ввод числа 1,1 Допустимые варианты 1,1,1 Числа от 1 до 99 1,2 Недопустимые варианты 1,2,1 О 1,2,2 > 99 1,2,3 Выражение, результатом Koтoporo является недопустимое число, например, 5 - 5, результат KOTOpOro равен О, 1,2.4 Отрицательные числа 1,2,5 Буквы и друrие нечисловые символы 1,2,5,1 Буквы 1,2,5,2 Арифметические операции, такие как +, * 1,2,5,3 Остальные нецифровые символы 1,2,5,3,1 Символы с ASСII-кодами, меньшими кода нуля 1,2,5,3,2 Символы с АSСII-кодами, большими кода девятки 2, Ввод первой буквы имени 2,1 Допустимые варианты 2,1,1 Первый символ является заrлавной буквой 2,1,2 Первый символ является прописной буквой 2,2 Недопустимые варианты 2,2,1 Первый символ не является буквой 2,2,1,1 Первый символ имеет ASCII-KOA, меньший кода буквы 'А" 2,2,1,2 Первый символ имеет ASCII-KOA, лежащий между кодами букв 'Я" и 'а" 2,2,1,3 Первый символ имеет ASCII-KOA, больший кода буквы 'я" 3, Рисование прямой 3,1 Допустимые варианты 3,1,1 От одной точки до четырех сантиметров длиной 3,2 Недопустимые варианты 3,2,1 Отсутствие рисунка 3,2,2 Длиннее четырех сантиметров 3,2,3 Линия не является прямой 3,2,3,1 Что это может быть??? Кривая? Окружность? РИСУНОК 7.2. Формат плаиа классов эквивалеитиости 
188 Часть 11: Приемы и тех//олосии тестирова//ия Можно рисоваТh таблиuу на БОЛhШО листе ватмана и вешаТh на стене, но в буажно варианте ее трудно ДОllOЛНЯТh и делаТh фотокопии, rораз до удобнее ПОЛhЗоваться электронныи таблиuаи, Если нужно распечатаТh резулыат, ожно наllечатаТh таблиuу полосаи, а пото\! их склеИТh, Планы ожно также состаВЛЯТh с ПООШhЮ КОМПhютера, COOTBeTCTBY юшее проrраное обеспечение позволяет их с леrКОСТhЮ ДОПОЛНЯТh, pe орrаНИЗОВhlВаТh, форатироваТh и печатаТh, Планы выrлядят копактнее, и в них леrче разбиваТh инфораuию на составляюшие, Однако и повторения при использовании планов случают ся чаше, Мы не считае ни один из этих двух подходов более эффективны, Они оба достаточно хороши, Приведенный на рис, 7,2 план иллюстрирует одну практическую IlpO блеу, Посотрите на раздел 1,2,5,2, в котором идет речь об арифетичес ких операторах, КонuептуаЛhНО они представляют собой саостоятеЛhНЫЙ класс эквивалентности, и ПрOl1'аист ожет иенно так их и рассатри вать, проверяя работу проrраы с кажды  из операторов, ТспеРh взrля ните на разделы 1,2,5,3,1 и 1,2,5,3,2, В них тоже включаются все арифетические операторы, Как же поступаТh с пересекаюшиися классаИ? ПОСКОЛhКУ совершенно неизвестно, как в каждо KOHKpeTHO случае IlOcTYllaeT проrраист, об шеrо правила, основываюшеrося на классификаuии данных ПрOl'раис TO, здеСh БЫТh не ожет, Простейший способ обычно саый лучший, Приечание в cxee, YKa зываюшее на подобные наКilадки, поожет теСТИРОВlI1ИКУ избежаТh повто рений при тестировании, Не стоит долrо лоаТh rолову над Te, как опредеЛИТh классы, которые бы не пересека;IИСh, Определите диапазоны числовых значений Каждый раз, КOI-да обнаруживается новый диапазон зна'lений, BeCTe с ни появляется и неСКОЛhКО классов эквива;Iентности, Обычно среди них иеется три недопустиых класса: все числа, которые еНhше нижнеrо rраничноrо значения диапазона, все числа, БОЛhшие ero BepxHero rранич HOro значения, и нечисловые данные, Иноrда один из этих классов отсутствует, Наприер, допускаются числа любой величины, УбедитеСh, что это и в cao деле так, Попробуйте BBe сти очеНh БОЛhшое число и посотрите, что получится, Посотрите также, нет ли у значений исследуеоrо параетра подди апазонов, как, наприер, у Ha;lOroBhIx ставок, Каждый поддиапазон будет отдеЛhНЫ К;lассо эквива;Iентности, Недопустиые К;lассы будут распола rаТhСЯ ниже caoro нижнеro диапазона и выше BepxHero из них, 
[лава 7: Разработка тестов 189 Для полей или пара метров, при н и мающих фиксированные перечни значений, выясните, какие из значений в них входят Если для параетра допускается ТОЛhКО определенный IlеречеНh значе IIИЙ, один из классов эквивалентности может включаТh все значения из 'пот Ilеречня, а друrой  все OCTaJlhHhIe значения, В ДaJlhнейше эти два класса ожно будет раздеЛИТh на ряд еНhШИХ классов, Напри ep, если в некоторое поле вводится название стран ы, класс допустиых значений включает названия всех стран планеты, В класс неДОПУСТИhlХ значений будет ВХОДИТh Jiюбое сочетание сиююлов, которое является название страны, Однако как быть с аббревиатураи, ошибкаи при написании, особен ностяи наUИОНaJlhноrо произношения названий стран или старыи назва нияи, которые сейчас отсутствуют, Следует ли IlроверЯТh подобные зна'lения, выделив их в отдеЛhные Кilассы? Вполне вероятно, что, lIOСКОЛh ку спеuификаuией все эти варианты не предусотрены, при ПОПhIТке их ввести ожно СТОЛКНУТhСЯ с ошибкой, При вводе названий проrраа ожет сразу же проверЯТh вводиые сиволы, ОНИ ДОJIЖНЫ БЫТh букваи BepxHero или нижнеro реrистра, Все, что не является букваи, относится к классу неДОIlУСТИЫХ значений, Ero, 1\ свою очереДh, ожно разБИТh на подклассы, Следует учеСТh и сиволы разных языков, в TO числе и акuентированные сиволы, которых тоже достаточно HOro, Проанализируйте возможные результаты выбора из списков и меню Любой элеент предложенноro проrраой списка опuий ожет, по сушеству, предстаВЛЯТh собой отдеЛhНЫЙ класс эквИВaJlентности, Каждый ::Jлеент еню или списка опuий обрабатывается проrраой особы об разо, поэтоу все они подлежат проверке, К классу недопустиых значе ний относятся ответы ПОЛhЗователя, которых нет в списке (если проrраа IlOзволяет не ТОЛhКО выбираТh, но и ВВОДИТh значения опuий), Наприер, если проrраа задает вопрос "Вы уверены? (Д/Н)", один Кilacc ЭКВИВaJlентности должен содержаТh ответ Д (и, ежу ПРО'IИ, также и д), а второй  ответ Н (и н), Все OCTaJlhHhIe ответы !Вляются недопус тиыи (хотя вполне возожно, что проrраа ИlIтерllре'rирует все, что не является положитеЛhНЫ OTBeTO, как отриuаТСJlhНЫЙ, т,е, как ЭКВИВaJlент ответа Н), А вот друrой приер, Американские НaJlOl'OllлатеЛШIИКИ разделяются на lIеженатых, женатых с объединенны дoxoдo, женатых с разделенны лоходо, домохозяек и вдов с заВlIСИЫИ деТhМИ, Некоторые из них OT 
190 Часть 11: Приемы и тех//олосии тестирова//ия казываются описываТh свое сеейное положение, что также законно, He которые люди заявляют, что не подходят ни под одну из пере численных катеl'ОрИЙ, и пишут в наЛОl'ОВОЙ декларации приечание, поясняюшее причину, Таки образо! фор.\!аЛhНО их сеейное положение можно OTHe сти к классу недопустиых значений, Поищите переменные, значения которых должны быть равными в свое врея Форд утверЖJI3Л, что I'OTOB выпускаlЪ автообили любо 1'0 цвета, пока они будут оставаТhСЯ черныи, Все не черные цвета в это приере Ожно отнести к Кilассу недопустиых значений, ИНОlда оrрани чение, HaJ\araeoe проrраой на значения поля, оказывается совершенно неожиданны, Значения, которые обычно Вfюлне приелеы, но в дaHHO eCTe ПрOl'раой не приниаются, ОТНОСЯТСЯ к отдеЛhНОУ классу экви валентности, Поищите классы значений, зависящих от времени ПредrIOЛОЖИ, что вы нажиаете КJlавишу IIробела непосредственно lIеред, во врся и сразу после Toro, как систеа ЗaJ'рУЗИТ ПрOl'рау, Как ни странно, но подобные TecT"r разрушали некоторые систеы, Какие классы эквивалентности ожно выдеЛИ1Ъ в подобной ситуаuии? К перво y из них относятся все собы !'ИЯ, происходяшие задолrо до выполнения задания, ко BTOPOy  события, IIроисходяшие в короткий отрезок вресни непосредственно перед выполнение задания, к треlъеу  lIериод el'o выполнения и т.д, Подобным образом ОЖIIО направИlЪ задание на IIринтер, KOlдa тот свободен, занят, сразу после завершения и печати ДOKyeHTa, Можно попробоваlЪ ВЫПОЛНИТh то же caoe в ноroflOЛhЗоватеЛhСКОЙ систее: что, если ваш приоритет выше, че у ПОЛhЗователя, печатаюшеrо в данный MoeHT? Выявите rpYnnbI переменных, совместно участвующих в определенных вычислениях, результат которых оrраничивается конкретным набором или диапазоном значений Введите всличины трех уrлов треуrОЛhника, К классу допустиых OTHO сятся значения, в cye даюшие 180 [радусов, Недопустиые значения ожно раздеЛИТh на два класса эквивалентности: с cyapHЫ значение eHee 180 и более 180 [радусов, 
[лава 7: Разработка тестов 191 Посмотрите, на какие действия nporpaMMa отвечает эквивалентными событиями До СИХ пор рассатрива;IИСh ТОЛhКО входные события, ПОСКОЛhКУ это IlepBoe, что приходит в rолову, да и ана;IИзироваТh их rораздо леrче, Tpe II,C событие на рисунках 7,1 и 7,2 является BЫXOДHЫ, nporpaa чертит JIИНИЮ длиной до четырех сантистров, приче линия предполаrается IlрИМОЙ, но может оказаться и ДРУi'ОЙ форы, наприер, окружностью, Трудность состоит В TO, чтобы опредеЛИТh, какие входные данные у"равляют длиной и форой линии, Иноrда различные классы входных ;taHHhix на выходе дают один и тот же эффект, Но если точный ПУТh обра ботки каждоro класса входн ых данн ых Ba неизвестен, лучше все равно I!нтсрпретироваТh их как разные классы и тестироваТh по отдеЛhНОСТИ, Особенно это важно в тех случаях, коrда в ответ на Оllределенные входные данные при форировании выходной информаuии rенерируется ошибка и управление lIередается блоку се обработки, Еше одни приеро ожет IIОСЛУЖИТh проrраа, которая после ce рии вычислсний должна IIC'laTaTlт чисJю 1СЖДУ \ и 45, В данном случае CJlедует проана;IИзироваТh, какие входные данные заставят ее напечатаТh 'IИСЛО, которое БОЛhше 45 или еНhше 1, Для проверки необходио прове сти ряд тестов, Продумайте варианты операционноrо окружения Предположи, что проrрама Ilредназначена для работы на КОПhютере с объео паяти от 64 до 256 Кб, Эти значения определяют один класс 'жвивалентности, К друrоу классу будут ОТНОСИТhСЯ объеы паяти, KO торые еныIIe 64 Кб, ьне к OДHOy  объеы паяти, превышаюшие 256 Кб, Некоторые известные проrраы отказШlа;IИСh работаТh на КОПhюте рах, иеюших БОЛhше ожидаеоrо объеа паяти, Бывает, что ПрОI'Раа хорошо работает ТОЛhКО с определенныи типа \1И ониторов, IIринтеров, oдeOB, дисковых устройств или любоro дpy I'oro подключенноrо к систее оборудования, Работа проrраы ожет 'J,lВисеТh даже от тактовой частоты КОПhютера, Поэтоу, ана;IИЗИруя IIpO Ipay, особенно ВШlOлняюшую низкоуровневые операuии с оборудовани c или ориентируюшуюся на ero определенные возожности, очеНh важно ОllредеЛИТh классы эквива;Iентных конфиrураuий систеы, rраницы классов эквивалентности Для каждоro класса эквива;Iентности достаточно провести ОДИНJ(Ва 1 еста, И ЛУЧlIIИИ ИЗ них будут те, которые проверяют значения, лежащие lIa 11'аниuах класса, Они юrут БЫТh наиБОЛЫlIИИ, наиеНhШИИ, быстрей 
192 Часть 11: ПРИeJ.IЫ и техJtолосии тестироваиия ши\lИ, кратчайшии, саыи rромкии, самыи красивыи  но в любо случае это должны БЫТh предеЛhН ые значения параетров класса, Непра ВИЛhные orlepaTophI сравнения (например, > BeCTO >=<) вызывают ошиб ки ТОЛhКО на rраничных значениях apryeHToB, В то же врея Проrраа, которая сбоит на ПрО\lежуточных значениях диаlIазона, почти наверняка будет сБОИТh и на rраничных, Необходио протестироваТh каждую rраниuу класса эквивалентности, приче с обеих сторон, Проrраа, которая пройдет эти тесты, скорее Bcero, пройдет fI все остальные, относяшиеся к данному классу, Вот ряд приеров, . Если допустимы значения от 1 до 99, для тестирования допустиых данных ожно выбраТh 1 и 99, а для тестирования недопустиых  О и 100, . Если проrрама ВhlIIисывает чеки на cyы от $1 до $99, то стоит попробовать ВhJflиеать чек на отриuатеЛhНУЮ cyy, на $0, на $100, . Если проrрама ожидает заrлавную анrлийскую букву, введите А и Z, I1poBephTe также сивол @, ПОСКОЛhКУ ero код предшествует коду символа А, и сивол ], код KOTOpOro следует за KOДO сиююла Z, Kpoe TOro, проверые сиююлы а и z, . Если проrрама рисует линии длиной от одной точки до 4 сантиет ров, нарисуйте одну точку и линию длиной ровно 4 сантиметра, ПУСТh проrраа также попробует нарисоваТh линию нулевой длины, . Если cya входных значений должна раВНЯТhСЯ 180, попробуйте ввести значения, даюшие в CYMe 17<;, 180 и 181, . Если проrрама 1I0лучает определенное количество входных данных, попробуйте ввести в ТО'IНОСТИ необходиое количество, на единиuу еНhшее и на единиuу БОЛhшее, . Если проrрамма приниает ответы В, С и D, ПОflробуйте ввести А иЕ. . Попробуйте отпраВИТh на печаТh файл неrlOсредственно перед и сразу после Toro, как принтер напечатает еше Чhелибо задание, . После чтения и записи файла на диск проверые ero первый и пос ледний сиволы, Анализируя rраниuы диапазонов значений, очеНh важно учеСТh все возожные выходные данные, Проанализируйте каждый элеент распечат ки или изображения на экране, Каковы допустиые перечни или акси аЛhные и иниаЛhные значения каждоro печатаеоrо параетра? Можно ли застаВИТh проrрау сфорироваТh данные, выходяшие за эти 11'аниuы, и как это сделаТh? 
[лава 7: РазработJ.:а тестов 193 :IC;IyeT иеТh в виду, что ежду rраничныи значенияи входных и 1\1,I\O;tHhIX данных нет неllOсредственноrо соответствия, ПоказатеЛhНЫ Ilj!lI\It:pO\1 orYT СЛУЖИТh простеЙшие триrонометрические Функuии, МНOI'ие теСТИРОВlIlИКИ включают в наборы тестовых данных и средние ;IJ;J'IСНIIЯ диапазонов, Это хорошая практика, особенно коrда достаточно J\рОlени, Тестирование переходов между состояниями в каждой I1нтерактивной IIporpae осушеСТЮIЯЮТСЯ переходы из OДHO 1 \1 0'1 еВИДНОl'О состояния в ;Ipyroe, Если изеняется набор предлаrаемых li\l,lI,зователю вариантов или меняется изображение на экране, это означает 11 \\Iенение состояния IIpol'paMhI, (Более подробно о переходах еЖJlУ co (IШIIIИЯИ IIporpa ожно прочитаТh у Бейзера (Beizer, 1983),) Простейши приеро ожет С;IУЖИТh еню, После запуска rlporpa \11,1 в He имеется один перечеНh KoaHД, ПОС;lе выбора одной из них (\I(ТШIНllе прОI-раы еняется и в еню IIOЯВЛЯЮТСЯ KoaHДЫ, ДОСТУlIные 1\ ')том новом состоянии, Kpoe Toro, на экране сеняется инфораuия; (>lображаl(НСЯ фОрhi ввода данных, их просотра и т.д, Необходио протеСТИрОВdТh каждую предлаrаеую Ilроrраой оп 111110, каждую KoaHДY еню, KoaHдa 15 ожет бhlТh доступна в режи \IC, OTKpЫBaeo 110 KoaHдe 14 и по KoaHдe 27, В это случае KoaHДY I  IIридется протестироваТh дважды  в обоих режиах, Однако KoaHД \1t:HIO и всевозожных режиов [Jporpah) и путей перехода в эти pe '+'11h) ожет БЫТh так HOro, что протестироваТh их все просто Hepea;Ih I!О: клавиатура сотрется прежде, че вы проведете все возожные тесты, 11 ()'ЛО у' отбирая тесты для проверки путей ВЫIIOЛН ен ия проrра ы, I\"lше Bcero руководствоват\'сЯ следуюшии критерияи, . Протестируйте все наиболее вероятные llOследоватеЛhНОСТИ действий пользователей, . Если можно преДПОЛОЖИТh, что действия ПОЛhЗователя в OДHO pe жие orYT воздействоваТh на представление данных или набор предоставляеых проrраой возожностей в друrо режие, про тестируйте эту заВИСИМОСТh, . Kpoe проведения самых необходиых тестов  113 тех, что описа ны выше,  стоит поработаТh с проrраой в ПРОИЗВОЛhНО режи e, случайны образо выбирая ПУТh ее ВhIllOлнения, Ilереходы ежду состоянияи orYT БЫТh rораздо более сложныи, чем IIjЮСТО выбор KoaHД еню, Содержиое и структура очередной фор!IoI 
194 Часть 11: Приемы и тех//олоcuи тестирова//ия ввода данных ожет зависеТh от инфораuии, введенной в предыдушей форе, Значения одних полей OryT опредеЛЯТh допустиые значения дpy rих, Или же ввод определенной инфораuии ожет иниuиироваТh серию дополнитеЛhНЫХ запросов, Наприер, при вводе числа от 1 до 99 ПрOI1'аа выводит одну фору, а при вводе любоro друrоrо числа  друrую, В это случае BeCTe с классаи эквивалентности и их rраничныи значенияи IIридется проанализировать и возожн ые пути вы llOлнения проrраы, чтобы состаВИТh действитеЛhНО полноuенный набор тестов, Некоторые теСТИРОВlIlИКИ находят полезны составление схем ме//ю, В подобной cxee отражаются все состояния проrраы и KoaHДЫ, вызыва юшие переходы ежду этии состоянияи, В нее включаются KoaHДЫ, активизируеые через енlO, через rрафические средства (наприер, раз личные кнопки), и KoaHДЫ, выполняеые по нажатию определенных клавиш, Наприер, в cxee ожет БЫТh показан ПУТh от еню Файл к KoaHдe Открыть, зате к диалоrовоу окну Открытие файла и назад к OCHOBHOy состоянию IlporpahI, Особенно удобны подобные cxeы в случае, если стру ктура проrра ы н апои нает спаrетти: определен н ое диаЛОl'овое окно ожно ОТКрhПh неСКОЛhКИИ способаи и выйти из Hero в неСКОЛhКО различных режиов, В это случае ожно нарисоваТh на cxe e все направления lIереходов и по ни протестироваТh прOl'рау, Это более аккуратный способ, '1e работаТh с IlрОI'раой без всякоro плана, рискуя IlропуСТИТh важные взаиосвязи ее состояний, Условия rOHOK и друrие временные зависимости Может ли проrраа ВЫПОЛНЯТhСЯ слишко быстро или слишко eд лен но? Чтобы это провеРИТh, ожно ВОСПОЛhЗоваТhСЯ кнопкой переКЛюче ния тактовой частоты КОПhютера (если она есть), попробоваТh поработаТh на более CKopOCTHO или, наоборот, eHee CKOpOCTHO КОПhютере либо увеЛИЧИТh наrрузку на собственный КОПhlотер, запустив параллеЛhНО на выполнение еше неСКОЛhКО проrра, Попробуйте IшешаТhСЯ в работу ПрOI1'аы, коrда она выполняет пере ход ежду двуя состоянияи, Понажиайте клавиши, особенно KoaHД ные, или напраВhте ей проrраные сообшения, если это возожно, Попробуйте понажиаТh клавиши или ВhlllОЛНИТh в проrрае какиени БУДh действия, коrда она ВШlOлняет операuии обработки данных или BBO да/вы вода, предложите проrрае ввести или вывести параллеЛhНО еше каКУIOниБУДh инфораuию, Наприер, во врея печати одноro файла по просите ее распечатаТh еше один, Если в IIpOl'pae определены ситуаuии тайаута, коrда она ждет определеННОl'О соGытия в течение заданноrо вреени, а зате переходит в 
[лава 7: Разработка тестов 195 IРУl'Oе состояние, провеРhте ее реакцию на действия ПОЛhЗователя, запро ,1,1 систеы или наступление ожидаеоrо события на rраниuах интервала 1 аи ayтa, Что, если событие произойдет за секунду до TOro, как прOl1'аа шлжна прекраТИТh ero ожидание, или через секунду после этоrо, Протестируйте систеу при повышенной наrрузке, В ультизадачной чн:де запустите поБОЛhше друrих проrра и посотрите, как поведет себя наша  успешно ли она справится со своей работой, ОтпраВhте БОЛhlllОЙ файл на принтер, чтобы проuессор все врея переключался на обслужива IIl1е печати, Перейдите на КОЮlhютер с еНhшей тактовой частотой и eHb IIIИ объео паяти, с eHee быстродействуюшей дисковой систеой, Ilодключите поБОЛhше внешних устройств и застаВhте их rенерироваТh пре р!.lвания так часто, как ТОЛhКО удастся, Короче rоворя, заедлите и Harpy 111Те КОПhютер, наСКОЛhКО это возожно, В резулыате ваша проrраа fiудет выполняться едленнее, и, быстро вводя данные, ожно попробоваТh IIреВЫСИТh ее возожности приеа, Если в Hopa;lhHo режие работы сбоя Ilporpah) добиться не удастся, это ожет получиться при повышенной lIаrрузке, ВШlOлняя "стандартное" тестирование проrраы на едленной техни ке или при СИЛhНО повышенной НaI1'узке, ожно столкнуться с совершенно Ilеожиданныи ситуаuияи roHOK, И если окажется, что проrраа в ЭТО отношении уязвиа, необходио будет провести в таких условиях полный ItИКJI тестирования, Не поддавайтеСh на убеждения руководителя проекта, который скажет, что вы напрасно тратите врея на неадекватные тесты и 'ITO ПОЛhЗователи I/ИКОi!да не будут эксплуатироваТh проrрау в подобно рсжие, Еше как будут! Пользователи будут работаТh на дешевых а;IOОш IIЫХ КОЮlhютерах, Даже на этих КОПhютерах они будут запускаТh ПрOl1'а мы параллеЛhНО, приче БОЛhшие проrраы, Поэтоу ваша задача  о(iеСllеЧИТh такую надеЖНОСТh разрабатываеоro проrраноrо обеспече IIИЯ, чтобы оно работа;lO, ПУСТh едленно, но без сбоев в любой систее и IIрИ любых дополнитеЛhНЫХ наrрузках, И по крайней epe, необходио совершенно точно ВЫЯСНИТh, какие конфиryраuии систеы являются пре ;tеЛhНЫИ для ero эксплуатаuии, Если окажется, что производитеЛhНОСТh проrраноrо обеспечения в онределенной прOl1'аноаппаратной среде явно неудовлетворитеЛhна и в такой среде ero будет эксплуатироваТh, по крайней epe, чаСТh IIOЛhЗова тел ей, об этом стоит состаВИТh отдеЛhН ый отчет, Отчет лучше Bcero BBec ТlI в базу данных в друrой день, чтобы он хранился отдеЛhНО от отчетов о сбоях при ПОВhШJенных НaI1'узках или на чересчур едленной технике, Так C\IY наверняка будет уделено БОЛhше вниания, че если руководитеЛh IlpoeKTa просотрит ero BeCTe с ДРУI'ИИ похожии, но rораздо eHCC важныи отчетаи, 
196 Часть 11: Приемы и тех//олосии теСl/1ирова//ия Наrрузочные испытания Важно не забhllЪ протестироваТh те оrраничения ВОзюжностей про rpaHoro продукта, которые определены в ero докуентаuии, Проверые разеры файлов, с которыи проrрама ожет работаТh, количество прин теров, териналов, MoдeOB, которыи она может упраВЛЯТh, объе нсоб ходиой ей паяти, Откройте максиаЛhное количество файлов или дрУI'ИХ структур данных, с KOTOpы проrраа ожет работать, lIопробуйте по ;lOЛhше IIOЭКСlIJlуатироваТh ее в таком состоянии, Если в докуентаuии оrраничения не ОIIисаны, но сушествуют лоrически допустиые значения какихлибо lIapaeTpOB, проверые и их, И если проrраа не Сllравится с достаточно БОЛhШИ число, которое ПОЛhЗоватеЛh вполне ожет ввссти, составые отчет об ошибке, Если же проrраа спокойно приниает и об рабатывает и очеНh аЛСНhкие, и очеНh БОЛhшие значения парастров, возожно, оrраничений на них и в cao деле нет, Следует IIроверИТh, как ведет себя проrраа, KOrдa исчсрпываются различные аппаратные ресурсы: наприер, переполняется диск или в прин терс закаН'lивается буаl'а, Посотрите, что будет, Korдa в систсе OCTaHCT ся o'leHh ало свободной паяти, Поработайте с BЫCOKO и низкоскоростны одемаи, HaJ-РУЗИТС тсхнику как слсдует и lIосотрите, что получится, Наrрузочное тестированис  это, 110 сути дела, один из видов тестиро вания rраНИ'IНЫХ условий, Cxca cro проведения абсолютно аналоrИ'lна, Сначала проrрау заllускают в условиях, в которых она должна работаТh (наприер, с аксиа;lhНЫ! количсство тсрина;lOВ), а затс в условиях, для которых она не IIредназна'lена (добавляют еше один терина;I), Ие ет сысл ПрОВСрИТh и различные кобинаuии условий, Вполне возожно, что, спраВИВШИСh с различными IIOВЫШСННЫМИ наrрузкаи 110 отдеЛhНОС ти, она не выдсржит их все вместе, И еше один важный O!CHT: наrрузив систему, проведите нс просто ОДИНJ\Ва теста, а достаточно длитеЛhное и обстоятеЛhное тестирование, ПОЭКСI шуатируйте проrраму в таких условиях некоторое время, возможно, сбой не сразу, но все же IIРОИЗОЙДСТ, Проrнозирование ошибок Иноrда тсстировшик предполаrает, что определенный класс тестов вызовет сбой проrраммы, хотя и не может этоro лоrически обосноваТh, Доверяйте своей интуиuии и обязатеЛhНО включайте подобные тесты в обший IlJlaH, Су шествует uелый ряд ситуаuий и значений, которые, хотя и не являются rраничныи, но частеНhКО вызывают ПрOl'рамные сбои, Типичны примером таких значений является О, Не стоит траТИТh время на IIOИСКИ обоснований TOro, почему определенное входное значение или место проrраммы кажется Ba IlOдозритеЛhНЫМ, Просто протестируйте ero, 
[лава 7: Разработка тестов 197 Случается, что в сложных ситуаuиях интуиuия lIодсказывает rораздо лучшую тактику тестирования, чем тривиа;lhная лоrика, Бывает, что сраба тывает и ассоuиативная СВЯЗh: вы уже находили ошибку в lIодобных обсто ятеЛhствах, хотя можете этоro даже не IIOМНИТh, Как бы там ни было, доверяйте своему внутреннему чувству и учитеСh к нему IIрислушиваТhСЯ: с OllhITOM оно будет стаНОВИТhСЯ все более развитым и надежным, Тестирование функциональной эквивалентности: автоматизация, анализ чувствительности и случайный ввод При тестировании фу//кцио//аль//ой :жвивале//т//ости сравниваются pe зулыаты вычислений разн ыми IIроrраммами одной и той же математичес кой функuии, Этот термин не имеет ничеrо обшеrо с классами эквива;lентности, Если обе IIporpaMMhI IIрИ вычислении одной и той же функuии дают одинаковые резулыаты, значит, в них IIрименены эквива лентные методы вычислений, ПреДlIOЛОЖИМ, 'ITO тестируется IlporpaMMa, которая вычисляет MaTeMa тическую функuию и lIечатает резулыат, Это может БЫТh IIростая триroно метрическая функция или rораздо более сложная, ИlIвертируюшая матриuу или возврашаюшая коэффиuиенты для lIостроения кривой, отражаюшей некоторый набор данных, Обычно в таких случаях можно найти друrую IIporpaMMY, ВhillOЛНЯЮШУЮ те же действия, и IIрИ ЭТО,\I достаточно надеж ную и Ilроверенную временем, Обеим IlporpaMMaM IIредлаrается обработать одинаковые наборы входных данных, и, если резулыаты COBllaдYT, значит, тестируемая IIporpaMMa работает IIраВИЛhНО, Автоматизация тестирования функциональной эквивалентности Везде, rдe возможно IIРИ,\lеНИТh метод тестирования Функuиона;lhНОЙ эквива;lентности, он будет наилучшим выбором, И вот lIочему, . Прежде Bcero, вам не IIридется ВЫЧИСЛЯТh значения вручную, Если функuия сложна, это IlOможет СЭКОНОМИТh orpoMHoe количество времени и избежаТh ошибок, так часто возникаюших IIрИ HeaBTOMa тизирован ных расчетах, . Процесс сравнения также, скорее Bcero, удастся автоматизироваТh, Простейшим Сllособом может БЫТh вывод резулыатов расчетов в файлы и их 1I0следуюшее сравнение с 1I0МОшhЮ соответствуюшсй 
198 Часть 11: Приемы и техиолоi!UИ тестироваиия IIporpaMMhI, КОМllhютер ВШlOлнит сравнение файлов и быстрее, и аккуратнее, чем вы, Можно ОllредеЛИТh и ДОllустимые расхождения резулыатов  наllример, IlOrреlllНОСТИ окруrлений, . ВlIолне возможно автоматизироваТh и весь IIроцесс тестирования: от ввода выходных данных до сравнения выходных, Если это IIОЛУЧИТ ся, IIроцедура тестирования будет ВhlllOЛНЯТhСЯ IIрактически MrHo вен но и исключитеЛhНО надежно, Даже если на сравнение lIотребуется MHOro КОМllhютерноrо времени, вы в это время сможе те заниматься друrой работой, Хотя автоматизаuия lIодобных тестов  IIроцесс не особенно сложный, он требует HeKoToporo времени, Если IIporpaMMa может считаТh входные данные из файла, ero необходимо IlOдrОТОВИТh, Кроме TOro, IIридется Ha IlисаТh неБОЛhlllие IIроrраммки, ВhlllOЛНЯЮlllие сравнение резулыатов, Если обе IIporpaMMhI ориентированы на ручной ввод данных, автомати :тровать их тестирование будет неСКОЛhКО сложнее, Для эмуляuии клави aTypHoro ввода в некоторых случаях удается ИСllOЛhЗоваТh модем, Одна IIporpaMMa lIередает через модем данные друrой, а та думает, что они 11O СТУllают с клавиатуры, НеСКОЛhКО неуклюже, но это работает, Разумеется, тестирование ФункuионаЛhНОЙ эквивалентности может lIотребоваТh некоторых затрат, Прежде Bcero, надежная эталонная IlporpaM ма, которая будет ИСllOЛhЗоваТhСЯ для сверки резулыатов, может оказаТh ся не такой уж дешевой, К тому же, скорее Bcero, IIридется НaJlисаТh коекакие IIроrраммки, Может lIотребоваТhСЯ и доrlOлнитеЛhная техника, наllример второй КОМllhютер, Разумеется, нельзя ОllредеЛИТh универсаЛhные критерии TOro, СКОЛhКО денежных средств имеет смысл lIотраТИТh на IIpO ведение lIодобноro тестирования, Однако мы настоятеЛhНО советуем не IIренебреrаТh им без веских IIрИЧИН, . Оuсните, СКОЛhКО дней lIотребуется на тестирование IIporpaMMhI вручную, Включите в расчет время IIJrанирования, ВhlllOлнения BЫ числений и проведения тестов, Не забудые и о том, что каждый тест IIридется IIровести не один раз, IIОСКОЛhКУ вы будете ВЫЯВЛЯТh ошиб ки и IIОВТОРЯТh всю IIроцедуру тестирования с caMOro начала, При киные, СКОЛhКО uиклов тестирования lIотребуется IIровести, Скорее Bcero, их будет ПЯТh или шеСТh, (Для сравнения можно ВЗЯТh cpeд нее количество uиклов, lIотребовавшееся КОМllании IIри тестирова нии IIреДЫДУll1ИХ разработок,) . Оuените, СКОЛhКО времени сэкономят автоматизированные средства тестирования, Снова учтите весь IIроиесс: шrанирование, IIрOI1'амми рование и отладку теСТИРОВОЧНh\Х IIporpaMM, ПостарайтеСh оuеНИТh необходимое время как можно более реалистично  ведь ВllOслед ствии, если работа затянется, вам IIридется отвечаТh за свои слова, 
[лава 7: Разработка тестов 199 . Количество дней, которые IIреДllолаrается СЭКОНОМИТh, умножые на свой двой//ой оклад, Сумма оклада умножается на два 1I0ТОМУ, что в расчет берется еше и выrода, которую КОМIIЮIИЯ 1I0лучает от YCKO рения IIроиесса тестирования и Ilовшнения ero надежности, Если ваша оценка верна, 1I0лученная сумма  это минимум TOro, что можно СЭКОНОМИТh IIрИ Функuиона;lhНОМ тестировании с IIOМОШhЮ эта;IOННОЙ IIporpaMMhi, И если сама IIporpaMMa стоит меНhше этой суммы, любой разумный руководитеЛh одобрит ее 1I0ку1lКУ, . Подroтовые IIредложение и Ilрезентаuию, 1I0ЯСНЯЮШУЮ назначение 1I0КУllаемой эта;IOННОЙ проrраММhl и основы расчетов, Если KOMIIa ния не наСТОЛhКО заинтересована в сокрашении времени разработ ки, чтобы вклаДhlВаТh в нее ДОllOлнитеЛhные средства, будые [отовы рассказаТh о том, что вложенные средства rарантированно ОКУIIЯТСЯ блаrодаря надежности и качеству IIродукта, Анализ чувствительности ПреДIIОЛОЖИМ, что функuиона;lhное тестирование решено автоматизи ровать, Это означает, что можно ВhlllOЛНИТh rораздо БОЛhlне тестов, чем вручную, Однако отбираТhСЯ они должны не менее тшатеЛhНО: ведь коли 'leCTBo возможных значсний входных данных, скорсс ВСCl'О, ПОlIрежнему слишком велико, чтобы можно бwlO IIровести абсолютно 1I0лное тестирова ние, У БОЛhlнинства функuий КОJlичество возможных зна'lений apryMeHToB бесконсчно, так что СllраВИТhСЯ с ними не 11OJ! силу даже КОМllhютеру, Разумеется, обязатеЛhНО нужно будет IIровериТh Iраничные зна'lения, но теllерь можно IIOЗВОЛИТh себе РОСКОШh rораздо более обстоятеЛhНОro тести рования, Как же отобраТh наилучшие тесты? Чаше Bcero для этоro IIриме няется а//GJIИЗ чувствитель//ости, Эта IIроиедура состоит в следуюшем, . Прежде Bcero, 1I0лучают обшее IIредставление о 1I0ведении функции, вычислив ее значения для ряда lIараметров, раСllолаrаюшихся ВДОЛh всей области Оllределения, . Затем ишут участки области Оllределения, на которых неБОЛhlние изменения aprYMeHToB вызывают значитеЛhные скачки резулыиру юших значений, (Наllример, IIРИ IIриближении Х к 90 [радусам значение tап(Х) резко возрастает,) Име////о такие участки //аиболее чреваты ошибками, . Значения, 1I0лученные в резулыате теста IIрOl1'аммируемой функции и ее эта;lOна, MOryT не ВllOлне СОВllадаТh, Если в IIроиессе расчетов ВhlllOЛНЯЮТСЯ Оllераuии с IIлаваюшей занятой, неизбежны окруrле ния или усечения резулыатов, а значит, и неБОЛhlние расхождения, Обычно это не страшно, Необходимо ТОЛhКО нраВИJlhНО оuенить ДОIIУ' стимые IlOrрешности окруrлений, чтобы можно было заФИКСИРОJ\,III, IIреВЫlllаюшис их расхождения, вызванные иными IIpl1'IIII1:J\III 
200 Часть 11: Приемы и тех//олоi!UИ тестирова//ия Мы рекомендуем равномерно раздеЛИТh каждый диапазон тестируемых входных значений на ряд IlOддиапазонов (их может БЫТh около сотни) И протестироваТh по одному зна'lению внутри каждоrо из них, Например, если функuия IlOлучает значения между I и 1, введите одно значение, лежашее межу  1 и o, 98, второе  между o, 98 и 096 и т,д, После ввода каждоro значения проверяйте, праВИЛhНЫЙ ли получился резулыат, чтобы не траТИТh зря времени, если чтото не так, Получив обшую картину IlOведения функuии, проанализируйте ero на предмет резких псремен, Если значения функuии на отдеЛhНЫХ y'lacTKax области ее определения резко возрастают или умеНЫllаются либо наблюда ются разрывы и скачки, на них необходимо обраТИТh более I1ристаЛhное внимание, ПреДlIOЛОЖИМ, что на входном диапазоне от 0,4 до 0,46 зна'lения фун кuии (или их расхождение со зна'lениями эталонной функuии) резко воз растают, Разделите этот диапазон на 100 равных частей и проверые по одному значению внутри каждой из них, Если все в порядке, вы убедитеСh, что значения тестируемой и эталонной функuии для всех тестируемых aprYMeHToB совпадают, а если нет, можно будет документироваТh ошибку, При профеССИОliаЛhНОМ тестировании математических функuий не оБОЙТИСh без некоторых знаний из теории вероятности, Если реЧh идет не об одной, а о uелом ряде функuий, необходимы боле эффективные и Ha учно обоснованные технолOl-ИИ поиска критических участков области Oll ределения функuии  тех, rдe ес значения резко меняются или отличаются от эталонных, Их описания можно найти в СllеuиаЛhНОЙ литературе, Для начала подойдет книrа Бека и АРНОЛhда (Beck & Аrпоld 1977), Кроме TOro, мы рекомендуем работы таких авторов, как Бард (Bard, 1974) и Чамберс (Chambers, 1977), Случайный ВВОД Вместо разделения всей тестируемой области определения функuии на определенное количество равных участков можно ВОСПОЛhЗоваТhСЯ друrим способом подбора входных значений  случайным, Случайный выбор значений более эффективен, ПОСКОЛhКУ rарантирует их полную равноправ ность, Например, тестируя такую IlOследоватеЛhНОСТh входных значений, как 0,02; 0,04; 0,06 и т,д" вы никоrда не узнаете, как проrpамма обрабаты вает нечетные числа  как 0,03 или как числа с БОЛhlllИМ количеством значаших uифр, такие как 0,1415, В то же время при выборе входных зна чений случайным образом облаСТh определения функции покрывается [o раздо более полно, все типы и диапазоны значений входных данных охватываются равномерно, Если вы затрудняетеСh в выборе методики подбора входных данных или не ВllOлне уверены в поведении тестируемой функuии, остановитеСh на 
[лава 7: Разработка тестов 201 случайном Сllособе, Он IIрекрасно 1I0ДХОДИТ и для автоматизированною тестирования, Не имея четкоrо обоснования для выбора конкретных входных значе ний, можно КОМllенсироваТh этот недостаток количеством IIРОВОДИМЫХ тестов, ЗдеСh нет никаких оrраничений  чем БOJlhше тестов IIРОВОДИТСЯ ;щя каждоro из классов эквивалентности, тем лучше, Обычно IIрИ aBTOMa ТI1!ированном тестировании со случайными входными значениями мы Ilроводим как минимум 1000 вычислений, Что такое reHepaTOp случайных чисел "Случайный" ввод вовсе не означает "все, что IIРИХОДИТ в rолову", иначе он будет слишком IIредвзятым, чтобы IIретендовать на равномерный охват области Оllределения Функuии, ЗдеСh БОЛhше 1I0ДОЙДУТ таблиuы слу 'Iайных чисел, а еше лучше  КО\Шhютерная IIporpaMMa, которая может l'енерироваТh такие числа в неоrраниченном количестве, Однако следует имеТh ввиду, что алrоритмы, ИСllOЛhзуемые мноrими 1I0добными IIpOl1'aM мами, вовсе не случайны, Кроме TOro, нередко в IJpOrpaMMax даже базовый <\JII'ОрИТМ реализован не точно, Поэтому, IIрежде чем выбраТh конкретный I'енератор случайных чисел, даже наllисанный 1JIIOлне авторитетной KOMlla IIИСЙ или встроенный в один из стандартных языков IIроrраммирования, Ifсобходимо ВЫЯСНИТh, какой а:II'Оритм 1I0ложен в основу ero работы и IIОДХОДИТ ли он для ваших нужд, То, что rодится IIростеНhКОЙ IIporpaMMKe, рисуюшей на экране разноцветный са:iЮТ, может совершенно не IIOJЮЙТИ ДJIЯ IIрофессионаJlhноrо тестирования сложных инженерных IIporpaMM, Нсредко [енераторы СЛУ'lайных чисел 1I0ВТОРЯЮТ их IlOследоватеЛhНОСТh 'Iсрез Оllределенный интерва:i  наllример, 1I0сле каждых 65535 чисел все начинается с нача:ш, Подробный рассказ о тсории [енераторов случайных чисел в задачи этой книrи не входит, На эту тему имеется достаточно литературы, и, в частности, можно IIрочитаТh работы таких авторов, как Канер и Воуки (Капеr & Vokey, 1984) и Кнут (Кnllth, 1981), Однако неСКОЛhКО советов и IIредложений вам все же IIриrодятся, . Перед тем как IIРИСТУIIИТЬ к тестированию, 1I0читайте литературу о [енераторах случайных чисел, Не доверяйте какойлибо IIporpaMMe IIрОСТО 1I0ТОМУ, что она у вас уже есть, а друryю еше IIРИДСТСЯ IlOискать, Продолжайте чтение до тех 1I0р, пока нижеСJlедуюшие предложения не 1I0кажутся вам ВllOлне IIOНЯТНЫМИ, Не обязатеЛhНО ими IIOЛhЗО ваТhСЯ, но, если вы не можете их даже IIOНЯТh, значит, знаете о IIредметной области еще слишком мало, 'побы IIринимаТh caMOCTO ятеЛhные решения, И может оказаТhСЯ, что, 1I0тратив время на Te стирование, вы вдруr выясните, что оно прОВОДИЛОСh некорректно, 1I0СКОЛhКУ входные данные были вовсе не случайными, 
202 Часть 11: Приемы и технолосии тестирования . Если вы собираетеСh ВОСllOЛhЗоваТhСЯ [енератором случайных чисел, встроенным в язык IIрOl'раммирования, стоит ero HeMHoro дорабо тать, Сrенерировав с ero IIOМОlllhЮ достаточно БОЛhlllое количество чисел (1 oo 1000), lIеремешайте их: измените их 1I0РЯДОК с IIOМОЩhЮ 1I0слеДУЮlllИХ чисел, выдаваемых этим же [енератором, Хотя это и замедлит работу, зато реЗУЛhтат в случае ШlOхоrо исходноro [eHepa тора может быть уже ВllOлне IIриемлемым, . Если выбранный вами язык IIроrраммирования умеет работаТh с uелыми числами БОЛhlllОЙ разрядности (но не с IIлаваЮlllей запятой), имеет смысл НaJlисаТh собственный [енератор, алroритм работы KOTOpOro будет таким, RIN+I] = (А * RIN] + С) mod М Это означает, что для 1I0лучеыия N+Iro числа из Nro нужно YM НОЖИТh ero на А, добаВИТh С, а результат вЗЯТh 110 модулю М, Чем БОЛhlllе будет число М, тем лучше, хотя вычисления будут вынол НЯТhСЯ И медленнее, Хорошие значения lIараметров этоro метода IIриведены на рис, 7,3, Значение lIараметра С не является критическим, достаТО'IНО, чтобы оно было нечетным, Однако, flOдбирая ero более Тll1атеЛhНО, можно умеНhШИТh взаимную корреляuию rенерируемых значений, Значение M=2.J() взято из КНИI'И Канера и Воуки (Kaner & Vokey, 1984), OCTa;Ih Hhle  у Кнута (Кnllth, 1981), Чтобы IlOказаТh, наСКОЛhКО важен ТlIlа ТСЛhНЫЙ 1I0дбор lIараметров, Канер и Воуки IIротестирова;IИ более 30 тысяч значений lIараметра А и около сотни значений lIараметра С, м А С 2" 69069 нечетное число 2" 1664525 нечетное число РИСУНОК 7.3. Параметры 2 ЗS 17059465 нечетное число некоторых известных 240 37182819621 3 сенераторов случайных чисел 240 8413453205 99991 248 31167285 нечетное число 264 636413622384679300 нечетное число R[N+1] = IА . R[N] + С) mod М 
[лава 7: Разработка тестов 203 Применение технолоrии эквивалентности Тестирование атеатичсских функuий  не единственная облаСТh IIриенения эталонных IIporpa, Путе сравнения с roTOBhI и IIpoBepeH IIЫ IIРОДУКТОМ ожно тестироваТh caыe разные aClleKThI ilоведения IIpO I paMЫ, Вот неСКОЛhКО IIриеров, . Если разрабатывается IIporpaa IIрОВСрКИ IIраВОllисания и в ее основе лежит тот же алrорит, который ИСlIользуется в одной из уже сушествуюших IIporpa, ожно IIреДЛОЖИТh и IlроверИТh один и тот же набор слов, . Если разрабатывается IIporpaa автоатическоrо lIереноса слов и особенно если отрабатывается одификаuия ее алroрита для дpy roro языка, ВОЗhите для сверки IIроверенную IIporpay, IIpoдaBa еую на TO же рынке, ПодrОТОВhте узкий столбик текста и IIредложите ero обеи IIpOI1'aMaM, . Для IIporpahI, ВЫllOлняюшей выравнивание текста 110 ширине строки, необходио IIроверИТh, наСКОЛhКО paBHoepHO она разделяет слова IIробелаи, Для образuа ожно ВЗЯТh обычный текстовый процсссор и обеим IIpOrpa,\t,\faM IIРСДЛОЖИТh один и тот же текст, набранный одинаковыи шрифтаи, . Для отладки IlOсылаеых на ilри нтер Уllравляюших rlOследоватеЛh ностей ожно lIеренаllравить вывод в файл и то же caoe сделаТh в эталонной IIporpae, раСllечатав в ней точно такой же ДOKyeHT, Зате оба файла ожно сраВНИТh  они должны БЫТh идентичны, Во всех случаях, KOrдa необходио IIротестироваТh выходные данные, которые леl'КО ожно наllраВИТh в файл, и ИСlIользуется еше одна IIporpa ма, уеюшая rенерироваТh те же данные, Их резулыаты леrко ожно cpaB НИТh, Разуеется, в каждо KOHKpeTHO случае OryT БЫТh собственные apryeHThI "за" и "lIрОТИВ" этой технолоrии, Наllриер, на ее реализаuию ожет 1I0требоваТhСЯ слишком HOro вреени, средств или усилий, Kpoe TOro, эталонная IIporpaa тоже ВllOлне ожет содержаТh ошибки, Но в любо случае етодику тестирования эквивалентности следует иеТh в виду  во ноrи х случаях ее IIрИ енение значитеЛhНО ускоряет работу и во HOro раз IlOвышает ее эФФеКТИВНОСТh, Не забывайте включаТh в отчеты об ошибках выходные данные, 1I0лучен ные от обеих IIporpa, Они очень важны для IlOиска IIрИЧИНЫ ошибки, 
204 Часть 11: Приемы и тех//ОЛОi!UИ тестирова//ия Реrрессионное тестирование: успешно ли исправлена ошибка Получив отчет об ошибке, IIроrраист тщательно анализирует исход ный код, находит IIрИЧИНУ ошибки, ИСllравляет ее и тестирует резулыат, Однако это идеальный вариант  на IIрактике же так бывает далеко не Bcerдa, Некоторые IIроrрамисты ИСllравляют только Оllисанные в отчете сиюпоы, В резулыате ИСllравления настояшие IIрИЧИНЫ ошибки не YCT раняются  одно из IIроявлений ошибки исчезает, но друrие остаются, Бывает и так, что IIрOl1'аист неllравильно 1I0йет отчет и ИСllравит не то, что надо, Некоторые недобросовестные сотрудники вообше не тестируют свою работу: они не rлядя вносят ИСllравления и неедленно возврашают IIpOl1'ay тестировшика, не ИСllравив IIрежнюю ошибку и наделав новых, Этот lIеречень ожно IIродолжать бесконечно, rлавное же  не растерять ся, СТОЛКНУВlIIИСЬ с 1I0добныи ситуаuияи, ОIlЫТНЫЙ тестировшик должен быть roTOB к ни заранее, Считается, что около трети вноеиых в IIporpay ИСllравлений или не срабатывают, или даже "лоают" то, что уже работало, Мартин и МакКлер (Martin & тсС!ще, 1983) IIРИВОДЯТ статистику, 1I0казываюшую, что с lIep BOro раза срабатывает eHee flOЛОВИНЫ вносимых IIроrраистаи ИСllрав лений, Вот три задачи, которые ставит lIеред собой тестировшик, flроверяюший внесенные IIроrраисто ИСllравления, . Проверьте, что ошибка исправлеtrа. Выполните тот же тест, в KOTO po она IIроявилась и который был Оllисан в отчете, Если IIpOlpaa ero не Ilройдет, дальнейшее тестирование ни к чеу, Если же I1pO [paa IIройдет тест, не ТОРОllитесь, Подуайте еше секунду, в ca o ли деле вы IIровели иенно нужный тест, Уверены ли вы, что знаете, как ВОСllроизвести ошибку? И IIрИ алейших сонениях заrрузите старую версию IIpOlpahi, ВhlllOлните Оllисанные в отчете действия и убедитесь, что ошибка налиuо, . Поищите связаtrtrые ошибки. ПреДlIOЛОЖИ, что IlроrраисТ yCTpa нил Оllисанные в отчете СИIПОЫ ошибки, но cay ее не ИСllравил, Можно 1IOIIробовать ВОСllроизвести ошибку какинибудь иным Сllособо, Может быть, в IIporpaMe есть друrие 1I0добные еитуа uии? Не жалейте вреени, если вам кажется, что ОlIIибка оrла остаться  1I0тестируйте IIporpaMY еше час, ожет быть несколь ко часов, Проведите как ожно БОЛhlflе тестов, 
[лава 7' Разработка тестов 205 . Ilротестuруйте оставшуюся часть npo<?pa.мJItbI. Возожно, неожн ;ЩННI'lе IlOследствия ИСllр<!вления IIРОЯВЯТСЯ rдениБУДh еше, ИХ IIOИСК IIРОВОДИТСЯ нефораЛhНО  без заранее IlOдrотовленно!'о нлана, Просто 1I0дуайте, какие части IIporpah) OryT БЫТh затро нуты внесенныи ИСl1равлениями, и IIроверые их, Реrрессионное тестирование: стандартная серия тестов Некоторое время снустя IlOсле начала тестирования IIporp:I\!MHOrO I1рО ;IVK']<! форируется библиотека ре?реССИО/f/fЫХ тестоп, Это полныЙ набор Il'l:rOB, охватывающий всю IIpol'Pay и выполняюшиiiсн каждый р:н, косш IlрОlра\I\IИСТЫ С;Iают ее очередную рабочую версию. ;IУ'lше Hcero, если тесты IIOЛIIОСТhЮ автоатизированы, В это СЛУЧ,lе IIсе раВIIО Ilрилется затраТИТh некоторое врея, но вен IIpol\e;lypa тестиро l\ilIIIH! юраз;lО ellce TpyдoeKa, KOI';la лля тестирования IIредоставляется очерелная версия Ilроrра\IIЫ !I lIаступает вре1Я IIОВТОРИТh все тесты биб;lиотеки сначала, возникает РЯ;l IЮlIрОСОВ. НаСКОЛhКО велика библиотека, и как вообше 1101I,l;1аЛII в нее ,с'сты'! ДействитеЛhllO ли необходио ВЫIЮЛIIЯП, их все снова и снова'! Не всеlла леrко зараltее ОllрелеЛИТh, какие тесты следует ВКЛЮ'I,ПЬ в рСI ресеионную биб;lИотеку, Поэтоу нервонача':lhНО в ней ожет оказап, С>I БОЛhШС тестов, че это действитеЛhНО необходио. Разуеется, в нее как \IИIIИУ войдут I1риеры для IIроверки I'раничных условий и BpeeHHЫX \арактеристик. 110 стоит ли ВhillOЛltЯТh их все каждый раз? IIРОВОДИТh реrреесионные тесты обычно не хочется, 1I0СКОЛhКУ всроят IIOCI'!, выявления ии ошибок не особенно велика. При перво ВЫllOлне 1111И некоторые из этих тестов orYT ВЫЯВИТh ошибки, но IlOсле их "КOfl'lатеЛhНОro IIсrlравления проводнть их снова и снова кажется IIУСТОЙ II0терей вреени. Если ошибки БОЛ\,/l1С нет, какова веРОЯТНОСТh, что она II0НВИТСЯ снова'? А как БЫТh с тестаи, которые IIРОВОДИЛИСЬ уже 110 He CKO;lhKY раз и ни разу не выявили ошибок? В некоторых КОlIаниях такие 1 с'СТЫ исключают из библиотеки, оставляя только те, в которых IIрОЯВЛЯ :IIICI, ошибки. Вместо Toro чтобы учитеЛhНО обдуываТh каждый тест, лучше 1I0ЙТИ fiолее просты IIYTe. Включите в рсrрессионную библиотеку все тесты, которые 1I0Кажутся Ba IIOЛСЗНыи, Периодически, IIриерно через каждые I ри uикла, lIересатривайте эту библиотеку и удаляйте те тесты, отсутствие КОТОРЫХ не снизит качества работы. Вот неСКОЛhКО IIOЛСЗНЫХ тактических IIplleoB. 
206 Часть 11: Приемы и тех//олосии тестирова//ия . Удалите тесты, которые :жвивалентны дрУlUМ тестам библиоте ки. В идеале такие тесты вообще не должны llOllaдаТh в библиотеку. Но КOI'да она создается неСКОЛhКИМИ сотрудниками, llOдобные Ha кладки внолне возможны, . Уменьшите количество тестов, объектом которых является уже исправленная ошибка, Если ошибка или некоторые ее разновидно сти IIРОЯВЛЯЮТСЯ в течение l{елою ряда l{ИКJIОВ тестирования, в биб лиотеку стоит добаВИТh достаточное количество тестов для их выявления. Это внолне нормалhНО и уместно. Соответствующую часть HpOl'paMMhI необходимо тщатеЛhнейшим образом тестироваТh до тех нор, нока в ней не останется и следа ошибки. Однако llOсле этою боЛl,ШУЮ чаСТh тестов, нанравленных на llOИСК иснравленной ошибки, можно удалИТh из библиотеки, . Комбиllируйте тесты, Если 15 тестов, которые npOl'paMMa, скорее всею, нройдет, можно объеДИНИТh в один  сделайте это, В начале тестирования так llO<':ТУIlать не стоит, но в далhнейшем объединение тестов позволит значительно ускорип, работу, . По возможности автоматизируйте тестирование. Если вы YBepe ны, что онределенная I'PYlllla тестов будет ВhlllОЛНЯТhСЯ в течение IIЯТИ или десяти 1I0следующих l{ИКЛОВ тестирования, стоит нотраТИТh время на их автоматизаl{ИЮ, (В I'лаве 11 этот вонрос будет обсуж даться 1I0дробнее,) . Выделите часть тестов для периодическоi!O выполненuя. Вместо тою чтобы I1РОВОДИТЬ все тесты реl'рессионной библиотеки llOсле каждою изменения IIpOl'paMMhI, можно ВЫНОЛНЯТh их реже  на каж;ЮМ втором или третьем l{икле, На 1I0следней стадии тестирова ния лучше ВhlllОЛНИТh маКСИМaJlhНО возможное количество тестов, чтобы убеДИТhСЯ, что HpOl'paMMa ютова к вынуску, Но до этою в каЖJЮМ l{икле можно ВhIlIOЛНЯТh треть или ноловину всех тестов, Реl'рессионная библиотека должна включаТh все лучшие тесты из тех, что уже разработаны, но, если она будет слишком велика, у вас не OCTaHeT ся времени на разработку новых тестов, А ведь именно новейшие тесты с наиБОЛhшей веРОЯТlIOСТhЮ выявляют еще не найденные ошибки. Поэтому Iшанируйте работу так, чтобы реl'рессионная библиотека служила средством llOвышения эффективности тестирования, а не ею тормозом, Выполнение тестов ПридумаТh хороший тест  это ТОЛhКО ноловина дела, ведь ею еще нужно нраВИЛhllO ВЩlOлнить, Вот неСКОЛhКО нримеров, 
[лава 7: Разработка тестов 207 . Если ВЫ хотите, чтобы llрИ установке llpOl'paMMbI на КОМllhютер у llOЛhзователя была ВОЗМОЖНОСТh выбора конфиryраuии, недостаточно нросто заllУСТИТh llpOl'paMMY установки и носмотрен, предоставля ет ли она необходимые ОIЩИИ, ВЫllолните каЖJtый вариант YCTaHOB ки, каждый раз заllуская саму llporpaMMY и llроверяя, действитеЛhНО ли установлена выбранная КОНфИl'ураltия, УбедитеСh, что llpOl'pa,\I ма llрИ этом llOЛНОСТhЮ раБОТОСllосоБна, . Если llpOl'paMMa llосылает на llринтер КОНфИl'ураltионную ИНфОр!а ltию, не заБУДhте раСllечатан документ, в котором ИСllОЛhЗУЮТСЯ соответствующие ОIЩИИ форматирования, То же самое касастся и любых ДРУI'ИХ внешних устройств, . Если IIpOl'paMMa 1I0зволяет указаТh размер llечатаемой страниltы, отстуны и ДРУI'УЮ подобную информаltию, недостаточно удовлетво рен но улыбнуты;я, увидев, что документ llраВИЛhllO Вhll'ЛЯДИТ на экране, Ею необходимо раСllечатан, . Если в IIpOlpaMMe ИСlIOЛhЗУЮП;Я символы из расширеннOI'О набора ASCII, недостаточно увиден их на экране, Они должны llраВИЛhllO lIечатаТhСЯ, llересылаТhСЯ через модсм и т,д, Необходимо Y'lecTh все llporpaMMHoe обеСllечение, через которое будут IIРОХОДИТh выходные данные: драйверы устройств, алI'ОрИТМЫ ИМllорта, Основное llравило, вытекающее из llриведенных llримеров можно сфор мулирован так: тестовая llРОltедура должна застаВИТh llpOl'paMMY ИСlIOЛhЗО вать ввсденные данные и llодтвеРДИТh, что они ИСllOЛhЗУЮТСЯ IIраВИЛhllO, 
Fлава 8 Тестирование принтеров и дРУ2их iL/ устроиств Назначение этой rAaBbI в этой rлаве рассказывается о тестировании проrраммноrо обеспечения на предмет совместимости с проrраммноаппаратным окружением, После общеrо обзора стратеrии, применяемой в этой области, весь ход тестирования рассматривается на одном из самЫХ распространенных и понятных примеров  печати данных, Почти все прикладные проrраммы чтонибудь печатают, поэтому неиз бежно возникает вопрос о совместимости (разве что в проrрамме ис пользуются только базовые функции принтера, т ,е, печать анrлийскоrо текста стандартным шрифтом), Нам приходилось работать во мноrих тестировочных лабораториях, и каждый раз мЫ обучали сотрудников планированию, разработке и выпол нению тестов печати, Этот наш опыт и леr в основу данной rлавы, . Одной ИЗ причин Toro, что тестирование печати так подробно pac сматривается в этой книrе, является абсолютная необходимость обучения тестировщиков технолоrии этой работы, Иначе неизбеж ны пропущенные ошибки и ненужные потери времени, . Кроме Toro, подробный рассказ о работе с принтером показыва ет, как MHoro нужно знать специалисту, планирующему тестирова ние на аппаратную совместимость, Например, если вы собираетесь тестировать модемы, придется разобраться в классификации этих 
[лава 8: Тестирова//ие при//теров И друсих устройств 209 устройств и их драйверов, узнать об их управляющих кодах и ти пичных проблемах совместимости  точно так же, как это необ ходимо сделать при тестировании принтеров, Обзор в этой rлаве рассматриваются следующие вопросы: . Общий обзор тестирования на аппаратную совместимость, . Как работают принтеры и как ИмИ управляет проrрамма, . Стратеrия тестирования принтеров и мноrих друrих устройств, 1, Прежде Bcero выполнятся поиск аппаратнонезависимых ошибок проrраммы, 2, Затем осуществляется поиск ошибок, специфических для тести pyeMoro класса устройств, 3, Затем наступает черед ошибок, связанных с драйвером. 4, Только после этоrо выявляются ошибки, возникающие исключи тельно при работе с конкретной моделью устройства, . Орrанизация тестирования одних и тех же функций печати с разны ми типами устройств, . Как и зачем протоколировать результаты тестирования, . Как автоматизировать большую часть работы по тестированию печа ти, . Орrанизация и оборудование паборатории тестирования печати, Примечание в мноrопользовательской и мноrозадачной среде тестирование на аппа ратную СОВместимость  работа куда более сложная, И хотя к ней применимо большинство описываемых в этой rлаве принципов, для пол ноценноrо проведения TaKoro тестирования вам потребуются и дополни тельные знания, Обратитесь за советами к сотрудникам, уже имеющим подобный опыт, Общие вопросы конфиrурационноrо тестирования БОЛhШИНСТВО HpOl'paMM нредназначены для работы с очеНh широким дианазоном КОНфИl'ураl\ИЙ аllнаратуры и Оllераl\ИОННОЮ окружения, Поэто му нри их тестировании нравомочно задаТh следуюшие вонросы: . С какими нринтерами совместима тестируемая HpOl'paMMa? . Какие видеОlUlаты и наборы микросхем, какие видеорежимы и Ka кие тины мониторов отвечают ее нотребностям? . С какими НОЗИl\ИОНИРУЮШИМИ устройствами она будет работаТh и с какими их драйверами? . Каковы характеристики основных необходимых HporpaMMe anllap<lT ных ресурсов, нанример, каков минимаЛhНЫЙ и маКСИМ,IЛЫlшi 
210 Часть l/: lТриоtы и тех//олосии тестирова//ия объем необходиюЙ ей паfЯТИ, с какими ее ТИllами llрOl'рамма бу дет работать? . Для какоЙ аПllаратноЙ платформы предназначена llporpaMMa (наllрИ мер, :vtacintosll или IBM), с какими моделями совместимых KOMllb ютеров она будет работать? . Для какоЙ llрOl'раммноЙ llлатформы llредназначена llрOl'рамма (Ka кой операl\ИОННОЙ системы и каких ее Версий, какое ей необходи мо ДОllOлнитеЛhное системное ПрОl'раммное обеСllечение  например, ПРОI-раммная оболочка, llрOl'раммы Уllравления llаМЯТhЮ, базовые ФУНКl\ИИ из RO:vt BIOS), Все персчисленные КОМllOнеlПЫ составляют ко//фисурацию системы  стоит измеНИТh один из них, и получится новая КОНфИI'ураl\ИЯ, Термин ко//фисураЦИО//l/Ое тест ирова//ие означает llроверку совместимости llpOl'paM мы <.: теми КОНФИI'УР,щиями оборудования и систеМНОl'О llрOl'раммною обеснечения, с которыми она должна работаТh, Как ни важна обстоятеЛhllOС1Ъ проведения этою вида тестирования, но даже самые элементарные llодсчеты Тlоказывают, что llроверИТh работу НрOl'раммы со всеми ВОЗМОЖIШМИ КОНфИI'ураl\ИЯМИ среды абсолютно He возможно, Даже если выбраТh ТОЛhКО один из аспектов, например тестиро нание l'ра(jJИ'lескоЙ ПрОlраммы на совмести,\IOСТЬ с видеооборудованием, то, исследован еl о рынок, ны обнаружите IIOМИМО l.Iелою ряда стандартов еще и сотни моле:rей нидеОluат и мониторов, А что будет, если проверять еще и совмеСТИМОСТh с lIOЗИl\ИОНИРУЮЩИМИ у<':тройствами? Если отобраТh 10 наиболее ПОllулярныХ видеоплат и еще llЯТh наиболее 1l0llУЛЯРНЫХ моделей ,\lhIlIIИ, то получится 50 тестов, Добавьте на каждую МЫШh 110 три драйве ра  1l0ЛУ'IИТСЯ 150 тестов, Мониторы также отличаются меЖJtу собой, и прежае всею следует пронерить два их о<.:новных типа  монохромные и цветные, Видеоплаты работают с ними IIOразному, Поэтому если тестиро нать еще и два основных ТИllа мониторов, то 1l0ЛУЧИТСЯ уже 300 тестов, Как видите, с добавлением каждою НОВOI-О объекта тестирования общее КОЛИ'lество тестов растет в l'еометрическоЙ llроrpессии, Даже если ВhlДелить ТОЛhКО неСКОЛhКО наиболее 1l0llУЛЯРНЫХ моделей основных внешних YCT ройств, как быть с бесконечным разнообразием осталhНЫХ? Чтобы llраВИЛhllO СllланироваТh и llровести конфиryраl\ионное тестиро вание, необходимо очеНh мною знаний, IlреЖJtе всею нужно ВЫЯСНИТh, какие ФУНКl\ИИ каждою из устройств ИСllОЛhЗУЮТСЯ В llрOl'рамме, и как узнать, что llрOl'рамма ИСllOЛhзует их llраВИЛhllO, Важно знать, в чем может заключаТhСЯ совмеСТИМОСТh или несовместимость llодобных устройств и как их различия МOI'ут 1l0ВЛИЯТЬ на тестируемую вами llрOl'рамму. Если выяс нить, какие из устройств хорошо эмулируют ДРУI' друrа, можно сэкономить и вре!я, и деНhI'И, взяв для тестирования 110 одному llредставителю каж 
[лава 8: Тестирова//ие при//теров и друсих устройств 211 ДОЙ I'РУШJhI совместимых меЖJtу собой устройств, При этом совмеСТИМОСТh не обязатеЛhllO должна бhIТh нолноЙ  достаточно, чтобы одинаково рабо тали функltии, ИСllOЛhзуемые вашей НрOl'раммой. Однако, классифиltируя устройства но стенени их совместимости, следует бhIТh осторожным: не стоит доверять утвеРЖJtения! их изютовителей, Поищите истОчники неза висимой информаltии, иначе вы рискуете, что на одном из видов HeHpOTe стированною оборудования у llOЛhзователей IIроизойдет сбой, ПрофессионалhlIaЯ нресса Becl,Ma охотно рассказывает о HpOl'paMMax, которые не работают с 1I0НУЛЯРНЫМ аlIнаратным обеснсчением, Лучше не НОlIадать в их черные сниски, ина'lе нодобная стаТhЯ может JIИШИТh HpO l'раММIШЙ 11 роду кт части рынка, а вас , работы, На рис, 8,\ нриведено общее Оllисание 1I0дхода к КОНфИ1'ураltионному тестированию, В оставшеЙся части I'лавы рассказывается, как он IIрименя ется к тестированию наиболее pacllpocTpaHeHHoro устройства  IIринтера, Именно о нринтерах тестировщики думают нреЖJtе всею, и именно с ними чаще всею возникают IIроблемы у llOЛhзователей, Тестирование печати На рынке устройств для lIерсонаЛhllЫХ КОМНhютеров имеетсн более тысячи различных IIринтерон, Этот рынок разделен на неСКОЛhКО 'lастеЙ, нредставляющих устройства ;UIЯ различных IIлатформ. Самая значитеЛhная ею доля нринадлежит IIлатформе :vticrosofi, Не все HpOl'paMMhI ИСНОЛhЗУЮТ Функltии нринтера в 1I0ЛНОМ объеме: некоторые из них не нечатают l'ра(jJИКИ, не IЮЛl,Зуются различными начер таниями шрифтов (НОЛУЖI1РНЫЙ, 1I0дчеркнутый и т,п,), не llOЛhЗУЮТСЯ HpO НОРltионаЛhllЫМИ или иными СllеltиФическими ТИlIами шрифтов, не нечатают в нвете, Проще юворя, они не lIечатают ничею, кроме CTaHдap тною ASCIITeKcTa но 79 символов н строке, Такие IIpOl'paMMhI совмести мы нрактически со всеми русифиltированными IIринтерами, и для них нрактически нет НУЖJtы в КОНФИI'УР'ЩИОННОМ тестировании. Что касается HpOl'paMM, llOлноltенно ИСllOЛhЗУЮШИХ нреимущества co временных нечатающих устройств, то они и не lIытаются llOДilерживаТh все без исключения принтеры, ПостарайтеСh нротестировать все те нринтеры, совмеСТИМОСТh с которыми указана в документаltии HpOl'paMMhI, а также llOЛНОСТhЮ совместимые с ними lOдели, I1роверьте и наиболее "канриз ные" и нлохо зарекомендовавшие себя нринтеры, чаще ДРУI'ИХ вызывающие нроблемы нроrраммною обеСllечения или являющиеся нричиной наиБОЛh шеro количества жалоб НОЛhзователей, Если вам llOвезет, руководитеЛ1, проекта даст вам снисок наиболее HO нулярных или наиболее важных с маркеТИllI'ОВОЙ точки зрения устройств (нанример, обладающих снеltиалhllhIМИ функциями или обещающих стать нонулярными в недалеком будущем), 
212 Часть 11: Приемы и теХНОЛОCUIl тестирования 2. Изучение устройства Как оно работает? Какие из принципов ero работы влияют на технолоrию тестирования? Какие из функций устройства используются в проrрамме? -"".... .."  l 1. Анализ рынка С какими из устройств AaHHoro вида (принтеры, видеоплаты l ' и т.п,) должна работать проrрамма? rAe их можно взять? (Информацию об устройствах, совместимость с которыми считается обязательной, что отражено в документации, можно получить у руководителя проекта или менеджера по 1 1 маркетинrу. Однако часто вас будут интересовать не толь , ко они, но и критические для тестирования почти полностью I совместимые устройства.) i I I j ! 3. Анализ способов управления устройством Как разделить все возможные устройства на rруппы, в KO торых про являются одни И те же ошибки? 4. Экономия времени Протестируйте только по одном у устройству из каждой rруппы. Выявив общие для всей rруппы ошибки, протестируй те каждое из устройств в отдельности. 5. Повышение эффективности Конфиrурационное тестирование  работа однообразная и утомительная. Подумайте о том, как ее автоматизировать. Очень важную роль иrрает правильная орrанизация и плани рование работ, хорошая система протоколирования резуль татов тестирования. Все это повысит эффективность взаимодействия с помощникамИ и отслеживания результатов их работы. 6. Накопление опыта Исследования и запись результатов тестирования необходи мО орrанизовать таким образом, чтобы при работе над сле дующим проектом можно было использовать накопленный опыт и наработки. 7. ВзаИМОJ1ействие устройств Используемое проrраммой устройство может взаимодей ствовать с друrими устройствами системы, обмениваясь с ними данными или же, наоборот, нарушая их работу. В подобных случаях необходимо подrотовить ряд тестовых примеров, отражающих это взаимодействие. РИСУНОК 8.1. СеАIЬ этапов пОЛl/Оце//l/ОСО КОНфИi!ураЦИО//l/Оi!O тестирования 
rлава 8: Тестирова//ие при//теров И друсих устройств 213 Однако не стоит удивляться, если окажется, что вам придется caMOCTO ятеЛhНО нровести маркетинrовые исследования, В этом случае можно об раТИТhСЯ к таким нопулярным источникам актуалhlЮЙ информании, как Coтputer Rese//er News, РС Magaziпe (особенно ежеrодный вынуск о прип терах) и MacWorld, Обзор принтеров Вот каковы основные современные технолоrии нечати, . МатриЧllые пpUllmepbl нечатают с IЮМОЩhЮ металлических иrолок, расноложенных в неСКОЛhКО рядов на нечатающей roловке, Коrда иrолка выдвиrается из rоловки и через красящую ленту ударяет по бумаrе, нолучается точка, Если все иrолки Вhщвиrаются OДHOBpeMeH но, нолучается вертикалhlIaЯ черточка около трех МИJL1иметров дли ной, Принтер нечатает букву но частям: rоловка нодводится к ее левому краю, выдвиrаются нужные иrолки, нечатая нервую чаСТh буквы, затем rоловка сдвиrается внраво, точно так же нечатается следующая чаСТh буквы и т,д, Обычно У матричных нринтеров 9 или 24 иrолки, но бывают и друrие варианты, Есть и такие нринтеры, у которых rоловка, усеянная иrолками, имеет ширину нолной строки, так что она не неремещается внраво и влево, а нечатает всю строку одним ударом иrолок, Буква, нанечатанная матричными нринтером, выrлядит зернистой, в ней отчетливо видны отдеЛhные точки, Oco бенно это заметно у 9иrОЛhчатых нринтеров нри черновом режиме Ilечати (на самой высокой скорости), С развитием ТСХНОЛОI-ИИ MaT ричной нечати нроизводители наУЧИЛИСh вынускать более совершен ные устройства, rоловки которых неремещаются достаточно быстро, и нри этом точки раClюлаrаЮ'IСЯ так близко друr к друry, что HpaK тически сливаются, В реЗУЛhтате на них можно нечатаТh rрафику более высоко['о разрешения, а текст нолучается rораздо лучшеrо качества, . СтРУЙllые принтеры вынрыскивают на бумаrу чернила, образуя малеНhкие точки, Их rлавными нреимуществами являются бесшум ность и высокое качество нечати, . Страничные принтеры онерируют не символами и строками, а цe лыми стран инами, По технолоrии нечати они подразделяются на лазерные, светодиодные (СЕD) и термалhllые, Управляющие коды и языки ХОТЯ механизм печати сам но себе и интересен, с точки зрения про rpaMMHoro обеспечения более важным является набор команд, позволяю щий унравлять работой нринтера, И здеСh также существуют значитеЛhные различия, 
214 Часть 11: Приемы и технолоcuи тестирования БоЛl,ЩИНСТВО матричных нринтеров унравляется сравнитеЛhllO HpOCTЫ ми кодами, Нанример, чтобы устаНОВИТh нолужирное начертание щрифта, достаточно нослап, нринтеру код <Esc> (АSСIIкод 27) и один онределен ный символ, Для смены шрифта нотребуется кодовая llOследоватеЛhНОСТh, состоящая из кода <Esc> и четырех или няти символов, Существует ряд стандартных наборов управляющих кодов нринтеров, из которых наиболее раснространены наборы кодов, нредложенные фирмами Epson и IВM (у каЖJtorо из них существует множество вариантон), Страничные и некоторые струйные нринтеры унрав.:lЯЮТСЯ более слож ными (и длинными) командами, Набор таких команд называют языком управления нринтером, В настоящее время наиболее раснространены языки PostScript и HP РС'- (Printer Control '-angllage  язык унравления НрИlIТе ром фирмы Hewlett Packard), Цветная печать Возможностями нечати в нвете обладают все три тина нринтеров, но у матричных качество не'!аТИ хуже, 'leM у струйных и страНИ'IНЫХ, Дело в том, '!то У матричных нринтеров ItвеПlые краситеJlИ наносятся нолосами на одну и ту же JleHTY, и со временем нвета неСКОЛhКО смаЗШJaЮ'IСЯ, У струй ных же нринтеров ItвеПlhlе чернила хранятся в отдеЛhНЫХ емкостях, из которых они вынрыскиваются на бумаrу, Типы интерфейса Принтер может нодключаТhСЯ к КОМНhютеру либо 'Iерез стандартный нараллеЛhllhlЙ или IlOследоватеЛhНЫЙ норт, либо через СllеItифическое co единение, разработанное нроизводителем для KOHKpeTHoro нида техники, либо через сеть, Сетевое нодключение является источником особых HpO блем, о которых будет рассказано далее, В мире Microso[t и Amiga более раснространены наРailЛеЛhные нринте ры, При нараллеЛh//ОМ нодключении нереда'la ИНфОр,\lаItии нринтеру BЫ нолняется rораздо быстрее, НОСКОЛhКУ за один раз нередается 8 битов информаItии  но ВОСhМИ наРaJlлеЛhНЫМ нроводникам, При носледоватеЛh ном нодключении нринтера биты информаItии нередаются но одному, Этот вид нодключения неСКОЛhКО сложнее, НОСКОЛhКУ для el'o работы необходи мы более сложные протоколы, определяющие, в частности, как ВЫЯСНИТh l'OTOBHOCTh устройства и как обознаЧИТh наЧaJlO и ко//ен llOследоватеЛhНО сти битов, Тестирование llOследоватеЛhНЫХ нринтеров, основанное на их снеItифических особенностях, в этой КНИI'е не рассматривается, ['лавное же, что необходимо знаТh для тестирования Hpol'paMMhI, HOД держивающей и нараллеЛhllые и llOследоватеЛhные нринтеры,  это то, что нридется отдеЛhНО нротестироваТh оба эти тина устройств, 
{шва 8: Тестирование принтеров и друсих устройств 215 Управление принтером Д:IЯ начала нредставьте себе, что вы имеете дело с нроrpаммой, осуще l'11\'lяющей взаимодействие с нринтером абсолютно са,\lOстоятеЛhНО, Было время, кота НрОI'рамIИСТ lOr нанисать HpOrpaM!y, нрн!!язанную к OДHO !y конкрепlOМУ тину нринтеров, Если llOЛhзоватеЛh нодключал еще один IlplfHTep, НрОl'ра\lМИСТУ НРИХОДИЛОСh МОДИФИl\ировать HporpaMMY, включая в нес команды унравления новым нринтером, Хотя сна работа и не была особенно сложной, неоБХОДИМОСТh СОНРОВОЖJЩТh HporpaMMY в течение дол 1'01'0 времени и обеснечиваТh ее совмеСТИМОСТh со все расширяющимся набором устройств МОlла нревратиться в настоящее мучение, К счаСТhЮ, эта нроблема давно решена, Снасением НрOl'раммистов стала КОlщеlЩИЯ виртУlL1ЬНЫХ пРИ/lтеров  абстрактных устройств с фиксирован ным набором возможностей и команд, Именно эти команды унравления ВИРТУaJlhНЫМ нринтером и включаются в нрикладную HpOl'paMMY, а за их неревод на язык конкреПlOl'О устройства oTBe'laeT нромежуточная Hpol'paM ма, назынаемая драйвером, В современных онераl\ИОННЫХ системах имя нринтера указывается нри их настройке, Драiiверы устройстн являются чаСТhЮ онераl\ИОННОЙ систе мы и ноставляются вмсстс с нсй, Если жс драйвсра KOHKpeTHOI'o устройства в системе нст, CI'O можно установить отдеЛhНО, и он тоже будст рассматри ваТhСЯ как чаСТh систсмы, Как IIранило, нроизнодители aHHapaТllOl'o обес Ilсчения включают драйвсры своих устройств в КОМllЛСКТ их ноставки, Преимущество ОllИсаННОl'О нодхода состоит в том, 'по нрикладная HpO IpaMMa НИЧСI'О не знает об установленном н систсме Тlринтере, Она HaHpaB ляст унравляющис команды и данные ВИРТУaJlhllOМУ нринтсру, не заБОТЯСh о том, каким обр,ном они будут нерсданы конкретному устройству и Ka кие нреобразования ;щя ЭТОI'О нотребуются, Ilерсд включснисм в систему все драйверы устройств тщатеЛhllO тести руются с cafhIM разным IIpOl'pdMMHhIM обеснечением, Ilоэтому, если HpO l'paMMa нсредает виртуаЛhllOМУ нринтеру нраВИЛhНУЮ информаl\ИЮ, ее команды будут коррсктно нсрсвсдсны на язык KOHKpeТllOl'o устройства и НhlIlOлнены, По крайней мере, нреДНОЛaJ'ается, что все должно НРОХОДИТh именно так, И в общем случае эта теХllOЛOl'ИЯ нрекрасно работает, Однако в отдеЛh ных случаях нроl'раммисты ОТС1)'llают от онисанной технолOl'ИИ и уl1равля ют IlрИlперо\! самостоятеЛhllO или же НhlIlOЛНЯЮТ одну чаСТh работы через драйвер, а ДРУI'УЮ неllOсредственно, Иноrда это делается для llOвышения качестна нечати или для ее YCKO рения, Или же IlрОI'рам\IИСТ хочет ИСIIОЛhзоваТh снеuифические функции устройства, не ноддерживаемые стандартным драйвером, В таких случаях код, унраВJlЯЮЩИЙ работой конкретных тИlIOВ устройств обычно отделяется от OCHOBIIOI'O кода IlpOI'paM\fhI, При ее установке IIOЛhзоватеЛh указывает 
216 Часть 11: Прие,I1Ы и технолосии тестирования ТИIl cBoel'o Ilринтера, РаЗУ\fеется, 1l0добные Ilpol'paMMhI и тестирован, и СОllровождан I'Ораздо сложнее, но в этом Il0дходе нет ничеl'О Ilредосуди теЛhНОI'О, если он обусловлен объективной необходимосню и ведет к 11O вышению качества и IlроизводитеЛhllOСТИ IlpOl'paMMhI  ведь конечноrо 110Лhзователя интересует именно это, Общая стратеrия тестирования принтеров Каждая Ilpol'paMMa 11OCBOCMY ОРl'анизует Ilечан, Как Ilравило, можно ВhlДелин неСКОЛhКО основных уровней ее работы и cooTBeTcTHeH11O разде лин и возможные ошибки, IlреДllOЛОЖИМ, что тестируется текстовый IlpO нессор и в качестве tectobol-О Ilримера он должен раСllечатаТh неСКОЛhКО слов курсивом, . Ошибка, не зависящая от устройства. Если Ilpoll1aMMa не 1l0сылает виртуаЛhllOМУ Ilринтеру команду вклю'rения курсива, не передает текст или вместо Ilринтера отсылает el'o модему, то устройство здеСh не причем, Это чисто ЛОl'ичсская ошибка, и ее необходимо НЫЯНИ1Ъ до TOI'O, как вы IlРИСТУ!lите к тестированию различных Ilринтеров, . Ошибка, специфическая для класса nРШlтеров. Если Ilpol'paMMa opl'a низована так, что с каЖJЫМ классом Ilринтеров работает отдеЛhНЫЙ блок кода, возможно, что с одним классом нринтерон IlpOl'paMMa pa ботает IlраВИЛhllO, а с ДРУI'ИМ  нет, Наllример, она IlраВИЛhllO Yll равляет матричными Ilринтсрами и Ilринтерами, ИСllOЛhЗУЮШИМИ язык PostScript, но отказывается работаТh с Ilринтерами Laserlet, Рис, 8,2 иллюстрируст различие между классами IIринтеров, драйве рами и конкретными lOдслями устройств, Класс nри1lтеров Драйверы Принтеры Простые управляющие коды Epson 24 pin Epson Ш-51 О Panasonic КХР-1124 18М Graphics 18М Graphics Tandy ОМР-106 Собственная кодировка Okidata Okidata ML-82 Okidata ML-92 Hewlett Packard PCL HP LaserJet 11 HP LaserJet 11 HP LaserJet 110 HP PCL5 HP LaserJet 111 PostScript PostScript Apple LaserWinter NT РИСУНОК 8.2. Классификация принmеров 
rлава 8: Тестирование принтеров и друсих устройств 217 QMS 810 Хотя такая Орl'анизания достаточно широко раСl1ространена, это еще не означает, что и В<lша I1porpaMMa неl1ремеНIIО будет орrанизована 110 той же схеме, . Ошибка, специфическая для драйвера. В I1pol'paMMe может быть часть кода или таблиuа l1ерекодировки команд, I1рименяющаяся для рабо ты с конкретной I'РУl1110Й I1ринтеров, I1роще I'ОВОрЯ, встроенный драйвер, Один и тот же драйвер может ИСllOЛhзонаТhСЯ для uеЛОl'О ряда ОДНОТИI1НЫХ I1ринтеров, наllример, драйвер Epson FX может работать с I1ринтерами FX80, FX85, FX I 00 и др, И если в этом драйвере содержится ошибка, она будет IIРОЯВЛЯТЬСЯ I1рИ работе со всеми I1ринтерами данной I'PYllllhI, . Ошибка, специфическая для при1lтера. Такие ошибки случаются, если данному I1ринтеру не 110ДХОДИТ выбранный ДР<lйвер или же принтер не IJllOЛllе совместим со СВОИМI1 собраТhЯМИ, Нередко KOM IlаНИЯllроизнодитеЛh анонсирует сной I1ринтер как 100%11O COBMe стимый с I1ринтером Х одной из изнсстных КОМllаний, но на деле это оказывается не сонсем так, и ОТДСЛhные команды или Уl1ранля ющис коды ДЛЯ ЭТОI'О I1ринтер<l не срабатынают, ИТ<lК, теСТИРОН<lние должно НЫllOЛНЯТhСЯ 110 I1РИНЦИIlУ "от общеl'О к частному", Сначала 110дключите один I1ринтер и 110стаР<lЙТССh ВЫЯВИТh ошибки, не занисящие от устройстна, После TOI'O как они будут ИСl1равле ны, ВОЗhмите сще неСКОЛhКО I1ринтерон, относящихся к разным классам, и 110ищите ошибки, Сl1енифические ДЛЯ этих классов, З<lтем I1ротестируйте 110 одному I1ринтеру на каждый драйвер, 'lТобы выявить ошибки, снязанные с драйверами, И ТОЛhКО lюсле ЭТОI'О I1РИСТУl1айте к тестиронанию всех I1рИН теров, совместимых с вашей ПрОl'раммой, rлавное I1реимущсство данной стратеl'ИИ в том, что она IlОзволяет из бежаТh избыточности  нет никаКОl'О смысла смотреть, как 110ЛСОТIIИ IlрИНТСрОВ де,\10НСТРИРУЮТ одну 11 ту же J\оrичсскую ошибку IlротраМ,\1Ь! или ошибку драйвера, Для выявления и ИСl1равления 110добных ошибок достаточ но 110работать с одним принтером, а КOIда н I1poll1aMMe все будет чисто, можно будет 110смотреть, нет ли отклонений в работе конкретных устройств, 1, Поиск функциональных ошибок, не зависящих от устройства, Эти ошибки проявятся при работе с любым принтером, 2, Поиск ошибок, общих для класса устройств, Повторите одни и те же тесты для нескольких принтеров, относящихся к разным классам, 3, Поиск ошибок, специфических для драйвера, Проверые каждую возможность, предоставляемую тестируемым драйвером, 4, Поиск ошибок, специфических для KOHKpeTHoro принтера, Выбрав драйвер, протестируйте каждый управляемый им принтер, РИСУНОК 8.3. Этапы тестирования печати 
218 Часть 11: IТрие,wы и технолоcuи тестирования Поиск функциональных ошибок Выберите Д;IЯ ЭТОI'О нида тестирования о;(инединственный Ilринтер, Это должно бhПh хорошее и Ilроверенное устройство изнеСПlOl'О Ilроизводите ля, достаточно COHpe\feHHOe, чтобы н нем были реа;lизованы все ИСПО;lhЗУ ющиеся IlрОl'раммой функuии Ilечати, Составые IIОЛНЫЙ СIlИСОК функuий IlечаТlf, В нем должны бhПh учтены выбор шрифта, И1мснение el'o начертания, установка парамстрон страни иы и T,ll, ;Iучше BCCI'O состаВИТh 110 отдеЛhНО!У СIlИСКУ фУНКUl1 Й ,il;JЯ каж ДОI'О незаНИСИIOI'О фрaJ'!еlпа IlpOl'paMMhl, а затем сраННИТh Ilолучившиеся СllИСКИ, Проно;\я тестиронание, проверые работу каждоii из функuий 110 отдеЛh ности, наr1рЮlCр, наllечатайте фрaJ'мент тскста обычным шрифтом, затем курсино!, затсм смените шрифт, УбеДИВШИСh, что 110 отдеЛhНОСПI функuии работают, Ilротестируйтс их комбинаuии, например, раСllечатайте фраl'мент текст<\ IlОЛУЖИРНЫМ курсивом, В ходе продумаННОl'О и оБСТОЯТСJlЫlOl'О тестиронания обнаружится ряд ошибок, Некоторыс из них будут ЛОl'ическими ошибками Ilpol'paMMhl и IlрОЯНЯТСЯ, какой бы Ilринтер ны ни IIОДКJIЮ'lИЛИ, ДРУl'ие будут ошибками класса, третьи  ошибками драйнера, Возможно, будут и такис, которыс отра'!Ят особснности работы сдин CTHeHllOl'o Ilринтсра, Если нам Ilовезет, то СIUС до персхода к слсдующим стадиям ТССТИРОН<II!ИЯ всс :ли ошибки будут устранен ы, Выявление ошибок, общих для класса устройств Выберите три или чстыре Ilринтсра, как МОЖIIО силшее отличающихся ДРУI' от дрУl'а, ЕСJlИ с каждым классом IlрИНТСрОН в rrpol'paMMC работает отдеЛhная чаСТh кода, эти IlРИНТСРЫ должны ОТНОСИТhСЯ К разным классам, В этом случас вам необходима будет точная информаl(ИЯ о классифи каuии Ilринтера, которую сможст Ilрелоставить TO;lhKO IlрОl'рамМИст, Однако данный этаll тестирования Ilолсзен и нс ТОЛhКО В том случае, КОI'да в !lpOI'pa!MC Оllре;\слсны 'ICTKO раЗl'раниченные классы устройств, Если на Ilервом этаllе ныянлены ошибки Ilечати, очеНh IlОлезно IlОВТОРИТh соответствующие тесты lIа разных Ilринтерах, Тестирование КJlacca устройстн IlРОВОДИТСЯ не менее обстоятелыlO, чем IIОИСК ФУНКI(11ОIШ;lhНЫХ ошибок, Необходимо Ilротестировать все функuии lIечати и нсс 11Х комбинаuии на каждом из !lринтеров (разумсется, в Ilpe делах своих фИ'JИ'IССКИХ НОЗ\lOжностей), 
f"лава 8: Тестирование принтеров и друсих устройств 219 Поиск ошибок, специфических для драйвера п реДlIOЛОЖИМ, что IIOЛhзоватеЛh может IlOllрОСИТh Ilpol'paMMY раСllеча 1 ;Il'), слово курсивом, Чтобы убедиться, что данная команда будет вшlOЛ Ill'lIa, тсстировщик должен отвеТИ1Ъ на два ВОllроса, BOllepBhIx, IlOlIытается ,111 Ilpol'paMMa pacllc'laTaTh слово курсивом, 1l0ЛУЧИВ от IIOЛhзователя COOT нетстнующую команду? И HOBTOpЫX, знает ли IlpOI'paMM<I, как именно \'стаН<lвливается курсинное начертание на конкретном IlРИНТСРС? К тому времен и, как ны IlРИСТУlIите к 1l0ИСКУ ошибок, Сllенифических ;J;IЯ драйнера, отнст на IlСрВЫЙ ВОllрОС будет уже изнестен, и, более TOI'O, он будет IlOложитеЛhНЫМ, На ЭТОМ этаllе уже не нужно Ilроверять, работаст ли, наllрИМСр, курсивный шрифт в каЖiIОЙ области документа (основной el'o части, нсрхнсм и нижнем колонтитулах и т,п,) Если IIpOl'paMMe известна праНИЛhная КОМ<IIlДа нключения курсина, она сработает везде, ПРОЙДИТССh 110 СОСТ<lНЛСННОМУ нами СIlИСКУ функuий Ilечати, включите, НЫКJlЮ'IИТС и НКJlЮЧИТС снова К<1ЖДУЮ ОIЩИЮ, Ilровсрьте их комбинании, Вllолне может оказаТhСЯ, что у ОДНОI'О из Ilринтерон имеется дефект, IlpO янляющиися ТОЛhКО В Оllрсдсленнои ситуаuии  наllример, IlрИ IIOIIhПКС НШlечатаТh IIO;РIСРКНУТЫИ СИ\fНОЛ у самоП) края страниuы IlечаТ<lющая П) лонка идст вразнос, Возможны и иныс нсдостатки устройств, менее дpaMa ТИЧСlКОI'О характсра, lIаllОСЛСДОК 1103КСIlсриментируйте с llереКJlючателями, раСllоложен HЫ ми на Ilерсдней пансли Ilринтера, или с сю IlСРСМhi'lками, Как драйнер ОIlРСДСЛЯСТ, какой шрифт ИСllOЛhЗУСТСЯ IlрИf!тером 110 умолчанию? И что I)(ыучается, КОlда ПрОl'рамма Ilсчатает какимниБУДh ДРУI'ИМ шрифтом? ОбязателыlO проверhте и IlечаТh в I'рафичсском режиме, Для тестиронания ВОЗhМИТС документ с БО;lhШИМИ участками беЛОl'О Ilространства, особенно у краев изображсния, ПРОНСРhТС различные устанонки количестна строк на ;tюйм, Посмотритс н ДОКУ,\lснтаuии, какие еще IlapaMeTphI 11С'lати можно IIзмен И1Ъ, Поиск ошибок, специфических для KOHKpeTHOrO принтера На ЭТОМ этаllе тестирования ВЫIIOЛНЯЮТСЯ те же тесты, что и на Ilpeды jtуще!, Однако сама 110 себе необходимость ею НШlOлнения является CIlOp IIОЙ, Если вы Ilротестиронали Ilринтер А и известно, что Ilринтер Б с НИМ IIOЛНОСТhЮ совместим, зачем el'o тестироваТh? Как Ilравило, вы и н самом ;tеле не будете ЭТОЮ делать, однако следующий ряд обстоятеЛhСТВ заслужи наст отдеЛhНОl'О рассмотрения, . Если при уста1l0вке npOi!paм.мbl в ее меllЮ nере.,ислеll ряд npи1lтe ров, необходимо IlротестироваТh каждый из них, Разумеется, если 1\ 
220 Часть 11: Приемы и технолоши тестирования меню Ilеречислены сотни Ilринтеров, Ilротестировать каждый из них невозможно, Однако некоторый минималhНЫЙ набор тестов IlpOBe сти все же стоит, lIаllример, если известно, что Ilринтер Б COBMec тим с Ilринтером А, и Ilринтера Б у вас нет, все равно выберите ero из меню и раСllечатайте документ на Ilринтере А. Вы как минимум выясните, что при ныборе Ilринтера Б устанавливается IlраВИЛhllЫЙ драйвер и с IlрОl'раммой не IlРОИСХОДИТ ничеl'О IlЛОХОl'О, . В меню npOi!paммbl llеобходимо включить допОЛllительные пpи1lтe ры. Во СКОЛhКО В среднем обходится вашей КОМllallИИ каждый зво нок 11OЛhзователей'? ПреДIlОЛОЖИМ, 'ПО Ilринтеры А и Б совместимы и в меню IlpOI-раММhI имеется Ilринтер А, но отсутствует Б, ПОЛhЗО ватели, у которых есть Ilринтер Б, будут ЗНОНИТh И СllрашиваТh, можно ли с ним работать, Или наоборот, KTOTO из 110Лhзователей Il0думает, что el'o Ilринтер совместим с Ilринтером А, и 110ДКЛЮЧИТ el'O, а тот откажется работаТh, СТОИМОСТh технической 1l0ддержки можно значителшо умеНШIИТh, если сразу расширить СIlИСОК YCT ройств (разумеется, IlрИ условии, что затраты на Ilриобретение и Te стирование этих устройств не окажутся слишком высокими), . Популярные модели принтеров MOi!ym оказаться несовместимыми. КOIда 110ЯНИЛИСh принтеры Н Р Desklet, мнOI'ИС разработчики рсши ли, что ОНИ совместимы с Ilринтерами HP I-aserlet, Однако это OKa залось не так  МНОl'ие их ключевые Функuии УllраВЛЯЛИСh различными командами, В реЗУЛhтате новый IIринтер, который за воевал Оl'рОМНУЮ 11OIlУЛЯРНОСТh, не 1l0ддерживался МНОI'ИМИ про I'раммами ТОЛhКО 1l0ТОМУ, что их разраБОТ'IИКИ не УДОСУЖИЛИСh Ilротестировать с ним свои IlрОДУКТЫ, Это очеНh IlOказатеЛhllhlЙ, но далеко не единстненный нример тою, наСКОЛhКО нажно Ilротестиро вать разрабатынаемое Ilpol'paMMHoe обеСllеченис с каждым устрой ством, которое либо уже ОЧСНh 1l0НУЛЯРНО у 11OЛhзователей, либо обещает стать 1l0llУЛЯРНЫМ в недалеком будущем, И хотя, как Ilpa вило, никаких Ilроблем не будет, каждый 1l0добный тест  это все равно, 'ПО страховой взнос, Однажды ваша IlредусмотритеЛШОСТh 110ЗВОЛИТ избежаТh очеНh неllрИЯТНЫХ ошибок. . НеудаЧIlЫЙ представитель попУЛЯРНОi!О класса. Такое случается: наllример, все Ilринтеры Epson LQ работают с драйвером, и ТОЛhКО один отказывается, Если 110Лhзователю 110Ilадется этот злосчастный нринтср, он окажется в 1l0ЛНОМ недоу\!ении, К счаСТhЮ, такие си туаuии встречаются редко, хотя за носледние 13 лет работы мы стол КНУЛИСh С десятком 1l0добных Ilримеров, В заключение можно добаВИТh, что обстоятеЛhllOСТh тестирования зави сит еще и от конкретной Ilpol'paMMhI: если ее вывод сравнитеЛhllO IlРОСТОЙ 
rлава 8: Тестирование пРllнтеров и друсих устройств 221 11 стзндартный, на тестирование можно нотраТИТh меНhше времени, а вот l'CII! она ИСllОЛhзует снеuифические особенности нринтера и выводит слож IIые и разнообразные данные, стоит нотестироваТh ее НОДОЛhше, Таблица тестирования принтера Тестирование нринтера  работа очеНh кронотливая, Приходится HpO верЯТh СТОЛhКО мелких деталей, что ничеl'О не УllУСТИТh можно ТОЛhКО нри O'leHh жесткой Орl'анизаuии работ, Если нри тестировании люБОl'О друrою аснскта работы HpOl'paMMhI ничеl'О не стоит нерНУТhСЯ к уже ВЫllОлненным тестам или нровести важный тест, который случайно был нронущен, то с Ilечатью это совсем не так нросто, Придется снова найти нужный нринтер или, еще хуже, снона НРОСИТh el-o у TOI'O, у KOI'O вы el'o одолжили, HpOBe РИТh установку неремы'!ек и IIереКЛЮ'lателей, IIОДКЛЮЧИТh нринтер к KOM III,ютеру, нровести тест, а затем нернуть IIринтер на место или хозяину, Пош'отовитеЛh!lая работа занимает ЛhВИНУЮ долю времсни тестирования, Если нрсдстоит тестирование БОЛhШОl'О количества нринтеров, необхо димо IlОзаБОТИТhСЯ о IIОДl'отовке тестовых файлон, а также ностараТhСЯ скомбнниронаТI, тестируемыс функuии, чтобы 110 нозможности УСКОРИТh Ilpouecc, Форма тестовой таблицы .LJ.;IЯ IIОДI'ОТОНКИ схемы тестиронания нроще всею НОСllОЛhзоваТhСЯ элект РОНIiОЙ таблиuей, РеЗУЛhтат ДОJlжен ВЫlлядеТh нримерно так, как на рис, 8,4, При ИСllОЛhзовании заранес IIОДl'отовленных тсстоных файлов таблиuа будет нроще  вместо отдеЛhНЫХ команд в ней будут неречислены имена фзйлон, которые слсдуст раснечатать, На деле вам нонадобятся две табли ЦЫ, Первзя, такая как на рис, 8.4, будет служить для нервых двух этанов тестирования  функuионалh!IЫХ ошибок и ошибок класса, КОI'да же вы нерейдете к тестированию драйверов и ОТДСЛhНЫХ нринтеров, нроверять каждую облаСТh IIpol'paMMhI будет не нужно, нолому таблиuа станет I'ораз ;10 короче, В верхней строке таблиuы неречисляются нринтеры и их драйверы, Кроме TOIO, можно добавить и ДРУI'УЮ важную информаuию  установки нереключателей, объем установленной в нринтере намяти и T,ll, Для HeKO торых HpOl'paMM конфиryраuионная информаuия может оказаТhСЯ не менее нажной, чем ТИII нринтера, Несколько полезных замечаний о тестировании печати ПеречеНh функuий нринтера можно найти в НрИЛaJ'аемом к нему PYKO водстве, Хотя обо всех рассказываТh в данной КНИl'е нет смысла, с HeKOTO рыми из них связаны важные для тестирования вонросы, 
222 Часть /1: Ilрие,wы и тех//олосии тестирова//ия 'о -а-  ....  . .::::  ...   -6'  ::s f.:;-....  r; '"' :.t: :.t:   ... ...     ::s ::s -.... "" ..... .... .... а u ';;:  <:> ::: '" <::s <:> '" :::   -....  .... ";>01 OI  ::: ::: <:> s: 13. "--.... :z: .ё. :z: ... -& :z: '" :s; :z: '" :s; '" Q а. '" Q а. Q ;2 :z: 3 Q ;2 :z: 3 ;2 ... ;2 ... :JS :z: '" -& ... ,,. :JS :z: '" -& .ё. ,,. '" '" '" Q :s; -& :JS '" '" '" Q :s; :JS ,,. '''' Q ;2 а. :s; 5' '''' '''' Q ;2 а. :s; 5' 3 а. 3 а.  :JS :JS ;2 :JS 3 :JS :JS :JS ;2 :JS 3 :JS ::: :z: :z: '" '" ,,. "" :z: :z: '" '" ,,. "" :r а. а. о а. а. о :.: Е: :s; :s; '" '" :JS ,,. :s; :s; '" '" :JS ,,. ::: <::s   :s; :s; 5'  '"   :s; :s; 5' :JS '" >- >- u u '" >- >- u u ... '" s' :>' '" '" а. а. :JS '" о '" '" а. а. :JS  о '" о о >- >- ""  :z: О О >- >- "" :z: ::: с с '" '" о u u с с '" '" о u u  '" '"  Е:  :s; ,,. ... "" u <::s '" о :z: <::s 1'} о :z: '" '" '" ::;  <:> е о >- :z: "" О  '" u  с') о <::s :r ::s  <::s Е:  "" <:> Е: u  o::i со :.:: О :I: >- U :s:  
[лава 8: Тестирова//ие при//теров И друсих устроilстп 223 . Встроенные шрифты. Есть ли у принтера встроенные шрифты и работает ли с ними тестируемая ПрOl'рамма? Если да, IIOЛhзуется ли ПрOl'рамма лучшими из них? Успешно ли ВЫllOЛllяется переключе ние шрифтов ПрОI'раммой? Можно ли печатаТh двумя разными шрифтами в одноЙ строке? А разными начертаниями? Может OKa заТhСЯ, что Д)IЯ смены начертания шрифта необходимо ВhlllOЛIIИТh возврат каретки, . 3аi!ружаемые шрифты. ПрOl'рамма может ЗaJ'ружать в принтер и собственные шрифты, Эту ВОЗМОЖНОСТh IlOлдерживают практически все принтеры, Однако здеСh возможны Ilроблемы: некоторые симво лы ЗaI'ружаемOI'О шрифта MOI'YT БЫТh определены непраВИЛhllO, и TOlДa принтер не будет их печатать, Например, так было с принте ром Laser1ct 11, Для выявления подобных проблем следует lIOЩОТО ВИТh тестовые примеры с полными наборами символов всех размеров, . специалыlеe символы. Если ПрOl'рамма l1е'lатает lIеаlllЛиЙские сим волы и I'рафические символы расширеНIIОl'О набора ЛSСII, убеди тесь, что они IIсчатаются IlраВИЛhlЮ, ВОЗМОЖIIО, принтер необходимо переключить на иноЙ набор символов или Зal'рУЗИП, соответстную щий шрифт, если нстроеllНЫХ шрифтон IIУЖIЮI'О я'!ыка у Ilринтера нет, Что IlрИ этом IIроизоЙдет с меЖJlУСТРО'IНЫМИ и МСЖСИМВОЛ(,fIЫ ми интерва;lами? . Трафика. В этом наиболее paCllpocTpaHellllOM н lIастоящее нремя режиме печати тоже сущестнуют СЛОЖIIОСТИ, lIаllример, IIроблему может предетаВЛЯТh собоЙ днунапранлеllllая lIe'laTI. lIa \fаТРИЧIIЫХ и струйных принтерах, 1Iа1lечатайте нерТИКШlhllУЮ ЛИIIИЮ и 1IОСМОТРИ те, получится ли она ронной, Если нет, llOIlробуйте ОТКЛЮЧИТI, двунаправленную lIечаТh, Вторым важным BOllpOCOM является разре шение принтера, ПОСКОЛhКУ разрешения ПРИlIтера и экр,ша различ ны, очеНh важно, чтобы при формиронаllИИ изображеllИЯ локумента Л;lЯ вывода на экран и на бумаl'У ПрOl'раммист праВИЛhlЮ УЧИТhша;1 их соотношение  в противном случае на экране и lIa БУМaI'е ДOKY мент будет ВhllлядеТh IIOразному, . Разрешеllие. Если ПрOl'рамма переключает принтер между различны ми разрешениями, необходимо пронерИТh их нсе, Если н ОДIIОМ из разрешений печаТh ВhlllOлняется HOpMaJlhHO, это еще не значит, что так будет и в ДРУI'ОМ, Особенно тщатеЛhllO протестируйте печаТh с самым высоким разрешением сложных документов, содержащих БОЛhшое количество rpафики и множество переходов между черным и белым l\ветами, При этом MOI'YT ИСllOЛhзоваТhСЯ ннутренние про недуры оптимизаl\ИИ принтера и драйверов, которые MOI'YT ПО13Л1f ЯТh на качество изображения, 
224 Часть 11: Приемы и тех//олосиИ тестирова//ия . Обработка ошибок. При печати СЛОЖнОl'О l'рафическOI'О документа или текста, набраннOI'О очеНh мелким шрифтом, лазерному принтеру может не хваТИТh памяти, или же el'o ПрОl'раммное обеспечение может не спраВИТhСЯ с таким сложным заданием, Что в таком слу чае будет делать ваша ПрOl'ра\lма? Есть ли в ее руководстве COOTBeT ствуюшая информаl\ИЯ? Может ли подобная неПРИЯТНОСТh произойти при HOpMa:lhlIOM ИСllOЛhзовании ПрOl'раммы или ТОЛhКО в случае, если 110ЛhзоватеЛh выполнит некоторые нестандартные дей ствия? Что, если протестировать принтер с минима:lhllO возможным объемом памяти или поработаТh с одной из ранних моделеЙ, н KO торой ФУНКl\ИИ обработки ошибок I'ораздо менее совершенны, И наконен, после TOI'O как в работе принтера произойдет сбоЙ, I1epe ЗaJ'рузите el'o с ПОМОШhЮ кнопки Reset (не выключая) и попробуЙ те распечатаТh еше чтониБУДh, Этот очеНh нажныЙ тест, и, если он окажется неудачным, 110стараЙтеСh ныяснить, в чем дело  н aJlпа ратуре или в ПрOl'ра\fМIIOМ обеСllечении, . Таблицы шириllЫ символов nроnорциоllалыlхx шриФтов. Если про l'paMMa работает с ПРОПОРl\иона:lhНЫМИ шрифтами, возможно, вы столкнетеСh со спеl\ИфИ'lеским типом ошибок, связанных со CIIOCO бом формирования изображениЙ симнолов, Для ПРОПОРl\иона:II,НЫХ шрифтов в системе хранятся СIlеl\иа:llтllые таБЛИl\Ы со значсниями ширины их симнолов, т,е, КОЛИ'lества точек по I'оризонтали, занима емых каждым символом, В ПрOl'раммах, работающих по ПРИНl\ИПУ WYSIWYG (what YOll see is what YOll get  что видите, то и получа ете), символы печатаются на осноне информаl\ИИ из такой таБЛИl\Ы, и, если в ней содержатся ошибки, символы MOI'YT частично накла дываТhСЯ или, наоборот, раСПОЛaJ'аТhСЯ слишком да:lеко ДРУI' от дpy I'a, Строчки MOI'YT получаТhСЯ неодинаковой длины, в отличие от проrpамм, не относяшихся к типу WYSIWYG, в которых окончание строки всета определяется по суммарной ширине напечатанных символов, Кроме TOI'O, у различных принтеров таб:lИl\hI ширины символов для OдllOl'O И ИТОI'О же шрифта MOI'YT отличаТhСЯ, Если один матричныЙ принтер является клоном ДРУI'ОI'O, не;JhЗЯ ручаIЪСЯ, что распечатанныЙ ими один и тот же документ будет вшлядеТh одинаково, . Форматы i!рафики. Если ПрOl'рамма печатает I'рафику раЗЛИ'IНЫХ форматов, лучше проверить каждый из них, причем с книжной и алhбомной ориентаl\иеЙ страНИl\Ы, Выполните такие тесты для каж ДОI'О класса принтеров, ПОСКОЛhКУ для них MOI'YT ИСПОЛhзоваТhСЯ разные 11OДПрOl'раммы формирования изображениЙ, 
rлава 8: Тестирова//ие при//теров И друсих устройств 225 . Цвет. Соответствие между l\ветами на экране и на БУМaJ'е может оказаТhСЯ весьма приблизитеЛhllЫМ, Составьте об этом отчет, Про I'раммист может подкорректировать драйвер или ИСllOЛhзовать дpy I'ие нвета в зависимости от выбраНllOl'О принтера, . Параметры страllицы. ПрOl'рамма может печатать на БУМaJ'е самых разных размеров: конвертах, стандартных листах формата АЗ и А4 или любых нестандартных, Данные MOI'YT впечатываТhСЯ в форму или распечатываТhСЯ в определенном месте страНИl\Ы, Кроме TOI'O, возможны два различных варианта печати: на отдеЛhНЫХ листах и на сплошном рулоне (ПРOl'раммистам со стажем хорошо знакома пер форированная по краям плотная "АЦПУшная" БУМaJ'а), Для этих двух типов БУМaJ'И ИСllOЛhЗУЮТСЯ различные установки полеЙ, Каж дыЙ из типов и размеров БУМaJ'И необходимо протестировать отдеЛh но, однако деЩlТh это на всех возможных принтерах не обязатеЛhllO: достаточно ВЗЯТh по одному принтеру каЖДОl'О класса, Если эти Te сты будут ВhJllOлнены успешно, то, скорее Bcel'o, они пройдут и на друПlХ принтерах, Впрочем, абсолютной I'арантии здеСh нет, . ДОрОi!остОRщuе формы U бумаi!а. Если ПрOl'рамма должна впечаты В,Пh данные в ДОРOl'остоящие формы или печатаТh их на спеlща;lh ноЙ ДОРОl'остоящеЙ БУМaJ'е, не стоит сразу ИСПОЛhзоваТh их для тестов, Попечатайте на обычной БУМaJ'е и ксерокопиях формы или даже пустых листах соответствующею размера, пока не убедитеСh, что все работает праВИЛhНО, . Расположеlluе текста U i!рафuкu. Страничные и струйные принте ры не MOI'YT печатаТh у самых краев БУМaJ'И, Размеры недоступных зон зависят от KOHKpeTHol'o принтера, Даже если принтеры COBMec тимы между собоЙ, размеры недостунных зон у них MOI'YT оказаТh ся разными, Проверhте, не позволяет ли тестируемая ПрОl'рамма раСПОЛaJ'ать текст и I'рафику в тех местах страНИl\Ы, Iде они не MOI'YT бhJТh распечатаны, . Полосы, теllи, страllllЫЙ способ запОЛllеllUЯ. rрафические а;п'орит мы ПрОl'раммы и принтера MOI'YT взаимодеЙствоваТh между собоЙ, приводя к самым неожиданным реЗУЛhтатам, Если заполненныЙ объект (например, БОЛhШОЙ серыЙ квадрат) странно ВhJlЛЯДИТ на БУМaJ'е (обычно при печати на страничном принтере), не стоит сразу преДПОЛaJ'аТh, что все дело в принтере, в чаС1'IIOСТИ, в плохом Kap тридже, Даже если ПрOl'раммист будет утверждаТh, что дело именно в этом, попробуйте распечатаТh такое же изображение из друrой ПрOl'раммы, 
226 Часть 11: Приемы и тех//олосии тестирова//ия Накапливайте знания и делитесь ими с сотрудниками В пронессе работы тестировщик МllOl'oe узнает о конкретных моделях принтеров, Одни из устройств оказываются IIO.ТIIOСТhЮ СОВ\lеСТJfМЫМИ, ДРУI'ие, наоборот, не соответствуют утвt:рждеНИЯ\1 IIроизводителей об их совместимости, Накапливают знания и сотрудники l'рУППЫ техническоЙ полдержки, особенно блаl'одаря жа:lOбам IIOЛhзователеЙ, MHOI'O ваЖНОl'О узнают ПрOl'раммисты, руководи,"ели проектов и ДРУl'ие члены команды разработчиков, И если каждыЙ тестировщик тратит силы и время на выяснение TOI'O, что уже выяснил однажды el'o коллеl'а или предшественник, если он Tec тируст 110 отдеЛhllOСТИ ПОЛllOСТhЮ совместимые устройства или пропуска ет уже известные ошибки, ло озна'lает, 'НО работа Орl'аНllЗована плохо, Все накопленные сотрудниками знания можно собираТh н едином Me сте, доступ к которому должен БЫТh IIрОСТЫМ и удоБНЫ\f, Разработчики, тестировщики, сотрудники I'PYIIII марКt:ТИНI'а и техннческой IlOлдержки должны МПlOненно lIOЛУ'lаТh любые сведения об уже IIРОТССТИРОНUННЫХ устройстнах, Разумеется, всеми ЛИ\IИ возможностями обладает ТОЛI,КО нентра:IИЗО ванная база данных, КаЖJЩЯ заllИСI, в неЙ можеl' ОIlИСhlВап, либо отдеЛI,НЫЙ принтер, либо I'PYIIIIY СОЮfестимых устройств, упранляемых одним драйве ром, В базе данных может храНИТhСЯ информания о нозможностях прин теров, их типах, встроенных шрифтах и T,II, Не стоит включат'!, в заПИСI, слишком MIIOI'O полеЙ  ее размер должен был, ОIПИМ<UlhНЫМ ltJlЯ быстрOl'О заllолнения и прочтения, Кроме нескоЛl, ких lIолей ДЛЯ стандартноЙ обязате:IЫIOЙ информании, включите еще нару текстоных полсй псременноli ;J;IИIIЫ, н которые каждый сможет ВllисаТh все, что считает нажным, Наllример, н TaKO! lIоле можно принести выдержки из журнаЛhНЫХ обзорон, реЗУЛhтаты тестиронания или реЗУЛhтаты исслсдованиЙ, пронеден ных н отнет на звонки IIOЛI,зоватслей, сведения о сонместимости устройства илн снеления, lIолучснные от произнодителя принтера, ОбязатеЛIтIIЫ\1 Tpe бонанисм должно бhПh сопровождение каждоЙ записи датоЙ и ф,щилиеЙ се автора, Со времеllем база даllllЫХ aппapaтllOпpOi!paммllblX КОllфUi!урацuй стаllет цеllllейшuм ресурсом вашей компаllии. ОчеНh важно, чтобы доступ к базе данных был свободным для всех сотрудников КОМПallИИ  ведь каждый из ННХ потенниа:lhllO может внести в нес ценную информанию, Оl'раничивая доступ к данным, компания BhIHl'paeT не \lHOI'O, зато MIIOI'O потеряет, 
[тва 8: Тест и ровтlllе при/{теров И друсИХ ycmpoilcm /l 227 Советы по автоматизации тестирования lIаСТУIlИТ момент, КОI'да все принтеры и драЙверы наконе!{ бу;ут "Iннестиронаны и будет выянлено множество ошибок, Затем в ПрOl'ра!му I)\';IYI внесены исправления, причем lU1Я ЭТОI'О еще должно оставаТhСЯ дo l I аЮ'l11O времени, После ЭТОI'О ряд тестон Ilридется ПОНТОРИТh, чтобы IlpO l'еРИТh испранления и ВЫЯВИТh новые ошибки, допущенные II[1О1'раммисЛ\ми, ПоскоЛl,КУ тестирование печати  про!{есс наиболее TPy l()еIКИЙ, ЛУ'lше пронести el'o как можно позднее, кота нсе ДРУl'ие COCTaB Iнющие lIpOl'paMMhI будут уже 11OЛllOСНЮ отлажены, Однако не стоит и отклаДЫН,Пh el'o до 1I0следнеЙ минуты, ПОСКОЛhКУ ()шнбок наверняка будет очеНh мною и вы просто не уложитеСI, н I'рафик, И\lеНIIO поэтому руководитеЛh IIроекта будет настаинаТh, чтобы вы заня ;111Ch IIринтерами 1I0раНhше, Итак, заIlланируЙте неСКОЛhКО !{ИКЛОН тестирования и начните el'o как \fOЖIIO позже, но так, чтобы успеТh ВЫllOЛНИТh всю работу, И обязательно IIРllдержинаЙтеСh описанноЙ н этоЙ Iлане 1I0сле;юватеЛhllOСТИ работ, ина 'Ie I10BTOpHoe тестирование придется ВЫlfOЛНЯП, слишком MHOI'O раз, Для ускорения Ilpo!{ecca тестирование печати fOжно значителlтllO aBTO маТИ1ирован, Однако антоматиза!{ия имеет и СНОИ издержки, о чем следует помнить при автоматизированном тестировании печати . Автоматизация требует времеllи. Не стоит унлеканся технолOl'И ями, Если на автомаТИ1aLIИЮ работы требуется слишком MHOI'O Hpe мени, се ЛУ'lше ВЫlfOЛНИТh нручную, . Выходllые даНllые дОЛЖIIЫ поддаваться аllалuзу. Не Ilереводите TOH ны бумаl'И  вы не сможете нсе зто IlрочеСТh, Тесты должны БЫТh простыми, С короткими И НaJЛЯДНЫМИ реЗУЛhтатами, В противном случае сотрудники, особенно неОIIЫПlые, не CMOI'YT IlраВИЛhllO их провести и обнаРУЖИТh ошибки, Особенно нажно IIросктироваТh тесты так, чтобы их праВИЛhllые реЗУЛhтаты четко ОТ:IИ'Iа:IИСh от ошибок. Если дефект печати прак тически неза\lетен, то каким бы старатеЛ[,fIhlМ ни был теСТИРОВЩilК, ма:1O шансов, что он обнаружит эту ошибку, . Отслеживайте ошибки, связаНllые с печатыо. Кроме ошибок в выходных документах, с печаТhЮ MOI'YT быТ!> свнзаны и ДРУl'ие про БЛС\IЫ, Они MOI'YT БЫТh связаны с пара;JjJС;IЫ!Ы\! НЫllOлнением дpy I'ИХ функuий ПрOl'ра\!мы во нремн Ilе'lати, выделением буфера lU1Я выходных данных и их lIекорреклlOЙ 'lаПИСhЮ в этот буфер, выпол нением оверлея, В01МОЖllые ра'lрушения данных или кода проявятся 
228 Часть 11: Приемы и тех//олосии тестирова//ия позднее, поэтому необходимо вни!атеЛhНО слеДИТh не ТОЛhКО за происходяшим на экране во время печати, но и за ее последствия ми, продолжив работу с ПрOl'раммоЙ еше некоторое время, . Действуйте i!ибко. Не стоит раз за разом повторять одни и те же тесты с одним и тем же принтером, После TOI'O как ПрOl'раммист исправит ошибку и вы убедитеСh, что ее и в самом деле БОЛhше нет, старые тесты повторять бессмысленно, Чтобы наЙти новые ошибки понадобятся новые тестовые примеры, ПоработаЙте с ПрOl'раммоЙ, НЫllOЛНЯЯ полезные, а ИНОl'Да и совершенно нестандарпше дей ствия, поэкспериментируЙте с ней, ПостаВhте себе определенную задачу и попробуЙте ВhlllOЛНИТЬ се с ПОМОШhЮ тестируемоЙ ПрOl'рам мы, Вы будете удивлены, как MHOI'O ошибок обнаружится при таком способе тестирования, Разумеется, он не заменяет ВhlllOлнения фор ма:lhНЫХ плановых тестов, но успешно их дополняет, Как сэкономить время и улучшить результаты тестирования в тестировании пеЧаТИ можно выдеЛИТh четыре задачи, на ВhlllOлнение которых уходит БОЛhше Bcel'o времени, ПервоЙ является Ilланирование и разработка тестов, Следуюшей является IIOИСК принтера (вполне возможно, что el'o Ilридется одолжить у друзей или СОСЛУЖИВl\ев), проверка el'o пере \!ычек и переключателей и подключение к КОМПhютеру, По окончании тестиронания принтер нужно вернуть на место, Если принтер чужоЙ, перед возврашением хозяину необходимо восстаНОВИТh llOложение всех el'o перемычек и переключателеЙ, Вся эта IIOДI'отовитеЛh ная и восстановитеЛhllая работа занимает вдесятеро БОЛhше времени, чем само тестирование, Третьей задачеЙ является выполнение тестов, а четвертоЙ  ана:IИЗ их реЗУЛhтатов, В этом разделе рассказывается, как можно сэкономить время на всех четырех этапах работ, И хотя все описанные ниже способы ДOCTa точно эффективны, не все они совместимы между собой, так что вам при дется сделаТh выбор, Тестовые файлы rлавным ПРИНl\ИПОМ разработки тестовых фаЙлов должна быть их про стота и НalЛЯДНОСТh, . Атрибуты текста дОЛЖIIЫ быть очевидllЫ. Например, если тести руется полужирное начертание, распечатаЙте чтониБУДh вроде сле дуюшеl'О: Полужирный шрифт. Обычный шрифт, Полужирный шрифт. Обычный шрифт, Полужирный шрифт. Обычный шрифт, Полужирный шрифт. Обычный шрифт, Полужирный шрифт. Обычный шрифт, Полужирный шрифт. Обычный шрифт, 
f!/aea 8: Тестирова//ие при//теров и друсих устр"йств 229 Обычный, Курсив, Полужирный. Полужирный курсив. Полужирный. Полужирный курсив. Обычный, Курсив, Полужирный. Полужирный курсив. Полужирный. Полужирный курсив. Обычный, Курсив, Полужирный. Полужирный курсив. Полужирный. Полужирный курсив. Повторяющиеся шаблоны облеРlают ана:IИЗ реЗУЛhтата, . Траllицы области печати дОЛЖIlЫ быть очевидllЫ. Если \IOЖНО Ha печ,паТh рамку, показывающую, !Де проходит l'ранИlЩ области пе 'Iати, сдеЛ<lliтс ЭТО, ЕС.'lIl !'рафическую рамку распечатаТh неЛhЗЯ, ЗШlOлните страни!{у текстом, НШlечатаЙте ЧТОllиБУДh полезное, Обычный, Курсив, Обычный, Курсив, Обычный Курсив, 123456789а123456789б123456789в123456789r123456789д 223456789а123456789б123456789в123456789r123456789д 323456789а123456789б123456 89в123456789r123456789д 423456789а123456789б123456789в123456789r123456789д ПОСКОЛhКУ символы И строки про нумерованы, сразу будет очевидно, 'ITO в rретиЙ строке 37й СИМ нол не проllе'lаlыаетсяя и нсе строки и\!еют длину 50 L'11MHOJIOH, Не Ilравда ли, так ?оразrJо проще, чем c'IIHaTh СИIНОЛЫ СU\lOстоятеЛh!1О, lIиКОсда не С'lитаЙте симнолы вручную, . Заполuяйте поля даllиых цифра.ми, реалыlмии даllllыми и i!раllиЧIlЫ ми зuачеuия.ми. С IIOМОЩhЮ !{ифр леl'КО ОIlре:Iеляются размеры 11O леЙ, Кро,\!е TOI'O, стразу нидны IlOlТРЯllные данные, Например, если ны пе'lатаете 123456789aI23, а IlOлу'шете 456789a123, зна'IИТ, пер ные lрИ симнола IlOтеРЯЛИСh, А если получается la23987456, в про l'pa\!Me явно не нсе н IlOрядке, Можно Halle'laTaТb A23456789a123 в перном попе и Б23456789аl23 но втором, чтобы 110 перным буквам было нидно, что lна'lения распечатаны н нужных полях формы, Можно ныбраТh один 113 симно:IOВ, которым нсе!Да oTMe'laTh коне!{ IIOЛЯ, 'побы сразу было НИJ1НО, 'по IlOле распечатано !{сликом, наllример, A23456789al23X, Б23456789а123Х, Или же делайте I1ерный 11 IlOследниЙ символы одинаКОНЫ\IИ, ТОЛhКО ра'!lIhIХ реl'ИСТрОВ: A23456789a123a, Б23456789аl23б, После ЭТОI'О введите в поля реаЛhllhlе данные (фаМI1ЛИИ, телефоны, наименования  нсе то, что будет в них храНИТhСЯ IlрИ реа:lhНОЙ эксплу ата!{ии ПрOl'раммы), ОчеНh важно посмотреть, как на практике будет BhIl' JIЯJlеть I1ечатаемая ПрOl'раммоЙ инфор!а!{ия, Именно на ЭТОМ этапе можно будет усовершенствоваТh выходные формы, сделав их более удобными и IIРllвлекатеЛhНЫМИ, 
230 Часть 11: Прие,'lIЫ и тех//олосии тестирова//ия Тестируя ПРОПОРl\иона:lhllые шрифты, распечатайте короткую и iI;IИН ную строчки С одинаковым количество\! символов, Вот 20 символов "т" и "Щ", напечатанных ПРОПОРl\ионаЛhlIhlМ шрифто!, тттттттттттттттттттт ЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩЩ Чтобы одно и то же поле IlротестироваТh с l\ифрами, стандартными данными, узкими и широкими символами, проще Bcel'o ЗaJЮЛНИТh четыре записи таБЛИl\Ы, ЛIlа:ЮI'И'IНЫМ образом можно paClle'laTaTh четыре разных изображения или четыре файла, Сокращение времени подключения и отключения техники Чтобы сокраТИТh вре\1Я подключения и отключения техники, необходи мо заранее IЮДl'ОТОВИТh все принтеры, ПОДКЛЮЧИТh их к коммутаторам, которые, в сною очереДh, ПОДКЛЮЧИТh к тестовым КОМПhютерам, Именно так работают профессиона:IЫ, Щелкаете переКЛЮ'lателсм на ком\!утаторе, включаете питание, и можно тестироваТh, Орl'анизаl\ИЯ тестоноЙ лаборато рии  вопрос очеНh важный, и мы к нему еще нернемся, Если же так Орl'анизонаТh работу не IIOЛУЧИТСЯ, I10стараЙтеСh НhllЮЛНИТЬ на каждом IIrинтере максимум работы и ТОЛhКО затсм персходите к тести рованию следующеl'О устроЙства, Чтобы это ста:ю возможным, тсстирова ние печати важно начаТh как можно позже, кота всех OCTaJlhHhIX ошибок н ПрOl'рамме уже не останется, Однако руководитеЛh IlpoeKTa не IЮЗНШIИТ вам ЭТОI'О, и 1I0ТОМУ, тестируя IlечаТh пять раз в ходе разработки, вам при дется по ПЯТh раз IЮДК;IЮ'JaТh и ОТК;IЮ'I,Пh каждый принтер, . Печать в файлы. В самом Ha'la:le разработки ПОllросите IIрОI'рамми стов включить в IlpOl'paMMY команду lIечати в фаЙл, РеЗУЛhТИРУЮЩИЙ фаЙл должен содержаТh всю посылаемую на принтер информаl\ИЮ, ВКЛЮ'lая и управляющие коды, Если вынод на принтер Okidala 82 lIеренаправляется н дисконыЙ фаЙл, при КОllиронании ЭТОI'О файла на принтер Okidala 82 получается то'! но такоЙ же реЗУЛhтат, как и при непосредственной печати из ПрOl'раIМЫ, В первом l\икле тестирования одни и те же данные отпраНhте на Ilринтер и в фаЙл, Во втором l\икле снова распечатаЙте те же дaH ные н фаЙлы, Затем сранните фаЙлы перноl'O и нтороl'O l\ИКЛОВ, Если они окажутся идентичными, значит, уже найденные ошибки еще не были исправлены, Если же фаЙлы отличаются, их южно распечатаТh и lюсмотреТh, что измеНИЛОСh, При этом IЮНТОрllО запускаТh про I'рамму вовсе не нужно  достаточно просто СКОllировать фаЙлы на принтер, Это очеНh ускоряет дело, 
rлава 8: Тестировапие приптеров и друсих устройспы 231 . Протестируйте выбор разлиЧIIЫХ устройств lIа одllОМ совместимом с IlUMU пpUllmepe. Предположим, что принтеры Epson FX86e и Panasonic \\9\ абсолютно совместимы, Не стоит при каждом повтор HO! тсстировании печати по очереди подключаТh их оба, Подсоеди ните один из них, выберите Epson FX86e и выполните тестирование, Затем выберите Panasonic J J 9\ и повторите те же тесты, Если с реЗУЛhТИРУЮЩИМИ данными 'IТOTO будет не так, вы это прекрасно увидите и на одном устройстве, . Аllализируйте результат сразу после еi!O распечатки. Есл и проана лизироваТh реЗУЛhтаты теста, пока принтер еще подключен к КОМПh юте ру , то, обнаружив ошибку, можно провести дополнитеЛhное тестирование, При подозрении, что все дело в неверноЙ установке переключателеЙ, их можно тут же проверИТh, Если вы будете накап ливаТh пачки выходных документов, чтобы просмотреТh их через неделю, ТОI'да IlрИ необходимости в ДОllОлнитеЛhНЫХ проверках и тсстировании IIринтеры lIРИ;.1СТСЯ IlOдключать снова, . Пользуйтесь приllтера.ми, подключеllllыми к сети. Обычно в корпо ративноЙ сети имсется немало Ilринтеров, Если устаНОВИТh ПрOl'рам му на одном из КОМllhютеров этой сети с достаточными правами доступа, то можно тсстировать псчать на нелом ряде Ilринтеров безо всякой возни с техникой, Ускорение тестирования Чсм меНhше вы печатаетс, тем меНhше нремени тратится на тестирова IIIIC, Однако не стоит увлекаться сокращенисм объема тестовых примеров сократив хороший тсст, \ЮЖIIO IIOЛУ'IIIТh короткиЙ, но плохоЙ, Сэконо \l111Ъ время лучше на ДРУI'ОМ: вместо тою 'Iтобы СТОЯТh над принтером в ожидании, пока он напечатает все, что нужно, можно работаТh с HecKQjlh "11 ми IIринтерами одновременно, Количество IIринтеров выбирается так, чтобы остава:IOСЬ время подоЙ 11I от ОДНОI'О принтера к ДРУI'ОМУ и проана:lИзировап, реЗУЛhтат, Слишком \11101'0 техники включаТh ни к че\IУ  вы ТОЛhКО начнете пропускаТh Оlllиб ки и IIYTaTh проводимые тесты, Кроме тою, попросите ПРOl'раммиста включить в IlpOl'paMMY у"равлсние lIечаТhЮ из командной строки, В качестве параметров IIpOI рам мс, скорее Bcel'o, по надобятся имя входною фаЙла, которыЙ треБУСТОI paclle'laTaТb, IIнформания о принтере и драЙвере и нскоторыс lIaCTpoe'lIfhIc данные, касающиеся шрифтов, разрсшсния ПС'lати и '1',11, [[оспс IIС'lати ПрOl'рамма :юпжна завершаТh работу, Бтll'одаря ')той ФУIIКIIИIf IIpOl'paMMhI можно бу :ICT написаТh пакетныЙ файл, ВЫIIQjIlIЯЮIllИЙ спе;!ующие действия: . Передачу ПрOl'раммс ВХО;1I1О1'lJ файла, выбор принтера, печаТh в фаЙл, 
232 Часть 11: Приемы и тех//олосии тестирова//ия . Сраннение получеНllOI'О фаЙла с предыдущеЙ версией, . Если фаЙлы отличаются  печан HOBOI'O файла, . Передачу IlpO!'pa\IIC следующеI'О входною фаЙла, печан, сравнение и Т.д, в реЗУЛhтате принтер может работан хон всю НОЧh, а утром вам OCTa нется ТОЛhКО просмотреТh реЗУЛhтаНI, При лом можно печатаТh на одном принтере, а можно выбираТh и разные устроЙства, перенаправляя весь вывод в фаЙлы, Если же выбираемые устроЙства полносню совместимы, можно, выбирая их по очереди, печатаТh все на одном принтере, Оценка результатов тестирования Тесты, которые не ВЫЯВ;IЯЮТ ощибок или ныдают такие распечатки, н которых ощибку очеНh трудно наЙти, не ,\IHO!'O!'O стоят, Полому важнее BceI'O праВИЛhllО спроектироваТh тестовые примеры, . Результаты тестироваllllЯ дОЛЖllЫ быть очевидllыми. Об лом уже УПО,\lИналОСh при описании разработки тестовых фаЙлов, . lle печатайте llичеlО лиШIlei!О. Например, если выходноЙ фаЙл оказался идеlПИЧНЫМ фаЙлу, распечатанному на прошлоЙ неделе, eI'O незачем печатаТh снова, Не печатаЙте лишних страниu, абзаuев, полеЙ  ничеl'О, кроме caMOI'O необходимО!'о. Чем БОЛhше объем выходных данных, тем леРlе ПРОПУСТИТh в них ошибку, . правилыlеe или прошедшие сравllеllие распечатки откладывайте вправо, lIеправилыlеe или lIе прошедшие сривltеllие  влево. ОрI'ани зуЙте резуЛhтаты тестирования таким образом, чтобы в них было леI'КО ориентированся, . Если две версии результирующих файлов lIе совпадают, раСIlечатайте их обе и помеТhте распечатки, Затем просмотрите реЗУЛhтаНI, опре делите, какоЙ из них праВИЛhlШЙ, и, если Jlроблема решена, прове дите дополнитеЛhllOе тестирование, чтобы в ,НОМ убеДИТhСЯ, . Аllализируйте результаты сразу после их распечатки. Не ждите следующеЙ недели или следующею Iесяuз, кота ны нообще забу дете о том, что делали, БУДhте I'ОТОВЫ сразу оuенин реЗУЛhтат и при необходимости провести дополнитеЛhllOе тестирование, . ВыпОЛllяйте lIекоторые тесты са.мостоятелыt,' Если все тесты "РОНОДИТh ТОЛhКО автоматизиронанно, вы рискуете I1ропуСТИТh co I1УТСТВУЮШИС проб;lемы (например, Iерuание зкрана после печати каЖJlOl'о!а,l:IIII1Н). 
[лава 8: Тестирова//ие приюперов и друсих устройств 233 . ОбязателыlO распечатывайте реа.1ыlеe даllllые. Документ с pca;Ih ноЙ информаuиеЙ и тестоными при\!ерами может выrлядеТh IIOраз ному, Если окажется, что с реалhllЫМИ данными документ вы[лядит плохо или они явно неудачно расноложены, составьте отчет об ошибке IIроектнрования, Кроме чисто зстетических недостатков, распечатка реалhllOI'О документа ПОЗlюляет ВЫЯВИТh и более серhез ные ошибки, как, например, частично накладываюшиеся поля дaH ных, Сохраняйте все распечатки СохраняЙте все распечатки как минимум до тех пор, пока продукт не ныЙдет в продажу, Последнюю серию распечаток (нолученных от каждою протестированнО!'о нринтера) храните по неСКОЛhКО лет, В некоторых KOM паниях ['одами сохраняются и все промежуточные выходные документы, Фактически ла документаuия отражает ход и реЗУЛhтаты разработки, и она еше не раз может ПрИ!'ОДИТhСЯ, Например, сотрудникам ['РУППhI техничес коЙ ПОЛ;Iержки она может понадоБИТhСЯ для сравнения распечаток ПОЛhЗО нателеЙ с собственными реЗУЛhтатами компании, полученными на тех же принтерах, Кроме ТО['О, при разработке следуюшею выпуска про['раммы у нас будут уже ['отовые тестовые примеры и их результаты для сраннения, Орrанизация и оборудование тестовой лаборатории На Ор['allИзаuию тестовоЙ лаборатории можно потратить все свое COCTO яние, Позтому давайте считап" что вы ['отовы ВhIДеЛИТh на ло определен ную сумму  СТОЛhКО, СКОЛhКО абсолютно необходимо для зффективнО!'о тестирования, но не более ТО['О, Принтеры можно одолжить Никто не rlOкупает все необходимые д;[я тестирования принтеры, При обретаются ТОЛhКО те модели, которые будут постоянно ИСПОЛhзонап,ся, дру['ие же вполне можно одолжить на 30, 45 или 90 днеЙ у их lIРОИЗНОДИ телеЙ, (Если хороше['о принтера нет в меню ни одноЙ ПрОI'раммы, значит, е['о производитеЛh не одалживает свои устроЙства, Никто не станет нклю чать в меню своей проrpаММhJ принтер, который нс У;I<!jЮСI. "ротестироваТh, и никто не станет е['о покупаТh, если 3ТО нс сулит ша'IIНСЛhНhIХ IIреиму ществ,) у МНО!'ИХ производителеЙ IlрИlIтсrов 11\1t:IOTCH IIp()('paMMhI ПОЛ;Iержки независимых нроизноди плей IIpOI'pa\I\IIIOI о оБССl!ечения, называемые ISV (lndependent Softwarc Vendor), lCnll Iн.1 разрабатынаете прО!'раммные Про дукты Д;IЯ ШИрОКО!'О РЫllка ШII1 ()L'С[!n<.JЛIO распространяемые прО!'раммы, позвоните ПРОИЗВО:lIIlеnЯ\1 ;IIО()ЮI ых IIринтеров и скажите, что хотели бы 
234 Часть 11: Приемы и теХI/ОЛО?ИИ тестирования протестироваТh свои прО!'раммы на совмеСТИМОСТh с некоторыми их YCT роЙствами, Можно ли одолжин ЛИ принтеры (ПОД['ОТОВhте их список за ранее) для тестирования? Вежливо объясните, что не можете ПОЗВОЛИТh себе КУПИТh каждый принтер каждою производителя, даже такие замечатеЛhllhlе принтеры лой чудесноЙ компании, ПрИ!'ОТОВhтеСh повторять одно и то же неСКОЛhКИМ сотрудникам, пока наконец вам не удастся ПО!'ОВОрИТh с пред ставителем прО!'раммы ISV или администратором из отдела продаж или маркетиш'а, Всета звоните заранее  за неСКОЛhКО недеЛh, чтобы успен нолучин, заполнин и отправин обратно соответствующие БУМaI'И, Компании необ ходимо будет подтверждение, что вы не нросто изобретатеЛhlШЙ студент, придумавщий способ бесплатно ПОЛУЧИТh неСКОЛhКО принтеров, БУДhте ['отовы к тому, что первую копию ващих бума[' компания потеряет, и при дется высылан вторую, Некоторые КОМIIании периодически выпускают документаuию с описа нием всех перемычек и переключателей для всех ныпускаемых ими прин теров, Доказав, что вы являетеСh разработчиком про['раммно['О обеспечения, можно ПОЛУЧИТh ли издания бесплатно или за очеНh YMepeH ную цену, ОбязатеЛhllO снросите, имеется ли у фирмы такая документаuия, Сотрудники, с которыми ны будете ['ОВОрИТh, MOryT просто забын о неЙ упомянун, Одолжив принтер на 90 днеЙ, стоит ПрОЯВИТh неЖЛИВОСТh и предусмот ритеЛhllOСТh и отослаТh компании некоторые из полученных распечаток, Это нужно сделаТh не позднее 60 днеЙ с момента получения принтера, НarJИщите администратору ISV ПИСhМО с выражением БЛaI'одарности за услу['у, перечнем тестируемых проrpа\!мных продуктов и примечанием, что к ПИСhМу ПрИЛaI'аются примеры распечаток, (Не заБУДhте их приложин!) Получив такое ПИСh.\IO, аДlИllИстратор ['ораздо охотнее позволит вам OCTa вин принтер у себя еще на 90 дней, если вы не уложитеСh в О!'оворенныЙ срок, После заверщения разработки также нредусмотритеЛhllO необходимо будет отпраВИТh производителям принтеров бесплатные копии прО!'раммы и ПИСhма с БЛaI'одарностями за одолженные принтеры, Эти ПИСhма и копии прО!'рамм исключитеЛhllO важны, Их нолучение от неСКОЛhКИХ разработчи ков может ПОВЛИЯТh на решение о продолжении компаниеЙ прО!'раммы ISV, Кроме тою, иноmа они MOryT стан началом более тесно['о сотрудничества между нашими компаниями, Информаuию о производителях принтеров южно получин из еже['од ною алhманаха Compиfer Iпdиsfry А/тапас (1uliussen) или еже['ОДIIO['О выпуска РС Magaziпe, IlOсвящеНllOI'О принтерам, 
[лава 8: Тестироваllие пРИllтеров и друсllХ УСIl1/ЮUС/II1I 23S Разумеется, таким образом можно одалживап, у произнодителси IIL: I'ОЛhКО принтеры, но и любые дру!'ис устройства, а также про!'раММНОL: обеспечение, сонмеСТИМОСТh с которым важна Д;IЯ успешнО!'о продвижении нашеrо продукта не рынок, Орrанизация тестовой лаборатории Чем БОЛhше у вас КО\ПJhютеров и Прllнтеров, тем важнее все это пра НИЛhllO ор!'анизоваТh, На установку и подключение принтера должно yxo ДИТh минимум вреlени и усилий. Если вы нико!'да не видели понастояшему хорошо Ор!'alшзованноЙ лаборатории, то, вероятно, даже не представляете себе, что это такое и наСКОЛhКО эффективнее выполняется в ней работа. . Расположите при1lтеры lIа крепких полках. Так значитеЛhllO эконо мится пространство и облеРlается доступ к каждому из устроЙств, Слева и справа от каждО!'о принтера, а таJ{же между принтером и стеноЙ должно оставаТhСЯ достаточно места, чтобы принтеры не пере!'ревалИСh. Кроме ТО!'О, их должно БЫТh удобно включаТh, зап равлян БУМaI'ОЙ и добиранся до их кабелей, . Распола<!айте стеллажи lIа достатОЧIIОМ расстОЯllии дру<! от дpy <!а. Избе<!айте беспорядка lIа полу. В здании будет ныключаТhСЯ свет, а в тестовоЙ лаборатории обычно нет окон. Поэтому необходимо [a рантирован, что сотрудники смо!'ут БЛal'OJJOЛУЧНО добраТhСЯ до ДBe ри, ниче!'о не сломав и не обрушин, . Приllтеры дОЛЖIIЫ быть <!отовы к работе. БУМaI'а должна бhIТh ЗaI'ружена, к принтерам должны БЫТh подключены интерфейсные кабели и питание. . Пользуйтесь коммутаторllыми блоками. Четыре или более нринте ра можно ПОДКЛЮЧIПh к одному коммутаторному блоку, кабеЛh KO торО!'О, в свою очереДh, подключастся к КОМПhютеру, ПереключатеЛh на коммутаторном блоке позволяют ныбран любой из подключен ных к нему принтеров. Таким образом можно работан с неСКОЛhКИ ми принтерами различных типов. Однако иноrда встречается проrpаммное обеспечение, которое OTKa зынается работан с принтером через коммутатор, К счаСТhЮ, такое случается крайне редко, . Если lIе получается подключить к КО.lнпьютерам все при1lтеры, подключите те, которые тестируются чаще Bcero. Осталhllые распо ложите так, чтобы до них было леI'КО добраться, Оставьте на полках рядом с ними поБОЛhше снободнО!'о пространства, чтобы любое 11'1 устройств можно было без труда снян с полки И ПОЛОЖИТh обраТIIО 
236 Часть 11: Приемы и теХ//ОЛОсl/И тестирования Ни н косм случае не кладите принтеры ДРУ1' на дру['а, иначе обяза телыlO '!тониБУДh сломаете. . Стоит потратиться "а несколько тележек или столиков "а коле сах. Время от времени тестировщики и проrраммисты будут заби paI'!, принтеры к еебе в ко,\шаНI, чтобы поработаТh с ни1И НОДОЛhше в привычной обстановке, Такие тележки не ТОЛhКО позволяют ле[' ко и без ущерба перrмещан оборудование  если на рабочем CTO ле недостаточно места, нринтер может так и СТОЯТh на тележке, нока не вернется в лабораторию, . Сразу же чиllите все, что ломается. На починку оборудования нсе!Да уходит масса нремени: в мастерских нет нужных занчастей; снеШlалист, умеющий ЧИНИТh такие нринтеры, ТОЛhКО что уволился; пришедший на ero lecTo новый сотрудник сломал еще 'IТOTO, пы таЯСI, llOЧИНИIЪ незнаКО,\lOе устройстно, причем этих новых запчас тей тоже не наЙти, OrpoMHoe количество продуктов нродается без необходимоrо тести рования ТОЛhКО потому, что сотрудники тестовой лаборатории BOB ремя не сдали в ремонт нужные устройства, . Дер,жите под рукой 1lекоторое количество запчастей и материалов. В лаборатории все!Да должны БЫТh запасные лент\,), картриджи, тонеры, БУМaI'а и т,п, Они всада кОнчаются не вовремя, например, в IIЯТНИUУ вечером, кО!'да все мш азины закрыты, а вы еще собlIра лисh поработаТh, И не стоит IIhпанся С3КОНОМИТh, нанример, на красящей ленте, Бледная печан  ло ТОЛhКО нотерянное время и зрение: ошибки вы все равно попропускаете, . Сделайте копии руководств и спрячьте ориi!иllалы. Документаuия к принтерам имеет своЙство пропадан, причем в самое неподходящее время, ЗамеНИТh ее трудно, а без нее не обойтись, Полому нико[' да не работаЙте с ори['иналами руконодств, держите их в надежном месте, а д;[я работы делайте копии, . llаклеивайте "а пpUllmepbl записки с псречнем устанонок переклю чателей д;[я всех тестируемых режимов, . Береzите уши. Матричные принтеры обычно работают очеНh ['POM ко, Если их MHOI"O И все они печатают олновремснно, создается СИЛhНЫЙ шум, ПостоянНо наХОДИТhСЯ в таких условиях краЙне Bpeд но, и, прежде всею, от это['о снижается слух, Выяснитс, какой уровень шума допускается нормаТИН<l\111 и какие зако ны обязынают компанию позаботинся об условинх вашсrо труда, 
Fлава 9 Адаптационное тестирование Назначение этой rлавы Проrраммное обеспечение все чаще и чаще переводится на друrие языки и экспортируется в друrие страны. Однако представление разработчико!! о локализации проrрамм лопрежнему остается еще очень наивным, Этот процесс представляет собой нечто rораздо большее чем просто перевод слов с oAHoro языка на друrой. В данной rлаве рассказывается о том, как MHoro изменений вносится в про rpaMMY в процес.се ее локализации, Тестировщик локализованной версии должен убедиться, что ничеrо не пропущено. Кроме Toro, необходимо про верить, не вкрались ли в измененную проrрамму в новые ошибки, HaдeeM ся, что наши рекомендации помоrут вам успешно справиться с этой работой. Библиоrрафия Крупнейшие компании  разработчики проrраммноrо обеспечения выпускают руководства по ero локализации. В качестве примера можно привести сле дующие документы. . Natioпa/ Laпgиage /пformatioп aпd desigп Gиide компании IBM (1987, 1990). . Gиide to Maciпtosh Software Loca/izatioп и Maciпtosh Wor/dwide Deve/opmeпt: Gиide to System Software компании Apple (1992). . Deve/opiпg /пterпatioпa/ User /пformatioп (Jопеs, Кеппеllу, Mueller, Sweezy, Thomas, & Velez, 1992) и Digita/ Gиide to Deve/opiпg /пterпatioпa/ Software компании Digital Еquiрmепt Corp, . Мicrоsоft Windows /пterпatioпa/ Haпdbook for Software Desigп компании Мiсrоsоft. 
238 Часть 11: Прuе,11Ы u тСХ1l0,?Осии тестuроватlЯ Существует и друrая хорошая литература о локализации проrраммноrо обес печения. Множество нюансов перевода продуктов Масiпtоsh описаны в кни re Картера (Carter, 1990). Ряд полезных с ведений мы почерпнули из печатавшихся в периодических изданиях rлав будущей книrи Эрена, rOBapAa и Перинотти (Urеп, Howard & Реriпоttу, 1993). На наш взrляд, лучшим руководством по локализационному тестированию является выпущенная Мiсrоsоft книrа Мiсrоsоft Windows /пterпatioпa/ Haпdbook for Software Desigп. Кроме Toro, разработке международноrо проrраммноrо обеспечения посвя щен целый ряд стандартов 150 (Iпtеrпаtiопаl 5tапdаrd Оrgапizаtiоп). Например, сборником 150 эрrономических стандартов для проrраммноrо обеспечения является Тесhпiсаl Committee 159, 5ubCommittee 4, Wоrkiпg Group 5. В этом сборнике естЬ стандарты для справочных систем, меню, диалоrовых окон и MHororo Apyroro. Почитайте колонку Пат Биллинrслей (Ра! Вilliпgs/еу) The Staпdards Factor в журнале Аssосiаtiоп for Соmрutiпg Масhiпеrу S/GCH/ Bи//etln  в ней RbI найдете сведения о разработке новых стандартов "ia эту тему и изменениях существующих. Обзор UNIXcTaHAapToB с информацией о том, rAe их можно найти, публиковался орrанизацией 880реп Сопsоrtium (1991). Локализаuия  это проuесс адантаUИJl ПрOl'раММНОI'О обеспечения Д':IЯ HOBOI'O \leCTa ЭКСП;lуатаIlИИ, ИЗlенение языка не Я8..1яется el'O единствен ноЙ состаВ.1яющей. Не leHee важна, нанример, и КУЛl,турная адаптаuня, Изменен ли исходный код? Это нервыЙ вон рос, KOTOphIii вы себе зададите, нристуная к I'естирова нию локализованноЙ версии ПрOl'раммноJ'О нродукта. В От;,ельных случа ях, нанример нри адантаuии американскоЙ HpOI'paMMh! Д;IЯ Ве;lикоБРИI'ании, может оказаТhСЯ достаточным изменить неСКОЛhКО BHe шних фаЙ;IOВ, хранящих, нанример, информаuию о единиuах измерения, Са\!а нрО!'рамма не нодверl'ается новторноЙ комниляuии и комноновке. В ЭТОI C;IY'lae тестирование ;lOкализованноЙ версии может БЫТh довольно HO верхностным, с акцентом ТОЛhКО на наuионалЫIЫХ особенностях. Однако, как нравило, а;tантаuия нроrpаммною нродукта требует юраздо более серhезных изменениЙ. И они МО!'УТ касаТhСЯ не TO;lhKO неревода наднисеЙ и сообщений, включенных нрямо в текст HpOl'paMMhI,  MOI'YT НОЯВИТhСЯ новые функuии, которых в исходной версии не было вообще, или какиелибо из нрежних возможностеЙ нрО!'раммы MOIYT неСКОЛhКО видоизмеНИТhСЯ. А раз меняется код и даже ноявляются el'O новые фрaI' менты, :ша'lНТ, не оБОЙТИСh без llOлноuенно\'о ФункционалhllOl'О тестиро ванин, lC;l!f I'рО!'рамма адантируется Д;IЯ целOl'О ряда стран, носле второй или треп,сй .t.:I<lнтаuи и НрOl'ра\!мисты нриобретут некоторыЙ оныт и станут донускаlЪ у;Кt: МСJlI,ШС ошибок, Однако код llOнрежнеIУ будет модифи 
[лава 9: Адапl11ациО/flюе тестирова//ие 239 Itировап,ся и ДОПОЛНЯТhСЯ, ПОЭТОIУ каждая новая версия должна тестиро наться очеНh обстоятеЛhНО, СеЙчас модно критиковаТh IIРОДУКТЫ, н которых С само['о начала не I!страиваются ВОЗ:>lOжности быстроЙ лока;IИзаuии, Однако У такО!'о lIOДХО :ш существует 11 ряд недостатков, lIOCKoт,KY он усложняет разработку ис ходноЙ версии, увеличивая сроки 11 делая IIpO:lYKT болсе ['РОIOЗДКИ:>I, Так что не Сllешите IIрисоеДИНЯТhСЯ к КРI1I'ИКС. ВОIIрОС этот И:>lеет страте['и'[ес кий характер и в каЖJЮ:>1 конкреТНО:>1 С,lучае решается llOCBOe\lY, Привлекайте к работе специалистов, свободно владеющих языком КОI'да текст IIсреведен на русскиЙ нзык че:ювеКО\f, которыЙ и\1 II,10ХО В:lадеет, это сразу за\fСТlIO, Поэro\IУ СIIеuиа;IИСТ, заНИЩIЮlJtllЙСЯ <н,нпаuиеi'! а\lерикаНСКОI'О IIродукта, обнзате:[ыlO JtШJжен свобо:tно В:lа:tеlЪ оБОIl\!11 юыка\f!1, особенно техни'[еской TCP\l1f[IO;IOIlIeii. Необходи\lO, '[тобы !I 13 [l)Y[I не тестировании тоже бы;[ '[словек, свобошlO В;Iа;tсюши!i ЯЗЫКО\I, на которыН IIереводится IIрОДУКТ, IIричем же;lа1е:1ЫЮ, чтобы ::но был е[о РОJtноН изык. Встроен ли текст в проrраммный код? если IIPO;tYKT ;tолжен ![ерево:IИП,СЯ на нt:скоЛl,КО языков, IIодавлнющая чаСТI, el'o текста, скорее все['о, отде;1еll<1 от IIpO!'pa\fMHO['O ко;ш, Однако не Bepl,Te на слово ![рОI'ра:>I:>ШСТУ, утнеРЖJщюще\fУ, ,[то в коде нет ни слова, выводящеrося на экран или IIринтер. ПРООlOтрите файлы calI! или HOC IIО;JhзуЙтеСh утилитами, извлекающи\ш из двоичных фаЙлов текстовые строки. Вы наверняка чтониБУДI, да наЙдете. Краткие сообщения НРОJtе "Ошибка чтсния диска" IIрО!'ра:>I:>ШСТУ наверняка было леНh с'[итывап, из фаЙла ресурсов. Если критические сообщения об ошибках невоз:>IOЖНО или нсрацио Ha;IhHo ВЫНОСИТh во внешние фаЙ;[\,], это вовсе не означаст, что их нелия I[еревссти. IlрО!'ра:>I:>ШСТ или IIереводчик может внести ИСIIравления IIрЯ:>1O в объектный или ИСllOЛНЯбlЫЙ фаЙл. Хотите более эле['антное решение  IIожалуЙста: IIро['ра:>IМИСТ \lOжст наIIисаТh :>lалеНhКУЮ утилиту, которая находит в объектном фаЙле текстовые строки и IIозволяет l!ереводч IIКУ ввести новыЙ текст, О!'раничивая С['О д;[ину ДЛIIНОЙ исходноЙ строки. Перевод иннее исходноrо текста На мно['их языках, в том числе и на PYCCKO\f, короткие сообщения и названия КО:>IaНД оказываются длиннес исходных аll!ЛИЙСКИХ эквива;IеIПОВ. На рис. 9, J IIриведены оцснки увсли'[сния длины текста IIрИ IIереводе с ан[лиЙско['о, сделанные СIIеuиалистами КОl\!llании IBM, ПреДlIOЛа!'аеп;}[, что в тексте отсутствуют аббревиатуры. 
240 Часть 11: Прие,wы и тех//олосии тестирова//ия 11 ри IIереводе ВIIолне :>южет OKa заТhСЯ, что реЗУЛhТИРУЮЩИЙ текст не IIомещается в \Iеню или ДИaJlOI'овое окно. Однако el'O сокращение COBep шенно неДОIIУСТИМО, НеЛhЗЯ ДOIIYC ТИТh If ТОЮ, чтобы УД;lинение текста IIривело к IIереполнению BHYTpeH них IIepe\leHHhIX IIpO!'pa:>IMhI, в KOTO рых он хранится, или затиранию ДРУI'ИХ данных. Бывает и так, что IIосле IIеревода текстовые строки набеl'ают ДРУI' на ДрУI'а на экране или на He! не IIомещается меню, ставшее СЛИШКО:>I широким, Наборы символов Длина инслийскосо текста До 1 О символов 11 20 символов 21 зо символов 31 50 символов 51  70 символов более 70 символов Увеличение при переводе 101200% 8НОО% 6НОО% 41 60% 3140% 30% РИСУНОК 9.1. Увеличеllие дли//ы текста при переводе с аl/CЛИЙСКОСО При адаIIтаUИIf IIpOl-рамм необходи:>1O учесть и еще один аСIIект, связан ный с кодировкой СИМВО:IOВ, не относящихся к баЗОВО:>IУ набору ASCII (аll!'лиЙские буквы, uифры, знаки IIреIIинания). Для всех осталhНЫХ СИ:>I волов, среди которых и буквы рУССКО!'О а;Iфавита, должна быть выбрана та кодовая страница (т,е, набор числовых кодов, ИСIIОЛhЗУЮЩИХСЯ для их хранения), которая будет установлена у llOЛhзователей IIрOl'ра:>I:>Ш, Kpo:>le кодовых страниu, отличаТhСЯ МО!'УТ и базовые наборы символов: в :>шре Мiсrоsоft стандартными являются ИСПОЛhзовавшиЙся в DOS набор СИ:>lВо лов ASCII и ИСllOЛhЗУЮЩИЙСЯ в Windows набор ANSI, У AppJc собственныЙ набор СИ:>IВОЛОВ, несовмсстимый ни с ASCII, ни с ANSI, Kpo:>le TOI'O, He обходимо IIозаБОТИТhСЯ о том, чтобы ИНфОр:>laIЩЯ IIporpa:>I:>Ih! и llOЛhзова теЛhские данные отображаЛИСh шрифтами, в которых И:>lеются нужные СИ:>lВолы, Иначе может ПОЛУЧИТhСЯ, что в ПОЛНОСТhЮ русифицированной IIрО!'рамме в текстовом IIоле с жестко задаННЫ:>1 шрИфТО:>1 IIравилыlO OTO бражаются IIРИ вводе ТОЛhКО аНIлийские буквы, а B:>lecTo русских lIOЯВЛЯ ются странные СИ:>lВолы, Клавиатура в разных странах IIрименяются и разныс раскладки клавиатуры, Сис те\1II0е IIрО!'раМ:>lIIое обеСIIечение интеРIIретирует внутренние коды кла ВИШ, ставя им в соответствие коды текущей кодовой страницы, И кодовая страНlща, и раскладка клавиатуры ОIIределяются настройкоЙ СИСТбlЫ, На немеuкои Кjlавиатуре И:>lеется неСКОЛhКО акцентированных СИ:>IВОЛОВ, Ha IIример а и 6. На франuузской отсутствуют квадратные скобки, rреческая клавиатура, так же как и русская, IIереключается между анrЛИЙСКИ:>1 и I'реческим IIабора\!!! СIfМIЮЛОВ, В скандинаВСКО:>1 алфавите И:>lеются CIIe 
[лава 9: АдаroтаЦИО//l/Ое тестирова//ие 241 uифические символы, такие как се, которых нет в наборе наиболее paCHpo странеНIIОЙ в занадноЙ Евроне КОДОFJОЙ страниuы 850, На некоторых клавиатурах есть еще одна клавиша, и['рающая РОЛh <Shift> и llO:>lечеНIIaЯ как <AltGr>, Она llOзволяет ввести третиЙ СИIВОЛ, нарисованный на буквеНIIOUИфРОВОЙ клавише, Kpo:>le ТО['О, неа:>lериканские клавиатуры ноддерживают так называемые мертвые клавиши (dead key) , Такие клавиши НРИ:>lеняются нри вводе aKцeH тированных СИ:>IВОЛОВ, ОНИ не производят никакоrо действия, пока lIOЛhЗО ватеЛh не наж!ет следующую клавишу, носле чет на :;кране и ноявляется соответствующий акuентированный СИ:>IВОЛ, И еще одно: Hp()['pa:>I:>1a должна нредоставлян lIOЛhзователю достун к СИ:>lВола:>l, которые отсутствуют на клавиатуре (иначе как италhянеu CMO жет адресован lIИСh:>1O cBoe:>IY He:>leuKo:>IY колле['е?) УбедитеСh, что HpO ['pa:>I:>1a нозволяет не ТОЛhКО встаВЛЯТh в текст такие СИ:>IВОЛЫ (наПРИ:>lер, НУТбl кониронания их из дру['о['о нри.10жения), но и нраВИЛhllO их отобра жает, Полноценно ВhIIIOлненное тестирование нреД[IOЛaI'ает работу с HpO!'paM моЙ на тоЙ клавиатуре и с тем системным нр()['раммным обеснечением, с КОТОРЫ:>I ее будут экснлуатиронан ПОЛlтЗователи, Фильтрация ввода ПрО!'ра:>I:>1a :>lOжет, наНрИ:>lер, допускап, ввод в онределенное ноле ТОЛh ко ан[лиЙских букв, отвер['ая все дру['ие ВIЮДИ:>lые llO,lI,зователе:>1 СИ:>IВО лы и унравляющие коды, ТаКИ:>1 обраЗО:>1 она ['арантирует, что ан[лоязычный llOЛhзоватеЛI, не ОlOжет нвести в это ноле ниче['о, Kpo:>le текста, однако д;[я llOЛhзователеЙ с ДРУ['И\IИ НaI(ИоналЫIЫ:>1И алфавита:>1И такое О!'раничение совершенно неНрИбlЛе:>ю, ПОСКОЛhКУ нодобные О!'раничения реа;IИЗУЮТСЯ HpO['pa!\IIIЫM нутеч, нридется как следует нротестироваТh каждое текстовое ноле, нроверяя, как HpO!'pa:>I:>1a НРИНИ:>laет и отображает все символы национа;IhllO['О а;[фави [а, разу:>lеется там, те такие СИ:>IВОЛЫ действитеЛhНО должны ДОllускап,сн, 3аrрузка, сохранение, импорт и экспорт символов OCHoBHoro и расширенноrо набора ASCII Создайте текстовые файлы со ВСС\1If 2)) СII\!ВШlа:>IИ расширеннО!'о Ha бора ASCII или тем е['о [IOДМI!ОЖССIIЮ\I, K\JI\Jpoe поддерживается вашей нрО!'ра:>I:>ЮЙ, Сохраните 11 х, 110010 1 [11 I[С, '[ [() получается нри их ЗaI'рузке с ТбlИ КОДОВhШИ страНИU<I\fI!, КОТО[1I,[С щ)['ут бhПh установлены у llOЛhзова телей, 
242 Часть 11: Прllе,\1Ы и теХIIОЛОCUИ тестироваllИЯ Сохраните llOЛНЫЙ набор символов во всех IIоддерживае\fЫХ IlpOl'pal юЙ фаЙловых фОР:Vlaтах; IlOlIробуЙте НрОЧl1таТh фаЙлы всех этих форматов, Если их MHOI'O, ВlIOЛне вероятно, что с одним или двумя IlpOl'paMMa pa60 тает IlЛОХО, Затем IIpoBepbТe, как ВhlllOлняется И\lllOрт и ЭКСIIОРТ IIробле\fllЫХ СЮf волов, Обратите особое ВНI1!ание на СИ\IВОЛЫ с АSСIIкодами до 32, 11O СКОЛI,КУ они нередко ВОСllРlIнимаются IIринтера\!и и раЗЛИЧНЫ:VIИ IlрOl'рамма\fИ ТИlIа текстовых редакторов, не как данные, а как УlIравляю щие коды. Тестируя об\lен данными меЖJIУ IIрОI'ра\fма\fИ, обратите вню!ание, '/тобы их версии были локализованными. НаlIри:v!ер, если хотите, '/тобы ЭКСlIортированные IIрOl'рамfOЙ фаЙлы ЧИI'аЛИСI, в MS Word, берите el'o русскую, а не а\lериканскую версию, Язык и операционная система Тестировщик дОлжен знаlЪ, различаются ли в ОlIерационноЙ системе в заВИСIШОСТИ от выбранною языка СОl'лашения об именах файлов, их фИЛh трах, и\!ена КО\IaНД и T,II, Клавиши вызова Подчеркнутые или ИНЫ\I способом выделенные буквы в названиях элементов меню, как, наllрИ:Vlер Ф аЙ,l, означают, что они ИСllOЛhЗУЮТСЯ для БЫСТрОl'О вызова команд. Ilри работе с клавиатуроЙ llOЛhзоваТhСЯ ими I'O раздо быстрее, че:V1 lIереХОДИТh к НУЖНО:VIУ IIУНКТУ \!еню и нажимаТh <Enter>, ПОСКОЛhКУ в лока:\JIзованноЙ версии IIродукта все названия KO манд \Iеняются, необходимо ИЗlениТh и все клавиши их вызова, Кроме TOI'O, в IIpOI'pa\IMe \fOl'YT ИСllOЛhзоваТhСЯ и ДРУl'ие сочетания клавиш  Д;IЯ команд, которых в меню нет, Их тоже IIридется lIepeCMOTpeТh и IIротести pOBaТh, Сборные сообщения ОтображаеlOе ПРOl'раммоЙ сообщение lOжет собираТhСЯ из неСКОЛhКИХ фраl'ментов, НаПРИlер, часто ИСllOЛhзуемые фразы и словосо'/етания MOI'YT храНИТhСЯ во внутреннем массиве и 1I0дстаВЛЯТhСЯ во МНОl'ие сообщения, ОчеНh '/асто в сообщения вставляются имена файлов, даты и ДРУl'ие данные, Однако если lIеревести фраl'менты сообщения с одною языка на ДРУI'ОЙ, а !IOТО\! их объединиТh, результат \lOжет окаЗ<lП,СН неllриеlЛеIЫМ, IlроС\lO!рИ!С все выдаваемые IIрОl'раммоЙ сообщения на IIредмет HelIpa ВИЛh!IOI'О !!OpH;lKa слов, неСОlласования lIадежеЙ и беСО!!,!С;lеН!IOI'О текста, 
{'/ава 9: Адап таЦИOlтое l/IeCI/IUf)(}fI (//II1<' 24] Идентификаторы сообщений об ошибках Как бы хорошо ни была Орl'анизована техническая lIоддержка в тех странах, куда ЭКСlIортируется разрабатываемое вами IIрOl'раМЩlOе обеСllе чение, некоторые НОlIрОСЫ все ранно будут lIереадресовываТhСЯ в Iлавныii офис, Ilри этом возникает ситуация "ИСlIорчеННОI'О телефона"  IIOKa информация о IIробле\lе доЙдет 110 назначению, она может бын неСКОЛh ко раз искажена, HeMHoI'o IIOMO'lh делу MOI'YT уника:lhные идентификато ры для каЖДОl'О сообщения об ошибке и IIреДУlIреждения, выдаваеIОI'О IIрОl'раммой, Достаточно 13 конце сообщения IIрОСТО указан в скобках el'o код, наlIример, (23), УбедитеСh, что IIрИ lIереводе IIpol'paMMhI на ДРУI'ОЙ язык все но\!ера сообщен иЙ оста:\ИСh IIрежними, Правила переноса в разных языках нравила I!ереноса слов отличаются, они lOrYT БЫТh раЗ;IИЧНЫМИ даже д;rя разных диа;lектов ОДНОI'О и тою же языка, наlIример, аМt:рикаНСКОI'О и бритаНСКОI-О аНIЛИЙСКОl'О, Существует неСКОЛhКО языков, 13 которых IIРИ наlIисании некоторых слов через дефис меняется их IIрОИЗ ношение, Ilри удалении lIереносов IIpOl'paM\la должна IIраВИЛh!1O раСlIозна нать такие слова, Правописание IIравила IIраВО!lисания ,]ЛЯ разных диалектов ОДНОI'О и TOI'O же языка, наlIример америкаНСКОl'О и бритаНСКОI'О аНI'ЛИЙСКОI'О, MOI'YT отличаТhСЯ, Если в IIpOI'paM\IHhIii IIрОДУКТ включена функция проверки IIраВОlIисания, убедитеСh, что она работает IIраВИЛh!IO, Порядок сортировки Ilравила сортировки текста от страны к стране Iеняются, 11311[1I1,\IC[1, IЮ ЩIOI'ИХ языках, и в том числе 13 русско\!, беССМЫСЛС!II!а СО[1П1рОВК3 110 зна'lениям внутренних кодов символов (ASCII или ЛNS 1) Хорошая IIOДllрOl'раМlа сортировки I'РУIIIIИРУСТ IШl'е Il' О;IIIlI;IКОl\ые aK центированные символы, наllример, снача:!а BCl' о, 13101 вес 11, 13 HeKOTO рых языках IIрИ сортировке два символа МОI \' 1 IlIlIl'IHI[1C 1 \!роваТhСЯ как один, наlIример, в ИСIIaНСКО1 слоне lIаша r)YKIн.I 11 L'llIlаЮIСЯ за одну, Oco бые СОlлашения MOI'yr касанся сорПI[10ВКII ф;J\!lIj(НЙ, НШlрИ\lер, d'Allesio может интерllретиронал.ся как AIIsio, V;III Ess1I как Essen, а del Zorro как Zorro, 
244 Часть 11: Прие,llЫ и тех/{оло"ии тестироваllИЯ Преобразование текста к верхнему и нижнему реrистру ТОЛhКО В анrлийском языке для IIOЛУ'lения IIРОIIИСНОЙ буквы из строч ноЙ К ее коду достаточно добаВИТh 32, В дру['их языках это не срабатыва ет, Обратите внимание на ошибки, связанные с нреобразование:V1 реrистра, особенно раснространенные во встроенных функциях 1I0иска и заlены текста. Правила подчеркивания в разных странах отличаются и IIравила подчеркивания, В некоторых из них считается неlIраВИЛЫIЫ\f нодчеркиваТh знаки IIреlIинания, IIробелы и некоторые ДРУl'ие СИ\lВолы, ПринтеРЬI МНОl'ие из IIродавае\IЫХ в EBpolle IIринтеров точно такие же, как в СШл. Однако эти рынки различаются, и :vюдели, 1I0lIулярные в одном реl'ионе, MOI'YТ ночти отсутствовать в ДРУI'OI, Существует и ряд IIринтеров, ВЫlIускаемых неносредственно в ЕВрОlIе, у каждоrо Ilринтера Иlестся встроенныЙ набор символов, и БОЛhШИН ство из них лоддерживают также заl'ружаемые символы, Лазерные и lIодоб ные им струйные IIрннтеры 13 этом отношении являются более i'ибкими, че\f матричные и струЙные IIринтеры, 1I0добные матричным, Если IIроrpач ,\!а должна ноддерживан ОlIрt:деленныЙ IIринтер, IIpoBephTe, с каким набо ром символов он IIродаися в интересующе1 вас реl'ионе, В ROM одноЙ и тоЙ же !одели  стройства МQI'УТ заlIисынаТhСЯ разные наборы символов в зависимости от TOI'O, Д;IЯ какоЙ страны IIредназначается конкретная lIартия. Если IIринтер не IlOлдерживает необходимую кодовую страницу, как IIOЛhзоватеЛh будет IIечатаТh данные? Разумеется, отвеТИТh на этот ВОlIрОС должны не вы. а руководитеЛh IIроекта, но ваша обязаНIIOСТh, как тестиров щи ка, 1I0стаl3ИП, lIеред ни! этот ВОlIрОС, Размеры бумаrи в ЕВрОllе обычно ИСllOЛhЗУЮТ размеры стандарта DIN, особенно А3 и А4, ИмеЙте в виду, что ширина отдеЛhНЫХ листов и lIерфорированных но краям рулонов для этих размеров HeMHoI'o отличается, Поэтому IIpoBephTe оба ТИlIа бумаrи, П роцессоры и видео КаЖДО\fУ, кто разрабатывает IIpOrpaMII!Oe обеСlIечение для рынка Мiсrоsоft 13 I.:BPOIIC, стоит IIротестирован el'o на оборудовании Olivetti и Amstrad, Ilри :HOf, LОL:I'ШIЯЯ календарныЙ IIлан работ но тестированию, не 
[JaIfa 9: АдаптаЦИо/lllое тестирова/ll/l' 245 рассчитываЙте, что все IIройдет IЛадко с llepBOrO раза, ОбязатеЛhllO проте. lтируйте тс видеОlIлаты и видеореЖИ!hI, у которых нет хороших американ СК\!Х aHa.:IOI'oB, Форматы данных и опции настройки у IIOЛhзователя должна БЫТh возможносн выбраТh язык (т,е, русский, а не Pascal) и форматы отображеНI1Я таких базовых ПlПов данных, как врсмя, дата \! денежные су\шы, Если все эти установки (или некоторые из IlI!Х) IIOЛhзоватеЛh Д(:;lает через ОlIерационную систему, IIpol'paMMa должна Jf х IIрИlеНЯТh, . Формат времеllи может бын 12 и 24часовым, с двоеточиями или ины:vш разделителями, В датах MOryT ИСllOЛhзоваТhСЯ как различные разделители (косые, нробелы, дефисы), так и различный IIОРЯДОК чисел, означающих день, !есяц и rод, . ДесятиЧllые и порядковые разделители в числах также меняются от страны к стране, ['де одни ИСllOЛhЗУЮТ занятые, ДРУl'ие ставят точ ки и наоборот, В частности, американцы ИСllOЛhЗУЮТ в качестве дe СЯТИЧНОI'О разделителя точку, а русские заlIЯТУЮ, С заlIЯТЫМИ связано особенно MHOI'O ошибок в IIpOl'paMMHoM коде, НаlIример, МliOlие 1IO.lI:pol'pa,\IMhI автоматически ИНТСРlIретируют занятую как разделите,lh элементов СlIиска, . Символ # оБЫ'1I1О ИСIIO;lhзуется в США Д;IЯ обозначения номера, в то время как в ДРУI'ИХ странах этой цели служат и ДРУl'ие символы, наlIрю!ер, очеНh раСlIространен символ N:!, . отрицателыlеe числа не во всех странах IIИШУТСЯ со знаком lИнус, Часто их заключают в скобки, IIричем на этот счет тоже существу ют различные СОl'лашсния, . ДеllеЖllые символы MOIYT записыванся Ilсред суммоЙ или IlOсле нее, нричем это может бhПh один l'ра<jJИческиЙ символ или неСКОЛhКО букн (не БОЛhще трех), Единицы измерения Хотя амеРИКaIЩЫ нреДllOчнтают все измеряп, н дюймах, в ;:РУ!!I х eTpa "ах иные нравила, Особенна важна ноддержка MCTPI!'It:CK()ii снстсмы (caH I'Иметров), неllЛОХО также встроин в Ilpol'paI\IY !!()Л;It:рJККУ IIУНКТОВ и ник, ',)то относится, В частности, к линеiiка!, ;IH:t;H)!(m!,!x! окнам для ввода !!lнеЙных нараметров, устанонке ра'!мсро!\ СС!К!! Jf T,ll, Любые значения l;\ИНЫ, ШJfрИНЫ и высоты, КОТОРЫС ВЫ'IВСIНЮТСЯ, вводятся или ИСIIOЛhЗУ ются Д;IЯ отображения объсктов на 'жраllС, ДО;IЖНЫ измеРЯТhСЯ в удобных I;!я 110Лhзователя еДИНИl\ах, И ;!ажс сели онсраl\ионная систе:vш нредлаl'а. 
246 Часть 11: ПриС,\/ы и теХIfОЛО сИИ тестирования ет выбор метрическоЙ системы, возможно, el'o стоит ДОllОЛНИТh ИЛИ IlpO дубл ировать, Изображения, ... культурои ... связанные с конкретнои Видеоролики, I1ИКТОI'ра!\fЫ llанелеЙ инструментов, заставки, Сllравоч ные окна, Ilечатные руководства, YllaKOBKI! и lаркеТИНI'овая литература MOI'YT содержать изображения, Сllеl\ифические ,JЛЯ конкретноЙ Ky.l, ьтуры К этому ВОllрОСУ следуст ОТНОСИТhСЯ внимателlтllO, I10СКОЛhКУ то, что ВhIl'ЛЯ дит IlРИН;IекатеЛhllO .:L1Я IlредставителеЙ одноЙ КУЛhТУРЫ, может оказаТhСЯ неllриемлеIЫ:>f для ДРУI'ОЙ, Кроме TOI'O, ссли смысл изображения связан с ОllределенноЙ КУЛhТУРОЙ, то Ilредставителям ДРУI'ИХ стран он может бhПh НСllОнятен, Выходные данные, связанные с ... ... конкретно и культурои Жителю ДРУI'ОЙ части IlЛанеты вовсе необязатеЛhНО 1l0нравится то, что нравится амсрик3IЩУ, Жители разных стран !1Oразному заllисывают а;Iреса, Для формата выходных данных, ка:lендаря, вида бланка заказа и ДРУI'ИХ 1l0добных вещеЙ MOI'YТ в каждоЙ стране \ЮI'УТ бhlТh свои "стандарты", Если задуматься, КУЛhТУРОЙ Оllределяются очен h МНOI'ие вещи, И уж во всяко! С:lучае еВРОllеЙl\У не 1l0нравится, если на выходном документе БОЛhШИМИ буквами будет наllисано: "Наllечатано американскоЙ IlрOl'раммоЙ!" Совместимость с местными продуктами Не все IlрОI'ра:>fШlOе обеСllечение разрабатывается в Соединенных Штатах, Если IlpOI'paM\13 ИМllортирует данные из баз данных, электронных таБЛИl\, текстоных IlрОНСССОроВ или ДРУI'ИХ систем обработки информаl\ИИ, стоит IlроверИТh, имеются ли на том рынке, Д;IЯ KOTOpOl'O она Ilредназна чаетсн, собственные 1l0llулярные IlрОДУКТЫ, Совместима ли с ними ваша локализованная версия? Не будьте наивными То, что IlpOI'pa:>fMa Ilредна:JНачается для Оllераl\ИОННОЙ системы Macintosll или Windows, еще не означает, что все Ilроблемы лока:IИзации решатся са1И собоЙ, Разумеется, эти дружественные Оllераl\ионные систе IЫ ,\IIIOI'Oe облеl'чают и решают l\елыЙ ряд 1l0ставленных в этоЙ I'лаве ВОllрОСОН, но не все и не ВССI'да IIОЛНОСТhЮ, Составьте собственныЙ СIlИСОК ЛОКШlllзаЦIfОННЫХ требованиЙ, независимыЙ от техническоЙ документации 110 KOHKpeТlIOfY IЮЛI,зоватеЛhСКОМУ интерфеЙсу и от СilСl\иФикаl\ИИ IlpoeK 
[лава 9: АдаптаЦИОНl(ое теСl1lирО6G1l1/е 247 I'a, ИзложенныЙ здеСh материа:I и Ilеречисленная в нача:lе I'лавы ДOIIO)! IlитеЛhная литература 1l0служат хорошеЙ ОТllранноЙ точкоЙ, Затем calhIM !щатеЛЫIhIМ обраЗО:>1 Ilроверьте IlpOl'paMMY на соответствие требованиям это IU Сllиска, И если 'IТOTO не так, обязателыlO составляЙте отчет о Ilроб"lеме, Автоматизированное тестирование Функции и 110ЛhзоватеЛhСКИЙ интерфеЙс лока:IизоваНIIOЙ версии IlpO I ра\!мы будут Ilрактически такими же, как у исходноЙ версии, Поэтому для нсе 110доЙдет БОЛhшая чаСТh уже I'Oтовых тестов, разве что текстовые строки Ilридется 11OмеНЯТh, Поэтому у вас наверняка 110ЯВИТСЯ искушение с caMol'o нача:lа разработать БОЛhшое количество автоматизированных реrрессион ных тестов и IlримеНЯТh их для работы со все\IИ Jlока:IизонаННЫМII верси ям и, При определенных обстоятеЛhствах такой подход вполне Оllравдан, Более TOI'O, БЛaJ'одаря ему можно I'ораздо более тщате;II,НО IIротестировать каждую новую версию IIродукта, Мiсrosоft рекомендова:щ (1990) 110ЛhзоваТhСЯ IlрОlрам!ами Ilерехвата и сравнен ия выходн ых данн ых, однако сравн иваТh ТОЛl,ко их знач имые эле !еIIТЫ, Это очеНh важное Оl'раничение, 1l0СКОЛhКУ текст на экране IlрИ Ilереводе IlpOl'paMMhI на ДРУI'ОЙ язык меняется, и если сравниваТh el'o He :IИКОМ, то IlpOl'paMMhI сравнения 110СТОЯННО будут выданать сообщения о расхождениях, Однако нсе, что не удастся IlротестироваТh авто\!атически, все равно должно быть Ilроверено, Рекомендуя автоматизировать тестирование, Мiсrosоft добавляет следу ющие замечания: . Разработчик тестов должен знать о тестнровании и ВОllросах лока лизании I'ораздо БОЛhше, чем любоЙ, кто тестирует Ilpol'paMMY вруч ную, он должен овладеТh всеми тонкостями ЭТОI'О дела, . Тестовые сненарии сами MOI'YT быть источниками ошибок, Поэтому их следует исключитеЛhНО тшателыlO отлаживаТh, Ilрежде чсм IIPI! менять ДJiЯ тестирован ия локал изованной версии IlpOrpaMMHol'O IlpO дукта, Прежде Bcel'o, мы рекомендуем авто!атизировап, раБОIV 110 теСПlрова нию тех аспектов Ilpol'paMMhI, которые не связаНI,1 С IЮ;!I, НJваТСjll,СКИМ интерфеЙсом, Например, можно написать IlPOCICIII.K\,(() Y!I!;IIII'Y для IIреоб разования десятичных точек в десятичные З<lшпые 11 IlрОВСрИТh числовые выходные файлы, Можно автомаТИ'IССКИ Cp<llHIIIВa 11, сохраняемые и ЭКСIlОр тируемые выходные фаЙлы с раЗ;IИ'IIОДII1 набора1II символов, ПодумаЙте, автоматизания каких задач llOМОЖСl' В,ЩНI<I'!ите;II,11O сокраТИТh время Te стирования, особенно ее;IИ 1I;lаВI1РУСТСЯ выход локализованных версиЙ Ilродукта для неЛОl'О ряда стран, 
Fлава 10 Тестирование документации Назначение этой rлавы Проrраммный продукт  это не только проrрамма. В стоимость боль шинства продуктов входит документация, упаковка, примеры' а также техническая поддержка (и, возможно, некоторые друrие услуrи). Документация, в свою очередь, обычно состоит из руководства пользо вателя, инструкции по установке, обзорноrо буклета, RЕАDМЕфайла на дискр, интерактивной справки и друrих сведений о том, ка'. пользовать ся ПРОДУКТом. Все это  важные части проrраммноrо продукта, и все они подлежат обстоятельному тестированию. Обзор В этой rлаве рассматриваются следующие темы. . Преимущества хорошей документации. . Цели тестировщика документации. . Как тестирование документации повышает надежность проrраммноrо продукта. . Распределение персонала . . Руководство пользователя: стадии разработки. . Тестирование интерактивной справки. 
[лава 10: Тестирование доку.меuтаЦllll 249 Хорошая документация у хорошо документироваННОl'О Ilродукта сущестнует ряд Ilреимуществ, . Леi!кость исполыоваllия. Если IlрОДУКТ хорошо документирован, им I'ораздо ЛСРlе IЮЛhзоваТhСЯ, ПОЛhзователи el'o быстрее изучают, дe лают меНhше ошибок, а в реЗУЛhтате быстрее и эффективнее ВЫIЮЛ няют свою работу, . Сllижеllие стоимости теХllи"еской поддержки. КОI'да IЮJlhзоватеЛh не может разобранся, как ВhllЮЛНИТh неоБХОДИ\lые ему действия, он звонит Ilроизводителю Ilродукта. Служба техническоЙ 1l0ддержки обходится очеНh ДОрОl'О, А хорошее руководство 11OMoI'aeT 11OЛhзова телям рсшаТh возникающие Ilроблемы, и ОНII меНhше звонят IlрОИЗ водителю, . Повышеllие lIадеЖllости. Неllонятная или неаккуратная ДOKYMeHTa l\ИЯ делает IlрОДУКТ менее надежным, 1l0СКОЛhКУ el'o IЮЛhзователи чаще ДОIlУl:кают ошибки, а 1l0ТОМ им еще и трудно разобраТhСЯ, в чем flричина и как снраВИТhСЯ с их lюследствиями, Особенно важ на хорошая документаl\ИЯ в тех случаях, КOI'да IlрОДУКТ Сllроектиро ван неудачно JI отдеЛhные el'o ФУНКl\ИИ реализованы не самым лучшим образом, . Облеi!"еllие сопровождеllия. Ol'poMHoe количество денеl' и времени тратится на анализ Ilроблем, которые оказываются ошибками 11OЛhзователеЙ. Изменения, вносимые в новые ВЫIlУСКИ IlРОДУКТОВ зачастую являются просто сменоЙ интерфейса старых Фун>-uиЙ, Они вносятся для TOI'O, чтобы ПОЛhзователи наконен разобраЛИСh, как ими IЮЛhзоваТhСЯ, и Ilсреста;IИ ЗВОНИТh в службу техническоЙ 110k держки, Хорошее руководство в значитеЛhlЮЙ стеllени решает эту Ilроблему, 11JIoxoe же, наоборот, усложняет ее еще БОЛhше, . .vпрощеllие устаllовки. После 1l0КУllКИ IlpOl'paMMHol'O Ilродукта JЮЛhзоватеЛh должен установин el'o на своем КОМllhютере, Дажс ССЛlI этот Ilронеес IЮЛ!ЮС1ЪЮ автоматизирован, 1l0Лh10вателlO flредстоит отвеТИТh на ряд ВОllрОСОВ и IlрИНЯТh решения ОТllOситеjlЫIO набора и раСllоложения KOMllOHeHToB Ilродукта и настроЙки CI'O функuиЙ, Обычно установочная утилита IlИшется н 11OСJlс;rнюю очереДh, IlрИ чем разработчики относятся к неЙ менсс ееРI,С1IЮ, чем к oCTa;IhHhIM составляющим IIродукта. Они мотивируют ЭТО тем, что 11OЛhзовате лю IIридется устанаВЛJlваТh IIРОД\'КТ TO:lhKO однажды (ну, может бhПh, несколько раз, но уж во всяком случае не каждый день), 
250 Часть 11: Прие,ны и технолосии тестироваНl/Я МеНhше ВlIIlмания установочным IlpOI'paM\!aM уделяется и IlрИ их I1роекп!ронании, и IlрИ тестировании, А недь у IIОЛhзователя не будет никакою Оllhпа установки Ilродукта, и некоторые ВОllрОСЫ IlpOl'paM мы MOI'YT IlОстаВИТh el'o в ТУIlИК, Для кошании это ОllЯТh же будет означаТh затраты на техническую 1l0ддержку, Поэто\!у четкие и IIОНЯПlые ИНСТРУКl\ИИ 110 установке Ilродукта являются однОй из наиболее важных состаВ.1ЯЮЩИХ el'o документаl\ИИ, Установка некоторых ТИIIОВ IlpOl'paMMHol'O обеСllечения (таких, наllри\!ер, как те.lефонные систеlhI) наСТОЛhКО сложна, что IIОЛhЗО ватели нанимают Д.1Я ЭТОI'О Сllеl\иа:\Истов, Такие Сllеl\иа,1истыуста новщики работают с очеНh МНОI'И\IИ Ilродуктами, и не следует ожидаТh, что они являются ЭКСllертами 110 каЖLlОМУ из них, YcтaHOB шик IlрОСТО обрашается к руководству, и IlрИ отсутствии четких инструкuиЙ ему может быть сложно IlрИНЯТЬ верные решения, He которые Ilродавны вообше отказываются Ilринимать IlрОДУКТЫ, YCTa новка которых обходится им слишком ДОрОl'О, Кроме инструкциЙ 110 установке, ПрОl'раММlIOе обеСllечение должно СОllровождаТhСЯ и ИНСТРУКl\ИЯМИ 110 el'o уда:lению из системы, В документаl\ИИ также должно IIОЯСНЯТhСЯ, как измеНИТh Ilараметры настройки, добавить или уда:\ИТh КО!llОнеIПЫ Ilродукта и ВhlllОЛНИТЬ установку el'o новой версии Il0верх Ilредыдуи..ей, . Коммерческий успех. Качество документаl\ИИ является одним из факторов, Оllределяющих КОМ:VlерческиЙ УСllех IlpOl'paMMHol'O IlpO дукта, Дилерам, нооруженным хорошеЙ документаl\ией, леРlе дe монстрироваТh IlрОДУКТ 1l0КУllателям и рассказываТh о el'o возможностях, Во мноrих обзорах IlpOl'paMMHoro обеСllечения, lIеча таемых в IlроФессиона:lhНОЙ Ilрессе, документаl\ИИ уделяется значи теЛhllOе внимание, . ДостовеРllость иllформации. В документаl\ИИ не должно быть He верноЙ информаl\ИИ, ВВОilящеЙ IIОЛhзователеЙ в заблуждение и зас тавляющеЙ их траТИТh лишнее вре!я и усилия, Если в документаl\ИИ сказано, что в IlpOI'pa\!Me присутствует Оllределенная фУНКl\ИЯ и она работает Оllределенным образом, то так и должно бhПh, Едва ли суд СО2.ласится с утверждеllием адвоката компаllии, что lIе следует npиlluмaть докумеllтациlО всерьез, поскольку этоi!O lIе делал иикто из сотрудииков. Тс еО!'РУ;IНИКИ, которыс не 1l0нимают важности достоверноЙ peK-1амы и докумснтаllllll, ивно работают нс на своем месте, 
I:юва 10: Тестироваllие дОК)',\fентаЦllИ 251 Цели теСТИРО8щика документации Читая и анализируя документаl\ИЮ, следует Ilрежде всею удеЛИТh вни \Iаllие ее точности, IlOлноте, ясности, Ilростоте ИСIIOЛhзоваlll!Я и тому, l!аСКОЛhКО она соотнетствует духу IlpOl'paMMHol'O Ilродукта, Вы наверняка l!аЙдете Ilроблемы в каждой из этих областеЙ, Поэтому заllланируйте \ll1O 'ократное тестирован ие IlечаПlOl'О ру конодства, интерактивной Сllравки и :IРУI'ИХ документов, Тсстировщик, работающиЙ с доку\!еlпаl\ией, отнечает за техническую IOчносн каЖДОl'О се СЛОllа, Он обязан Ilроизвести са\IУЮ тщатеЛhНУЮ IlpO верку ее соответствия реа:IШОЙ структуре и IlOведению Ilpol'paMMhI, И здеСh roже наверняка будет выявлено множество ошибок, ОбращаЙте ВНЮl3ние на сложныс и заllутанные места текста, ОНИ MO I'YT отражаТh неудачно Сllроектированные элементы самой IlpOl'paMMhI, ТехническиЙ IlисатеЛh обязан ОllИсаТh IlрОДУКТ таки\!, каким он является на ca\IO! деле, И IIOМОЧh Ilроблсме можст ТОЛhКО измснение Ilроекта, HaCTa IIвать на таких из!енениях важно еще и 1l0ТОМУ, что В конечном счете они обеСllечат не ТОЛhКО IlрОСТОТУ документирования Ilродукта, но и леl'КОСТh el'o ИСllOЛhзования, Необходюю IlроверИТh, нс IlРОllущены ли 11 документаl\ИИ какиениБУДh ФУНКl\ИИ Ilродукта, Ilисатели Оllираются на Сllеl\иФикаl\ИЮ, собственные 1аметки и слухи, И хотя разработчики стараются держан технических llисателеЙ н KYP се дела, они ИНОl'да забывают сооБЩИТh о новых ФУНКl\ИЯХ, ТОЛhКО что внесенных в IlpOI'paM\!y, И 1l0СКОЛhКУ тестировщики ста:Iкинаются с этими ФУНКl\ИЯМИ I'ораздо раНhше технических llисателеЙ, стоит 1l0заБОТИТhСЯ, чтобы их ОllИсания IlOllа:IИ в документаl\ИЮ, Кроме TOI'O, если Оllределен ная функция Оllисана в руководстве, это не значит, что она будет Оllиса на и в интерактивноii Сllравке, Вllолне вероятно, что их IlИШУТ разные :IЮДИ, и новая информаl\ИЯ леl'КО \южет 1l0терянся, Однако не забынаЙте, что ны являетеСh тестировщиком, а нс техн ичес ким Ilисателем, Не стоит ДУ\lаТh, что вы знаете, как Ilисап, документаl\ИЮ лучше, чем ес авторы, Вы одинаконо не имсетс IlpaBa трсбонаТh изменениЙ в руководстве, так и в самом Ilроекте, ОбязанносТJ, ТССТllронщика , выя ВИТh Ilроблему, а что с неЙ делаТh, решаТh нс BaI, В частности, у тестировщика нет никакOI'О Ilрава требовать сти;Iисти ческих изменениЙ текста, Можно IlреД;IOЖИТh таКllе IIз\!енсния, но техни ческий 11IICаТСЛh Вllраве остаНИТh все как есть, и IlрИ этом ОН не обязан доказываТh вам, что 1l0СТУllает IlраВИЛhllO, Именно ему, а не вам, Ilлатят за Ilринятие решений ОПlOситеЛhНО стиля документаl\ИИ, 
252 Часть /1: Приемы и теХНОЛОсl/И тестироваНI/Я Для взаимодеЙствия с техническими писателями форма:lhная система отслеживания пробле! обычно не применяется, БОЛhШИНСТВО ком\!еlпари ев вносится прямо н копию руководстна, Сохраняйте копии ком\!еlпариев и проверяЙте по ним очередные Hep сии документаl\ИИ, ДOl'О130ритеСh с техническим писателе\1 о том, как бу дут выделяться в тексте правки и ком!еlпарии, ПодумаЙте, как облеРIИТh вашу совместную работу и какие приемы будут удобны техническому писателю, Если вы вычитываете распечатанныЙ текст, возможно, стоит ВОСllOЛhзоваТhСЯ некоторы\ш обозначениями, при меняемыми профессиона:lhНЫМИ редакторами, Возможно, стоит попросить теХllичеСКОl'О писателя делаТh пометки о том, как решаются выявленные проблемы, но ТОЛhКО в случае, если они вам деЙствитеЛhНО полезны, Как тестирование документации повышает надежность nporpaMMHoro продукта МНOI'ие тестировщики халатно ОТIIОСЯТСЯ к тестированию доку,\!енлщии, считая, что оно отрывает их от "настоящеЙ" работы, заК:lючающеЙся в тестировании ПрOl'рам!ы, Они очеНh ошибаются, . Вы lIайдете i!ораздо больше ошибок, .,ем предполаi!аете. УДlIвитеЛh но, СКОЛhКО ошибок обнаруживается при тщатеЛhНО! тестировании документаl\ИИ и сверки ее с ПрОl'раммои ОПЫПIЫМ спеl\иа:IИСТОМ, ТехническиЙ писатеЛh видит проrрам МУ иначе, чем нроrраммист или тестировщик, у нею своя точка зрения, и потому 011 нередко выяв ляет пробле\!ы, которые ПрOl'раммисту и тестировщику даже не при ходят в I'ОЛОВУ, Мы CTO:lhKO раз ста:lкива:IИСh с подобными вещами в самых разных проектах, что практически бсз колебаниЙ можем YT верЖiШТh, что в ходе тестирования ДОКУ\fеlпаl\ИИ будут выявлены ОЧСНh серhезные ошибки, которых вы не найдете IIрИ стандартном тестировании ПрOl'раммы, Не всеl'да в ходе тестирования документаl\ИИ ныявляются ССрhезные проблемы, Тестировщики, не особенно тщатеЛhНО ВhlIfOлняющие свою работу, не CMOI'YT обнаРУЖИТh мною проблем, IlОЛНОl\енное тестирование руководства обычно требует от ОДIIОI'О до трех часов на каЖilые пять страНИl\ текста, Ускорение этой работы означает СНИ жение ее качества, Об этом следует 110стаВИТh в известность PYKO водство и при необходимости llOДНЯТh вопрос оперераспределении и обучснии персона:lа, 
[лава 10: Тестирование дт:УJl/е/ll/llllЩ /l 253 . Докумеllтацuя является прекраСIIЫМ истОЧllиком реалыlхx тecтo вых Ilримеров. Не стоит рассчитываТh протсстироваТh нсе возможныс комбинаl\ИИ ФУНКl\ИЙ и ОIЩИЙ продукта  их слишко\! MHOI'O, Ok нако можно протестироватlт каждую комбинаl\ИЮ, которая описана в документаl\ИИ как интересная или полезная, ЕС;IИ в документаl\ИИ упоминается, что два аспекта ПрOl'раммы хорошо работают вместе, обязатеЛhllO это ПрОВСрhте, . Отчетам об ошибках, выявлеllllЫХ в ходе тестироваllUЯ дOKYMellтa ции, уделяется особое вllимаllие. Руководство IIредставляет собой инструкции компании о том, как ИСllOЛhзовать ПрOl'ра\!мный про дукт, И если тестироншик пишет в отчете, что ПрOl'рамма сбоит при ВШlOлнении инструкций и преД;lOжений, записанных в руководстве, никто не скажет, что эта ошибка "неуловима", В даННО:V1 случае тесты абсолютно просты, Это ТО, что будут делаТh очеНh МНОl'ие ПОЛhзователи, И именно о таких ошибках будет злораднее Bcel'o оБЪЯВЛЯТh профессиона:lhная пресса, Такие ошибки руководителем проекта отложены не будут, Или ИЗlенится ПрОI'рамма, или ИЗlе нится документаl\ИЯ, но ситуаl\ИЯ обязатеЛhllO будет исправлена. Нам не раз ПРИХОДИЛОСh ста:lкиваться с rCM, ЧТО отложенные ошибки пересматриваются и исправляются после TOI'O, как они встреТИЛИСh снова в ходе тестирования документаl\ИИ, Итак, чтобы IIротестировать документаl\ИЮ, нужно сесть с неЙ пе ред КОМПhютером и ВЫПОЛНИТh следующее, . В тОЧllости вЫПОЛllить все действия, описаllllые в руководстве. Каждая указанная в нем клавиша должна бhПh нажата, каждыЙ пример 110ЛНОСТhЮ ВhlllOлнен, Следуя ИНСТРУКl\ИЯМ, 110Лhзователи допускают ошибки, Поэтому работайте "слеl'ка неаккуратно", чтобы посмотреть, как ре3l'ирует на это ПрOl'рамма, Вопрос о плохоЙ обработке ошибок встанет I'ораздо серhезнее, если окажется, что ПрOl'рамма неДОПУСТИ:VIЫМ образо\! ре3l'ирует на обычные допускаемые очеНh МНOI'ИМИ ЛЮДhМИ ошиб ки, особенно КОI'да они пытаются следоваТh руководству, . Следуйте каждому предложеllию, даже если оно сфОР!УJII!ровано ЛИШh в общих чертах, Вед!' и 110Лhзователи 110JlЫЛIютея ему IlOсле довать, . Проверяйте каждое утверждеllие и каждое Ci!O очевид1l0е следствие. ПОСКОЛhКУ руководство н опреде;ICIIНО\! С\!ысле представляет собоЙ окончатеЛhНУЮ версию Сllеl\ИФИЮЩИИ IIpOI'pa\!MhI, ПОЛhзоватеЛh в первую очереДh именно 110 нему будет провеРЯТh, праВИЛhllO ли она работает. 
254 Часть 1/: Ilрие"ltы и технолосии тестирования Привлекая к работе над проектом HOBOI'O тестировщика, преД;lOжите ему для начала протестироваТh доку,\!ентаuию, Это принесет двоЙную ПОЛhЗУ: в доку\!ентаl\ИИ будут отражены нсе текущие IIзменения ПрOl'рам мы, а новыЙ сотрудник сможет с неЙ быстро и обстоятеЛhllO IlOзнаКОМИТh ся, Назначьте техническоrо редактора Лучше Bcero, если один из сотрудников rруппы тестирования будет назначен техничесКIIМ редакторО\! документаl\ИИ, Этот сотрудник \южет ВШlOлнян и ДРУI'УЮ работу, но IлавноЙ ero за;IачеЙ должен БЫТh ана:IИЗ доку\!еlпаuии, даже еС.1И ее прорабатывают и ДРУl'ие тестировшики, Часто бывает, что, хотя над продуктом работают неСКОЛhКО человек, никто из них не несет полноЙ ответственности за el'o качество, В РСЗУЛh тате продукт не ТОЛhКО не ВЫИl'рывает оттою, что el'o проверяет БОЛhшее количество людей, но еше и ПрОИl'рывает, ПОСКОЛhКУ КaЖJIЫЙ IlOдсознатеЛh но перекладывает ответственность на ДРУI'ОI'О и ожидает, что ту или иную часн работы IIШIOЛНЯТ ею коллеl'И (ДеМИlII' (Deming, 1982», Эту проб)Jе му и решает назначение редактора, несушеl'О полную oTBeTcTBeHllOcTh за Ka чество и ТОЧНОСТh технической документаuии, Работа с руководством в процессе ero разработки Хорошее описание КОМllOнеlПОВ руководства IЮЛhзовате:lЯ можно наЙти у МакДжеи (McGehee, 1984), Руконодство разрабатывается поэтапно, Этот проuесс вк,lючает СJlеду ющие основные стадии. . Разработка КОllцепции и базовой структуры. ТехническиЙ писатеЛh определяет масштаб кнИI'И, ее аудиторию, решает, наСКОЛhКО под робно должен бын изложен материа:l и как он будет Орl'анизован, . Подi!отовка. Руководство нишется, ана:lИзируется, нерерабатывается и т,д. Оно находится на стадии IЮДЮТОВКИ до тех нор, нока не будет НОЛНОСТhЮ завершено. . Проuзводство. На это\! этапе нринимаются решения, связанные с нодютовкой кнИI'И К нечати. Подбираются шрифты, нараметры CTpa НИl\Ы, общее оформление 11 Т.Н. . Публикация. В завершение руководство нечатается и неренлетается. Основныс усилия тестировщиков сосредоточиваются на HOДl'oToBKe руководства. Просктирование\! руководства и ею оформление! нри lIOДI'O товке к HC'la 111 '!аНlшаю I'СЯ соответствующие снеuиа:IИСТЫ. То же calOe 
{1ава 10: Тестироваllие докумеll/1/аllИИ 255 ,,;\сается и I1убликаl\ИИ: автор сам I1роверяет, все ли страниuы на месте, нс Р;\Сllечатаны ли ОНИ вверх НОl'ами и Т,I1. Подробнейшее обсуждение I1pOHec С\ разработки и редактирования документаl\ИИ можно найти у таких aBTO ров, как Брокман (Brockmann, 1990), ХастиНl'С и КИНl' (Hastings and King, !986) и Прайс (Price, 1984), В ходе работы над I1роектом наIlравление усилий тестировщика ДOKY чентаl\ИИ меняется, В один I1ериод технический I1исатеЛh более охотно работает над ТОЧНОСТhЮ изложенной информаl\ИИ, в ДРУI'ОЙ  над стилем, в третий  над ОРI'анизаl\ией руководства, В следующих разделах paCCKa IhlВается о значении и уместности различных ТИIlОВ ком\!ентариев тести ровщика в разные I1ериоды разработки доку\!ентаl\ИИ, Однако все сказанное относится к "ТИIlИЧНОМУ" техническому I1исателю, ПОСКОЛhКУ все ;IЮДИ очеНh разные, обязатеЛhНО I1О1'оворите с тем человеком, с которым I1ридется работаТh ва\!, и раССIlросите el'o о el'o личных I1реДIlочтениях, нуждах и I1ланах, Первый черновик С I1ервым черновиком руководства ва\! не часто I1ридется знако\шться, Даже у самых лучших технических I1исаТСJlей I1ервый черновик обычно ВhIl'ЛЯДИТ не слишком I1резентабеЛhНО, и они el'o неохотно I10казывают ДРУI'ИМ, Скорее к нему можно ОТНОСИТhСЯ как к личным заметкам техни чеСКОl'О I1исателя, На I1ервом черновике автор ЭКСIlериментирует, не oco бенно тщатеЛhНО I1рорабатывая ет соJtержание, В нем может бhПh \lНожество ошибок, как синтаксических, так и фактичсских, и наIlисан он \lOжет бhПh явно I1ЛОХО, ВОЗ\lOжна, однако, ситуаl\ИЯ, КOI'да вас TOJlhKO что назначили на I1роект, вы не знаете, как должна работать I1pOl'pa\!\!a, а СIlеuификаuию достать нс удается, В этом случае можно I10IlрОСИТh техничеСКОl'О I1исателя дать вам хоть какуюниБУДh документаl\ИЮ, даже если это I10ка еще ТОЛhКО наброс ки, и, может бhПh, он СОlласится, В этом случае важно I10нимаТh, что это еще не документ, а ю!енно наброски, I1редназначенные ТОЛhКО для личною ИСIlОЛhзования, Если технический I1исатеЛh доверил их вам, то Нl1какая критика в их адрес с вашей стороны неуместна и неДОIlустИ\!а, Однако некоторые комментарии MOI'YT бhПh техническому Ilисатслю llOлезны, Если в тексте содержится явная ошибка, если в;ш кажется, что тсхнический I1исатеЛh I1рОСТО чеl'олибо не I10Нимаст, IIOJtС;IИТССh с ни\! своими знаниями, Однако облеките свои слова в форму обсуждения и cOBMecTHol'O изучения I1родукта, а ОТНЮJth I1С KplIТlfKI1 и;lи ком\!ентариев, И уж во всяком случае неДОIlУСТI1МЫ КОIМСlIтарии относитеЛhНО стиля, структуры или Орl'анизаl\ИИ руковоJtСПI<\, ес;\и ТОЛhКО вас об это,\! явно не 1l0IlрОСИЛИ, И даже в этом C;IY'lae ПОСlараiiтеСI' I'OIЮрИТh как можно таКТИ'I нес, 
256 Часть /1: Прие,lfЫ и теХI/ОЛОCllИ тестироваl/ия Второй черновик На само.\! деле это может быть уже дваднать второй черновик  реЧh идет о нервой версии руководства, которая будет нередана вам для тести рования, Кроме вас, с Heii Iюзнако!ятся НрOl'раммист и руководитеЛh HpO екта, ПОЛhзователи ее не увидят, разве что те из них, которые ОфИl{Иа;lhНО НРИНЮlают участие в тестировании нродукта, На этом этане вам нредс'ro ит следующая работа, . Jlроаllализируйте структуру докумеllта и как можно раНhше co ставьте свои комментарии, Если вам не нравится IIОРЯДОК I'лав, если вы дy!aeTe, что материа;1 неСКОЛhКИХ из них лучше объеДИНИТh в одну I'лаву или, наоборот, разБИТh одну Iлаву на неСКОЛhКО, скажи те об это\! нораНhше, С нред;lOжениями о нерестановке Iлав можно немнOI'О нодождаТh, но слишком затЯ!'иваТh тоже не стоит, Чем далh ше, тем труднее будет автору менять структуру книrи, В некоторых I'РУШlах документирования еще до наIlисания нервой строки руководства нрактикуется сов\!естное обсуждение el'o нлана, В хороший нлан включены названия всех rлав и всех составляющих их разделов, В нем нриведено нриблизитеЛhное количество страНИl\ каЖДОl'О раздела, нричем разделы длиной более 10 страНИl\ обычно разбиты на нодразделы, На такое совещание MOI'YT нриrлаСИТh и нредставителя I'PYHHhJ тестирования  дня вас это лучшая возмож ность внести структурные нреД;lOжения, Если Ba1 кажется, что какойлибо из аСIlектов Hpol'paMMhI очеНh сложен и требует обстоятеЛhНОl'О нояснения, а в нлане ему OTBeдe но явно \lа;1O страНИl\, снросюе I10чему, Внолне возможно, что Tex НИ'IССКИЙ нисатеЛh еше нросто недостаточно нродумал этот ВОIlрОС или \!а;1O с ним знаком, Поясните el'o сложность в деловой и доб рожелатеЛhНОЙ манере, ни в коем случае не ДОIlуская критических или саркастических замечаний, Обоснованный и убедитеЛhНЫЙ pac сказ о сложности одноЙ из фун Кl\ИЙ НРOl'раммы может нринести нроекту и донолнитеЛhНУЮ НОЛhЗУ: выслушав el'o, руководитеЛh HpO екта может реШИТh нересмотреть снеl\иФикаl\ИЮ и реализоваТh He удачную ФУНКUИЮ более нросто и удобно, в лучшем соответствии с общей идеей нроекта, . ВыпОЛllите общий аllализ руководства. Прочитайте руководство, обращая внимание на el'o ТОЧНОСТh, НОНЯТНОСТh, нолеЗНОСТh и нол ноту, Не стесняйтеСh заНИСhlВаТh такие, нанример, комментарии: "Чтобы НОНЯТh этот раздел, мне НРИШJIOСh трижды el'o нрочеСТh", Даже если вы не можете оБЪЯСНИТh, в чем СЛОЖНОСТh, все равно техническо,\!у нисателю важно знаТh, что вниматеЛhНЫЙ читатеЛh иснhl1ыалл затруднения IIрИ нрочтении даННОl'О раздела, 
[лава 10: Тестироваlfие докумеlfтации 257 . Подумайте, какие еще вопросы требуют отдеЛЫIOi!О освещеllия. Возможно, в руководстве не ОIlисаны некоторые важные фУНКl{ИИ или особенности I1родукта, Технический I1исатеЛh может о них I1pO сто не знаТh, особенно если они TO;lhKO что I10ЯВИJlИСh, . Проаllализируйте руководство Ilа соответствие КОllцепции пpoдYK та. Технический I1исатеЛh может не I10НЯТh I1рОСТЫХ КОНl{ептуа:lh ных связей между фУНКl{ИЯ\ll1 I1родукта и ОIlисать каждую из них независимо, При этом MOI'YT бhПh I10теряны важные и тщатеЛhllO I1родуманные Идеи, за:lOженные в I1pOl'pa\IMY разработчиками, ОчеНh важно, чтобы I10ЛhзоватеЛh, читающий руководство, eMol' увидеТh 11 роду кт в el'o КОНl\еlпуа:lhНОЙ l{елостности, В руководстве может I1росматриваТhСЯ неестественность некоторых оrpаничений I1porpaMMhI, В этом случае сообщите об этом разработ чикам  вnОЛIIe возм , О)/С//О что они I1ересмотрят IlpoeKT и УIlрОСТЯТ интерфейс, Стратеl'ИИ, I1peA;laJ'aeMhIe руководством для решения некоторых за дач, MOIYT бhПh неэффективными, Это не значит, что они вообще не работают, но ОIlЫТНЫЙ и хорошо знающий I1РОДУКI' IlOльзоватеЛh выбра:1 бы лучший СIlособ их решения, Технический I1исатс.;ll, МOI' нс до конна I10нимаТh I1РОДУКТ, а возможно, лучшее решение I1рОСТО не I1рИШЛО ему в юлову, Такие фрaJ'менты руководства с неэффскпfВ ными ИНСТРУКUИЯМИ лучше I1ереIlисать как можно раНhше, даже если они достаточно велики, Техничсский I1исатеЛh должен I10нимаТh важность I10добных изменений, . Поищите llетО'lllости. Некоторые I1римеры или ОIlисания MOlyr бhlТh вполне верными, но наIlисанными так, что читатеЛh может неверно их истолковаТh или необоснованно обобщить, Он может I1реДIlОЛОЖИТЬ, что функuии ИЛИ возможности I1рOl'раммы шире, чем это есть на самом деле, или раСIlростраНИТh на всю I1pOl'paMMY He которое утверждение, касающееся ТОЛhКО очеНh конкретной ситуа ЦИИ, Возможно и обратное, КOI'да читатеЛh решит, что в I1РOl'рамме имеются OI'раничения, которых на самом деле нет, ВЫЯВИТh Ilодобные неточности лучше как IOЖНО раНhше, I10СКОЛh ку ОНИ MOI'YT означаТh, что технический I1исатеЛh и сам неверно I10нимает IlрОДУКТ, и делает необоснованные обобщения, Лучше I10НЯВ Ilporpa\IMY, технический I1исатеЛh \южет внести в руководство значитеЛhные изменения, . Проверьте сообщеllUЯ об ошибках. Скоре Bcel'o, технический Illfl';1 теЛh включил в I1риложение СIlИСОК сообщений об ошибках с 1111'1' " 
258 Часть 11: Приемы и теХI/ОЛОCUИ тестироваlfИЯ нениями ТО1'О, I10чему читатеЛh I10ЛУЧИЛ такое сообщение и что ему теIlерь делаТh, Если у вас есть собственный СIlИСОК ситуаl\ИЙ, в KO торых вы I10луча;1И каЖдое сообщение об ошибке, он может оказать техническому I1исателю неОl\енимую llOМОЩh, ТехническиЙ I1исатеЛh будет основывать свои I10яснения и инструкuии на той информаl\ИИ, которую I1редоставите ему вы, руководитеЛh I1роекта и сотрудники rpYIlIIhI технической I10ддержки, Для I10следних исключитеЛhНО важ но, чтобы эти объяснения бwlИ как можно более исчеРIlывающими, чтобы llOЛhзователи llOмеНhше донима;1И их звонками, Поэтому обя затеЛhНО I1ротестируйте КaЖJ\ое сообщение и соответствующие инст РУКl\ИИ  вы наверняка найдете здеСh нриличное количество ошибок, Если в ходе тестирования выяснится чтониБУДh I10лезное, наIlример, ДОIlолнитеЛhное значение сообщения, новые ситуаl\ИИ, в которых оно I10Я, вляется или новая информаuия о том, как lIOЛhЗО вателю избеl'ать I10добных ситуаl\ИЙ или ИСIlравлять их llOследствия, то обязатеЛhНО сообщите об этом техническому I1исателю, чтобы он ДОllOЛНИЛ руководство, . Поищите фраi!Меllты руководства, отражающие lIеудаЧIlУЮ KOllcт рукцию npOi!paммbl. Если технический I1исатеЛh не CMOI' достаточно I1рОСТО и I10НЯТНО ОIlисать какойлибо аСIlект работы I1porpaMMhI, не СIlишите el'o ОСУЖilаТh, Возможно, все дело в самой I1рО1'рамме, НаIlример, в неЙ может быть неудачный набор ОIЩИЙ, сбивающих llOЛhзователя с толку и I1ротиворечащих ДРУI' друry, Трудно ожидать, что их ОIlисание будет I10НЯТНЫМ, В этом случае I1роблема aдpecyeT ся не техническому I1исателю, а руководителю I1роекта  о ней He обходимо состаВИТh отчет как об ошибке I1роектирования, Если же дело все же в руководстве и вы можете I1ред;IOЖИТЬ I1ростое и чет кое ОIlисание I'PYIlIIhI OlЩИЙ или возможностей, сделайте это, OДHa ко не стоит тратить часы на переIlисывание разделов руководства  это работа техничеСКОl'О I1исателя, своЙ же вариант стоит I1редло ЖИТh тота, кота он кажется вам очеНh удачным и это не занимает у вас слишком мною времени, Встретив lIеnоследователЫlOе оБЬЯСllеllие, проще всеi!О обвиllить автора докумеllтации. Но nОМllите, что автор может просто аккуратllО описать lIеудаЧIlУЮ фУlIкцию npOi!paммbl. Поэтому лучше lIачать с nредnоложеllUЯ, что теХllический писатель комnетеllтеll и плохой текст указывает lIа lIедостатки самой npOi!paмMbl. 
{1ава 10: Тестироваllие доку,ltellтаЦIIИ 259 Пересмотренные версии руководства с новыми версиями руководства следует 1I0работаТh так же, как If с Ilервой,  с акцентом на el'o точности и эффективности, ПОСКОЛhКУ вы 6удете узнаваТh об изменениях в IIporpaMMe задолl'O до техничеСКОl'О lIиса [еля, сообщайте ему об этом в своих комментариях, Пересмотренных версий руководства может бhПh достаточно MHOI'O, В одной из них автор наведет красоту, 1I0Дllравит СТИЛh и внесет 1I0следние Орl'анизаuионные изменения, Вам же не стоит обращать внимание на по ;юбные вещи  I'ораздо важнее СКОНl\ентрироваТhСЯ на точности PYKOBOД ства и el'o соответствии КОНl{еIЩИИ IIродукта, Придет вре!я, и технический IlисатеЛh сам ИСllравит все неаккуратности, неловкие фразы и Т,II, Бетаверсия руководства Это будет 1I0следняя версия руководства, которую вы увидите, (Точнее, вы IIрочтете ее еще раз llOсле внесения 1I0следних ИЗlенений, IIреДJJожен IIЫХ 1I0сле бетатестирования,) В тех КОМllаниях, которые не Орl'анизуют 6етатестирования, 1I0следней тестировщикам 1I0СТУllает версия PYKOBOД ства, наllисанная 1I0сле заllрещения да:lhнейших изменений 1I0ЛhзоватеЛh CKOI'O интерфейса, Бетатестировщики не работают в вашей КОМllании, Они, скорее, IЮЛhзователи, ЭКСllлуатирующие IIрОДУКТ так, как будто КУIIИЛИ el'o OKOH 'lатеЛhНЫЙ ВЫllУСК, В их отчетах отражаются трудности, с которыми они СI'OЛКlIУЛИСh В IIронессе ЭКСllлуатаl\ИИ, IIред;южения 110 улучшению IIPOДYK 1<\ и конечно же найденные ошибки, Эти отчеты обязатеЛhНО следует IIpO ,Iна:lИзироваТh самым тщатеЛhНhlМ образом, чтобhl внести изменения как в IIрOl'рамму, так и в документаl\ИЮ, ДО ЭТОI'О момента и вы; и IIрOl'раммисты, и технические lIисатели, и сотрудники rpYllllhl маркеТИНl'а ТОЛhКО предполасали, как 1I0Лhзователи OT рею'ируют на IIрОДУКТ и как они el'o 1I0ЙМУТ, Некоторые из этих IIреДIIОЛО ..кений окажутся невеРНhlМИ, ОтдеЛhНhlе аСllекты IIрOl'раммы, казавшисся разработчикам такими естествеННhlМИ и 1I0НЯТНhlМИ, 1l0ЛhзоваlС;1I\ не 1I0Й \IУТ или не IIрИМУТ, ЗначитеЛhная часть изменениЙ вносится в руководство Ifменно 1I0сле бетатестирования, кота становится If'Шt:СТl10, '1 [о же на самом деле окаЗaJlОСh неllОНЯТНhlМ 1I0ЛhзоватешIМ, ПОЛhзователи часто жалуются, что ДОКУ\lеlпаНШI 1It: НВ;lяется задачно ориентированной, (Сор (Sohr, 1983); ШнеЙJ\Cрмаll (Sсlшеidсrmап, 1987),) В JaдаЧI/Оорие/lтироваl/l/ОМ руководстве lIере'IIIС;lяе ICH набор задач, которые \\Ожно ВhlIlОЛНИТh с llOМОЩhЮ IIрOl'раММIIОI'O IIродукта, и расскаЗhlвается, как это сделаТh, Все функuии IIpOI'paM\lhI ОIlИСhlваются с точки зрения их "рименения для конкретных IIракти'[(?ских l\елеЙ, В ПРОТИВОIIОЛОЖНОСТh 
260 Часть /1: Прие,ltы и теХIfОЛОсИИ тестироваlfИЯ этому в фУI/КЦИОI/GЛЫIOориеl/тироваl/l/ОМ руководстве ФУНКl\ИИ IIporpaIMhI ОllисЬ!ваются са\1И 110 себе, нередко IIрОСТО в алфавитном lIорядке, Каждый аСllект IIродукта ОllисЬ!вается в отдеЛhНО1 разделе и как можно более IIОЛ но, Брокман (Brockmann, 1990) IIОЛaJ'ает, что, хотя задачноориентирован нос руководство I'ОРаздо Л;lиннее, оно и значитеЛhНО эффективнее, Если IIрОДУКТ наСТОЛhКО МНОЮФУНКl\ионален, что с el'o ПОМОЩhЮ можно ВЬШОЛНЯТh тысячи различных заданий, lIисаТh задачноориентированное руководство нет никакою смысла  автор ею IIрОСТО НИКОI'Да не закончит, Одно это еще не означает, что руководство 110 такому IIрОДУКТУ должно бhlТh llOЛНОСТhЮ Функuиона;lhноориентироваННЫI, На IIрактике чаще Bce 1'0 IIРИНJI\fается КОМllромиссное решение, КOIда в руководство, базирующе еся на Оllисании ФУНКl\ИЙ IIродукта, ВК;Iючаются инструкuии 110 решению ряда наиболее важных или IIОIlУЛЯрНЫХ задач, ПознаКОМИВШИСh с отзыва \111 бетатестировщикон, технический lIисатеЛh может добавить в PYKOBOД crBo ДОllOлнитеЛhные IIримеры и иллюстраl\ИИ, IIредметные указатели или измеНИТh el'o Орl'анизаl\ИЮ, ПОЛhзователи высказывают в алрес документаl\ИИ и мною ДРУI'ИХ заме чаниЙ, Однако тестировщику важно сохраНЯТh IIраВИЛЫIУЮ IIОЗИl\ИЮ в OT ношении этоЙ критики, IIОНИ\lая, что настоящая IIричина Ilроблем может быТ!, вовсе не в руководстве, а в неудачном интерфеЙсе или Функuиона;lh НОЙ структуре самOI'О продукта, ПРОИЗВОДСТВО ТлавllОЙ целью тестировщика докумеllтации в процессе ее производства является тОЧllость иllформации. в I'РУШlе тестиронания обязателыlO имеется сотрудник, отвечающиЙ за литературное редактирование и верстку документаl\ИИ, Разумеется, если вы заметите ОРфOl'рафическую ошибку или сдвинутыЙ заI'ОЛОВОК, вас ТОЛhКО lIобл, aJ'одарят но, вообще, это не ваша работа, Если продукт должеll быть выпущеll сразу по завершеllии разработки и тестироваllUЯ пpOi!paммIlOi!O обеспечеllUЯ, производство докумеllтации lIеобходuмо lIачать как МШlUмум за 8 (а лучше за 14) lIедель до ОКОllчаllUЯ работ. в l'е'lение всех этих недеЛh IIpOl'paMMa будет измеНЯТhСЯ, Изза ЭТОI'О некоторыс ра це:IЫ руководства IIридется уда;IЯТh или переllисываТh, Kpo ме TOI'O, lIе>,:оlорые ошибки, которые IIреДllолаl'3..10СЬ ИСllраВИТh, MOlyr 
[лава 10: Тестироваllие дОКУ-l1еllтаЦIlIl 261 остаТhСЯ неИСIlравленными, и это тоже IIовлечет за собой IIеределку СООТ- нетствующих фрaJ'ментов руководства, Важно IIонимаТh, что все желаемые изменения внесены бhПh не IOI'YT, Часто автор будет OI'раничиваться ЛИШh минима;lhНЫМИ IIравками  ТОЛh ко чтобы сохраНИТh достоверность информаl\ИИ, но не БОЛhше, Если хотите, чтобы в документаl\ИЮ были внесены ДОIlолнитеЛhные изменения, можете IIОМОЧh техническому IIисателю сокраТИТh их СТОИМОСТh, самостоятеЛhllO IIродумав текст соответствующеl'О фРaJ'мента, С Toro момента, как руководство IIОСТУIlает в IIРОИЗВОДСТВО, это уже не IIрОСТО Орl'анизованный набор слов, ТеIlерь это набор страНИl\, каждая из которых представляет собоЙ отделшыЙ объект, с собственным оформлени ем, содержанием, возюжно, иллюстраl\ИЯМИ, На этом этаIlе изменения текста обходятся очеНh ДОрOl'О, и едва ли автор СОlласится на корректиров КВ, затраl'ивающие более одноЙ странИlЩ, С ДРУI'ОЙ стороны, ИЗlенения, затраl'ивающие ТОЛhКО одну строку или абзаl\, пока еще внести несложно, Поэтому, если изменения совершенно необходимы. IIродумаЙте, как свести их к минимуму и IIодобраТh такие формулировки, которые не изменят размера корректируемоЙ строки или абзаl\а, Форма;lhНО IIродумывание формулировок не входит в ваши обязанно сти, Ваше дело  IIередать техническому IIисателю заIlИСКУ с ОIlисанием IIроблемы, и он сам должен реШИТh, вносить л и изменен ия в текущи Й BЫ IIУСК руководства, и если да, то какие именно, РуководитеЛh может даже IIОl1рОСИТh вас Оl'раНИЧИТhСЯ этими своими обязанностями и не траТИТh ;JИшнеl'О времени, Но IIОСКОЛhКУ жизненные ситуаl\ИИ не укладываются в форма;lhные рамки, в отдеЛhНЫХ случаях вы ВIIолне можете IIоучаствоваТh в IIродумывании необходимых изменениЙ, особенно если они очеНh важ ны и не займут у вас слишком MHOI'O времени, Еще одним важным объектом вашеl'О внимания будет IIредметныЙ yкa затеЛh кнИl'И, И начаТh с ним работаТh лучше как можно раНhше, Читая руководство, обращаЙте внимание на ОIlисываемые в нем К:lючевыс 1101Н1 тия и IIроверяЙте, включены ли они в указатеЛh, Если нет, сообщайте об этом техническому IIисателю, Завершающая IIроверка указателя ВhlIlOлняется llOсле 'щ!\срll!еlН1И рабо ты над текстом кнИI'И и IIодrотовки ее к IIе'!а 1'11, Эта работа 110ручается либо тестировщику, либо одному из pe;taKTopOII, BIIO;llle может оказаТhСЯ, что в окончатеЛhllOЙ версии I1pe:l\!eTHOIO УК<lНIСj!Н отсутствуют ссылки на какуюлибо одну Iлаву или они ОСIЮIIЫII<\!ОIСН на се IIреДhIдущеЙ версии, Поэтому как минимум неоБХО)!If\1O Ilровt:рип, 110 две заIlИСИ указателя на каждые ПЯТh страНИl\ КНИПI, (Это 311<1'1111, '!то можно IIроверИТh два элемен 
262 Часть 11: Приемы и технолосии тестирования та индекса со ссылками на страНИl\Ы '5, два со ссылками на страНИl\Ы 5 10 и т,д,) Постпроизводственная стадия в некоторых КОМllаниях руководство не lIечата,ется до тех IIОр, Iюка не будет завершена работа над IlpOl'paMMHhIM обеСllечением, В таких случаях IЮСПlроизводственная стадия тестирования IIрОСТО отсутствует, (У техни ческих llисателеЙ еше остается коекакая работа, наlIример, они вычиты вают Ilервый раСlIечатанный экзеМIIЛЯР кнИI'И, но тестировшики этим не занимаются,) Если КОМllания ОТlIравляет руководство в IIечаТh еше до завершения работы над IlpOl'paMMHhIM обеСllечением, в обязанности техническою IIИ сателя может ВХОДИТh составление и еше двух документов, ПервыЙ из них, Ilечапюе прUЛОЖeJ/ие, состоит из IЮllравок, советов 110 разрешению Ilроблем и ОlIисаний ДОllOлнитеЛhНЫХ функuиЙ IIродукта, Этот документ ОТlIравля ется в IIечаТh за неСКОЛhКО дней до TOI'O, как начнется размножение дисков, Информаl\ИЯ, которая IЮЯВИТСЯ в течение этих неСКОЛhКИХ днеЙ, в нею не 1I0lIадет и будет 1I0мешена IlрЯМО на дистрибутивныЙ диск в виде фаЙла README. Кроме Ilроверки точности информаl\ИИ IIриложения и RЕАDМЕфаЙ ла, вашеЙ работоЙ на этоЙ стадии будет 1I0дбор советов 110 решению IlpO блем, ПотеlllЩХlhНЫМ кандидатом Л;IЯ ЭТОI'О является любая отложенная ошибка, Если ее можно ОIIисаТh в IЮЗИТИВlЮМ тоне и lюсоветоваТh IЮЛhЗО вателю чтониБУДh IlOлеЗllOе, следует ВКЛЮЧИТh это ОlIисание в раздел раз решения Ilроблем, Интерактивная справка БОЛhшая чаСТh TOI'O, что расскаЗЫВХIOСh в этой I'лаве о руководстве IIOЛhзователя, IIрименимо и к интерактивноЙ СlIравке, Сказанное можно ДОIЮЛНИТh ЛИШh неСКОЛhКИМИ замечаниями, . ТО'lllость, ТОЧНОСТh и достоверносн интерактивноЙ Сllравки необ ходимо IlроверИТh так же тщатеЛhllO, как и ТОЧНОСТh руководства, Как IIравило, текст Сllравочных фаЙлов не блещет литературными достоинствами, не слишком хорошо Ilродуман и IIротестирован и не особенно уважается IЮЛhзователями, . Библиосрафия, Автором лучшеЙ кнИI'И, которую нам IIРИХОДИЛОСh читан об интерактивной Сllравке, является Хортон (Horton, 1990), . Типертекстовые связи, Если в интерактивноЙ СlIравке имеются I'И llерССЫJlКИ, все их необходимо IIроверИТh, Может оказаТhСЯ, что одна 
[лава 10: Тестирование (}ОКУ,llеllтаЩIII 263 и та же ссылка в неСКОЛhКИХ местах снравки указывает на разные страницы или же нросто содержимое страницы, на которую указы вает ссылка, не соответствует се названию, . Указатель, Если в интерактивноЙ снравке имеются содержание и указатеЛh, их тоже необходимо нроверит\', Каждая строчка указате ля должна открывать нраВИЛhНУЮ страницу снравки, . Еще об указателе, Кроме элементарноЙ нраВИЛhНОСТИ указателя, важно нроверит\' и el'o содержание, Имеются ли в нем ссылки на каждую страницу снравки? Не нронущены ли важные llOНЯТИЯ или вон росы? Удачно ли нодобраны названия элементов указателя? Если llOЛhзоватеЛh не сможет наЙти нужную информацию, едва ли он захочет в ДaJlhнейшем llOЛhЗоваТhСЯ такой снравкой, . Стиль, Мало кто из llOЛhзователеЙ носледоватеЛhНО читает всю снравку от начала до конца, Как нравило, к неЙ обращаются за ответом на конкретный вонрос, за инструкциями но решению HeKO тороЙ задачи или информациеЙ о нолученном сообщении об ошиб ке, В такоЙ ситуации читатеЛh снравки обычно нетернелив или даже нервничает или раздражен, Поэтому от снравки требуется БОЛhшая чеТКОСТh и простота изложения, чем от нечапlOЮ руководства, (Же латеЛhНО, чтобы уровень читабеЛhНОСТИ текста был около 5,) Кроме TOI'O, хорошая снравка должна бh!Тh задачноориеНТИРОl3анноЙ, llOЛhЗоватеЛh ожидает найти в ней нечто нолезное, что он сразу же сможет Вh!IIOЛНИТh, Встретив занутанныЙ или сложныЙ текст, сооб щите о нем как о нроблеме, 
Fлава 11 ИнструменталЬНЬlе средства тестuровщuка Назначение этой rлавы Теперь ч"тателю предсто"т познаком"ться с проrраммным" средствам", автомат"з"рующ"м" процедуру тест"рован"я "черноrо ящ"ка", узнать, чем он" MorYT быть полезны" каковы пределы "х возможностей, РечЬ пойдет не о конкретных проrраммах, а о классах подобных средств, Библиоrрафия в ПО"ске подходящ"х проrраммных средств MorYT помочь два "звестных каталоrа: Теstiпg Tools Rеfеrепсе Guide: А catalog of Software Quality Support Tools, публ"куемый Software Quality Епgiпееriпg (8004238378, 30002 Hartley Road, Jасksопvillе, FL 32257) " Programmer' s Shop (800421  8006, 90 Iпdustriаl Park Road, Нiпghаm, МА 02043), Немало полезной "нформац"" можно почерпнуть "з KH"r так"х авторов, как rласс (Glass, 1992), Бейзер (Beizer, 1990), Андр"оле (Апdriоlе, 1986), Данн (Duпп, 1984) " Де М"лло (DeMillo, 1981), Обзорные стать" " опи сания конкретных проrраммных средств печатаются во мноrих журналах, К НИм нередко прилаrаются СО с описываемыми проrраммами и их последними версиями, Обзор в этой rлаве обсуждаются следующ"е вопросы: . Базовые инструменты тестировщика, . Автоматизация приемочноrо и реrрессионноrо тестирования, . Технопоrии и инструменты тестирования соответствия стандартам, . Средства для тестирования "стеклянноrо ящика", 
[лава 11: ИнстРУl1ентальные средства тестировU(ика 265 Базовые инструменты тестировщика Вот каковы основные инструменты тестировшика: . персоllалыlйй компьютер, термиllал или рабочая стаllЦИЯ. НИКОI' да не IIренебреl'аЙте 1I0\IOШhЮ КОМllhютера  обрашаЙтеСh к нему каждый раз, КOI'да в этом возникает 1I0требност\', ЗllачителыlO повышает производителыlстьь одllовремеllllая работа с двумя компьютерами, Ilа одllОМ из которых запущеllа тестируемая просрамма, а дРУi!ОЙ служит для ресистрации проблем и корректировки nлаllа тестироваllИЯ . . Хороший текстовый процессор. Вам необходима IIpol'paMMa, 1I0ЗВО ляюшая ВВОДИт\' и редактироваТh руководства, IIланы тестирования, отчеты, заllИСИ и IIИСhма, ПОЛhзоваТhСЯ ею вы будете так активно, что стоит 1I0траТИТh вре!я на выбор caMol'o ОIlТИМaJlhНОl'О IIродукта, . Процессор nлаllов. Эта IIpol'paMMa СllеUИaJlhНО IIредназначена для составления и реОрl'анизаuии иерархических структур, и она I'ораз до лучше Сllравляется с этоЙ работоЙ, чем обычныЙ текстовый IIpO цессор, С ее 1I0IОШhЮ удобно состаВЛЯТh IIланы тестирования, СIIИСКИ функциЙ, 1I0дробные отчеты о состоянии и СIIИСКИ задач, Мы IIреДIIочитаем llOЛhзоваТhСЯ именно отдеЛhНЫМИ IIроuессорами IIланов, а не их Оl'раниченными версиями, включаемыми в TeKCTO вые IIроиессоры, Выбирая такоЙ IIрОДУКТ, IIрежде Bcel'o обратите внимание на функuии I'РУI\IlИрОВКИ, сортировки И реОРl'анизации информации, . ЭлектРОllllая таблица. Эта IIpol'paMMa незаменима для работы с тестовыми таблиuами, . Утилиты сравllеllИЯ файлов. Подобных IIpol'paMM достаточно MHO 1'0: они сравнивают lIару фаЙлов, сообшают, наЙдены ли различия, и если да, 1I0казывают их СIIИСОК, Лучшие из них I'енерируют lIepe чеНh изменений, которые необходимо внести IJ ОДИII И3 файлов, чтобы 1I0ЛУЧИТ\, ДРУI'ОЙ, Простейшие утилиты сравнения фаЙлов нсредко lIоставляются в комплекте Оllерационных систем, ОДllако eCJII! ва\! встретится IIpO l'paMMa, более 1I0дходяшая для решении 1!,\feHIIO ваших задач, стоит на нее 1I0тратиТ\,ся, Утилиты \!OI'YT IlредназначаТhСЯ для разных целеЙ: сравнения ДВОИЧНЫХ файлов (объеКТНОI'О кода, I'рафики, сжатых данных и Т,II,) и сравнения текста, От их назначения зави сит то, в каком виде будут IIредставлены реЗУЛhтаты сравнения, 
266 Часть 1/: ПриеJlfЫ и технолосии тестирования . Просмотровики файлов. Такие IIpOl'paMMh! llOЗВОЛЯЮТ IIросматриваТh данные, храняшиеся в фаЙлах самых разнообразных форматов, . КОllвертеры файлов. Эти утилиты IIреобразовывают фаЙлы данных (текстовые, I'рафические и Т,II,) из одною формата в ДРУI'ОЙ, НаllрИ мер, текст может БЫТh IIреобразован из фор\!ата ОДНОI'О TeKcToBol'O IIроиессора в формат APYI'OI'O, . Утилиты для создшlUЯ копий экраllа. Эти утилиты llOЗВОЛЯЮТ coxpa нить содержимое экрана или текушеl'О окна в фаЙле на диске, Воз можно, вам 1I0надобится даже неСКОЛhКО таких IIpOl'paMM, llOСКОЛhКУ некоторые из них несовместимы с отдеЛhНЫМИ ТИllами IIporpaMMHo 1'0 обеСllечения, КОIIИИ экрана llOлезны как для аНализа ошибок и 1I0иска их источника, так и для TOI'O, чтобы 1I0казаТh ошибку IIpO I'раммисту, Нередко IIроше IIредостаВИТh ему КОIIИЮ экрана, чем ОIlИСhшаТh el'o содержимое на словах, . Утилиты для поиска текста. С 1I0ЮШhЮ такоЙ утилиты \!ожно наЙти в объектном коде IIpol'paMMh! текстовые строки, ПростеЙшие из них IIрОСТО IIрочесывают IIрОl'раммныЙ фаЙл и заllисывают в OT деЛhНОМ текстовом фаЙле все содержашиеся в нем строки ASCII, В реЗУЛhтате 1I0лучается СIIИСОК Bcel'o встроенною в IIpol'paMMY текста и сообшениЙ об ошибках, Возможно, IIpOI-раммист или руководитеЛh IIроекта будет убеждап, вас, что не стоит тратить времени на 1I0доб ную работу, 1I0СКОЛhКУ весь текст хранится в фаЙлах ресурсов, Oд нако это утверждение не мешает IIроверИТh, 1I0СКОЛhКУ IIpOI-раммист может все же встаВИТh в IIpOl'paMMY парочку коротких сообшениЙ, особенно о критических ошибках, . Устройства видеозаписи (VCR). Весь вывод на экран можно заllИ сать на видеОllленку, Для ЭТОI'О нужен обычныЙ видеОМaJ'НИТОфОН и СllеЦИaJlhная видеОllлата с соответствуюшим выходом, (ИмеЙте в виду, что IIлаты NTSC не сохраняют на ленте весь экран VGA) Для тестирования неустоЙчивых IIpol'paMM с трудноуловимыми ошибка ми заllисываюшие устроЙства IIрОСТО незаменимы, Они невероятно облеРlают 1I0ИСК и воспроизведение ошибок, а если ошибку невоз можно ВОСllроизвести, видеозаllИСh 1I0дтверждает, что она все же IIроизошла, и сохраняет точную ХрОНОЛОl'ИЮ событиЙ, Обычно это 1'0 достаточно, чтобы IIрОl'раммист MOI' IIроаНaJIИзироваТh ситуацию и выявить IIрИЧИНу сбоя, Однако, несмотря на всю llOлеЗНОСТh этою инструмента, el'o IIриме нения может стать для тестировшика сушим бедствием, В BOcTopl'e от таких возможностеЙ, руководитеЛh IIроекта может требоваТh, что бы видеозаllИСh IIрИЛaJ'aJlаСh к каждоЙ выявленной ошибке, а это уже серьсзно затормозит вашу работу, Поэтому придерживаЙтеСh золотоЙ 
[лава 11: ИнстРУl1ентальные средства тестировщика 267 середин\'!, I1рименяя это, без сомнения, эффективное средство TOJlh ко там, Iде оно деЙствитеЛhНО необходимо, . Диаi!llости.,еские просраммы. Сушествует ряд утилит, анаJIИЗИРУЮ ших аIlIlаратное и I1pOI'paMMHoe обеСIlечение систем\'!, Они I10MOryT вам ВhIЯСНИТЬ, какие в ваше\! раСIlоряжении имеются устройства, все ли с I1ими В порядке и как они работают, В частности, с их lIOМО ШhЮ можно найти и ИСКЛЮЧИТh из ИСIlОЛhзования I10врежденн\,!е участки жеСТКОl'О диска или ОIlредеЛИТh, работает ли видеОIlлата в режиме, I10зволяюшем осушеСТВЛЯТh видеозаIlИСh работ\'!, Можно также сохранять информацию о состоянии ОIlеративноЙ I1амяти в момент сбоя  в ОIlределенн\,!х случаях эта информаuия может б\'!ть очеНh I10лезна I1роrpаммисту, Он скажет вам, какой утилитоЙ лучше Bcel'o для этою ВОСIlОЛhзоваТhСЯ, и I1редоставит ее в случае необхо димоСти, . Таймер. ИНОl'да необходимо ОIlредеЛИТh длитеЛhНОСТh какоЙлибо ОIlерации, возможно в десят\'!х или СОТ\'!Х секунд\'!, ДЛЯ ЭТОI'О I1pe красно I10доЙдет I1рOl'раIМН\'!Й таЙмер, ОтдеЛhн\'!е устроЙства вроде наручн\'!х часов менее удобн\'!, и с ИХ I10МОШhЮ неЛhЗЯ работаТh с очеНh МaJlеНhКИМИ временн\'!ми интеРВaJШМИ, Чаше Bcel'o измерения времени необходим\'! I1рИ тестировании таЙмаутов, условиЙ I-OHOK, а также задержек реакции систем\,! на действия llOЛhЗоватеJlЯ и B\'! I10лнения относитеЛhНО длитеЛhНОЙ обработки данн\'!х, . Система отслеживаllUЯ проблем. Это наСТОЛhКО важная тема, что она оБСУЖДaJlаСh в отдеЛhllOЙ Iлаве, . Просраммист. Если вам не удается ВОСIlроизвести ошибку, в\,! не знаете, каков\,! I'раничн\'!е условия I1роиесса или не I10нимаете, как тестировать какуюлибо функцию ПрОI'рамм\'!, обрашаЙтеСh к I1pO l'рам,\IИСТу, Ложная I'ОрДОСТЬ в ЭТОМ ВОIlросе совершенно неуместна, в\,! не можете всета и на все знаТh точные oTBeThl, Однако всета критически аНaJIИзируйте слова I1рОI'раммиста, llOСКОЛhКУ сознатель но или ненамеренно он может ввести вас в заблуждение, ВIIрочем, это краЙний случаЙ, В основном же I1рOl'раммист может СЭКОНОМИТh вам час\,! и дни работ\'!, либо сразу ОIlределив источник I1роблем\'!, либо наIlисав СIlециаЛhН\,!Й диаl'Ностический код, либо I1рОСТО разъяснив некотор\'!е особенности I1pOI'paMM\'! и I10советовав, как или какими средствами ее ,\lOжно эффективнее I1ротестировать, Автоматизация приемочноrо и реrрессионноrо тестирования Как I1равило, каждая новая версия I1pOl'paMM\'!, I10лучаемая тесп!rОI\IIlII ками, I1РОХОДИТ стандартное I1риемочное тестирование, EI'O цет, ус", 11111. 
268 Часть 11: Прие.\IЫ и теХ/lОЛОсИИ тестирова/lИЯ ся, что в Hpol'paMMe не llOЯВИЛОСh серhезных нроблем и все ее базовые функuии уснешно работают. ОБЫ'IНО на такое тестирование уходит не более ОДIIOI'О дня, В соответствуюшиЙ набор тестов включаются ТОЛhКО базовые и быстровынолнимые нримеры, нроверка всех возюжных I'ранич ных условиЙ сюда не входит, В некоторых коллективах нрактикуется pac нространение набора нриемочных тестов не ТОЛhКО среди тестировшиков, но и среди OCT<L1hHOI'O заинтересоваННОl'О нерсонала, В частности, нри необходимости руководитеЛh нроекта может лично убеДИТhСЯ, что состоя ние очередноЙ версии HpOl'paMMhI удовлетворяет базовым нриемочным Tpe бованиям, . В некоторых комнаниях Hpol'paMMa, не нрошедшая нриеМОЧНОl'О тестирования, вообше не нринимается теСТИРОВlIlиками и возвраша ется обратно НРОl'раммистам на доработку, Особенно часто так бывает на более l103ДНИХ стадиях разработки, КОlда Hpol'paMMa уже не раз нроходила нриемочное тестирование, и ВДРУI' очередная Bep сия el'o не нрошла, Обычно это означает, что в нронессе корректи ровки ИСХОДНОI'О кода или el'o КО\!IIИЛЯUИИ НРОl'раммистами была донушена I'рубая ошибка, которая, однако, леl'КО может бh!Тh ис нраВ:lена, . Сушествует и иная нрактика, кота нриемочное тестирование нри меняется для выявления ca\lhIx очевидных ошибок очередноЙ Bep сии Hpol'paMMhI, После вынолнения этих тестов стаНОВИТhСЯ очевидно, на какие части Hpol'paMMh\ следует обраТИТh особое вни мание, а какие, наоборот, остаВИТh нока в нокое, если I'РУШlа Tec тирования еше не ютова взяться за них со всей серhезностью, . Приеючное тестирование  нроцедура ДОВОЛhНО УТОlитеЛhная и скучная и к тому же занимает мною времени, Поэтому независимо от тою, наСКОЛhКО велика разрабатываемая HpOl'paMMa, для нею Ha значается относитеЛhНО неБОЛhшое количество тестов, В нротивном случае оно слишком ДОрОl'О обходится, Реl'рессионное тестирование ВШIолняется носле КaЖJI0l'О изменения Hpol'paMMhI, Если HpOl'paMMa нрошла онределенную I'РУШlУ тестов в HpO UL%!Й раз, то, скорее всею, нроЙдет и в этот, Однако нровести их все равно нридется  это неО1Ъеl\шемая чаСТh обшеl'О нроиесса тестирования, Итак, и нриемочные, и реl'рессионные наборы тестов ВШlOлняются !IO MIIOI'y раз  они так и нросятся, чтобы их автоматизировали, Это внолне НОЗ,\1ОЖIIO, Задача состоит в том, чтобы оБЪЯСНИТh КОМНhютеру, как Вh!IlOЛНИТh тест, собrатr, rеЗУЛhтать!, сравнить их с заранее известными нраВИЛhНЫМИ pe ЗУJlhтата\fIt и сооб!ILИТh вам, чем все КОНЧИЛОСh, В этоЙ lJ\aBe I'лавным образом раСС!атриваетси 1\IIТОмаПlЗаuия pel-реССИОННОI'О тестирования, но все сказан ное в равноН \!ере Сllrаllедливо и для нриемочною, 
[лава 11: Инстру.ментальные средства тестировU(и"а 269 lIеСКОЛhКО ранее, в паве! 1, расскаЗЫВaJlOСh об автоматюаuии тС'стиро ,:,JlII!И Ilечати, Ряд IlРИВОДИВШИХСЯ в неЙ соображениЙ можно paCIlpOCTpa 'II! [1, И на автоматизаuию Ilроиесса тестирования в uелом, Откуда берутся реrрессионные тесты КOIда ПрOl'раммист ИСIlрав:шет ошибку, сушествует ОIlреДС:lеНI!ая Bepo :1 ПIOСТh, что он ИСIlравит не то, что Нужно, или ДОIlУСТИТ новую ошибку, Ilарушит 'IТOTO, что уже раБОТaJlO, Поэтому Ilосле каЖДОl'О TaKol'o ИСIlрав lения (или I'РУШIЫ ИСIlравлениЙ), необходимо, BOIlepI3ЫX, IlровериТh, pe IIleHa ли та Ilроблеlа, Ilзза котороЙ ВНОСИЛИСh ИСIlравления, а BOBTOpЫX, IIровериТh целостносТl, всей IlpolfJaMMhI, . Тесты для i!раuичuых условий и друсие зараuее зап,lаuироваuuые тесты. Среди всех тестов, Ilеречисленных в ваше\! рибоче\! JlлаIlе, необходимо выбраТh те, которые с наиБОЛhшеЙ вероитносТhЮ выя вят возможные ошибки, . Тесты, уже одuажды выявившие ошибку. То, что однаЖ;lЫ [IOЧИНИ ли. нередко ломается снова, Так IlРОИСХОДИТ lIOTOM)', что в том \Ie сте, I'де 13 IlpOl'paMIY внесено ИСIlраВ.1ение, ее код часто Вhil'ЛЯДИТ неlIOНЯПIЫМ, неllOследоватеЛhН ым или неловким, А еС;IИ испраН:lе ния в IlpOI'paM\!Y вносил один IlрOl'рам\IИСТ, а Ilродолжает се ;lOpa ботку ДРУI'ОЙ, то сушестнует БОЛhшая веРОЯТНОСТI, TOI'O, что ИСIlравленныЙ фрaJ'\lент будет неверно IlОIlЯТ и IlОВТОРНО ИСIlравлен, . Ошибки, выявлеuuые пользователями. Ошибки, о которых сообша ют IlОЛ, hзователи I'РУШlа технической 1IOлдержки и друюй IlepcoHa.l, не входяший в IfJYIlIlY тестирования, указывают на дыры в II.:JaHe работ вашеЙ IfJУШIЫ, В некоторых l'pYllllax тестирования IlрИНЯТО добавляТh в тестовые Ilланы реl'рессионные тесты для каждой такой ошибки, . Наборы тестовых даuuых, ссеuерироваuuых методами случаЙUОi!О подбора. Об ИСllOЛhзовании l'eHepaTopa случайных чисе:1 уже paCCKa ЗhlВа;IOСh в Iлаве 7 IlрИ обсуждении тестирования Функuиона;IhНОЙ эквивалентности, Хотя случаЙные данные не заменят l'раНИЧНhlХ тестов, они Ilослужат Ilолезным ДОIlолнением, IlОЗВОЛЯЮШИ\l HpOTe стироваТh IlporpaMMY с более разнообразной входной информаllиеЙ, Снабжение nporpaMMbI входными данными В чем состоит СЛОЖНОСТh составления набора реl'рессионных тестов, так ')То в Ol'pOMHOM количестве тестов  IlотеlЩИaJlhНhlХ кандидатов на звание реl'рессионных, Все их ВhlllОЛНИТh IlрОСТО невозможно, ПОЭТОIУ в Iлаве 7 !lOдробно ОIlИСhlВaJIИСh IlРИНUИIlЫ отбора тестов, Ilозволяюшие состаВИТh относитеЛhНО неБОЛhШУЮ, но IlрИ этом эффективную IfJУШlУ тестировочных заданий, ТеIlерь же мы рассмотрим СIlособы автоматизации реl'рессионнOI О I'естирования (IlОЛНОЙ или хотя бы частичноЙ), и, если Ilроиесс теСТl!рОШ 
270 Часть 11: Прие,I1Ы и технолосии тестирования ния удастся УСllешно антоматизироваТh, вам не IIридется отсеивать такое БОЛhшое количество тестов IIрОСТО изза нехватки времени, Сушествует неСКОЛhКО Сllособов TOI'O, как тестовые данные MOryT IIOlla дать в IIpol'paMMY, . Файлы да1lIlЫХ. ПрOl'рамма может быn Сllособна считывать TeCTO вые данные из файлов, При этом се IIОЛhзоватеЛhСКИЙ интерфеЙс, разумеется, не тестируется, но зато основатеЛhНО IIроверяется ее базовая ФУНКUИОНaJlhНОСn, Заранее lIоД!'отовленные файлы IIриrо дятся IIРИ тестировании ЗaJ'рУЗКИ информации IIрОI'раммоЙ, ее экс lIорта и ИМIIорта, Разумно составленные фаЙлы IIОЗВОЛЯЮТ IIротестироваТh IIpOl'paMMY на I'раницах ее возможностеЙ (максимум заllисеЙ, Ol'poMHhie числа и Т,II,), В каждой IIpol'paMMe это может БЫТh нечто свое, так что lIотребуется ДОВОЛhНО MHOI'O времени на llOДI'ОТОВКУ тестовоЙ информации, Инота тестовые данные стоит храниn в базе данных, ПрОI'рамма, ИСllOЛhзуемая для Уllравления этоЙ базой данных, должна обладаТh Сllособностью сохранения ИНфОрIaЦИИ в различных форматах, Если формат входных данных тестируемоЙ IIpol-раММh! изменится, с IIOMO ШhЮ СУБД МОЖНО будет сформироваn новые фаЙлы, Вllрочеl, даже если формат входных данных и не является для вашеЙ IIpol'paMMh! lIервоочередным ВОllрОСОМ, СУБД IIредоставляет целыЙ ряд ДРУI'ИХ lIолезных возможностеЙ для работы с данными, как, наllример, удобные средства редактирования и возможносn снабжения инфор мации необходимыми комментариями, . Пакетllые файлы. Некоторые IIpol'paMMhI, такие как КОМIIИЛЯТОРЫ и КОМIIОНОВШИКИ, а также МНОl'ие IIрО!'раммы для математических расчетов, MOI'YT считываТh с диска абсолютно всю необходимую информацию, включая и команды, Сушествуют и такие IIpol'paMMhI, которые IIредназначены исключитеЛhНО для lIaKeTHol'o Вh!IlOлнения, они, 110 Оllределению, читают все входные данные из фаЙлов, Если вам lIосчаСТЛИВИЛОСI, ИlеТh дело именно с такой IIрОI'рамюй, IIOД I'Oтовки тестовых фаЙлов и аНaJlиза реЗУЛhтатов будет достаточно для тестирования IIрактически всех ее аСllектов, . Переllаправлеlluе ввода. Если IIpol'paMMa ожидает, что команды бу дут введены с клавиатуры, это еше не означает, что ею невозмож но УII равл яТh ч срез фа Йл, Просто следует ВОСIIОЛ hзоваТhСЯ возможностью Оllерационной системы lIеренаllравлять ввод и вывод IIIнlюрмации (если, конечно, такая возможность имеется), Суть Ta КOI'О Ilсренаllравления состоит в ТОМ, что IIpol'paMMe кажется, будто }!аНIIЫС IIOСТУllают из стандартносо входносо устройства (обычно это кланиатура), в то время как на самом деле они считываются Ollepa ЦИОНIIOЙ систсмой из указанноrо вами фаЙла, Всеми деТaJIЯМИ это 1'0 механизма УllраВJlЯСТ операционная система, 
[лава 11: Инстру,l1еllтальные средства meCПlUp{)/lll(l/hl/ 271 Перенаправление ввода I10ДХОДИТ не для всех случаев, I10СКОJlЬКУ СI () возможности Оl'раничены, Как, наIlример, Орl'анизоваТh задержку 1\ 3,2 секунды между двумя нажатиями клавиш? . Ввод через последователыIйй порт. Еше один трюк, I1рименяемыЙ тестировшиками, как и предыдуший, состоит в I10дмене ВХОДНОI'О устроЙства таКИ\1 образом, чтобы I1pOI'paMMa ЭТОI'О не заметила, Oд нако на этот раз данные I10СТУIlают не из файла, а из llOследоватеЛh Horo I10рта, Сушествует СIlециа;Ihное I1pOI'paMMHoe обеСIlечение, I10зволяющее одному КОМIIhютеру УIlравлять работой друl'ОI'О, свя занною с ним через сеть, модем или нуЛhмодем, В частности, это имеюшиеся на рынке I1epCOHa;IhHhIx КОМIIhютеров I1pOI'paMMhJ эму ляции термина;ш, Соединив два КОЮlhютера либо с llOМОШhЮ кабеля, I10дключенноrо к их llOследоватеЛhНЫМ 1I0ртам, либо через телефонную линию I10 средством модемов, можно, сидя за одним из них, УlIраВЛЯТh вторым так, как будто вы работаете с ею клавиатуроЙ и МЫШhЮ, и видеТh на экране отображаемую им информацию, Но I'лавное, что деЙствия I10Лhзователя можно ОIlредеЛИТh заранее, так чтобы их эмулировало I1pOl'paMMHoe обеСIlечение, При этом ero возможности I'Ораздо шире, чем I1рИ вводе данных ОlIерационноЙ системоЙ из фаЙла, В частно сти, можно ОIlредеЛИТh любые необходимые временные задержки и реакцию I10Лhзователя на действИЯ тестируемоЙ I1pOI'paMMhI, На рынке имеется целый ряд мошных и ДОрОl'ОСТОЯШИХ систем для тестирования I1epcoHaJlhHhIX КОМIIhютеров 110 ОIlисанной теХНОЛОI'ИИ, и их возможности I10СТОЯННО расширяются, . Перехват u воспроuзведеlluе клавuатур"оi!O ввода. Если ВОСlIOЛhЗО ваТhСЯ I1рОI'раммой, I1ерехватываюшей клавиатурный ввод, можно один раз Вh!IIОЛНИТh и "заIlисаТh" с ее I10МОШhЮ тест, а затем BOC I1РОИЗВОДИТh el'o СКОЛhКО УI'ОДНО раз, Такая I1porpaMMa может заIlИ сывать не ТОЛhКО все нажатия клавиш, но и все маНИIlУЛЯЦИИ llOЛhзователя с МЫШhЮ, Подобная теХНОЛОl'ИЯ не ТОЛhКО облеrчает работу, освобождая тссти ровшика от необходимости ВШIOЛНЯТh утомитеЛhные и однообраз ные действия и I10ЗВОЛЯЯ ему I10ЛНОСТhЮ сосреДОТО'lИТI,СЯ на I1pOI'paMMe, но и I'арантирует, что тест всети будет IlhllЮJlНЯТhСЯ абсолютно одинаково, Однако у нее есть и ОllрсдеЛСlIные издержки, ЗаIlисав тест, необходимо ero тут же I1рою'рап" 'побы убедиться, что он заIlисан I1раВИЛhНО, Кроме TOI'O, OIlPCilC;ICHHhIX усилий требует орrанизация и документированис заIlисанных теСТИРОВОЧНhIХ фаЙ лов, В обшеЙ сложности на заllИСI" !lpOBepKY, сохранение и ДOKYMeH тирование теста уходит как минимум в 3, а то и в 10 раз БОЛhше времени, чем на el'o вшюлнение вручную, 
272 Часть 11: Приемы и технолосии тестирования К тому же автоматизированныЙ тест. I1редставляюшиЙ собоЙ заIlИСh деЙствиЙ llOЛhзователя, не сработает, если в I1pOrpa\IMY будут BHece ны даже самые незначитеЛhные ИЗlенения, связанные с I10следова теЛhНОСТhЮ этих деЙствнЙ, Тест придется Вh!lIOЛНЯТh и заIlисывап, заново, ПростеЙшим I1римером может бhПh реор['анизаuия меню I1рО!'раммы, ПОКУIlая I1ро['рамму I1ерехвата и ВОСIlроизведения ввода. убедитеСh, что она заIlисывает не ТОЛhКО действия llOЛhзователя. но и BpeMeH Ные интерва;IЫ между нюш, Кроме тою, I1роверьте, I1раВИЛhНО ли ВОCIIроизво;1ЯТСЯ маНИIlУЛЯUИИ с мышью при различных разрешениях экрана, Хорошо бы убедип,ся и в ее надежности, Рынок таких I1pO ['paIM относитеЛhНО невелик, и они не все['да тшательно тестируют ся, ИмеЙте в виду, что I10КУIlаемая вами утилита относится к разряду резидснтных, а это означает I10теНUИaJlhНУЮ ВОЗМОЖНОСТh Ilроблем не ТОЛhКО в ее собственноЙ работе, но и во взаимоотношениях с остаЛI,НЫ1 заIlушенным I1pO['paIMHhIM обеСIlечениеI, Запись вывода тестируемой проrраммы АвтоматизироваТh ввод данных для тестируемоЙ I1ро['раммы обычно ['ораздо I1роше, че1 заIlисать ее выходную информаuию в I10дходяшеЙ для ана;Iиза форме, Выбор у вас следуюшиЙ, . Файлы выходllЫХ даllIlЫХ. Идеа;IhНЫМ случаем является прО!'рамма, сама сохраняющая свои данные в файлах, I1ричем в формате, llOД ходящем ДЛЯ тестирования, . Переllаправлеlluе вывода в файл. В дисковый файл можно, наIlрИ мер, I1ереllаIlравить вывод, I1редназначенный для I1ринтера, J:.сли это возможно, то I1еренаIlравление вывода извне I1реДIlOчтитеЛhнее ис I10льзования соответствующей ФУНКl\ИИ самой I1рО!'раммы, ПОСКОЛh ку ['арантирует, что в файл I10падет в точности та же IIНфОРМ3l\ИЯ, ЧТО и на I1ринтер, Если I1porpaMMa I1редназначена для работы в текстовом режиме, то в файл можно I1еренаIlравить и то, что она выводит на экран, . Вывод .,ерез последователыIйй порт. Если имеется ВОЗМОЖНОСТh уда;[еннО!'о УIlравления КОМIIhютером либо с термина;Iа, либо со ВТОрО!'О КОМПhютера I10средством СIlециа;[ьноrо I1porpaMMHO!'o обес печения, этот второй КОМIIhютер может заIlИСhIВаТh I1ринимаемые выходные данные в файл для I10следующею ана;[иза, . I/срсхват экраllа. Существует множество I1pOrpaMM, I10ЗВОЛЯЮщИХ сохраlllПh изображение текущеrо окна и все['о экрана, Как будет расска !аIlО 'IУП, I10зже, мы очеНh широко llOЛhзуемся такими I1pO ['раМI,ШII, 
I1Gfja 11: I1HcтpY,l1eHт{JдЬHыe средства тестllровЩllка 273 . Перехват вывода npOi!paм.мbl с ПОМОЩЬЮ сnециалыIхx тecтиpoвo., IIЫХ утилит. Совершенно очевидно, что, если IIpO!'paMMa разрабо тана СIIеlща:lhllO для тестирования, ее возможности юраздо шире, чем у утилит обше!'о назначения, Хорошая IIpO!'paMMa llOзволяет сохранять указанные области экрана, наIIример IIОЛЯ данных, KOTO рые меняются от теста к тесту, Оценка ВЫХОДНОЙ информации ЗаIIисав выходную информацию IIpO!'paMMhI, тестировочная система :lOлжна оценить ее IIраВИЛhНОСТЬ. Как это сделаТh'? Сушествует неСКОЛhКО традиционных IIОДХОДОВ, . Если существует эталОllllая npOi!paммa, ВЫIIОЛНЯЮШая то же самое, что и тестируемая, можно сраВНИТh их вывод, . Написать nараллелыIIo npOi!paм.мy, !'енерируюшую точно такие же реЗУЛhтаты, и сранниваТh их вывод, На IIрактике IIроше создаТh несколько десятков неБОЛhШИХ IIара:\JIеЛhНЫХ IIporpaMM  IIO одной на каждую тестируемую функuию, . Сформировать библиотеку nравилыIхx выходllЫХ даllIlЫХ. При этом для каждоrо HOBoro набора тестов IIридется создавать и новые эта лоны выходных данных, Это ДОВОЛhНО доЛ!'ий И трудоемкий IIpO несс, особенно если данные эталонных файлов IIридется ВВОДИТh вручную, И здеСh неизбежны издержки IIO выявлению множества ошибок и ОIIечаток, Однако основной объем работы IIридется на самое начало, Korдa необходимо будет сформировать основную Mac су данных, далhше будет леРlе, При на:IИЧИИ времени тесты можно будет автоматизироваТh llOcTeIIeHHo, один за ДРУ!'ИМ, . Перехват вывода npOi!paмMbl. Сохраняйте реЗУЛhтаты КaЖJI0!'О Tec та, какими бы они ни были. РеЗУЛhтат теста заIIисывается в отдеЛh ный файл, анализируется сразу или llOзднее и IIомечается как хороший или IIЛОХОЙ. После ТО!'О как тесты будут ВЫllOлнены IIOBTOpHO, их реЗУЛhтаты можно снова ЗaIIИсаТh в файлы и сраВНИТh с IIредыдушими, Эта работа IIpeKpacHo llOлдается автоматизации, НеСОВIIадение HOBoro файла со старым, llOмеченным как хороший, означает либо llOявле ние новой ошибки, либо изменение СIIецификации, Если очередной реЗУЛhтат теста оказывается хорошим, все IIредыдушие IIлохие pe зультаты можно уда:IИТh, Как и IIреДhшушая, эта страте!'ия носит инкремента:lhНЫЙ характер. Библиотека результатов тестов llOcTeIIeHHo растет, llOIIOЛНЯЯСh все новыми данными, 11 в конечном счете в ней оказывается IIO файлу на каждый тест, IIричем в этих файлах ТОЛhКО IIоложитеЛЫlые данные, 
274 Часть 11: Прие;llЫ и теХltолосии тестироваltия В орrанизаuии KoppeKTHoro сравнения выходных данных, особенно сравнения КOIIИй экрана, существует uеЛhIЙ ряд сложностей, Как, наIIрИ мер, обучить проrрамму сравнения иrнорировать различающиеся даты? Как бhIТh с изменяющимися заroловками окон? Что, если данные ВhIВОДЯТСЯ с различной стеIIеНhЮ точности, в различном IIорядке или в раЗНhIХ местах экрана? К TOIY же ма,lейшие изменения IIporpaMMhI MorYT оказаТhСЯ фа та:lhlШМИ для orpOMHoro количества тестовых файлов, Некоторые IIporpaMMhI IIepexBaTa изображений умеют сравниваТh ТОЛhКО отдеЛhlше фраrмеНТhI экрана, содержащие ваЖНhIе для тестирования дaH ные, и иrнорироваТh все OCTa:lhHoe, Друrой IIрием заключается в том, что IIporpaIMa отображает две КОIIИИ экрана, старую и новую, и закрашивает беЛhIМ цветом все, что cOBIIaдaeT, оставляя ТОЛhКО различающиеся фраrмен ты для визуа:lhноrо сравнения, Нам IIРИХОДИЛОСh видеть IIporpaMMHoe обеСIIечение для IIepexBaTa и сравнения ввода/вывода, которое IIРОИЗВОДИЛО ВIlOлне солидное ВIIечатле ние, Ряд руководителей rpYIIII тестирования rоворили нам, что ВllOлне IIолаrаются на эти IIporpaMMhI, особенно активно llOЛhЗУЯСh ими IIрИ BЫ llOлнении IIриеМОЧIIO['О тестирования, Однако сами мы еще не llOЛhзова ЛИСh IIодоБНhIМИ средствами, а IIOTOMY воздерживаемся от какихлибо одобритеЛhlШХ или критических заlечаний в их адрес, Вот неСКОЛhКО BOII росов, которые следует обдумать, IIланируя автоматизаuию IIpouecca тести рования, . BpeмellllbIe затраты. На создание автоматизироваННhIХ тестов yxo дит очеНh MHoro времени, Как утверждается в Мiсrosоft Test User's Gllide (Microsoft, 1992, с, 15), автоматизаuия тестирования требует caMoro тщатеЛhllOrо IIланирования и орrанизаuии и часто наиБОЛh ших временных затрат, ПреДIIОЛОЖИМ, что на IIроектирование, создание и документирова ние автоматизированноrо теста уходит вдесятеро БОЛhше времени, чем необходимо на IIодrотовКу и ВШlOлнение ero вручную, Это оз начает, что BpeleHHhIe затраТhI на автоматизаuию ОКУIIаются ТОЛh ко IЮС;Iе десятоrо или одиннадuатоrо IIporoHa теста, Все IIоследующие ero IIporOHhI не стоят IIОЧТИ ничеrо, если ТОЛhКО тест не IIридется модифиuироваТh, Получается, что тесты, которые BЫ llOЛНЯЮТСЯ всеro неСКОЛhКО раз, автоматизироваТh вообще не стоит, . Задержки в тестироваllии. Если отложить серhеЗllOе тестирование до тех IIOP, IIoKa не будет IIодrотовлена uелая "батарея" тестов, IОЖIIO IIоставить llOД уrрозу весь IIpoeKT, Проrpаммистам необходи ма бhIстрая ответная реакция rРУIIПhI тестирования, состояние IIpO екта Bcel';la должно бhIТh известно, Поэтому с самоro нача:ш IIpoeKTa СТОИI' IIO;lYMaTh О расширении rpYIIIlhI тестирования, чтобhI в то время, КОlла олна часть IIерсона:ш занята разработкой автоматизи 
['лава 11: И//стРУ;ltе//таль//ые средства тестирпвщUlШ 275 рованных тестов, друrая моrла ВhIIlOЛНЯТh тестирование вручную в HopMa;IhHOM рабочем режиме, . Иllерция. Вложения в разработку автоматизированных тестов ДOCTa точно велики, Если I1ро[раIМИСТ ИЗlенит llOЛhзоватеЛhСКИЙ интер фейс I1porpaMMhI или формат ее входных или выходных данных, оrромную часть тестов I1ридется I1pOCTOHaIlpocTo выбросить, Oco бенно остро эта I1роблема стоит в тех случаях, коrда тесты разраба тываются на самых ранних стадиях I1pOeKTa, IIОСКОЛhКУ вероятность I10следующих значитеЛhНЫХ изменений в I1porpaMMe I1рИ этом СИЛh но увеличивается, Как I1равило, изменения вносятся в I1pOeKT ОТНЮДh не IIO Чhейлибо I1рИХОТИ, РуководитеЛh I1pOeKTa соrлашается на них IIOTOMY, что они значитеЛhllO усовершенствуют или улучшают I1porpaMMY, делают ее более I10следоватеЛhllOЙ и простой в ИСllOЛhзовании, Формат файлов данных обычно меняется ради достижения совместимости или YCT ранения ошибок, А раз так, вы должны I1риветствоваТh всякое IIO добное усовершенствование, Однако если у вас имеется достаточно БОЛhшое количество необходимых тестов, основанных на старом варианте интерфейса или формате файлов, для ['РУШIhI тестирования изменения MoryT БЫТh очеНh нежелатеЛhНЫ, и вместо оказания co действия в улучшении качества I1родукта вы можете неВОЛhНО стать ero I1рОТИВНИКОМ, . Риск nроnущеllllЫХ ошибок. Мiсrоsоft (1990, с, 7,33) I1реДУIlреждает, что автоматизированные тесты должны I1ланироваТhСЯ и орrанизовы ваТhСЯ очеНh тщатеЛhНО, IIОСКОЛhКУ за их ВhIllOлнением тестировщик не наблюдает так внимателшо, как I1рИ ВhlIlOлнении тестов вручную, О том же roворит и наш собственный OIlhIТ, Нам случа,lОСh видеть, как тестировщики, I1роводившие автоматизированное тестирование, IlpO I1уска;IИ очеНh серhезные и совершенно очевидные ошибки, МаЙерс (Myers, 1979) также I1иса;I о реЗУЛhтатах исследований, lIока3ЫВ:lIOIIIII)(, что тестировщики недостаточно вниматеЛhllO ана;\иЗИРУI1J)' pelVJII.1 a ты автоматизированных тестов и I1РОIlускают O'lCHI> \111010 Оlllllбок, Продумывая тесты, особое внимание уделите TO\IY, '1IO(iI.1 11)( ре !YJII, таты были как можно короче и I1редставлеllЫ в IlpOClOii 11 11:lIJIЯЩIOЙ форме, Никто не будет вычитывать КИ;IOМОРI>1 paClle'I:lIOK, и уж во всяком случае никто не сможет сделаТh "ТО ;юоаПJ'IIЮ вниматеЛhllO, Скорее Bcero, вам IIонадобится HeGoJi(,JJllJii журнал тестирования, в котором в одной строке фиксироваJIСЯ бы каждый ВЫllOлненный тест, Кроме тоro, в нем должны фИКСllроваться все сбои I1porpaMMhi, и заIlИСИ о сбоях должны ДОllOЛНЯТhСЯ КОIlИЯМИ неверных данных, 
276 Часть 11: Прие,ltы и теХltолосии тестироваltИЯ Еще одним llOлеЗНhШ IIриемом может бhПЪ выдаваемый тестировоч ной IIроrраIМОЙ звуковой СИПIа;I о неудачном тесте и сообщение, которое остаетСя на экране до тех IIОр, IIока тестировщик с НЮI не ознакоIИТСЯ. Так вы rарантируете, что будете знаТh о каждой выяв ленной ошибке, Однако тут необходима аккураПIOСТh, звуковые СИПIа;IЫ не должны ВhlДаваТhСЯ в тех случаях, коrда в сравниваемых файлах различаются незначащие детали, наIIример, даты, Иначе из орrанизующет фактора такая технолоrия работы IIревратится в бедствие, . ЧастиЧllая автоматизация. Вовсе необязатеЛhllO llOЛlIOСТhЮ aBTO матизирован весь проuесс тестирования, ЧаСТh тестов может бhIТh автоматизирована, в то время как друrие лучше llOIIрежнему IIpO ВОДИТh вручную, Для нача;ш стоит автоматизирован наиболее llOД ходящие для этоrо тесты, а также те, которые наверняка будут IIРОВОДИНСЯ десятки раз, Потеlщиа;IЫiЫМИ кандидатами для аВТОIa тизаuии являются также те тесты, которые требуют БОЛhшоrо объе ма клавиатурноrо ввода, сложны и утомитеЛhНЫ для ручноrо ВhIIlOлнения, Что касается отдеЛhНЫХ тестов, то их автоматизаuия также южет бын частичной, НаIIример, можно записаТh и IIроиrрываТh к..1авиа турный ввод, а реЗУЛhтаты ана;\изирован визуа;IhllO, Это сэконоIИТ некоторое время на вводе информаuии и позволит избежаТh возни со сравниваемыми выходны:\1И файлами, Автоматизация приемочноrо тестирования Некоторые руководители БОЛhШУЮ чаСТh средств, ВhIДеленных на aBTO матизацию тестирования, тратят на создание IIриемочных тестов, ИХ сооб ражения таковы, . ИмеllllО эти тесты выполняются чаще всеzо. Если обновленная версия IIporpaMMHoro IIродукта IIередается тестировщикам каждую неделю, да IIЛЮС еще IIериодически llOЯВЛЯЮТСЯ внеочередные Bep сии с ИСIIравлениями наиболее существенных ошибок, за все время разработки КОМIIлекс IIриемочных тестов может бhIТh ВЫllOлнен IIЯТhдесят и даже сто раз, . К каждой фуlIкциоllалыIйй области пpozpaммbI отllосится cpaвllи телыIo lIебольшое количество тестов. Приемочные тесты быстро IIроrоняют все основные части IIро!раммы, ни на чем не останавли ваЯСh 1I0дробно, Поэтому, коrда одна из составляющих IIpOl'paMMhI меняется, соответствующую [РУIIIIУ тестов леrко можно IIеределан, . утомителыlстьь процедуры приеМОЧIlОZО тестироваllия ведет к ошибкам. Тt:СТИРОВIIJИКУ IIРИХОДИТСЯ ВhlIlOЛНЯТh одни И те же тесты 
['лава 11: иltструмеltталыtее средства тестировщика 277 множество раз, IIОЭТОМУ неудивитеЛhllO, что он IIpoIIycKaeT HeKOTO рые тесты или ВhIIlOлняет их невниматеЛhllO, Проrрамма же всеrда ВhIIIолняет тесты одинаково  ведь ей не бывает скучно и она ни коrда не устает, Стандарты Ваша КОМIIания может llOДlIИсать контракт, IIO которому IIporpaMMa LOлжна удовлеТВОРЯТh ОIIределенным стандартам, Подтверждение COOTBeT с('вия этим стандартам входит в задачи rpYIIIIbl тестирования, Проrраммы, IIЫIlOлняющие такую IIpoBepKY, часто доморощенные и трудно IIоддаются \lQдификаuи и , Утилиты, ана:\Изируюшие IIporpaMMY на соответствие CTaH ,LapTaM, MoryT сообщать о следующих ее недостатках, . Проблемы с переllосuмостью. Проrрамма может ИСllOЛhзоваТh pac шире ния языка, несовместимые с друrим КОМIIИЛЯТОрОМ, неIIосред ственно заIIисываТh или считываТh данные из ОIIределенных областей IIамяти или ориентироваТhСЯ на новые возможности YCT ройств ввода/вывода, которые имеются да:lеКО не во всех системах, . Рекурсия. Проrрамма называется рекурсивной, если в ней имеется IIОДIIроrрамма, вызывающая сама себя, Этот IIрием заIIрещается некоторыми стандартами, . СтепеllЬ вложеllllOстu. rлавная IIporpaMMa может ВЫЗhIВаТh IIОД IIporpaMMY, та  еще одну IIОДIIроrрамму, та  еще одну и т,д, В конце КОIЩОВ вызывается IIОДIIроrрамма, ВhIIlOлняющая нужную работу, СКОЛhКО же вызовов для этоro IIотребуется? Приемлемо ли такое количество? Ана:lOrичным образом вложенными MorYT быть UИК,lЫ и условные oIIepaTophI, Если язык IIроrраммирования lIOЗВО ляет ОIIредеЛЯТh llOЛhзоватеЛhские ТИIIЫ данных, наСКОЛhКО ДОIIУСТИ мо ОIIредеЛЯТh IIереlенную, относящуюся к ТИIIУ, ОIIределенному IIосредством друrоrо ТИIIа, ОIIределенноrо IIосредством друrоrо ТИIIа и т,д, Как rлубоко IIридется KOIIaTh, чтобы ВЫЯСНИТh, о каких же в самом деле данных идет реЧh? . КОllстаllты в коде. ПреДIIОЛОЖИМ, что IIporpaMMa IIроверяет, дей ствитеЛhНО ли введенное значение меНhше 6, Одни нро['раммисты ОIIределят именованную константу, наIIример MAX у AL, назначат ей значение 6 и будут ИСllOЛhзовать это имя в коде для сравнения, Друrие же IIpOCTO будут сравниваТh внеденное значение с числом 6, IIоместив ero IIрЯМО в КОД, Этот второй СIIособ часто является заII рещенным, Недостаток е['о в ТО\!, ЧТО при изменении максима:IЫlOrо значения с 6 на какоениБУДh дрУl'ое число IIридется искать и заме 
278 Часть 11: ПриелlЫ и теХltолосии тестироваltия НЯТh шестерки IIO всему IIporpaMMHOMY коду  ведь сравнение MO жет ВhIIIOЛНЯТhСЯ и не в одном месте, Если же ОIIредеЛИТh KOHCTaH ту и вынести се в самое начало IIporpaMMHoro кода, то найти и изменить ее значение будет rораздо IIроше, . Размер модуля. СКОЛhКО строк IIporpaIMllOro кода южет содержать IIроuедура или функuия? Нет ли в IIporpaMMe чересчур длинных IIОДIIроrрамм или, наоборот, слишком коротких, так что IIporpaMM ный код становится наСТОЛhКО фраrментированным, что теряется ero лоrика? А как насчет количества flOllIIporpaMM в одном файле? . Коммеllтарии. По стандарту на каждые три строки IIporpaMMHoro кода может требоваТhСЯ IIO одному комментарию, Стандартом может ОIIределяться формат комментариев, их длина, раСllOложение в фай ле и друrие характеристики, . СослашеllUЯ об uмellax. Стандарт может ОIIределять IIРИНЦИIIЫ наи менования IIepeMeHHhIX, IIодпроrрамм и файлов, . Форматироваllие. В стандарте MorYT быть ОIIисаны такие веши, как OTCTYIIhI, раСIIоложение oIIepaTopoB, отмечаюших начало и конец блоков кода, или максима;IhllOе количество СИIВОЛОВ в СТРОКС, . 3апрещеllllые КОllструкции. Может бhiТh заIIрешено Ilрименение oIIepaTopoB GOTO, oIIepaTopoB IIрерывания IIOTOKa ТИIIа EXIT или вызов IIОДIIроrрамм, адреса которых хранятся в IIеременныхуказа телях, MorYT бhIТh заIIрешены ОIIределенные СIIособы IIРОТОКОЛИРО вания ошибок или ОIIределенные команды ввода/вывода, . 3апрещеllllые действuя. ПрИlером таких действий может бhIТh заII рет IIерехода IIO команде GOTO назад IIO IIporpaMMHOMY коду, в то время как ана;юrичные IIереходы ВIIеред MorYT разрешаться, (При чина TaKoro заIIрета в том, что IIереходы назад ведут к БОЛhшему количеству ошибок, чем IIереходы виеред,) . ПсевдОIlUМЫ. Если два различных имени относятся к одной и той же IIеременной, Т,С, указывают на одно и то же место IIамяти, они считаются IIсевдонимами, Такие веши MOI)'T не ДОIIускаться CTaHдap том, . Преобразоваllие типов aallllbIX. Одни и те же данные MorYT IЮраз ному интерIIретироваться в различных местах IIporpaMMhI. НаIIрИ мер, можно оБЪЯВИТh массив целых чисел и IIередаТh ero IIОДIIроrрамме, которая будет работать с ним как со строкой, Это может бhIТh заIIрешено стандартом, ЕСЛlI IIporpaMMa IIроверки соответствия стандартам может ВЫЯВЛЯТh все эти IIроблеIЫ, возможно, она может обнаруживаТh и некоторые ТИIIЫ ошибок, Такие I\pOI'p;lMMhi часто выявляют следуюшее, 
[шва 11: иltстру;ltеltталыtеe средства тестировщи/(а 279 . НевеРIIЫЙ сиllтаксис. КОМIIИЛЯТОР такие ошибки обнаруживает, а вот в интеРIIретируемой IIpo!paMMe они IIРОЯВЛЯЮТСЯ только во Bpe мя ВhIIlOлнения соответствуюшеrо фраrмента Кода, . Смешаllllые вЫlfислеllия. Если A5 и B2, тоrда возможно, что A/B2,5, если обе IIepeMeHHhIe являются числами с IIлаваюшей за IIЯТОЙ, и A/B2, если числа uелые, Эти IIравила определяются язы ком IIроrраммирования, но rлавное, что IIрИ этом IIроrраммист не всеrда IIолучает то, че!'о ожидает, Иноrда он может IIpOCTO не заме тить, что смеша;I в одном выражении раз;\Ичные ТИIIЫ данных, . Перемеllllые, оnределеllllые в npozpaммlloM коде, 110 IIUKozaa lIе иc пользуемые. Проrрамма может установить, что A5, но НИКоrда больше не ИСllOльзовать IIеременную А, Скорее Bcero, IIроrраммист IIредназначал ее для какойто uели, а IIOTOM о ней IIpOCTO забыл, Хотя такое объявление само IIO себе совершено безобидно, в да;IЬ нейшем оно может смутить тоro, кому IIридется эту IIpo!paMMY llOД держивать, . Перемеllllые, которые используются до их иllициализации. Если IIporpaMMa IIрисваивает IIеременной В значение А и только llOсле этоrо IIрисваивает переменной А нача;Iьное значение, то что будет в IIеременной В? . Чтеllие файла до ezo открытия или после закрытия. Выявив IIодоб ные команды, можно IIредотвратить сбои IIрИ обрашении к устрой ствам ввода/вы вода, . Код, который IIUKozaa lIе вЫnОЛllяется. В IIporpaMMe MorYT бытb IIроцедуры, которые никоrда не вызываются, или фраrменты кода, которым НИКоrда не IIередается УIIравление (наIIример, условие BeT вления не выIoлняетсяя ни IIрИ каких обстоятельствах), . БеСКОllеlfllые циклы. Условие выхода из uикла может либо IIpOCTO никоrда не ВЬПlOлняться, либо зависеть от данных, что является llOтеlщиа;IhllOй ВОЗМОЖIIOСТЬЮ заUИК,lивания IIporpaMMhI, Приведенный СIIИСОК можно было бы IIрОДОЛЖИТЬ, Суть е['о в том, что IIporpaIMY можно ана;\Изировать на IIредмет стиля, формата, соответствия разнообразным IIравилам и наличия ОIIределенных ТИIIOВ ошибок, Часто llOследнее слово в таком ана;\Изе остается за IIpOrpa,\I\IIICTO\I, который один только и может точно сказать, является ли ОIIределснный фраrмент кода ошибочным или IIpOCTO IIредставляет собой несколько необычную KOHCT рукцию, Однако если речь идет о соответствии Оllределенным стандартам, это должна rарантировать rpYIIIIa тестирования, Необходимо очень тщатеЛhllO IIроана;lИзировать BOIIpOC IIрименимости к IIpoeKтy конкретных стандартов, Сама IIO себе эта идея неIIлохая, но на IIрактике чревата целым рядом сложностей, 
280 Часть 11: Прие,иы и технолосии тестирования . Проrраммисты :\lOryT IJhпаться некорректными СIJособами УЛУЧШИТh свои llOказатели или IlреllятствоваТh 1l0НЫ (хам ана:IИзировать их работу, (Керней (Кеаrnеу, 1986), Вейнберl (Weinberg, 1971)), . Чем БОЛhШС внимания будст удеЛЯТhСЯ соответствию стандартаl, Te1 меНhше времени, ,1юдей и сил будет оставаТhСЯ для pea:JhllOro тести рования IJporpaMMHoro нродукта  ана:IИза ero IJроизводитеЛhllOСТИ, удобства, эффективности и ИСIJравлсния ошибок. ИНОlда качество нродукта определяют как стенень ero соотвеТСI'ВИЯ ОIJределенным стандартШf, Однако, на наш взrляд, все, что не связано неносрсдственно с ero функционаЛhНОСТhЮ, с ВОСIJриятием продукта llOЛhзователем, является скорее тормозом в работе но ero совершенствова нию, rласс (Glass, 1992, с, 92) утверждает, и мы llOЛlIOСТЬЮ С этим соrласны, что если оuенивать качество нродукта в терминах соответствия стандартам, сформированным критериям MorYT удовлетворять явно IJлохие нродукты, Поэтому, на наш взrляд, лучше избеrать ВК,lючаТh в доrовор требование co ответствия стандартам, РаЗУ:\lеется, можно и llOЛhзоваться средствами aHa лиза на соответствие стандартам, и lIИсаТh собственные такие средства, но стандарты должны вырабатываться самими разраБОIчиками, а не навязы ваТhСЯ извне, Тестирование "стеклянноrо ящика" При тестировании "стеК;Jянноrо ящика" тестировщик ана:lизирует HPO rраммный код, При ПРОТИВОllOЛОЖНОМ нодходе  тестировании "черноrо ящика", которому rлаВlШ\1 образом IJосвящена эта КНИl'а, тестировщик в код не заrЛЯДhIВаеI', работая с IJроrраммой ИСК,lючитеЛhНО извне, Однако иноrда IJрOlра\IМИСТ снабжает тестировщика среДСI'вами, lIOЗВО ляющими IJрИ тестировании "черноrо ящика" внекоторой стеIJени ОIJИ раТhСЯ и на IJроrраммный код, Примерами таких средств MorYT БЫТh следующие виды отладочноrо Кода: . !L1Я отслеживания IJутей ВhIIlOлнения IJporpaMMhI, . Для IJроверки ОIJределенных фактов, . Для отслеживания ИСllOЛhзования IJамяти, Если вы захотите IJрибеrнуть к IJодобным технолоrиям работы, обрати тесь к такому автору, как rласс (Glass, 1992). Отслеживание путей выполнения nporpaMMbI ПротестироваТh Каждый нуть ВhIIlOлнения IJporpaMMhI Hepea:lhHo. А вот ВЫllOлнение хотя бы но одному разу каждой строки IJporpa:\IMllOro кода  задача ВllOлне реаЛhная и к тому же совершенно необходимая, (О ней 
['лава 11: иltстру;ltеltталыtеe средства тестировщика 281 IllJilробно рассказыва;IOСh в rлаве 3,) Самый очевидный СIIособ ее ВhIIIOЛ IIt:ния  IIрОСТО сесть IIеред КОМIIhютером с листинrом и llOIIhпаТhСЯ BЫ ,11!ltтh все возможные ветви кода, Однако есть и лучший IIОДХОД, требуюший участия IIроrраммиста,  Lобавить в IIporpaMMY СIIеuиаЛhНЫЙ отладочный код, Коrда IIporpaMMa LOстиrает заданной точки, она IIечатает ОIIределенное сообшение, Все co ()GlIlения отличаются, Как IIравило, их нумеруют, так что всеrда можно с:казать, в какой точке IIporpaMMHoro кода они были выданы, ПРOIраммист раЗlешает отладочные сообшения во всех К,lючевых точках IIpOIpaMMhI, По \:шершении ЦИК,lа тестирования он ана;IИзирует раСIIечатки или файл жур IIXla и выясняет, lIOIIa;1O ли туда каждое из сообшений хотя бы IIО одному разу, Если чтониБУДh IIрОIIушено, значит, соответствуюшая область IIpO l'paMMhI не была IIротестирована и можно IIодсказать тестировшикам, как t:e ДОСТИЧh, Такая технолоrия очеНh облеrчает работу тестировшика, ведь ему боль lIJе не нужно ана;\изироваТh проrраммныи код, Да так в конечном счете и Ilадежнее, Отслеживать сообшения IIО ходу тестирования также ни к чему, IJНИ lOrYT и вовсе не выводиться на экран, а IIрОСТО заIIисываться в файл А\урна,1а, Сушествуют СIIеUИ<Llhные IIроrрамшые средства моltитОРИltса охвата (coverage moпitors), вставляюшие в код IIодобные ОТЛ<Ll0ЧНЫС команды, Эти "ЩIaНДЫ называются зоltдами (probes) , Такие IIporpaMMHhIe средства MorYT IIt: ТОЛhКО начинять IIporpaMMY зондами, но и собирать статистику их IIpO \ождения, формируя итоrовые данные, Получив от средства мониториша ,)хвата сведения о том, какие ветви IIporpaMMhI НС были IIройдены, можно JlодrОТОВИТh и IIровести ДОllOлнитеЛhные тесты, Хотя средства мониторинrа охвата IIредназначены для тестирования 'стеК;IЯllllOrо яшика" , ими можно llOЛhзоваТhСЯ и в обычной работе, В этом l,lучае вы IIрОСТО узнаете, наСКОЛhКО llOЛIIO ваши тесты охватывают IIpO I Р;\IМНЫЙ код, Средств мониторинrа охвата на рынке имеется IIредостаточно, Стоит (остаВИТh их СIIИСОК, чтобы имеТh что IIреДЛОЖИТh IIроrраммистам. OДHa "О ВIlOлне возможно, что вы услышите от них uелый ряд раЗУ\IНЫХ возра А\ений, Их основания MorYT быть такими, . Средства MOllumopUllza охвата вставляют в про/рамму отладО'lllЫЙ код. В конечном IIродукте этоro кода был, 11t: ДOJIЖIIO, В РСЗУЛhтате вы тестируете IIporpaMMY НС в том вид\:, 11 KaKO1 она будет IIpoдa ваТhСЯ, а это llOтеlщиаЛhнан ВОЗIOЖIIOСlh llOявления ошибок, . Со средствами MOllumopUIl/a про/рамма медлеllllее работает. В реЗУЛhтате IIолучаются условия 10HOK, от:: ичные от pea;IhHhIx, а это снова IIовышает веРОЯТНОСТh IlOявления ошибок, 
282 Часть П: Прие,иы и теХltолосии тестироваltия . Нашпиzоваllllая ЗОllдами npozpaммa СUЛЫIО увеличивается в раЗМе ре. Если размер про!раммы имеет критическое значение, это обсто ятельство может скрыть тот факт, что ее размер и в самом деле превысил допустимую величину, . Некоторые из таких npozpaмMlIbIX средств сами пОЛIIЫ ошибок. Проrpаммистам едва ли понравится, если они проведут пару дней в поисках ошибки и окажется, что ее виновником является средство мониторинrа, ПОЭТО\IУ такое средство следует выбирать очень тща телыlO и при ею покупке осведомиться у продавuа о на;IИЧИИ списка известных ошибок, Проверка утверждений Обычно в каждой проrрамме есть точки, в которых всеrда должны выполняться определенные условия, Чтобы убедиться, что необходимые условия в самом деле выполняются, проrрам\IИСТ может llOместить в эти точки отладочные команды, Это и есть проверка утверждеltИЙ (assertioп check), Если условие ВЫllOлняется, ПрOI'рамма не производит никаких He стандартных действий, если же нет, она может выдать на экран COOTBeT ствующее сообщение или записать ero в файл журна;ш, Возможно также, что про!рамма просто молча выполнит код обработки ошибочной ситуации, Как правило, тестирование утверждений орrанизуется таким образом, чтобы тестировщик сразу же видел, что чтото идет не так, Для этоrо все сообщения проrраммы о неверных утверждениях выводятся на экран или распечатываются, Так rораздо леrче отслеживать и исправлять ошибочные ситуаuии  ведь кроме тою, в какой точке проrpаМ\IЫ произощла ошиб ка, необходимо еще знать, как вы туда llOпа;IИ и с какими данными рабо тали, В противном случае ошибочную ситуаuию может быть трудно воспроизвести, Анализ использования памяти Работающая проrpамма использует память следующими способами, . Часть памяти заlluмает сам npozpaммllbIii код. За исключением (весьма непопулярных) самомодифиuирующихся проrрамм, про rpaMMa не может писать в собственную область кода, . Часть памяти заlluмают даllllые. Проrpамма может считывать и записывать ИНфОРlаuию своей области данных, но не может попро сить uентра;IЬНЫЙ процессор выполнить команду, записанную в этой о(jласти, . ()прс()еЛСllllая память связаllа с аппаратllЫМ обеспечеllием. Про l'pa\Ila IОЖСТ общаться с внешним устройством, считывая и запи 
Тлава 11: иllстру;ltеllталыlеe средства тестировщика 283 сывая информаuию по определенным адресам памяти, Однако при кладные проrраммы, как правило, взаимодействуют с внешними устройствами через промежуточное проrраммное обеспечение, встроенное в BIOS компьютера или операuионную систему, Для них считается даже некорректньщ прямо обращаться к паIЯТИ устройств ввода/вывода, 1Инуя установленные драйверы, . Недоступllая память. Запуская проrрамму, операuионная система выделяет ей некоторый объем памяти, В мультизадачных систеlах проrрамме обычно недоступна память, выделенная друrим проrрам мам, работающим одновременно с ней, И уж во всяком случае ни одной про!рамме недоступна память, которая физически отсутствует, Спеuиа;IЫlые утилиты, ана;IИзирующие использование памяти, MorYT выявить подозрительные команды проrраммы, Они MorYT остановить про I[ecc и сохранить в файле дамп памяти, MorYT перевести проrрамму в pe ..кИ1 отладки или просто сообщить о событии и продолжить выполнение IIporpaMMbI. Утилиты, анализирующие использование памяти, MorYT предоставить Ilроrраммисту и тестировщику множество полезной информаuии. и в том 'Iисле об объеме свободной памяти, размере наибольшеrо свободноrо бло ":1, подробный список всех работающих проuессов или всех блоков памя 111 С информацией о том, какой проrраммой используется каждый из них, l!ct: эти данные o'leHb полезны, так как пробле,\1Ы с использование,\1 па,\1ЯТИ 'III:!ЯЮТСЯ наиболее трудноуловимыми, С их помощью можно выяснить сле I\'ющее: . Какой объем памяти занимает каждая составляющая проrраммы, . Возвращает ли про!рамма операuионной системе ту память, которая ей больше не нужна, Особенно это касается достаточно больших объемов памяти, выделенных, например, под rрафику, Если нет, то рано или поздно вся свободная память системы будет исчерпана, Оuенивая картину использования памяти по данным подобных утилит, l',lедует учитывать и их собственную роль в этом проuессе, Бывает, что II.\lellllO утилита не позволяет тестировщику воспроизвести произошедшую Щ\Jибку, Однако в uелом предоставляемая информаuия может быть просто 11t:оuенима, Наш собственный опыт показывает, что из всех отладочных "О\lанд, которые проrраммисты встраивают в проrраммный код, наиболее IICHHbI именно команды формирования отчета об использовании памяти, 
Fлава 12 Планирование и документация Назначение этой rлавы Из rлавы 7 вы узнали о том, как проектировать и оценивать отдельные Te сты. В rлаве 8 рассказывалось о планировании всей работы  на примере тестирования печати, в rлаВе 9  о планировании локализационноrо тести рования, А о том, как тестировщик может автоматизировать свою работу, вы прочитали в rлаве 11. т еперь, вооружившись всеми этими знаниями, можно приступить к paCCMOT рению oAHoro из самых серьезных этапов тестирования nporpaMMHoro про дукта  этапа лланирования, Данную rлаву, в которой рассказывается о целях и стратеrии планирования, можно назвать своеобразным центром всей книrи, ее связующим звеном, объединяющим материал всех остальных rлав. Планирование тестирования  процесс последовательный. Он включает в себя следующие задачи, . Разработка тестов с помощыо анаЛитических средств, Специалисты, за нимающиеся планированием тестов, прибеrают к помощи самых разно образных аналитических средств  таблиц, диаrрамм и друrих инструментов, позволяющих выделить те аспекты nporpaMMbI, KOTopble подлежат отдельному тестированию, и определить, какие из возможных тестов являются наиболее важными для каждоrо из этих аспектов (KO нечно, прежде Bcero, это тесты rраничных условий), . Выбор стратеrии тестирования. В этой и следующей rлавах рассказыва ется о том, как исследовать различныe области и аспекты nporpaMMbI и определить, какие из них требуют более уrлубленноrо тестирования. . Разработка средств контроля за тестированием, Этот этап включает в себя создание контрольных списков, таблиц, автоматизированных тестов 
Тлава 12: Плаltироваltие и дОКУо\1еltтаЦИJ/ 285 и друrих материалов, задающих порядок выполнения тестов и опреде ляющих их входные данные. Эти простые средства позволяют aKKypaT но орrанизовать работу, определяя ее последовательность и rарантируя, что ничто не будет потеряно или упущено, . Распространение информации. Подrотовые плановые документы, KOTO рые позволят друrим сотрудником ознакомиться с принятой стратеrией, понять ее цели и смысл. Распространите среди заинтересованных лиц разработанные тесты, данные и друrие сопутствующие средства и дo кументы, Обзор в этой rлаве рассматриваются следующие вопросы: . Общее назначение TecToBoro плана. . Цели, преследуемые при планировании тестов и разработке ДOKYMeHTa ции, . Какие типы тестов ("черноrо ящика") должны отражаться в плановых документах. . Стратеrия создания тестовых планов и их компонентов: поступательная разработка, . Компоненты TecToBoro плана: простые и иерархические списки, табли цы и матрицы, . Как документировать тестовые материалы, Плаlt тестироваltия определяется стандартом ANSI/lEEE (ANSljIEEE Staпdard 8292983 Jor SoJtware Test Dоситеntаtiоп) следующим образом: Это докумеltт, в котором определеltы обьем, ресурсы, а также опИСаlt калеltдаРItЫЙ плаlt работ по тестироваltИЮ, В Itем определяются выпол Itяемые тесты, тестируемые элемеltты, задачи тестироваltия, coтpyд Itики, ответствеltltые за выполltеltие каJlсдой из задач, а также уКазывается верояпlltость вОЗItИКltовеltИЯ Itепредвидеltltых обстоятельств и описывается, Какие меры ItУЖltо при этом приltимать, Тестовый план  это оrромный составной документ, Вам предстоит познакомиться с ero назначением и содержанием, а также с uелым рядом сопутствующих документов, создаваеIЫХ в процессе тестирования про rpaMMHoro продукта, Сколько усилий и внимания уделяется тестовой документаuии  зави сит от конкретной rруппы тестировщиков и общеrо объсма работ, В одних случаях удовлетворяются несколькими страниuа\IИ замсток, в друrих созда ются MHorOTOMHbIe труды, Не всеrда объсм докумснтаuии определяется профессиона;IИЗМОМ сотрудников, хотя и это тоже иrрает определенную роль, Основные стратеrические различия связаны с конкретными задача ми каждой конкретной rруппы, Именно эти задачи и определяют, какоЙ будет документация и Д,1я чеrо вообще она разрабатывается, 
286 Часть 11: Прие,11Ы и теХltолосИи тестироваltия Общее назначение TeCToBoro плана: продукт или инструмент? у авторов тестовых планов MoryT быть две принuипиа;IЫIO различные uели: в одних случаях разрабатывается продукт, а в друrих  рабочий инструмент, Смешать эти нели леrко, но такое смешение очень дороrо обходится, При этом разработка продукта стоит rораздо дороже, чем раз работка инструмента, Тестовый план как продукт Хороший тестовый план помоrает орrанизовать и скоординировать уси лия сотрудников, разрабатывающих и тестирующих проrраммный продукт, Однако мноrие тестовые планы не оrраничиваются этой исключительно важной задачей, Они разрабатываются как самостоятельные продукты, Формат, структура и уровень дета;IИзаuии подобных планов определяются не только соображениями эффективности тестирования, но и нормами, определяемыми спеuификаuией, Вот несколько примеров, . Предположим, что ваша фирма разрабатывает проrраммный про- дукт, который затем будет переrrродаваться телефонной компанией (примером может быть проrрамма учета телефонных звонков), Те- лефонная КО\lIlания будет ПОlIitерживать этот продукт мноrие [оды, Поэтому ее специа;IИСТЫ будут тщательно ана;IИзировать ваш план тестирования и вносить в Hero необходимые с их точки зрения кор- рективы, Им неоБХОДИ\lа rарантия, что продукт будет протестирован самым тщательны,\! образом, Кроме Toro, если вы по какойлибо причине не сможете поддерживать продукт в да;IЫlейшем (например, ваша компания обанкротится), им придется самим вносить в про- [рамму текущие изменения, а значит, и проводить повторное тести рование, Ясность и простота TecToBoro плана, cTporocTb ero формата будут в этом случае иrрать решающую роль, . Если вы разрабатываете проrраммное обеспечение Д,1я военных, то обязательно должны продать им и тестовые планы, причем COOTBeT ствующие их собственной спеuификации, Без таких планов военные просто не купят ни одну проrрамму, То же самое касается и про rpaMMHoro обеспечения Д,1я медиuины, . Разработчик проrраммноrо обеспечения может воспользоваться yc луrами вашеrо независимоrо TecToBoro areHTcTBa, заказав разработ ку тccToBoro плана, по которому он сам будет тестировать свой ПрОI {1а\I\!IIЫЙ продукт, В этом случае план должен быть исключи телыlO CI{10I'O орrанизованным и подробным, иначе покупатель не СМОЖt:Т 11 I ilОСllOльзоваться, 
Тлава 12: Плаltироваltие и дОКу,\tеltтаци}{ 287 Каждый из описанных выше планов в конечно,\! счете служит для по IIска ошибок, Однако важно понимать, что, даже если время, затраченное Ila ero разработку, моrло бы быть с большей производительностью исполь ювано Д,1Я ана;IИза и тестирования проrраммы, вам все равно придется BЫ ,lержать стандарты и написать тестовый план, полностью соответствуюший I'ребованиям заказчика или реrулируюшей орrанизаuии, Тестовый план как инструмент По сложившейся традиuии вся учебная литература ,\Iира информаuион IIЫХ технолоrий обучает читателей и студснтов разрабатывать объе,\1НУЮ и подробную тестовую документаuию, Мы позволим себе не соrласиться с этой традиuией, поскольку весь наш опыт свидетельствует, что ДOKYMeHTa uия не должна быть впечатляюшей  она должна быть эффективной, Исключением MorYT быть только документы, сами являюшиеся продукта \IИ, В офиuиа;IЫIЫХ стандартах Д,1Я планов тестирования, таких как ANSI/ 1 ЕЕЕ 829, можно найти uелый КОlIlлекс требований к спеuификаuии Te eToBoro проекта, спеuификации Д,1Я самих тестов, журна;IaМ тестирования, разнообразным идентификаторам, к спеuификаuии Д,1Я тестовой проuеду ры, спеuификаuиям ввода/вывода, а также спеuиа;IЫlые проuедурные Tpe бования, зависимости между тестами, календарный план, описание распределения работ между персона;IOМ. критерии приостановки и возоб IlOвления тестирования и описание массы друrих бумаr, Стандарты позволяют быстро rенерировать orpOMHoe количество ДOKY ментов, Это верно, но так ли все эти документы необходимы? Масса Bpe мени уходит на всю эту бумажную работу, но помоrают ли эти бумаrи быстрее и лучше находить ошибки? Пользователю требуется нечто, правильно выполняющее необходимые вычисления, издающее ожидаемые звуки, рисующее ожидаемые изображе ния или печатающее нужный текст в нужном месте, Ему все равно, как вы это будете тестировать, fлавное, чтобы проrрамма работала праВlUlЫlO, Для подобных пользователей план тестирования не является ПрОДУКТО\I, Это просто не видимый инструмент, которым компанияразработ'IИК IIOJ\bJyeT ся Д,1Я орrанизаuии своей работы, Коrда план тестирования разрабатывается не как про;tукт, ;1 как рабо чий инструмент, при ero создании лучше Bcero руКОlю;t<:ТlIовал,сн <:Jiе;tую щим критерием, Цеllllость nлаllа тестироваllUЯ Оnрсt)слястся тем, lIасколько 011 nOMozaem в орzаllизации nрОЦl'Cса тССnlllроваllUЯ и поиске ошибок. Любые ezo составляющие,//(' отвечающие этим задачам, являются nустои тратой ресурсов. 
288 Часть П: Прие,11Ы и технолосии тестирования Да;Iее вы увидите, что существует еще uелый ряд полезных функuий документаuии, не охваченных этим узконанравленным взrлядом на плани рование тестирования, Цели, преследуемые при планировании тестов и разработке документации Хорошая документаuия обладает треIЯ важнейшими преимуществами, о которых и рассказывается в этом разделе: . облеr'lает тестирование; . помоrает орrанизовать взаимодействие между персона;IOМ; . представляет собой удобную структуру Д,1Я орrанизаuии. планирова ния и управления тестовым проектом, Лишь в очень немноrих орrанизаuиях сотрудники используют все те преимущества, которые южет предоставить имеющийся план тестирова ния, Разумеется, составляющие ero спеUИ<L1ИСТЫ обычно обладают хотя бы МИНИМ<L1ЫIЫМИ знаниями по этому вопросу, Но да;Iеко не в каждой rруп пе тестовые нланы внимательно ана;IИЗИРУЮТСЯ нерсона;IOМ, и да;Iеко не всеrда в работе над планом учитываются мнения о нем друrих сотрудни ков rруппы разработки, Как правило, тестовые планы раСС!\lатриваются только как технические документы и не при меняются Д,1Я унравления pa ботами по тестированию и отслеживания хода их ВЫllOлнения, Вам как тестировщику придется тратить на разработку тестовых планов МНOI'ие часы, А раз так, стоит извлечь из полученноrо инструмента макси мум пользы, (I'стзел (Hetzel. 1988) излаrает иной взrляд на задачи нлана тестирования, ero аН<L1ИЗ этоrо вонроса также весьма полезен,) Тестовая документация 06леrчает орrанизацию технических аспектов тестирования Создание хорошеrо плана тестирования невозIOЖНО без саюro тща теЛЫlOrо исследования проrраммноrо нродукта, Только после этоrо ваше нредставление о поставленных задачах станет ясным и четким, что ilривне сет в работу обстоятельность и сделает ее 11Oнастоящему эффективной, В ходе нланирования вы создадите uелую серию списков и таблиu, роль которых будет заключаться в следующем, . Обеспечuть пОЛllоту охвата продукта. Тестовые нланы должны включать перечень функuий проrраммы, Этот перечень [apaH Тllрует, что ни один из аспектов проrраммы не останется непро тсстированным, Обычно с этой uелью составляется список всех l'Сllt:рИ{1vt:\IЫХ Ilроrраммой отчетов. сообщений об ошибках, под 
[1ава 12: П1аltироваltие и докулtеltтация 289 держиваемых устройств, команд меню, диа;lOrовых окон и т,п, Чем подробнее этот список, тем менее вероятно, что одна из Функuий проrраммы останется непротестированной просто потому, что вы о ней не зна;IИ, . Избежать лиШllих повтореllий и "е забыть lIичеzо ваЖIIОZО. Вычер кивая из списка выполненные пункты, вы всеrда будете видеть, что уже сделано и что еще ОСЛL10СЬ, . Быстро проаllолuзировать пpozpaммy и выделить lIаuлучшие тесты. На рис, 12,5 (rлава 12) и подобных ему рисунках из rлавы 7 приве дены примеры таблиц, используемых при ана;IИзе классов эквива лентности и rраничных условий, Каждое из rраничных условий требует отдеЛЫlOrо теста, поскольку именно здесь допускается MaK сима;IЫlOе число ошибок, . Подzотовить иllформацию для завершающеzо тестироваllUЯ. Коrда весь ПрОlраммный код написан и продукт практически [отов, Hacтy пает время фИШL1ЫlOrо тестирования, Неоuенимую помощь при ero rIЛанировании оказывают заметки, сделанные на предьщуших этапах, К этому моменту психолоrическое давление возрастает, а времени до выпуска продукта остается совсем ма;IO, Поэтому быстрота и эффек ТИВIIOСТЬ работы здесь особенно важны, А без заметок придется все держать в rолове, при этом можно нечаянно пропустить жизненно важные тесты, . Повышеllие эффективllости тестироваllUЯ. Такое повышение дoc тиrается за счет сокращения количества тестов без уменьшения охвата тестируемых аспектов продукта, А это, в свою очередь, дoc тиrается блаrодаря вычленению и УД<Llению сходных тестов, от KO торых ожидаются одни и те же результаты, Вот несколько примеров, . Анализ rраничных условий. Обратитесь к седь\юй rлаве, [де pac сказывается о классах эквива;IеllТllOСТИ и rраничных условиях, а также к разделу данной rлавы, посвященному компонентам пла на тестирования, . Стратеrия конфиrурационноrо тестирования. На рис, 8,1 была представлена стратеrическая схема тестирования принтсров, Зак лючается она в том, что с одним тщательно подобраННЫ\1 (IРИН тером тестируются все аспекты проrраммы, связанные с печатью, Затем совместимые принтеры объединяются в I'рУППЫ, и С каж дым из них по очереди тестируются все функции печати, но не во всех местах проrраммы, :де они встречаются, а только в одном, !L1Я реа;IИзаuии этоЙ стратепlИ нt:обходимо составить список всех совместимых с ПрОI'ра\I\ЮЙ Ilринтеров, выделить их классы и 
290 Часть !/: ПриеJ.fЫ и технолосии тестирования отобрать Д,1Я первонача;IЫlOrо тестирования по одному принтеру каЖДОl'О класса, Да;Iее потребуется таблица с перечнем функuий каЖ1l0rо принтера и тестируемых областей nporpaMMbi, Пример такои раБО'Iеи таблиuы ДЛЯ тестирования oдllOro принтера пока зан на рис, 8.4, Чтобы протсстировать все остальные принтеры, необходимо сделать ана;lOrичную таблицу для каждоrо из них, При этом тестированию должна подлежать только одна из всех областей проrраммы, в которых эти функции используются, . Одно из rРУIIПЫ эквивалентных действий. Пусть, например, про [рамма выводит на экран диа;lOrовые окна с сообщения1И об ошибках, В качестве ответа пользователя принимаются только щелчок мышью на кнопке ОК или нажатие клавиши <Enter>, Нажатия всех oCTa;IbIlbIx клавиш и щелчки мышью вне кнопки ОК проrраммой просто ИПlOрируются, Разумеется, вы не сможете протестировать все возможные нажатия клавиш, При этом следует иметь также в виду, что нажатие клавиши, иrнорируемое одним диа;lOrовым окном, может разрушить друrое, !L1Я работы в такой ситуации очень удобна тестовая Iатриuа, каждая строка которой соответствует одному из сообщений, Каждый столбец матрицы соответствует rруппе к'1авиш, ОПlесенных к одному классу экви ва;IеllТllOети, например, всем буквам нижнеrо реrистра, !L1Я каж доrо из сообщении следует проверить по одной или нескольку клавиш из каждоrо класса, Позднее в этои rлаве мы еще вернемся к этой матрице, . КОllтроль пОЛllоты. Если, работая в соответствии с составленным планом тестирования, вы пропускаете ошибки, значит, ваш план не полон, Пробелы в плане MorYT быть по следующим причинам, Пропущенные области проrpаммы. !L1Я полноценноrо тестирова ния необходим подробнейший список Toro, что уже протестиро вано и что еще предстоит протестировать, В ходе работы обязательно сверяйтесь с эти{ списком И l\опо;шяите ero в слу чае необходимости, Особенно это важно для проrрамм, которые в ходе разработки претерпевают мноrочисленные изменения, Пропущенные классы ошибок. Умение как следует орrанизовать свою работу и последовательно тестировать проrраМIУ на пред мет всех предсказуемых ошибок  редкое качество, Обычно Ta кое тестирование выполняется достаточно беспорядочно, В Ilриложении А приведены краткие описания около 500 видов 'I<lCI () uбнаруживаеIЫХ ошибок, Создавая собственныи ана;lOrич 11I,lii CIIIICUK, вы наверняка расширите этот перечень, По нему \10 Ж 110 СIН:рИ [1, своЙ тестовый план, чтобы убедиться, что он дo 
[1а6а 12: Плаltироваltие и до/{у,\tеllтаЦllН 291 статочно адекватен, Для этоrо следует пройтись по списку ОШJ1 бок, спрашивая себя, ;ltOJlcem ли очередная ошибка встретитьсп в тестируемой проrрамме, Если да, план должен содержать как минимум один тест. предназначенный Д,1я ее выявления, АЮL1ИЗИРУЯ таким образом свои тестовые планы, мы не раз об наружива;IИ. что пропушены uелые классы ошибок, Например. в плане может вообше не оказаться тестов для условий [онок или сообшений об ошибках, Успешно зарекомендовала себя в этом отношении следуюшая технолоrия составления тестовых планов, В план включается раз дел с перечнем всех ошибок, которые MOryT присутствовать в Te стируемой ПрOI'рамме, Этот раздел заполняется первым, Затем на ero основе последовательно разрабатываются тесты для поиска этих ошибок и записываются в друrой раздел плана, Так ни одна ошибка не выпадает из поля нашеrо зрения, . Пропущенные классы тестов. При мерами К,1ассов тестов MorYT служить наrpузочные испытания, тесты rpаничных условий, рабо та в ус:ювиях параллеЛЫlOrо ВЫllOлнения проrpаммой нескольких заданий (например, фоновая печать), испытания в режиме реаль ной эксплуатаuии и т,д, Включены ли в план все эти виды испы таний? Если нет, те поче\IУ? . Простой недосмотр. Если даже ваш тестовый план в uеЛО\1 абсо люпlO полон, в нем все же MOryT быть случайно ПрОllушены OT дельные тесты, например, забыто одно из rраничных условий, Несколько таких недочаов  обычное дело, Вовре:-,,\я ВЫllOлнен ный анализ проведенных работ позволит выявить и устранить все основные недостатки первоначальноrо TecToBoro плана, Документация помоrает орrанизовать взаимодействие между персоналом Тестировшики являются членами команды разработки продукта, Все они зависят друr от друrа. и на их работу ПОЛaI'аются остальные члены КО\lанды, в частности, менеджеры, проrpаммисты и авторы документаuии, Четко и ясно написанные материалы помоrают им ознакомиться с вашей стратеrией, понять rлубину и масштаб предполаrае\lоrо тестирования и узнать о типах планируемых работ, Вот несколько КОМ\lуникаuионных Ilреимушеств, обеспечивасмых распространением TecToBoro плана среди шинтересованноrо персона;Ia, . Совместllое обдумываlluе cтpaтezuu тестuроваllUЯ. . Повышеlluе Jффектuвllостu u пОЛllоты тестuроваllUЯ. ЧитаН',11I распростраlНlе\IЫХ \lатериалов cMorYT привлечь ваше ВlIИ\lаllll(' " 
292 Часть 11: Прuе,ltы и теХIIОЛОсИИ тестироваllИЯ упущенным областям проrраммы, ее неправильно понятым аспек там, а также недавним изменениям продукта, еще не отраженным в плане тестирования, . Обсуждеlluе объема тестuроваllUЯ. В тестовом плане отражается как предполаrаемый объем работ по тестированию проrpаммноrо про дукта, так и уже ВЫllOлненная el'o часть, Это помоrает руководству и вашим коллеrам понять, почему в команде тестировщиков рабо тает столько народу, чем они все занимаются и почему на работу уходит столько времени, Руководитель проекта всеrда заинтересован в ускорении и удешевлении работ, поэтому он может принять свои меры, уда:IИВ или упростив сложные для тестирования части про [раммы, . Обсуждеlluе 2луБUIIЫ тестuроваllUЯ u калеllдаРIIО20 плаllа работ. Нередко после создания плана тестирования разворачиваются бур ные дебаты по поводу объема работ, В одних случаях руководител ь проекта доказывает (возможно, вполне справедливо), что заплани рованный объем работ чрезмерен и ero вполне можно сократить, В друrих случаях, наоборот, руководитель настаивает на проведении более серьезных испытаний и [отов вьщелить на это ДОllOЛНИТCJIЫlOе время и людей, Еще одним предметом обсуждсния часто становится время, выделен ное для определенных работ, Например, руководитель проекта или менеджер по маркетинrу MOryT решить провести более Д,1итеЛЫlOе тестирование, эмулирующее реальную эксплуатаuию продукта пользователем, В ПрИlщипе, все эти вопросы MorYT быть подняты и без ДOKYMeHTa uии, Однако план помоrает сфокусировать дискуссию, делает ее предмет более наrлядным и четко очерченным и тем самым облеr чает достижение СOl'лашений, По собственному опыту мы знаем, что при наличии чеТКОl'О и детализированноrо плана тестирования об суждения проходят rораздо более упорядоченно и реалистично и приносят значительно более ощутимые результаты, . Распределеlluе работы. И поручить комулибо работу, и проследить за ее ВЫllOлнением всета rораздо леrче, если вручить человеку чет кие и подробные печатные инструкuии, Тестовая документация представляет собой удобную структуру для орrанизации, планирования и управления тестовым проектом Тестирование IIpoilYKTa представляет собой самостоятельный проект, которым неоБХ()j[И IO Vllравлять, И даже если тестирование ВЫllOлняется 
Тлава 12: Плаllироваllие и дОКУllеllll1аllИЯ 293 ,цнимединствеННbI1 сотрудником, ero работа обязате:IЫIO должна бbIТ!, l'l poro орrанизована, Итак, IIлан тестирования является средством управ It:НIIЯ проектом и в качестве TaKoro средства IIредоставляет руководству ,',lCдующие IIреимущества, . Достижеllие СОlлашеllий о задачах тестироваllUЯ. План работ чет ко ОIIределяет, что должно и что не должно бbIТЬ ВbIllOлнено персо налом rpYIIIIbI тестирования, Дайте ознакомиться с IIланом друrим сотрудникам КОМIIании, включая руководителя проекта, друrих за интересоваННbIХ руководителей, IIроrраммистов, тестировщиков, маркетолоrов  всех тех людей, которые в той или иной форме MOI)'T в дальнейшем ВbIдвиrать собствеННbIе требования, Их ОТЗbIВbI IIОЗВОЛЯТ заранее ОIIределить, обсудить и разрешить все спорн ые вонросы, . Оце1lка ресурсов. После Toro как задачи четко ОIIределеНbI, можно оuенить ресурсы, неоБХОДИМbIе для их ВbIllOлнения, Сюда входят деньrи, время, люди и оборудование, . Структурuзацuя. ОIIределив задачи, вы увидите, что мноrие из них конuеIIТУально связаНbI, Некоторые из задач лучше Bcero будет pe шать совместно  их можно ВbIделить в отдеЛЬНbIе rpYIIIIbI, ВbIIIОЛ нение такой rpYIIIIbI задач лучше Bcero IIОручить одному человеку или маленькой команде, Анализируя, разрабаТbIвая и ВbIIIОЛНЯЯ Te сты, лучше также конuентрировать внимание на их [руппах, ВbIби рая их одну за друrой, . Орzаllизацuя. ПолноuеННbIЙ теСТОВbIЙ IIлан ОIIределяет, кто, [де, коrда и какие ВbIllOлняет тесты, какими он для этоrо IIользуется ресурсами и Д,1Я чеrо НУЖНbI конкретные тесты и наIIравления рабо ты, . КоордиllировШlUе. Если вы ЯВJ\яетесь руководителем IРУППЫ тестиро вания или ее ведущим СIIеuиалистом, теСТОВbIЙ IIлан может бbIТ!, удоБНbIМ инструментом раСIIределения работ между СОТРУi!llllкаШl, В нем раСIIисано, кому какая IIоручается работа, в че\1 кон KrCTHO она состоит, и в нем же фиксируется ход ее ВbIlIOЛНСНИИ, KOHTpO лируйте, какие из тестов ВbIIIОЛНЯЮТСЯ в срок И lIа каКИl: уходит больше времени, чем IIервоначалыlO занлаllиrоваllO, ':Это IllJ\lOжет пересмотреть оставшуюся часть IIлана 11 Ilpll IIl:lJr)ХОiLIIIOСIИ BOBpe мя IIерераСIIределить задания и pecyrc1.1, . Эффектив1l0е управлеllие работоu Оnll)еЛЫIЫХ сотруд1lиков. . Тестировщик понимает, 'Ia 'ITO 011 отвечает. Поручая llOдчинеllllO му работу, неоБХО;Ill1O 'lelKO объиснить ему ero задачу и свои ожидания, Ина'lе не'ICI'О Ж;Iап, , что он отнесется к IIоручению ce 
294 Часть /1: Прие;llЫ и технолосии тестирования рьезно и выполнит все, что от Hero требуется, Если, например, сопроводить поручение контрольным списком, сотруднику будет ясно, что ero задача  ВЫllOЛНИТЬ все пункты этоrо списка и только после этоrо сообщить о завершении работы, . Своевременное выявление всех проблем, связанных сперсоналом и планом тестирования. Предположим, что вы назначили тести ровщику область проrpаIМЫ, за тестирование которой он отвеча ет, тестировщик сообщил, что работа ВЫllOлнена, а затем KTOTO друrой обнаружил в этой области серьезную ошибку, Такое слу чается достаточно часто, Если план тестирования содержит дoc таточно подробное описание работ, ничеrо не стоит выяснить, явился ли причиной инuидента сам план (и, возможно, проuесс [\Ланирования) или же виноват тестировщик. Может быть, конеч но, что проблема и в том, и в друrом или же вообще никто не виноват  ведь KaKoeTO количество ошибок в проrрамме OCTaeT ся всееда, Разбираясь с этим вопросом, прежде Bcero следует выяснить, имеется ли в плане тест, предназначенный для выявления найден ной ошибки, Если да, то сказал ли тестировщик, что этот тест BЫ полнен? Возможно, что тест действительно был выполнен  тота следует проверить, с какой версией проrpаммы работал тестиров щик и действительно ли в ней была ошибка, Только после этоrо можно высказывать какие бы то ни было оuенки ero работы и делать какие бы то ни было заключения, Не забывайте, что perpec сионное тестирование ПРОВОДИТСЯ именно ПОТО\IУ, что в xo;e работы проrpаммисты нередко вносят ошибки в те части проrpам мы, которые уже работали, Вполне возможно, что именно с этой проблемой вы и столкнулись, а тестировщик здесь вообще не при чем, rораздо чаще, чем можно предположить, тестировщики пропус кают отдельные тесты, особенно те из них, которые кажутся им избыточными и утомительными, Они MorYT roворить, что полно стью выполнили серию тестов, коrда на самом деле сделали толь ко половину или даже четверть Toro, что перечислено в контрольном списке, Некоторые из этих людей просто безответ ственны, однако иноrда так поступают и очень талантливые и ответственные сотрудники, действительно заботящиеся о качестве проrраммноrо продукта, Ваша задача  довести до сознания каж ДОI о ИЗ них, что такие действия абсолютно неприемлемы, OДHa ко, стол КIlУВШИСЬ С подобными вещами, не обвиняйте только тестиrо IJLl\И ков, Внимательно проанализируйте тестовый план и 
Тлава 12: Плаllироваllие и дОКУ;ltеllтация 295 условия работы людей, Возможно вы обнаружите, что некоторые тесты и в самом деле избыточны или же необоснованно сложны и утомительны, сотрудники работают свыше положенноrо BpeMe ни (особенно плохо, если они делают это не по своей воле, а под давление\1 руководства), а возможно, причиной является прессинr чересчур сжатых сроков работы, также усиливаемый llOСТОЯННЫМ давлением руководства, Если окажется, что проблема заключается в избыточности тестов, их количество можно сократить до разумноrо \lИllИмума, Нет никакоro смысла растрачивать на них драrоuенное время, Если же все запланированные тесты абсолютно необходимы, можно пронумеровать их и преД,10ЖИТЬ тестировщику ВЫllOЛНЯТЬ на oд ном uи кле тестирования все четные тесты, а на втором  все нечетные, Ваша задача  всячески облеrчить работу своих llOдчиненных, поскольку, даже если они будут аккуратно следовать контрольным спискам, однообразие действий все равно будет снижать их про изводительность и отражаться на внимании, Ведь можно выпол нить тест и все равно пропустить ошибку, Поэтому старайтесь удалять из плана все наиболее трудоемкие и избыточные тесты, а KpO\le Toro, время от времени менять тестировщиков местами, Пусть задания передаются между ними по KPYry  совершенно незачем заставлять тестировщика неделю за неделей проводить одну и ту же серию тестов, К тому же так вам будет обеспечен постоянно свежий взrляд на тестируемые области проrpаммы, . Выявление недостатков TecToBoro плана. Если тестировщик про пустил серьезную ошибку потому, что в плане не было теста для ее выявления, это уже недостаток плана, Однако стоит еше раз подчеркнуть, что такая ситуаuия, хотя и неприятна, все же COBep шеl!110 естественна  как любое произведение человеческих рук, план тестирования не может не иметь недостатков, Поэтому не стоит относиться к происществию как к чемуто траrическому или из ряда вон выходящему, Выясните, полностью ли проuеду ра разработки и утверждения плана соответствовала стандарту, принятому в компании, Если нет, план требует HeKoToporo пере смотра и при ведения в соответствие с внутренни\1И стандартами, Возможно, персоналу, занимавшемуся этим планом, требуется пройти профессиональную переподrотовку, Если же план разра ботан в cTporoM соответствии со стандартами, тратить на Hero лишнее время означает отнимать это время у друroй работы, Если вы станете пересматривать план просто потому, что на этой lIe 
296 Часть 11: J/рие,ItЫ и тех//олосии тестирова//ия деле вам политически выrоднее была бы друrая схема работы, в uелом нроект от этою только ностралает (Деминr (Deming, 1986)), В ситуаuии, Korдa серьезные ошибки нронускаются слишком уж часто или коrда внутреннее чувство нодсказывает вам, что MHO rие из нропущенных ощибок вполне моrли бы быть выявлены, стоит еще раз проанализировать проuесс планирования, Однако это не значит, что следует переделывать имеющийся план  это рещит лишь незначительную часть проблем, Скорее следует cдe лать выводы на будущее и обсудить этот вопрос на уровне PYKO водства, поскольку речь здесь идет о стратеrии компании, а не только о конкретном проекте, . ()тслежuваlluе состОЯIlUЯ проекта u усовершеllствоваlluе учета работ. Сравнить предполаrаемую скорость ВЫllOлнения работы с ее реальным продвижением 1l0моrают периодические отчеты о ходе разработки и ВЫllOлнения плана тестирования, Если начать проект с написания полноrо плана тестирования, то можно предсказать (разумеется, снекоторой пО!рещностью), сколько времени займет каждый из запланированных этапов тестирования и каждый из ею uиклов, В дальнейшем по ходу работы IOЖIIO пери одически rенерировать отчеты об уже проделанной работе и сравни вать свои предположения с реа:IЫIЫМИ данными, Разумеется, тестовые материалы MorYT разрабатываться и постепен но, параллельно с работами по тестированию, Но и в этом случае вся работа заранее разбивается на ряд этапов, Д,1я которых сроки И объе\IЫ заданий хотя бы приблизителыlO определены, Так что воз \ЮЖIIOСТЬ контролировать их выполнение все равно останется, Так или иначе, в начале проекта всеrда определяются основные задачи и uели, и в ходе тестирования обязательно контролируется их ВЫllOлнение, Смысл rенерируемых отчетов прежде Bcero в том, что бы вовремя корректировать дальнейшие действия, учитывая уже И,\;lеющийся опыт. а также выявлять и решать возникающие пробле мы, В частности, в критических ситуаuиях к проекту МО!'ут подклю чаться дополнительно люди и ресурсы, и, если необходимо и возможно, сроки ero MOryT пересматриваться, Тесты каких типов следует фиксировать в плановых документах Хорошие Ilроrpа\I\IИСТЫ  люди ответственные. они тщательно тести руют свой KO;I, Однако они не выполняют всей той работы, которую про водите вы, И,\lеllllO IIO:JTOMY вы находите ошибки, которые они 
Тлава 12: Плаllироваllие и дОКУ;ltеllтация 297 Ilропускают, а также потому, что вы всеrда видите проrрамму с друтй 10ЧКИ зрения, Ilро!раммист тестирует и анализирует код изнутри, он выполняет CTaH [артное тестирование "стеклянноrо ящика", Он, и только он отвечает за ,lНализ путей l!ЫllOлнения проrpаммы, только он видит все ее ветви, и он LOлжен rарантировать, что каждый модуль, откуда бы он ни был вызван, НЫIIOЛНИТСЯ успешно и данные между всеми взаимодействующими модуля \IИ будут передаваться правильно, Вполне возможно, что принять участие в проuедуре тестирования "CTeK ,'IЯllllOrо ящика" предложат и вам, В этом случае ознакомиться с вопросом вам lIOMOI)'T книrи таких авторов, как Хезел (Hetzel, 1988), Бейзер (Beizer, 1990), rласс (Glass, 1992) и Миллер и Хауден (Miller & Howden, 1981). В I'акой ситуаuии было бы очень хорошо воспользоваться средствами мони roринrа охвата  тестировочными утилитами, отслеживающими пути BЫ IlOлнения проrраммы, ВЫllOлняемые ветви и модули. Тестирование "стеклянноrо ящика" окружено особым мистическим ореолом. Оно кажется более научным, лоrическим, более профессиональ ным и академическим и считается более престижным, Некоторые тестиров щики не считают тестирование полноuенным до ТСХ пор, пока не будет IIроведено тестирование "стеклянноrо ящика". Однако эксперименты двух весьма уважаемых исследователей показали, '!то ни один из двух видов тестирования не является более эффективным, '.этими исследователями являются Хезел (Hetzel, 1976) и Майерс (Myers, 1978), Что касается нашею собственноrо опыта, то, отставив в сторону пред рассудки, мы можем сказать, что эти методы являются взаимно ДОПОJlНЯ ющими и каждый из них выявляет свои спеuифические проблемы, Что упускается при тестировании "стеклянноrо ящика" Вот три примера ощибок, проявляющихся в системах MSl)OS и Ile выявляемых при ана;IИзе путей и ветвей проrраммы, . Эта ошибка встречалась в ранних ПрOlраммах (до 19Х4 10;Ш) j1.JIИ ПК, Если в проuессе заrрузки проrpаммы нажап, к;:аВIIШУ IIробела, в очень мноrих случаях компьютер выключаJlСИ 11'3' Ja IIрСрЫl!аний, которые оставались активными в ходе ;tИСКОIЮIО ввода/вывода, Поскольку прерывание было Д,1я БОЛЫlIИllСI ва IlpolpaMM событием совершенно неожиданным, кода ЩНI <:1 О обработки в проrpамме не оказывалось, Очевидно, что, теСП1РУ}1 11\I<:ющиеся ветви проrраммы, нельзя обнаружить, что Оflрс;t<:Jlеllllаи ветвь вообще отсутствует. . Если подключить к КО\IIII,ютеру два монитора, монохромный и ЦBeT ной, и запустить одну из pallHllx Иi'р под одной из ранних версий MS 
298 Часть 11: Приемы и технолосии тестирования ОО5, изображение на монохромном мониторе с большой вероятностью окажется испорченным или же на экране будут странные помехи. . Подключите к компьютеру принтер, включите ero и установите пе реключатель в Off liпе, Затем в какойнибудь старой проrpамме попробуйте выполнить команду печати, Если проrрамма не "завис нет", проделайте то же самое с друrой версией M5005, Очень часто Проrраммы сбоят при тестировании с конфиrураuиями, отли чаюшимися от тех, с которыми они разрабатывались, Все эти ошибки нелеrко обнаружить, поскольку в проrраммном коде они не видны, В проrрамме Д,1я них нет путей выполнения, поэтому, BЫ полнив даже каждую строку кода, вы все равно их не найдете, Чтобы выявить такие ошибки, нужно оставить в стороне проrраммный код и подумать, какими способами и с каким оборудованием пользователи Moryт эксплуатировать Проrpамму. В uелом Д,1я поиска ошибок, подобных перечисленным на рис, 12,1, тестирование "стеклянною яши ка " , без сомнения, является более слабым средством, Эта ЮlUzа посвящеllа тестировШlию работающеzо кода, тестироваllию извllе, которое осуществляется путем выпОЛllеllUЯ проzра.ммы самыми раЗlIыми способами и с самыми раЗllообраЗlIыми lIаzрузками. Этот подход допOllllяет подход npozpa.ммucma и позволяет выпОЛllить тесты, которые 011 едва ли коzдаlIибудь проведет. РИСУНОК 12.1. Чеса нельзя узнать, тестируя пути выполнения просраммы 1, Ошибки, связанные со временем, 2. Неожиданные ошибочные ситуаuии, 3, Особые стечения данных, 4, Неверная информаuия на экране, 5, НеадеквапlOСТЬ пользовательскоrо интерфейса, 6, Друrие проблемы, связанные с пользовательс ким интерфейсом, 7, Взаимодействие с параллельно выполняемыми задачами, 8, Проблемы, связанные с КОНфИI)'раuией и co вместимостью, 9, Аппаратные ошибки, нестандартные ситуаuии и сбои, 
Тлава 12: Планирование и дОКУ,ltентаllllН 299 Важные типы тестирования "черноrо ящика" На рис, 12,2 перечислены He которые наиболее важные coc I"авляющие хорошеrо плана тестирования, Собственно rоворя, речь идет не об одном документе, а о uелой rруппе. Большая часть перечисленных t:оставляющих уже описывалась в этой книrе, rлавным образом в rлаве 3, Что же касается бетатес тирования, то о нем рассказывает ся в rлаве 13, Здесь же мы приведем лишь несколько допол нитеЛЫIЫХ замечаний, 1, Приемочное тестирование 2, Управление потоком 3, Потоки данных и uелоспlOСТЬ 4, Конфиryраuии/совместимость 5, Наrрузочные испытания 6, Пользовательский интерфейс 7, Реrрессионное тестирование 8, Производительность 9, Потенuиальные ошибки 1 О, Бетатестирование 11, Тестирование выпуска продукта 12, Фун кuионалЫlOсть РИСУНОК 12.2. Важные составляющие плана тестирования "Черносо ящика" . ПрuеМОЧllое тестироваllие. Коrда первая версия продукта передается ващей rруппе, она первым делом проходит приемочное тестирование, Проблема состоит в том, что руководитель проекта стремиться передать продукт на тестиро вание как можно скорее, чтобы пораньше заrрузить вас работой, Однако ес;IИ в rpуппе мало персонала, а продукт еще очень HeCTa билен, можно вернуть ею назад проrpаммистам и настаивать на том, чтобы тестирование началось только после достижения разумной степени стабильности, Приемочные тесты лучше всею распространить среди заинтересо ванных сотрудников, чтобы ваши критерии были всем известны и проrpаIМИСТЫ моrли сами ВЫllOЛНИТЬ эти тесты и быть уверенными, что проrрамма ютова к более серьезным испытаниям, Перед тем как направить на тестирование очередную версию, приемочные тесты будут выполнять и руководители проекта, особенно если они будут знать, что не прошедшую их проrрамму вы просто никоrда не примете, Приемочные тесты охватывают ТОЛI,КО наиболее важные действия проrpаммы и позволяют выявить саЩ,It: О'Iевидные ошибки, На их ВЫllOлнение уходит несколько 'lacoB 11 лишь Д,1я особенно сложных систем  до нескольких днсй, И\lенно эти тесты являются первы ми кандидатами на аВТО\lатизаuию, 
300 Часть П: ПриеJ.fЫ и техltолосии тестироваltия . Управлеl/uе потоком. Вопрос об управлении ПОТОКО\I  это вопрос о TO\I, как перевести проrрамму из одноrо состоянии в друrое, Te стировщики rлаВНЫ1 образом Иlеют дело с видимым управлением lIOТОКЩI, а не с внутренней структурой проrраммы, Какими спосо бами можно открыть ilaHHoe диа;lOrовое окно? Какие последователь ности команд меню позволят распечатать информаuию? Какие Olщии и КОIaНДЫ позволяют перевести проrраtМУ в данное COCTO яние? . Фуl/КЦUОl/алЫlOсть. Анализ ФУНКllиона;IЫIOСТИ проrpаммы позволяет сказать, удовлетворяет ли она требованиям и ожиданиям пользова теля, Например, иrра можст обладать исключительно простым и удобным интерфейсом, не иметь ощибок, МПIOВСI!lIO реаrировать на действия пользователя, обладать прекрасным звуком и rрафикой, но, если при этом иrрать в нее будет неинтсресно, такаи иrра ничеrо не стоит и на ее коммерческий успех рассчитывать не придется, Стратеrия разработки компонентов TeCToBoro плана Изложенные в этой книrе сведения можно прекрасно дополнить кни rами таких авторов, как Эванс (Evans, 1984) и Хезсл (Hetzcl, 1988), У них иной, но не менее полезный и практичный подход к планированию тести рования, Поступательная разработка тестовых материалов в традищюнной литературе о разработке проrраМЧllOrо обеспе'Iения утверждается, что настояшая команда разработчиков С;lедует ,l1етоду вoдo пада, Этот метод предполаrает, что проект проходит ряд последовательных фаз  от ана;IИза требований до создания проектных документов, за KOTO рыми следует кодирование, окончательное тестирование и выпуск, Однако на практике все не так просто, и ЩL1еко не всеrда удается при держиваться четкой последователыlOСТИ этапов, Подробнее об этой пробле ме можно прочитать в превосходной книrе Тома I'илба (Тот Gilb, Priпciples о[ So[tware Eпgeпeering Maпageтent, Addison Wesley, 1988) и ero статьях, (Можно также обратиться к таким авторам, как I'олд и Льюис (Gould & Lewis, 1985) и Бейкер и Бакстон (Baecker & Вихtoп, 1987, rлава 11)), В качестве а;Iьтернативы традиuионному подходу I'илб предлаrает раз бить про!'рамму на ма;Iенькие фраrменты и по очереди проектировать, писать и отлаживать каждый из них в комплексе с уже rотовой частью проrра\IIЫ, Таким образом, у вас постоянно будет uелОСТНая и работающая система, ссли ло(jавлить к ней функuии в порядке их приоритета, вы Bce I'да будетс ЗНJ1Ъ, 'ITO саlая важная работа уже выIIлнена,' Со временем 
Тлава 12: Плаltироваltие и дОКУl>fеltтация 301 "porpaMMa вырастет в надежный и полезный продукт с боrатьши возмож ностями, Вы же сможете постоянно расширять трсбования и совершенство вать проект, понимая по ходу разработки, каким он должен быть, И обратите внимание, что стои,юсть этих усовершенствований будст ИСКJIЮ чительно низкой! В следуюшей rлаве мы еше вернемся к обсуждению методолоrии раз работки продукта, а в этой сосредоточимся rлавным образом на плане тестирования, Независимо от метода разработки продукта в uелом, ero тестирование и, в частности, разработку TecToBoro плана лучше Bcero BЫ полнять эволюuионным способом, Вместо Toro чтобы разрабатывать один большой тестовый план, можно начать с одной из ero составляюших и постепеНl10 расширять этот документ, добавляя в Hero все новые и новые раздслы, Разработав первую часть плана, можно приступить к поиску ошибок на ero основе, Следуюшие разделы будут уrлублять и расширять области поиска, Лучше Bcero добавлять разделы в план в порядке их при оритета, чтобы к TO\IY моменту, коrда руководитель объявит, что тестиро вание оКончено и продукт выходит в свет (а это может случиться в любой \юмеIП), вы были уверены, что все наиболее важные тесты уже выIIлне ны, Такой эволюuионный подход, на наш взrляд, rораздо эффективнее традиuионноrо метода водопада, даже если оста;IЫIaЯ часть команды раз работчиков следует этому второму методу, Однако имейте в виду, что это вопрос спорный, . Канер (Kaner) и Фолк (Folk) полаrают, что для тестирования Прl1 кладноrо проrраммноrо обеспечения эволюuионный подход ВССiЛа лучше, . НI)'йен (Nguyen), напротив, рекомендует метод водопада, IIрt:ДJlаl'ая снача;Ia написать llOЛНЫЙ план, утвердить ero и только llOслt: тппо приступать к тестированию, Он считает, что это осоБСIНIО важно, коrда весь проuесс разработки ведется по настояшеIУ \1t:ТОЛУ ВО;LO пада, Настояший метод водопада означает, что началу ра'\раlЮI ки TecTOBoro плана предшествует утверждение ПOJIIIOЙ 11 II<)Лро(jIIOЙ спеuификаuии, В больших проектах часто И\lеllllO laK и lJl.IBacT, Если же спеuификаuия не так подробна И;IИ IlреЛllOлаlаt:IОI, 'по 110 ходу дела она без предупреждения булет \ICIJ}IТI.OI, IIlyiit:11 такжс рекомендует эволюuионный подход к lТСЛIРОВ;IIIИIO, Похоже, что традиuионный взrляд на Bl'11l1I Ilрt:;lIIолаrает обязательное следование методу водопада, неЗalJИСИ\1O ОТ ТОI о, как орrанизован весь проект в uелом, Это означаст, что ло Tt:X IlOp, IIOKa тестовая документаuия не будет завершена, никто не должсн Ilриступать к тестированию продук та, даже если он ужс вполне [отов к ЭТО\IУ, А тестировшики COOTBeTCTBeH 
302 Часпll' П: Приео\tы и теХItОЛОсИИ тестироваltия но ДOJIЖНЫ требовать IIOЛНУЮ СIlеuификаuию продукта, иначе они не CMOI)'T I1РИСТУПИТЬ к разработке cboel-о I1лана, К сожа;Iению, традиuионный нодход не учитывает реа;IИЙ разработки ПРИК,lадноrо HporpaMMHoro обеснечения, А эти реалии Вк''lючают следую шие факты, . Прикладные I1роrpащ,щ разрабатываются в короткие сроки и Hepeд ко довольно неунорядоченно, И разработка, и тестирование начина ются до Toro, как заканчивается работа над документаuией, Более Toro, снеuификаuия можст и вовсе никоrда не быть завершена, ИЗ\lенения требований рынка в любой момент MorYT новлечь за собой HepeC\IOTp К,lючевых особенностей HporpaMMbI, носкольку rлавным и фактически единственным важным требованием являет ся ее конкурентоспособность, . Не во власти тестировшика или даже руководителя rpYlIIlbI тестиро вания изменить философию компании, Итак, rлавное, чеIУ следует научиться,  это максимально эффектив но ВЫIIOЛНЯТЬ свою работу в сушествуюших условиях, По нашему же оныту лучше Bcero этому снособствует эволюuионный подход к тестированию, Следует упомянуть о двух rлавных нреимушествах эволюuионной раз работки TecToBoro нлана, . При тестировании \Iетодом водонада вы сначала обдумываете и планируете всю работу и только затем приступаете к ее ВЫllOлне нию, На бумаrе все выrлядит прекрасно, но на деле можно узнать продукт как следует только после ero хотя бы KpaTKoro тестирова ния, Не может же планирование работ предшествовать изучению продукта, ТаКИ\1 образом, наиболее IlOследоватеЛЫIЫМ является как раз эволюuионный Iетод, позволяюший проектировать будушую работу на основе уже полученноrо опыта, . Предположим, что у вас в руках прекрасная снеuификаuия, напи санная в самом нача;Iе разработки, (Именно так и должно обстоять дело, если следовать методу ВОДОllада,) Вы нриступаете к нанисанию плана пара;IЛельно с проrраммированием, чтобы к моменту ero за всршения быть rотовыми начать тестирование, Однако в течение первоrо [ода разработки в спеuификаuию вносятся серьезные изме нения, вызванные техническими нроблемами и изменениями требо ваний рынка, В результате львиную долю средств, выделенных на 1't:СПlрование, придется потратить на переработку TecToBoI'O плана, J 101 () IIC случится, если работать ЭВОЛЮl\ИОННЫМ методом и плани pOBaHI се I ы 110 Iepe Toro, как будет нриближаться их черед выпол неllШl, 
['лава 12: Плаltироваltие и дОКУЛ1L'lInlШ(Шl 30] ! 11,lcTpoTa реализаuии проекта являстся важнейшей состаВЛЯЮlllей OGIlLl> " f..:I'IL:CTBa проведения работ, (Подробное обсуждение этоrо вопроса \юж- '" IlаЙПI у Джурана (1uran, 1989, с, 49), ) Как правило, эволюuионный '" [\ОД К тестированию и разработке TecToBoro плана является наиболее "IКIРЫМ и дешевым способом, IIOЗВОJ\ЯЮШИМ I1РИСТУПИТЬ к работе сразу же '1" \авершении кодирования и сделать эту работу хорошо, Начальная разработка тестовых материалов Итак, используеIЫЙ нами ПОIlХОД предполаrает проведение тестирова 11/1}1 пара:шелыlO с работой Над el'o IlЛаном, При ЭТО,\;I ни одно из этих двух Iс',1 не должно слишком да:lеко уходить вперед, Посвятив ,1ень ПJ\анирова IIIIЮ, I1роведите все же пару часов за КОМIIьютером, проверяя свои идеи на Il',IL:, А конuентрируясь на тестировании, дсржитс IIOД рукой блокнот ;VIЯ J,IIIlIСИ новых идей, Еше лучше работать сразу с двумя КО,\lПьютt:раlII, IIСIIO;IЬJУЯ один Д,1я тестирования, а ;\руrой Д,1я работы над планом, Таки\! "r)ра'Ю,\;I, Ht: пропадет ни одна из хороших Iцей, прише;\ших Ba1 в l'onoBY 11 ходе работы, и все они бу;\ут рсализованы наилучшим образом, Пона'lа:lУ Il'СI'ОВЫЙ план может выrля;\еть просто как набор заметок, Но со времене,\! 110 чере юrо, как вы будете получать все больший опыт работы с I1pO 1 ра\IМОЙ, все большс о ней узнавать и находить все больше и больше ')IIII!60К  он бу;\ет приобретать все болес орrанизованный ви;\, На рис, 12,3 показаны первыс ШaI'И разработки TecToBoro плана, Рабо 1:1 lIачинается с поверхностноrо знакомства с проrраммой  ВЫllOлнения IIССХ ее основных кочан;\ н ОIlробования всех основных рсжимов, РИСУНОК 12,3. 1, ПО,lная проработка пользовательс коЙ ДОКУ\lеfпаuии 2, Первая версия Сllиска функuий 3, АЩL1ИЗ входных данных и оrрани чений (их связи и взаИ\юдействис IIOKa ИПlOрируются) "о.;тика эвОЛЮЦИОl1llОСО lIlестироваltия ( 1), Начало Постарайтесь понять, с какими I1роблемами столкнутся ее I10льзовате 111 в течение первых двух часов работы, Эти I1робле\IЫ лучше Bcero решить как можно раньше, . Тестироваllие по докумеllтации. Начните со сравнения поведения I1porpaMMbI с имеюшимся черновиком руководства I10льзователя, Если у вас есть спеuификаuия, сверьте проrрамму и с ней, Пройди тесь 110 руководству строчка за строчкоЙ, делая все, что в нем наIlИ сано, нажимая каждую упомянутую клавишу, Невероятно, как МНОJ'O 
304 Часть П: ПриеJ.fЫ и тех/{олосии тестирова/{ия про6лем выявляется в ходе этой работы, К тому же ее результаты оказывают неоuеНИ\IУЮ помошь как проrpаМ.\Iистам, так и техничес ЮНI lIисателям, . НаЧllите разработку тестовой докумеllтации с орzаllизациОIllIOi!О Лtатериала, lIапример, со списка ФУlIкций пpozpilммbI. В этот список включается все, что должна делать IIро!рамма, Старайтесь ничеrо не упустить, поскольку 1I0лнота этоrо списка будет определять полно ту тестирования продукта, Однако понача:lУ СIIИСОК будет да:lеко не полным, Вам будет не хватать rлубины знания продукта, и к тому же часть ero Функuий будет просто не документирована, В да:IЫlейшем список будет расширяться и в конечном счете охватит все Функuии проrра:\IМЫ, Об этом постепенном расширении списка Функuий мы еше поrоворим в одном из следуюших разделов, . ВыпОЛllите простейший аllализ zраllиЧIIЫХ условий. Подумайте об оrраничениях, которы:\\ соответствуют вводимые проrраммой дaH ные, Если проrрамма не разрушается, попробуйте ввести значения, выходящие за эти rpаниuы, В черновиках пользовательскоrо pyKO водства оrрани'!ения обычно не указаны, Что же касае;ся спеuифи каuии, то слишком уж часто разработчики не оставляют от псречисленных в ней требований камня на камне, Поэтому, тести руя проrpамму, придется ориентироваться только на pea:IbIlbIe [pa ниuы данных, Запишите, какими они оказались, и 1I0кажите свои заметки техническим писателям или проrpа.\lмистам, чтобы соrласо вать окончательный вариант поведения проrpаммы и внести изме нения либо в нее саму, либо в документаuию и собственные тестовые IIри:\\еры, Итак, начинайте с построения основ, Для работы с IIланом выберите инструмент, позволяюший с леrкостью просматривать и реорrаНИЗ0вывать ero компонеllТЫ, На этом первом этапе вы обязательно будете тестировать проrрамму, хотя и не слишком тщательно, Все же это позволит выявить ряд наиболее очевидных IIроблем, которые лучше Bcero устранить как можно раньше, А да:lее план будет уrлубляться и расширяться, 1I0ка не превратит ся в прекрасно орrанизованную тестовую документаuию, Что дальше? Итак, первоначальное знакомство с проrраммой завершено, Что же ;щльше? Каковы следуюшие наиболее важные области тестирования? На чем слсдует сосредоточить внимание и дальнейшие усилия? К сожа:lению, волшебной формулы здесь нет, Все зависит от ващих знаний и инстинкта теСТИРОВШИК<I, Можно только сказать, что, скорее Bcero, вы приступите к работе на;! ОЛIlоi1 нз шести областей, 1I0казанных на рис, 12.4, 
['лава 12: П1Шtироваltие и дОКУl>fеltтация 305 РИСУНОК 12.4. 1, Наиболее вероятные ошибки 2, Наиболее заметные ошибки 3, Наиболее часто используемые области проrраммы 4, Отличительные особенности проrраМ\IЫ 5, Сложнейшие для тестирования аспекты 6, Самые понятные для вас ФУНКUИОIНL1ьные области 1,/hll1//Ka ,,'" tЮЦИОННОСО ""'стироваItUЯ (2) . Наиболее вероятllые ошибки. Если известно, что в определенной части проrраммы очень MHoro ошибок, поработайте прежде Bcero с ней, Внутри проrраммы ошибки обитают колониями, В ходе иссле дований, проведенных Майерсом (Myers) в 1979 [оду, 47% ошибок было найдено в 4% всех модулей систе\lЫ, Это пример, иллюстри рующий совершенно реа;IЬНУЮ тенденuию  чем больше ощибок обнаружено в определенной области проrpаммы, тем больще их еще предстоит там найти, И даже вносимые исправления с больщей чем обычно вероятностью влекут за собой новые ошибки, Те области, которые в ходе первонача;IЫlOrо тестирования показа;\И себя наибо лее слабыми, останутся такими и в да;IЫlейшем, Поэтому лучше Bcero начать с ними работать как можно раньше и как можно обсто ятеЛЫlее, . Наиболее заметllые ошибки. Можно поступить и иначе  прежде Bcero сконuентрироваться на тех ошибках, которые более Bcero за меПIЫ 1I0льзователю или наиболее неrативно скажутся на ero работе и на ero впечатлении о продукте, Подумайте, какие части проrрам мы будут использоваться чаще друrих, какие ее возможности BbIrok но отличают ее от конкурентов и какие функuии наиболее важны для 1I0льзователя, Те из функций, которые са1И по себе хороши, но не являются жизненно важными КОМllOнеlпами IIродукта, можно протестировать во вторую очередь, Если они не работают, это, KO нечно, IIЛОХО, НО rораздо хуже, если не функнионируют базовые элементы 11 родукта , ведь TOrдa это вообще не продукт, . Наиболее часто используемые области npozpaммbl. Ошибки в этих областях 1I0ВТОРЯЮТСЯ без кон на, Поэтому, даже если они не особен но серьезны, 1I0льзователь вскоре почувствует раздражение, . Отличительные особеllности пpozpaммbI. Если вы продаете базу данных и утверждаете, что она сортирует табли ны в 48 раз быстрее, чем IIрОДУКТЫ конкурентов, функнию сортировки следует протести ровать особенно тщательно, Если сортировка и в самом деле ВЫIIOЛ няется быстро, но неllравильно, вряд ли это 1I0нравится пользователям, Высоко оптимизированные фраrменты кода явJ1яют 
306 Часть П: Прие,ltы и теХItОЛОсИИ тестироваltия ся потенuиа;IЫIЫ\1 ИСТОЧНИКО\I ошибок, которые к TO\IY же тру;що исправлять, IlОЭТО\IУ че\1 раньше вы сообшите о подобных ошибках, те\1 лучше, . СЛОЖllейшие для тестировШlия аспекты. Поrоворите с проrра\I\IИ СТО\I и спросите у Hero, есть ли в проrРЮН,lе особенно сложные области, об ошибках в которых ему не хочется даже думать, ВIIОЛ не возможно, что он расскажет вам о таких областях, В этом случае возьмитесь за их тестирование как можно раньше, как минимум за несколько \Iесяuев до окончательноrо вьшуска продукта, чтобы у проrраммиста было достаточно времени на исправление найденных там ошибок, Иначе, если вы найдете в такой области ошибку за неделю до выпуска, у проrраммиста будет инфаркт или он уволит ся И ошибка так и не будет ИСllравлена, . Самые пО1lЯтllые для вас фуlIкциоIlQлыlеe области. Возможно, вы чита;IИ IIроrраммный код или хорошо знакомы с IIродуктами 1I0доб Horo ТИllа, Это значит, что отдельные области IIporpaMMbI вам Ha столько хорошо знакомы, что вы [отовы немеД,1енно IIРИСТУIIИТЬ к их тестированию, Так и 1I0СТУllайте, С ОСТaJlЫIЫМИ составляющими IIporpaMMbI вы IlOзнакомитесь 110 ходу тестирования, Работая с наи более IIOНЯПIOЙ частью IIporpaMMbI, 1I0старайтесь разобраться, как она взаимодействует с ОСТaJlЫIЫМИ частями, В результате, даже если выбранная область не является критической, вы приобретете xopo ший OllbIТ, выявите ряд ошибок и в ДaJlЫlейшем быстрее разберетесь с остальными составляющими IIродукта, Уrлу6ление TeCToBoro плана Тестовый IlЛан можно уrлубить IIYTe\1 добавления к нему разнообразных KOMIIOHeHTOB: СIIИСКОв ФУНКllий, друrих рабочих СIIИСКОВ, деревьев IIрИНЯ тия решений, диаrрамм rраничных условий, тестовых матрин и т,д, Все это ваши средства анализа IIporpaMMbI и выделения необходимых тестов, . В следующем разделе, "КО\lllOненты IIлана тестирования", paCCKa зывается о назначении всех этих KOMllOHellТOB и о том, как их раз рабатывать, Вы узнаете о том, какую роль в их создании иrрает эволюuионный подход, . После Оllисания отдельных КОШlOнентов речь 1I0йдет об их объеди нении в различных типах IIлановых ДОКУ\lеIIТОВ, . Затем IIредмет дискуссии расширяется, охватывая орrанизанию Te cToBoro IIроекта и назначение IIриоритетов отдельным задачаI, Эти BOllpOCbI освещаются в rлаве 13, В этой же rлаве, в нескольких разделах, IlOсвященных проведени ю тестирования IlOсле вьшуска ал ьфа версии IIродукта, IIродолжается дальнейшее рассмотрение пронесса разработки TecToBoro IIлана, 
Тлава 12: Планирование и дОКУ;ltентаllИЯ 307 Компоненты плана тестирования в ЭТОм разделе в качестве лримера тестируемой Лро rpaMMbI выбрана система отслеживания лроблем, (Кроме Toro, мы лользуемся и лримером системы, вылисывающей счета, Нам нужна была лроrрамма, на лримере которой можно было бы составить таб лицы, лриведенные на рисунках 12,512,11, Поскольку о системе OT слеживания лроблем рассказывал ось в rлавах 5 и 6, читатель хорошо с ней знаком,) Читая ЭТУ rлаву, рассматривайте систему отслеживания лроблем не с точки зрения ее разработчиков и лользователей, как вы делали ЭТО раньше, а с точки зрения человека, который занимается ее тестиро ванием, Пусть вас не смущают некоторые детали системы, о которых в rлаве 6 ничеrо не рассказывалось, Они введены здесь лросто для лриме ра и MorYT Изменяться от комлании к комлании, В этом разделе Оllисываются строительные блоки тестовой ДOKYMeHTa ции, Весь IIронесс IIланирования орrаllизован BOKpyr четырех базовых ти llOB диаrрамм, IIримеры которых IIриведены на рис, 12,5: . СIIИСКИ; . табли ны; . IIланы; . матри ны, Все это очень краткие ДОКУ\lеIIТЫ, Они 1I0казывают, что необходимо знать о тестируемой IIporpaMMe, Эти документы 1I0ЗВОЛЯЮТ быстро орrани зовать работу, а также выделите BOllpOCbI, которые вы не 1I0нимаете, и те, в которых разбираться не обязательно, Теоретически все эти СIIИСКИ и таБЛИl\Ы можно составить на основе Сllеl\ификаuии, Однако на самом деле именно они 1I0моrли бы вам выявить "бреши" в Сllеuификаuии, если бы ктонибудь 1IOIIрОСИЛ вас ее проанали зировать, На самом деле лишь в очень редких случаях Сllеl\иФикации I1рикладных IIporpaMMHbIX IIРОДУКТОВ настолько 1I0дробны, чтобы 110 НИI ожно было составить все lIеречисленные документы, В результате Ila их фОРlИрование уходит львиная доля времени, выделеННОI'О на lI;Iаllирование вашей рабо ты, Тем не менее, они ИСI<..тючите:lhllO ваЖIIЫ, а IIOTOMY мы настоятельно рекомендуем взять их разработку за неrУШИ\lOе нравило, Увлекшись разработкой СIIИСКОВ 11 la();lltll, ничеrо не стоит выбиться из рабочеrо rрафика, так как IIронесс :ЛОТ трудоемкий, а анализируемый материал очень объемен, 
308 Часть 11: Прие,lIЫ и технолосии тестирования r:-... Списки СIIИСОК отчетов Список входных и выходных переменных Список возможностей и функuий Перечень материалов Список файлов ПрOlраммЫ СIIИСОК сообщений об ошибках CIIl\COK совместимоrо оборудования ! СIIИСОК совместимых ПроrpаIМ Список КОНфИl)'раuий совместимой операuионной среды СIIИСОК lIубликуемых документов Таблиuы Таблиuа отчетов Таблиuа входных и выходных значений Таблиuа ввода/вывода ! Таблиuа решений Таблиuа клавиатурных комбинаuий Таблиuа совместимых Ilринтеров Диаrрамма rраничных значений Планы СШIСОК Функний (иерархические СIIИСКИ) ,.. Матриuы Матриuа аппаратной и IIрOlраIМIIOЙ совместимости Матрица аппаратных КОНфИI)'раuий Матриuа Оllераuионных окружений Матриuа комбинаuий входных значений ! Матриuа сообщений об ошибках и клавиатурных комбинаuий , РИСУНОК 12.5. Прщtеры КО;lт0нентов плановой дОКУ;ltентации ПО::ПЩIУ lbI рекомендуем составлять таблиuы IlOcTelleHHo, параллель но с тспированием продукта, Прежде Bcero формируются основы всех базовых ДОКУlентов. а затем они постеllенно дополняются ранее неизвес ПIЫМ факта1И и IIOВЫIИ уровнями детализаuии, Этот эволюuионный под ход МЫ ПРОИЛ;JюстрирУОI несколькими при мерами, 
Fлава 12: Планирование и дОКУ;ltентаllИЯ 309 !jольшая часть информаuии IIOШlдает в наши таблиuы из Сllеuификаuии, ,1\/t:TOK разработчиков, черновиков руководства 1I0льзователя и друrой дo \ \lеllТаuии к IIРОДУКТУ, а также из устных бесед с IIроrраммистами и py '1Iюдителе\1 IIроекта, Еше одна значительная часть информаuии, иноrда до ,С'с, является результатом собственноrо Оllьпа тестировwиков, 1I0лученноrо \о;\е ЭКСlIсриментов с IIроrраммой, Такова действительность: вы ВЫIIOЛ l'1t:le тесты, ишите rраничные условия, комбинируете входные данные и '1IОРlИруете отчеты таких форматов, каких руководитель IIроекта никоrда ;, IiС 11 peДlIOл, ar3:1 Иноrда, хотя и Д3:Iеко не всеrда, руководитель IIроскта \lOжет IIроаН3:IИзировать 1I0лученные вами результаты и сказать, можно ли "IIlraTb IlOведение IIporpaMMbI IIравильным, В большинстве случаев вам IIРИДСТСЯ решать это саIИМ, Если вам 1I0кажется, что Оllределенные дей ,1 вия IIporpaMMbI нелоrичны или неДОIlУСТИМЫ, составляйте отчет об ошиб f-C, Если же вы не уверены в своем Вllечатлении, IIOMeTbTe отчет как Вопрос, И IlOслсднее заlечание, Составив СIIИСКИ и таблиuы, lIередайте их aB lopa1 1I0льзовательской и технической документаuии, Вся эта информаuия 11\1 очень нужна, Скорес Bcero, они отблаrодарят вас, IIредоставив собствен IlhIe таблиuы и схемы, и будут держать вас в курсе собственных открытий 11 недокументированных изменений IIporpaMMbI, Списки Наllисать СIIИСОК достаточно леrко, ]'лавное, ничеrо не УIlУСТИТЬ и вкJ[ю '1ltтb В Hero всс необходимые элеlеllТЫ, Зато IlOсле Toro, как это сделано, IIЫ будете избавлены от необходимости IIOСТОЯННО о них IIOМНИТЬ, Списки отчетов и экранных форм Самым lIервым делом составляются два важнейших Сllиека, отражаю /IlИХ ключевые ФУНКЦИИ IIpC'rpaMMbI, это СIIИСКИ входных И выходных ФОР\I, В lIервый из них ВК,lючаются все экранные формы ввода данных, и 1\ том числе диалоrовые окна, Во второй входят все отчеты  как lIечатные, П1К и выводимые на экран или в файлы, Оllираясь на эту информаuию, \IOЖНО затем составить СIIИСОК всех lIеременных, которыс IIporpaMMa OTO бражает и lIечатает, и всех lIеременных, значения которых вводятся IIOЛЬЗО вателем, На рис. ] 2.6 IIриведен пример Сllиска отчетов системы отслеживания I/роблем, Этот IIРОСТОЙ СIIИСОК ИСК,lючительно важt:н, Ведь, тестируя сис l'eMY, IIридется IIроверять каждый отчет 110 MHory раз: как минимум 110 о;щому разу на каждом UИК,lе, А раз так, вам не обоЙтись без TaKoro KOH I-рольноrо СlIиска  ина'lС как rарантировать, что ни один из отчетов не иу;\ет IIрОllушен? Кроме Toro, если OPICTbI будет rенерировать друrой Tec тировшик, вам нсобходимо будет дать eIY их СIIИСОК, особенно если сам он \13:10 знаком с IIроrраммой, 
31 О Часть 11: Прие;llЫ и техНОЛОсИИ тестирования . Отчет о Ilроблеме (рис, 5,1 из rлавы 5) . Сводный отчет о новых Ilроблемах (рис, 6,1 из rлавы 6) . Состояние Ilроекта (рис. 6,3 из rлавы 6) . Завершение uикла тестирования (рис, 6.4 из rлавы 6) . Нерешенные Ilроблемы, отсортированные 110 стеllеням важности (рис, 6.5 из rлавы 6) . Нерешенные щюбле\IЫ, отсортированные 110 rpYIllJaM раз работки (рис, 6,6 из rлавы 6) . Отложенные Ilроблемы (рис, 6,7 из rлавы 6) . Еженедельные итоrи (рис, 6,8 из rлавы 6) . Акт о Bb\llycKe (рис, 6,9 из rлавы 6) . Заllлатки (рис, 6,10 из rлавы 6) РИСУНОК 12,6, Отчеты, Щlеющиеся в систе;llе отсле:JlCивания пробле;ll Список ВХОДНЫХ И ВЫХОДНЫХ переменных Составьте СIIИСОК всех lIеремснных, значения которых вводятся IIpO rраммой  будь то черсз экранные формы, диаJlоrовые окна или каким либо иным СllосоБОI, Примером такой lIеременной может быть Номер отчета о проблеме, Этот номер у каждоrо отчета свой, но у любоrо отчета он обязательно Иlестся, Каждое lIоле отчета о IIроблеме IIредставляет co бой отдельную lIеременную, значение которой задается IIрИ вводе отчета либо ва\lИ, либо самой системой, Тестируя систему отслеживания IIроблем, вы составляете СIIИСОК всех ее lIеременных, начиная, конечно, с формы отчета о IIроблеlе (рис, 5,1 из rлавы 5), Часть их lIеречислена на рис, 12,7, Структурой отчета Оllределяется, что одни из ero lIеременных MorYT содержать только числа, такие как Номер отчета о проблеме, друrие IIpeдllaJHa'leHbI для ввода нсскольких строк Tt:K<:la, такис как lIеременная Подробное ОIlИС<lllИе проблемы и как ее воспроизвести, Номер отчета о Ilроблеме Название IlporpaMMbI ВЫIlУСК (число или буква) Версия (число или буква либо дата) ТИII отчета CrelleH ь важности Приложения (Д/Н) Оllисание Ilриложений Проблема Подробное Оllисание Ilробле \Ibl и как ее ВОСllроизвести РИСУНОК 12.7. Некоторые данные, вводЩlые в ФОр,ltу отчета о пробле,ltе 
Тлава 12: Планирование и докуltlентаllllЯ 311 если проrрамма читает данные с диска, выясните у руководителя IIpO f-I'a, какова структура соответствующих файлов, ВК,lючите в СIIИСОК и те "l'peleHHbIe, значения которых вводятся из файлов, По мере уrлубления : с'стирования стоит 1I0думать о написании собственной тестовой IIporpal \11>1, HellocpeLIcTBeHHo читаЮщей файлы данных и IIроверяющей KoppeKT [[ость их содержи Moro, Формат файлов данных нередко меняется в ходе 1',lзработки, IIричем руководитель IIроекта ВllOлне может забыть вас об этом IIредупредить, а может и сам быть не в курсе этих изменений, Подобные , Iучаи  IIрекрасная возможность найти новые ошибки, Обязательно следует составить СIIИСОК и всех выходных lIеременных, lIl:чатаемых в отчетах, выводимых на экран в ответ на заllрОСЫ 1I0льзова I еля и lIередаваемых друrим задачам или даже друrим КОМllьютерам, Рассмотренные нами СIIИСКИ представляют собой lIеречень тех lIepeMeH IJЫХ, которые IlOдлежат HellocpeLICTBeHHOMY тестированию, Однако они не (одержат всех необходимых сведений об этих lIеременных, и в частности, l'ледующих, . В Сllисках ничеrо не сказано о том, [де искать lIеречисленные в них lIеременные (в каком диалоrовом окне или отчете), Эта ИНфОрIaUИЯ вносится в отдельные таблиuы, такие как на рисунках 12,11  12,13, . Из них не видно, каковы ДОllустимые и неДОllустимые значения каждой lIеременной, Для их Оllисания служат диаrраммы, 1I0добные IIриведенным на рис, 12,17, . В них не отражены взаимосвязи Iежду входными и выходными значениями, (НаIlРЮlер, в 1I0ле Проблема cBoLIHoro отчета выводят ся данные из одноименноrо 1I0ЛЯ исходноrо отчета о IIроблеме, Разумеется, не BcerLIa выходная lIеременная имеет то же и:-,,\я, что и входная, однако выходные данные BcerLIa так или иначе форlИрУЮТ ся на основе входных, и эти алrоритмы должны быть вам известны,) Нередко вьfходная lIеременная является IIрОСТО КОllией одной из входных, однако их связи MorYT быть и rораздо более сложными, Рассмотрим систему, ВЫllисывающие счета за сделанные 110 IlOчте заказы, Ее входными документами MorYT быть заказы, а входными lIеременн ыми  наименования и цены заказываемых товаров, Bы ставляемый заказчику счет содержит набор выходных IIсременных, Одна из них  это общая стоимость 1I0КУIIКИ, вычисленная на oc нове иен отдельных элементов, Вторая  это сумма налоrа, которая, хотя и не отражает IIрЯМО значения входных lIеременных, все же BЫ числяется на их основе, Третьей Ilеременной может быть итоrовый баланс, ВК,lючающий общую стоиюсть 1I0КУIIКИ с налоrом и, воз можно, задолженность IlOc;le Ilредыдущих 1I0KYIIOK, Заметьте, что за долженность извлекается из фаЙ;lа данных, а не из теКущеrо заказа К,lиеlпа, 
312 Часть 11: Прие,ltы и технолосии тестирования Взаимосвязи между входными и выходными переменными лучше Bcero описываются в форме таблиuы ввода/вывода, примеры KOTO рой приведены на рисунках [2,2 и [2,3, Несмотря на то что в базовом списке переменных отсутствуют подроб ные сведения о каждой из них, этот список исключительно полезен, Преж де Bcero, он является основой построения ряда более подробных таблиu, Кроме Toro, как минимум на первых трех UИI<..lах тестирования у вас про сто не будет времени на сбор всей этой детализирующей информаuии, Единственным контрольным средством будут списки переlенных ввода/ вывода, Тесты Д,lЯ каждой из них придумываются на ходу, а допустимые значения определяются интуитивным и пробным путем, Разумеется, эти тесты не будут такими обстоятельными и элеrантными, как те, которые вы затем включите в тщательно продуманные планы, однако Д,lЯ начала они вполне подойдут, Следует добавить, что на начальных этапах тесТирования у вас не бу дет ни времени, ни достаточноrо знания ПрOl'[Jаммы Д,lЯ Toro, чтобы COCTa вить абсолютно полный список переменных, Рассматривайте то, что получится, лишь как первую версию, В дальнейшем наверняка будут обна руживаться новые диалоrовые окна, новые отчеты, новые файлы данных, а также измененные версии тех ДИaJlO/'ОВЫХ окон, отчетов и файлов, KOTO рые вы уже включили в свои списки, Список возможностей и функций Прежде Bcero составьте список тех функuий проrраммы, которые оче видны Д,lЯ ее пользователя, Включите в Hero все команды меню, парамет ры командной строки, всевозможные кнопки и ОПuИИ и т,п,  все значительные возможности, имеющиеся у проrраммноrо продукта, Это будет список функuий caMoro BepxHero уровня, Позднее вам предстоит составить список подфункuий и подподфунк uий, В конечном счете получится подробный и cTporo структурированный перечень всех возможностей продукта, (Мы рекомендуем пользоваться Д,lЯ е/'о создания спеUИaJlЫIЫМ проuессором иерархических списков или пла нов,) Полный список функций будет вашим путеводителем по прorрамме и одновременно контрольным инструментом для прохождения каждоrо uикла тестирования  он IlOможет ничеrо не забыть и одновременно позволит отмечать, что уже пройдено и что еще осталось, В случае с системой отслеживания проблем первый черновик списка функuий может выrлядеть так, как на рис, [2,8, В нем Bcero десяток эле ментов, Однако следующие версии этоrо списка будут уже rораздо более llOЛНЫМИ, 
Тлава 12: Планирование и дОКУ,ltентация 313 Составьте список всех [eHe I'\\руемых проrраIМОЙ сообще 'JI\Й об ошибках, Если этот _II\\СОК нельзя будет просто по 1\''lИТЬ У руководителя проекта 1\ ,отовом виде, попробуйте BOC 'JO:lьзоваться утилитой, которая Ilтлекает текстовые сообщения 11; исполняеюrо файла, а перед 'Пlм выясните у проrраммис IOB, имеются ли в проrрамме 'I,айлы ресурсов: возможно, что !>се сообщения последовательно IIсречислены в одном из таких ,IJ<\Й;ЮВ, Если же сообщений не ')удет ниrде, кроме кода, а он в IlеllOлняемом виде по какойлибо причине не поддается анализу с lIOMO Illl,Ю утилит поиска текста, попросите у руководителя проекта, чтобы он Ilредоставил вам исходный код проrраммы, Вы обязаны протестировать каждое состояние проrраммы, которое IIРИВОДИТ к сообщению об ошибке, Обязательно заставьте ее вывести все Iюз\;южные сообщения, Прочтите их внимательно, Достаточно ли они aдeK l\аПIЫ И информативны? Как ведет себя проrрамма после вывода сообще 11 ия об ошибке? Восстан авли вает л и он а свою работоспособность и Ilравильно ли она это делает? Будьте [отовы к тому, что обработка ошибочных ситуаuий окажется 'уже Bcero сделанной частью IlporpaMMbI  непродуманной и кишащей ошибками, Поэтому важно как следует продумать свой инструментарий: ,Iучше Bcero Д,lЯ тестирования этой части проrраммы подойдет не просто СIIИСОК сообщений об ошибках, а подробная таблиuа для проверки KoppeK 1 1i0СТИ восстановления проrpаммы поле каждой из ошибочных ситуаuий, tl YTb позже мы рассмотрим пример такой таблиuы, чтобы было lIOНЯПlее, о чем идет речь, Список сообщений об ошибках [, Вывод окна заставки (с датой, авторскими правами и т,п,) 2, Ввод имени пользователя 3, 4, Ввод новых отчетов о проблемах Редактирование старых отчетов о проблемах 5, Работа с файлами данных 6, Работа с фаЙJ\а1И ПРИJ\ожений 7, Формирование итоroвоrо отчета 8, Системные утилиты 9, Разработка новых форм и отчетов I О, Справка РИСУНОК 12.8. Первый черновик списка функций систе;llЫ отслеживания пробле;ll Список файлов nporpaMMbI Дату и время создания файлов проrраммы и тех их версий, которые OJlисаны в вашей документации, спедует периодически сравнивать, Даже ссли руководитель проекта и будет IIредоставлять вам списки вносимых в J'IИ файлы изменений (что вполне вероятно), ero список может быть непол 
314 Часть П: Приемы и технолосии тестирования ным, Если вам известно, с какими данными или функuиональными обла стями проrраммы связан каждый из файлов, сравнение их версий позволит быть в курсе изменений проrраммы, а значит, и llOтеlщиалЫIЫХ ОШl<бок, Иноrда все файлы проrраМIЫ перечисляются в ее документаuии, Если в вашем случае это так, сравните этот список со своим и передайте aBTO рам документаuии перечень расхождений, Перед выпуском пpozpaммbI вы ОБЯЗАНЫ убедиться, что lIа дистрибутивllЫЙ диск помещеllЫ самые последllие версии пpozpaммllbIX файлов. Вы себе даже не представляете, как часто компании распространяют диски не с теми файлами, и вынуждены эти файлы заменять, Это очень неприятно и очень дороrо, Конечно, получив комплект дистрибутивных дисков в самую последнюю минуту, так и хочется отослать их на размно жение, ВЫllOЛНИВ лишь самую поверхностную проверку, Но Не поддавайтесь этому искушению, Проверьте всю информаuию самым тшательньш образом, Ведь речь идет о результате всей вашей работы! Список совместимоrо оборудования Составьте список компьютеров, принтеров, мониторов и всех прочих устройств, с которыми должна работать тестируемая вами проrpамма, Об ратитесь к rлаве 8  в ней вы найдете MHoro полезных сведений о тести ровании аппаратноrо обеспечения, Список совместимых nporpaMM Составьте список всех проrрамм, с которыми тестируемая вами про [рамма должна успешно работать, Протестируйте каждую из них на COBMe стимость, Расширяя этот список в ходе дальнейшеrо тестирования, внесите в Hero не только проrраМIЫ, но и их взаимодействуюшие KOMllOHelIТbI, Вообше, llOнятие совместимости двух проrрамм может иметь различный смысл, . Обе проrраммы сосушествуют в памяти компьютера, . Одна из проrрамм читает файлы данных друrой, . Проrраммы обмениваются сообшениями, . ПроrраIМЫ должны хранить данные в одном и том же формате, . В проrраммах одинаковые команды выполняются с помошью оди наковых клавиатурных комбинаuий, . ПроrраМ\IЫ следуют одним и тем же соrлашениям о пользователь ском интерфейсе, 
Тлава 12: Планирование и документация 315 Список совместимоrо операционноrо окружения Под управлением каких операuионных систем может работать тестиру , \Iая вами проrрамма, С какими версиями этих систем она СОВlестима? I L:ЛИ ряд версий операuионной системы адаптирован к определенному I:шаратному обеспечению, с какими из них необходимо протестировать : IporpaMMY? Что, если одна из компаний выпускает операuионную систе чу, СОВlестимую с той, для которой разрабатывается ваш продукт,  сле :ует ли протестировать ero с этой системой? Поверх операuионной системы может работать uелый ряд резидентных \НIЛIП, ЭТИ ДОllOлнитеЛЫlые проrраМ\IЫ управляют сетью, различными IlIlешними устройствами или же расширяют базовый интерфейс ос. Ha IIример, поверх комаНДIIOориентированной операuионной систеIЫ может работать rpафическая пользовательская оболочка, Для полноuенноrо тестирования вам понадобится llOЛНЫЙ список всех "Ilераuионных систем, утилит, драйверов и интерфейсных оболочек, с которыми должен работать продукт, Если позволяет время, орrанизуйте IIllформаuию в таблиuы, отражаюшие связи между всеми этими KOMlIOHeH :ами (например, какая оболочка для какой операuионной системы долж IIа запускаться), Перечень материалов В перечень материалов включается все, что входит в комплект постав Klt проrраммноrо продукта, проше I'ОВОрЯ, все, что пользователь найдет в коробке, Это прежде Bcero все диски, а также все рекламные листовки и буклеты, документаuия, странички исправлений, наклейки на коробке и все остальное, что является частью проrраммноrо продукта, Все перечисленное в списке материалов вы обязаны проверить, CTporo следуя этому списку, вы 1 арантированно ничеrо не упустите, Список публикуемых документов Все связанные с проrраммой документы, которые выйдут за пределы вашей компании, также подлежат самой тшателыlOЙ проверке, Это aHOH сы, реклама, пользовательская документаuия, различные буклеты, листки с ответами rруппы технической поддержки, материалы, рассылае,\1ые по \lOчте, руководства по диаrностике и СОПРОВОЖJению продукта, инструкuии по ero установке, прессрелизы, копии изображений на коробке и наклей ках и МНOI'ое друrое, Список всех этих материалов поможет ничеrо не забыть и вовремя проверить каждый из IlИХ, 
316 Часть П: Приемы и технолосии тестирования Таблицы у списков есть один недостаток  информаuия в них не орrанизована, и связи между их отдельными элементами никак не видны, Свою роль напоминания и контроля они выполняют прекрасно, но там, [де важны связи, удобнее воспользоваться табличной формой орrанизаuии и НфОр\!aJIИИ , Для иллюстраuии проuесса формирования и использования таБЛИI\ дa вайте предположим, что разработчики системы отслеживания проблем модифиuировали ее таким образом, что она автоматически печатает отче ты в определенные дни, Это усовершенствование необходимо протестиро вать, Т,е, убедиться, что отчеты действительно печатаются вовремя, Самой естественной схемой для вашей работы и будет приведенная на рис, 12,9 таблица, Таблица отчетов В таблиuе на рис, 12,9 перечислены те же отчеты, что и в списке на рис, 12,6, Все это  отчеты, rенерируемые системой отслеживания проблем, Однако в таблиuе есть место и для ДОllOлнителыlOЙ информации, В ней показано, коrда формируется каждый отчет и сколько ero копий печатается проrраммой. ИНфОр\IaUИЯ орrанизована в виде строк и столбl\ОВ, Обычно все они поименованы, . В первой строке обычно записываются заrоловки столбuов, отража ющие вносимую в них информаl\ИЮ, На рис, 12,9 в первом столб IIe перечислены отчеты, во BTOPO! указана частота их формирования, а в TpeTbt:M  количество копий каждоrо отчета, . Первый столбеu обычно показывает, какая информаl\ИЯ содержит ся в каждой строке, На рис, 12,9 в нем перечислены все отчеты проrраммы, Вся имеющаяся в строке информаuия относится к YKa занному в ней отчету, Отчеты на рис, 12,9 перечислены в том же порядке, в каком они раСС\IaТРИВа.;IИСЬ в rлаве 6, !L1Я начала это удобнее Bcero, lIOСКОЛЬ ку это rарантирует, что ничеrо не упущено, Однако для тестирова ния удобнее сrруппировать вместе все отчеты, печатаемые в один и тот же день, как на рис, 12,10, ведь и провt:рять их вы, скорее BCC [о, будете B!eCTe, Таблица входных и выходных значений На рис, 12,7 приведен пример таблиuы входных значений проrраммы, В перво\! столбl\е персчислены переменные  они взяты из списка на рис, 12.7, Во второ\! столбuе указаны названия диалоrовых окон или форм ввода данных, в которых llOльзователь вводит значения этих переменных, 
Fлава 12: Планирование и доку:.lентация 317 Q Qo е 1.1  ::- '::: ::: ::: а ::: ::с:  tI: 1.1 5   ::-  :::    ::-  '<t'  о '" '" Q) 5 о с::: iЛ :!s '" '" Е '" s .,.; u s ,3 Q) ::; Q) с; \о О О. с:: о .... Q) j'!: о <о о :Z: .о с;  :Z: Q)   ::; Q) с; \о О О. с:: >< ф о :Z: :!s '" о '" .... Е Q) j'!: '" о s '''' , :!S<O , О u '" s u,3 '" о :Z: .о с;  :Z: Q)  <о :!s '" '" Е '" s "" t.ci u s ,3 '"  Q) о о. с:: Q) s :Z: '" о .... u о U '" '" s :Z: '" '" о о. s .... u  '" ::2 s :r s s :Z: Q) 3 о. Q) '" '" '" о с::: '" s :Z: '" '" о о. s  ....<0 '" :!s ::2 gj E   'Ч: 3<0 о.   "",3 <о N N i N '" ''<t'  о :Z: .о  Q) :Z: Q)  <о :!s Q) '" :!s '" :Z: Е :Z: '"  s  i:i<O О , U U .... S 0,3 :!s s ::; .... Q) U   8. с:: '" Q) ::; :!s '" :Z: :Z: :Z: Q) Q) С:: 3  Q) U о. Q) о :I: С::  о.  1 '" ,о 01:Z: с:: :r !  ::i   <о :!s '" Q) '"  Е :Z: '"  s о о. <о ф о. @  0,3 '" ::;  Q) о с; \о \о '" О О. 0.'" с::  ::i Q) :Z: '" :!s :Z: с:: :Z: Q) с:: :Z: ii! е:   at a  :I: с:: О <о :!s '" '" Е '" s ..... t.ci u s ,3 :!s ::; Q) с; \о О О. с::  U >- с:: :!s '" '" о ё   о о. с::  о '" <о :!s '" '" Е '" s со t.ci u s ,3 :S: I CJ  'з s Q) !1;1 :!s U :Z: 1>- .о ' с:: :ij :!s <:t '"  о Q)  .5i  U >- с:: :!s '" '"  е   о о. с::  о '" <о  ! zo Е '" s '" t.ci '" s :Z: '" '" о о. s .... U  Q)  :r '" :Z:   с   '" '" '" :::: 5 ;s Е: с ':::: с  S :::: 1.1 " :;;  '" Е: '" :r " s::: :;;- Е: " :r Е: а са 0\ N ..... :!s '" '" Е  о :I: >- U :s: а.. '" s с> t.ci u s ,3  .... '" с; с:: '" "" 
318 Часть 1/: Прие,l/Ы и технолосии тестирования CJ >< CJ :s: J5 :s: J5M ..9:  ..9: :S:    '8 jCLJ CLJ а.. u;  8. f:: .3:18.  f:: фа. f:: а CLJ --.....-  lS:S:::J: :s: !   3 I I!ii;  "  ("1')10 (.) (.) I.m :  i ' I ' I ' I ! ) !   Ш I 5 5  е  ::о  :::    L....., [ I !  j (о : 111  I! !ц:; 5 ::о '" '" :z: '" '" О а. '" .... U Ф .... Ф  :r '" :z: са -.::t :(0 iЛ  О '" '" ф с; U О С ';:о- :!s '" '"  '" '" <ci u '" а.  ::; ,ф  'о а. t:: О :z: "'  <:t ф :z: ф  ""1 I ! i N! . I I I I 1 i N <о' :!s '" '"  '" '" м ц:; <о ::; '" :z: ф t:: Ф .... U О t:: Ф :!s :z: :z: '" '" О а. (O а. О :!s  €@ О Е' N N :N <о' :!s '" '"  <о' '" '" :!s '" '"   ц:; u '" а. '" '" ..... <ci '"  CO  :<0 О а. '" .... U Ф .... u '" а. I :!s ::; ф с; \о О а. t:: '" ;2 '" ;:j' ф :!s :z: :z: ф )Е , О 1 б ф '" ,'" Iф 3 а. ф '" '" с') '" '" :z: '" '" О а. '" .... U Ф .... '" ,;2 1", ;:j' О :z: :r '" U ф ::; ф  '" '" :z: ф 3 а. ф '" '" '" '" ::=: О ,О С : N ' ::; '" t:: t:: >- е- <>: '" <:; '" '"  " ;s '" Е: Е: с  .==s \u с s::: 5 ==s Е:  <.J ::( '" "   :;; с  s::: '" " ::   <:;  '"  :5  Е:     \J О   "с N с .....   о :I: Ь :s: а.. <о' О t:: :!s '" '"  ф :;; :z: :z: '" '" О а. '" Ь. О '" U :S: ! Ь <о' '" '" :!s '" '"  u '" а. '" ц:; u '" а.  ::;<0'  <ci i \о О ' а. С,) t:: '" а. ф :!s '" :z: "" :z: .... ф О з\0 a ф  :I: а. 2: О .... '" ф :!s :z: "'  <:t  :ф : ;'.!  t:: :!s '" О   U >- t:: :!s '" I ! i i I I >- ! 1  I t::  I "' а ...... _,".J '" О .... е 1;;;  О а. t:: 
Fлава 12: Планирование и документация 319 Этот столбеu назван ИСТОЧНИК, Значение переменной не обязательно J\IЮЩПСЯ в ОДНОIединствеIllIOМ месте проrраммы, поэтому в таблиuе при LYICTByeT еше один столбеu, названный Второй ИСТОЧНИК, (См, рис, [2,[[,) Структура таблиuы выходных переменных полностью аналоrична, разве '110 BlecTo окон, в которых данные вводятся (их источников), перечисля JlIl'СЯ формы, в которых они отображаются или печатаются, При этом за 1 о:ювок столбuа ИСТОЧНИК заменяется на Отчет, Параллельно с печатью и <)rображением на экране ИЛИ же вместо этоrо переменные MOI)'T сохранять C в файлах, В этом случае в таблиuу выходных переменных можно доба IIИТЬ еше один столбеu под названием Файл, (См, рис, 12,12,) Таблица ввода/вывода Любые вводимые в проrрамму данные должны ею использоваться, Они MorYT появиться в отчете, использоваться в вычислениях, для поиска дpy I'ОЙ нужной проrрамме информаuии или определения ее дальнейших дей ствиЙ, Как тестировщику вам необходимо точно знать, как используется зна 'Iение той или иной входной переменной, Что произойдет, если изменить се значение? На какие друrие данные это повлияет? То же самое можно сказать и о выходных переменных: вы должны IHaTb, откуда они берутся и как формируются, Почему проrрамма решает lIаrlечатать именно это значение, а не какоенибудь друrое? И какие еше "еременные вовлечены в проuесс принятия ее решения? Чтобы наrлядно представить всю эту информаuию, создайте таблиuу и I1 "ервом ее столбuе перечислите входные переменные, Во втором столб ,(е IIрОТИВ каждой входноЙ переменной укажите все выходные переменные, которые с ней так или иначе связаны, Суть каждой связи опишите в Tpe rbeM столбuе, Поскольку в системе отслеживания проблем нет хорошеrо обра:ща такой таблиuы, мы обратились к примеру проrраммы, выписыва юшей счета за заказанные товары, (Эта проrрамма была коротко описана несколько ранее,) Единственной приведенной в таблиuе входной перемен ной является цена заказанных товаров, Она связана с несколькими BЫXOД ными переменными, Две из четырех перечисленных в таблиuе выходных переменных OCIIO ваны на переменной Общаястоимость, которая, в свою очередь, зависит от переменной ЦeHaТOBapa, Будучи выходным значением, Общаястои мость является одновременно и промеJlCуточной переменной, т,е, промежу I'ОЧНЫМ результатом, полученным в ходе фОр\lИрования выходных данных на основе входных, Ее значение определяется вводом и, в свою очередь, определяет вывод проrpаммы, Иноrда полезно отслеживать не только значения входных и выходных данных проrраммы, но и се Щ)Q\lежуточные результаты, 
320 Часть 11: Прие,иы и технолосии тестирования ! I QJ iQJ aJ '   j ; 10 i о ;  I i I Ь i ь , I i1 : : \:z '\:Z ....!! CLJ ':S: :s: 6;", r:::t t; i  I   l '  I  a,Q.'Cl. 10 ! а : i i, , I :( :: ;: Q  ::: '::: Q   I  I ;: Q ::  i :i !'8 I о I о   g! i g1 bib : о о  I  i а : а : ! ! QJ ! \о ' 8. с:: ! :а о l:s  I   !  I g. Il I :!5 ::; QJ li I QJ  ':s: са l ' i6  .  8- \ 5   I  '" '" '" QJ  \с) CLJ    I  :_:J I I I 'а> 1::; I i'8 I о  QJ 7 .... О '"  '" '" I , а. ,о i i  '" '" '" ... 5 ""\ & I s::: I  11 I '" "" '"   ..-: ..... N ..... ! <.> '" '" I  \о , ,'" I '" I  <:t :!5 I  а. '" r:: 8. + '" '" '"  о .... <:t ! '" >< 8. а. I '" :!5 с:: '" '" <.> , о '" \ .... '" ....' I ",'  ..о О '" "" ....  ;щ. <.> I  о :I: ::; , .", '" + I ,'" I:? о  ..о '" <.> .... I '" 15 , <.> I QJ  О ::; ::; ::;  '" '" I:? \о I:? QJ <.> О <.> .с с:: ,  '" '" ....  '" ::; о d '" ::; ;f!. g: >- \о U ..... о ! . I  . 51 QJ I .... QJ ..о 7 '" <.> :::, <.> , t;  '" '" о '" :а\ ",' ::; 8:  а. '" \о i '"  с:: ,'" , '" <.> , I:? ",' <.> :!5 Q, , .... , '" i '"  о е I '"  I:? QJ \о ::r о :I: :s: . :а   5 i '" I а. '" '" I:? I ",' '" ;щ. L '  о :I: >- U :s: ID.. '" "" с '" ::;  "" с '" '" '" "" '"   N ..... N ..... <.> :ж: '"  \о , .", '" i <:t '"  8. r:: '" + '" '" I:?  '"  а. 8. '" '" :ж: с:: о :ж: <.>' .... , !1! '" ..о ....' :z: \:z t; о QJ '" О  ::r '" ::; :I: ': .", '" +  QJ I:?  8 <.> :z: ",' 8 QJ ::; ::;  ::; QJ '" '" а. I:? \о О QJ <.> О Ь, .с с::   '" ....  ::; о '" ::; ;f!.  (J \о ..... О QJ .... а> ..о 7 '" <.>  u 8  :ж: ",' '" s ",' ::; :а  а. '" 8. \о '" I:? с:: ,  '" <.> , ,'" 5 о ",' <.> :!5  .... , ....' '"  '"  о е  :ж:  I:? QJ \о ::: ::r о :I: :s: S  ..о е :а 8  ::; '" I:?   <.> :!; 5 '" ,   \о О :а :s '"  а.  ::!  5 I:? Q  ",'  :ж: ::: ;щ.  о :I: >- U :s: D..  о :I: >- U :s: D..  "" с '" ::;s   с '" '" '" "" :::: .s '" е:  '" '" '" '" с '" е: <.) '" ... ::! & '" с  rti ..... N ..... 
['лава 12: Плаltироваltие и дОКУ;ltеltтация 321 (' лоН uелью в таблиuу ввода/вывода добавляется еще 01lИН столбеu, '11l) IЮ;Jучается в результате в нащем при мере со счетами на заказы, пока \,\110 на рис, ]2,J3, На этом рисунке в качестве промежуточноН перемен ""11 Вbiступает переменная Общаястоимость: она записана в таблиuе 1"'\ (1)\\ С переменной Налоrспродажи, что указывает на их связь, {{()'{eIY вторую таблиuу можно считать усовершенствованным вариан l' ,\1 \Iервой? Ответ пр ост: она экономит время тестирования, В обоих слу '\,1>\\ ва\! придется выполнить как МИНIВ!УМ по одному тесту на каждую II"Р\' llepe.\leHHbIX, Обы'/Но несколько тестов выполняется ;и/я проверки II',\IIIIЧНЫХ условий, Например, стоит посмотреть, что будет с выходными \,lJlltьши, если ввести максима.;IЫIO допустимое значение входной пере\!ен ''''11, I::с.:/И же в npOlpaMMe имеется промежуточная переменная, зависящая l' I \\ножества входных параметров и определяющая множество выходных 11\ 111 ;Iруrих промежуточных переменных), TOr;Ia количество необходимых I,'L'/OB значительно сокращается, В этом случае отдельно проверяются вза IJ \юзависимости между входными и промежуточным значениями и между "роыежуточньш и выходными, И тех, и друrих тестов сравнительно не \lllOrO, Чтобы убедиться в этом на примере, со:щайте еще пару таблиu, ПOllOб ных приведенным на Рllсунках 12,12 и 12,13, ВХОДНЫМII пере!еннымI пусть будут HeHal, HeHa2, HeHa3 и Нена 4, В качестве выходных переменных подойдут Ненатоваравсчете, ОБIll.аястоимость (сумма всех четырех цен), НалоrСlIродажи 11 Итоrовыйбаланс, В первой таблиuе, такой как на рис, 12,12, должно получиться 16 строк и COOTBC'lCTHeHHO ]6 пар переменных, Четыре строки должны отражать СШi:iИ переменной UeHa1 с переменными ЦeHaTOBapa всчете, Обща ястоимость, НалоrСlIродажи и Итоrовыйбаланс, И такие же четыре строки должны присутствовать для каждой из OCTa.;IbIlhIX входных перемен IIЫХ: ЦeHa2, ЦeHa3 и Цена 4, Во второй таблиuе получится ТОЛhКО ]0 строк, Каждая из переменных 1(('lIal, UeHaZ, ЦeHa3 и Цена 4 будет комбинироваться не с четырь.\!я, а IlЫЬКО с двумя переменными: Ценатоваравсчете и Общаястоимость, l\CCIO получается 8 строк, Затем промеЖУТОЧН<lЯ переменная Общаястои ,'I!OCTb комбинируется с выходными переменными НалоrСlIродажи и 111 оrовыйбаланс  это еще две строки, Итоrо 8 + 2  1 О, Суть различия двух стратеrий состоит в TO!, ЧТО во второы случае вза III/(JСI!ЯЗЬ между входными (цены) и выходны.\Iи (наЛОF 11 1JТОI'OНЫЙ баланс) \,IIIНЫМИ никоrда не тестируется непосредственно, I.:сли проrрамма достаточно сложна, ана;\Из потоков ее ;IaHHhIx можно \ \,/убить, ДЛЯ ЭТОFО нея обработка /1aHHЪJX раJбивается на несколько стадий, 1,lждая из этих стадий получает данныс от нредыдущей, Одни из BЫXOД 1\1.1\ переменных очередной стадии юrут быть просто копиями ее входных ",'pt:,\1eHHы,' в то вреIЯ как llру['ие MorYT быть результатами обрабОТКI1 
322 Часть П: Приемы и технолоcuи тестирования входной информаuии, Ана:IИЗ промежуточных значений позволяет тести ровшику определить, [де и почему чтото в проrpамме пошло не так, Кроме Toro, они представляют собой поле поиска дополнительных rраничных условий и друrих потеlщиа:JЫIЫХ источников ошибок, а в результате  основу Д,1я расширения набора тестов, Итак, у нас вырисовываются три типа таблиu, . В таблиuах первоrо типа отражаются все входllые перемеllllые, то, как они используются, [де они появляются в качестве промежуточ ных результатов и как влияют на выходные данные, Для каждой из входных переменных необходимо составить список всех связанных с ней стадий обработки данных и результируюших значений, . В таблиuах BToporo типа отражаются все выходllые перемеllllые и то, откуда берутся их значения, Для каждой ИЗ выходных переменных необходимо составить список всех связанных с ней стадий обработ ки данных и результируюших значений, . В таблиuах TpeTbero типа отражаются все очевидllые стадии разра ботки. Очевидность стадии означает, что можно просмотреть все ее входные и выходные данные, (На самом деле обработка данных в проrpамме может быть разбита на большее количество этапов, но их входные и выходные данные проrраммой не выводятся, и их никак нельзя увидеть извне  разве что в отладчике,) Для каждой из CTa дий следует перечислить все ее входные и выходные переменные, Информаuия в этих трех таблиuах повторяется, Фактически Д,1я объе динения всех необходимых сведений достаточно и одной ИЗ них, Однако это не значит, что составление всех трех таблиu  лишняя работа, Их ценность в том, что они позволяют ана:шзировать проrрамму с разных точек зрения, Мы очень часто включаем в тестовую документаuию диасраммы пoтo ков данных, показываюших, как проrрамма rенерирует или откуда получа ет каждый элемент данных, [де она ero использует или в каком виде и коrда выводит (на печать, экран, диск и т.п,), Вся эта информаuия зани мает множество страниu документаuии, но она Toro стоит, Подробнее обо всем этом можно почитать у таких авторов, как I'ейн и Сарсон (Gane & Sarson, 1979) и Де Макро (Dе Macro, 1979), Таблицы и деревья решений в таблиuе решений отражается лоrика проrраммы, Каждый ее элемент  это Д (да) ИЛИ Н (нет) либо И (истина) или Л (ложь), Проrрамма по стоянно принимает решения, что ей делать да:lьше, Эти решения зависят от определенных обстоятельств, а точнее, от значений определенных дaH ных, Эти обстоятельства и принимаемые проrраммой решения и описыва ются в таблиuе, 
['лава 12: Планирование и дQкументация 323 Пример таБЛИllЫ решений приведен на рис. 12.4, Система печатает два сводных отчета, В первом перечисляются все отчеты о проблемах, отложен ные в текушем месяuе (в июле), Во втором отчете перечислены отложен ные проблемы на указанную дату, Формируя эти сводные отчеты, система перебирает все имеюшиеся отчеты о проблемах и по каждому из них при ни мает решение: включать ли cro в документы, и в какие именно, В первых трех строках таБЛИllЫ перечислены вопросы, ответы на KOTO рые определяют решение проrраммы, . Отложена ли проблема проrраммистом? (Если да, в поле Код резо люции должно стоять 3,) . Ввел ли тестировшик значение Да в поле Считать отложенным? . Была ли резолюuия на;lOжена в июле? Две нижние строки таблиuы показывают, какое решение принимается в каждом из случаев, "В каждом из случаев" означает при каждой возмож ной комбинаuии ответов на вопросы, Все эти комбинаuии перечислены в правой части таблиuы на рис, 12.4. Такая информаllИЯ должна присутство вать в любой таБЛИllе решений  в ней всеrда должны быть приведены все возможные комбинаuии условий, определяющих решение проrраммы, Кроме Toro, в ней должны быть перечислены и все возможные решения, Любую таблиuу решений леrко можно превратить в дерево, Мноrим людям даже леrче представить эту информаuию в виде дерева, а не в виде таблиuы, На рис, 12,15 показано дерево решений, эквива;IеllТllOе таблиuе на рис, 12,14, Если вам по надобятся дополнительные примеры таблиu и деревьев принятия решений, их при водят в своей книrе l'ейн и Сарсон (Gane & Sarson, 1979), Система печатает два сводных отчета, В первом перечисляются все отчеты о проблемах, отложенные в текущем месяце (в июле), Во втором отчете перечислены все отложенные проблемы, Проблема считается отложенной, если проrpаммист наложил соответствующую резолюцию (поле КОД резолюции имеет значение 3) и поле Считать отложенным имеет значение Да? В таблице описывается правило, по которому проrрамма должна решать, включать ли проблему в отчеты, и в какие именно, ЕСЛИ I jш I 1 Код резолюции = 3 Считать отложенным = да Резолюция наложена в июле д д д д н н н н ДДННДДНН Д Н Д Н Д Н Д Н то Включить в отчет за июль Включить в общий отчет д н Д н Д н н н ДДДДДДНН РИСУНОК 12.14. Таблица решений 
324 Часть 11: Прие,ItЫ и теХНQЛQCUИ тестирования Резолюция наложена в июле Резолюция наложена не в июле Резолюция наложена в июле Резолюция наложена не в июле Резолюция наложена в июле Резолюция наложена не в июле Резолюция наложена в июле Резолюция наложена не в июле РИСУНОК 12.15. Дерево решений Включить в оба отчета Включить в общий отчет Включить в оба отчета Включить в общий отчет Включить в оба отчета Включить в общий отчет Не включать ни в один отчет Не включать ни в один отчет 
['лава 12: Планирование и документация 325 Таблица клавиатурных комбинаций Таблиuа клавиатурных комбинаuий очень велика, Для ее создания луч ше Bcero подойдет электронная таблиuа, В нее включается информаuия о реаКllИИ в каждом из состояний проrраммы на каждое нажатие клавиши, Если пользовательский интерфейс проrраммы не соrласован, т,е" Ha пример, нажатие клавиши <Fl> в разных местах проrраммы приводит к разным результатам, таблиuа клавиатурных комбинаuий как нельзя лучше позволит выявить все такие несоответствия, Иноrда источником подобных вешей является сам проект (или ero отсутствие), в друrих случаях это MOryT быть просто ошибки кодирования, Заполняя таблиuу и тестируя по ней проrрамму, вы наверняка обнаружите некоторые недокументированные аспекты ее поведения, Это MOryT быть наполовину реа;IИзованные идеи, от которых проrраммист отказа;IСЯ, но забыл убрать из проrpаммы COOTBeT ствующий блок (ой, слома;IOСЬ!), отладочные фраrменты кода, странные сообщения, экзотические ролики или фУНКllИИ, реа;IИзаuию которых PYKO водство отменило, но KTOTO все равно их запроrраммировал, никому ни чеrо об этом не сказав, Каждая строка в таблиuе посвящена одной клавише (А, а, Б, б, *, & и т,д,) или комбинаuии клавиш «Alt+A>, <Ctrl+Shift+Fl> и т.п.), В табли иу включаются и так называемые немые клавиши неанrлийских раскладок, В первом столбuе таблиuы перечисляются клавиатурные комбинаuии, OCTa;IbIlbIe столбuы связаны со всеми возможными состояниями проrрам мы, ее диа;lOrовыми окнами и формами ввода данных, Например, если нажать на клавишу <А> в форме ввода данных, проrрамма отобразит бук ву А в текущем поле, Поэтому в строке таблиuы, соответствующей клави ше <А> в колонке, относящейся к этой форме ввода, следует поставить букву А, Теперь предположим, что в диа;lOrовом окне сообщения об ошиб ке пользователь для продолжения работы должен нажать клавишу < Enter> , Все друrие нажатия клавиш этим окном иrнорируются, В столбuе, соответствую щем этому окну, I1рОТИВ клавищи <А> должно стоять Иrнорируется, На практике таблиuу клавиатурных комбинаuий можно несколько co кратить, объединяя все эквива;IеllТные клавиши или комбинаuии клавиш в одну строчку, Например, можно сrруппировать вместе все буквы нижнеrо реrистра, Однако с критериями rруппировки следует быть очень aKKypaT ным, поскольку они сильно меняются от проrраммы к проrpамме, И даже после сжатия таблиuа все равно останется очень большой, К тому же вами или авторами спеuификаuии uелый ряд строк таблиuы может быть зарезер вирован на будущее, К вопросу о rруппировке к..rавиатурных комбинаuий мы еще вернемся в Этой rлаве, 
326 Часть П: Приемы и техllОЛОCUИ тестироваllИЯ На создание таблиuы клавиатурных комбинаuий обычно уходит He сколько дней, Коrда она будет [отова, распечатайте ее, пометьте маркером найденные в ней несоответствия, продумайте свои преД,10жения по исполь зованию клавиш, оставшихся незанятыми, и передайте результаты PYKOBO дителю проекта, Если выполнить эту работу достаточно рано, в пользовательский интерфейс проrраммы обязательно будет внесен ряд изменений и усовершенствований, Очень поблаrодарят вас за нее и aBTO ры пользовательской документаuии, Таблица совместимых принтеров в настоящее время на рынке имеется более 1000 принтеров, и большая их часть Jмулирует работу сравнительно небольшоrо количества принтеров известных марок (т,е, работает так же, как они), Поэтому если 50 принте ров, с которыми должна работать проrрамма, эмулируют Hcwlctt Packard LaserJet 11, не обязательно тестировать их все, В нашей практике хорошо зарекомендова;ш себя таблиuы, отражающие совместимость тестируемых принтеров, Пример такой таблицы показан на рис, 12,16, (Разумеется, подобные таблиuы можно создавать и ДНЯ любых друrих устройств, Пример с принтерами выбран только потому, что в rлаве 8 на этом же при мере рассматрива;шсь uелая область тестирования  работы проrpам мы с аппаратным обеспечением,) Тестируется lIа Приllтер Режим совместимость Протестирова1l ПримечаllUЯ с пpUllmepOM HP LaserJet 111 Родной LJ 111 (он же) Совместимый с Postscript Полное тестирование HP LaserJet 111 РИСУНОК 12.16. Матрица совместимости прИllтеров Форматы этих таблиц MOI)'T отличаться, но во всех обязательно должны присутствовать следующие столбцы, . При1lтер. Марка и модель, . Режим. Некоторые принтеры MorYT работать в нескольких режимах  прежде Bcero, в своем собственном, а кроме Toro, эмулируя один или несколько друrих известных принтеров, . Совместимость. Марка и модель эмулируемоrо устройства, . ИстОЧllик иllформации. Откуда вы знаете, что данный принтер эму лирует именно это устройство? Источником информации может 
['лава 12: Плаllироваllие и дОКУ,ltеllтация 327 служить человек, журна;IЫ!аЯ статья, реклама, При этом не все ис точники одинаково надежны, . Протестирован. Укажите, протестированы ли принтеры, имеющи еся в вашей лаборатории на совместимость и какие при этом ис пользовались тесты, Проверена ли совместимость rрафических режимов? Одинаковы ли наборы <ESC>KOMallД? Совпадают ли Ha боры символов? . Прuмеча1lUЯ. В этом столбuе можно привести перечень причин He совместимости, собственные сомнения, отчеты пользователей и т.п, Диаrрамма rраничных значений Классы эквива;IеlIТНОСТИ и rраничные условия подробно обсужда;IИСЬ в rлаве 7, Там же описыва;IСЯ проuесс разработки таблиu rраничных значе ний, Еще один при мер ана;IИза rраничных условий, на этот раз для систе мы отслеживания проблем, приведен на рис, 12,17, Не ждите, что эта таблиuа будет полностью завершена в самом нача;Iе тестирования, На самом деле вы будете собирать и корректировать необ ходимую информаuию практически до caMoro конца проекта, Для нача;Ia же составьте список всех полей ввода (дня чеrо можно воспользоваться уже имеющимся списком входных переменных), Выясните их функuии, По мере изучения проrраммы вносите и уточняйте информаuию об их rранич НЫх значениях, Однако не пренебреrайте экспериментами и с теми пере менными, о которых вы еще ма;1O знаете, Иерархические списки: перечень функций nporpaMMbI Перечень функuий охватывает все, что может делать проrрамма, Луч ше Bcero, если он отражает ваше с06ствеllllOе видение орrанизаuии проrрам мы, тоrда и планировать тестирование, и выполнять ero будет rораздо удобнее, Именно ЭТОт список является ядром всей документаuии, Списков функuий проrраммы может быть несколько, и уровень их дe та;IИзаuии и полноты может быть самым разным, Наилучшим, на наш взrляд, является инкрементный подход: начните с caMoro простоrо, посте пеllllO добавляя все больше и больше информаuии, Этот подход показан на рис, 12.18, Проrрамма, которую вы выберете Д,1Я работы со списком функuий, дол жна обладать достаточно мощнЫми и rибкими средствами Д,1Я просмотра, редактирования и реорrанизаuии иерархических структур, Лучше Bcero, если она будет спеuиа;IЫIO предназначена именно дня этой uели, поскольку возможности средств, встраиваемых 1! текстовые проuессорЫ, обычно дo вольно оrраничены, 
['лава 12: Пqанирование и доку,иентацuя 329 ! . i , ! D: , ai :1: Q) d:s z: :I: а.. , '" CI.I '" i , о  о Q) >D >- Е:: Е::  I о D: Q) а.. u  '" а.. ..... о о  :s: Q) 8: ! Е:: U :I: О ..... z: о 2:: Q) а.. со:> CI.I :I: а.. ..... r:::  :I: :s: Q) '" Q) Q) u '"  :s: '" :s: а.. с:: О :I: О :I: Q ..... Q) .. ro ::> Е:: Q) Q) >- '''''  Q) а :s: . Е:: :s: '" t,; ::> :s:  а,:!: ::> "" Q) о :I: Q) "" Q Е:: r::: ..... Е:: :I: '" О Q) О м u "" ,.. :I: Х Q) Et Е:: '" ..а Q) Q) а.. ,.. о Q) '" Ь..а5 '" о 2i Q) :s: Q) Е:: :s: '" u Q) :I: '" 1;; '" о ..... '" ..... ..а I :I: U а.. 5 Е:: ?5 '"  '"  "" ::> о Q) u ro с::{ '" ..... :I: О Q) О U :s: Q) ro>D '" 1;; х '" ..... :I: а.. 2i '" о   (:) >D I u '"  ""  u ..а О м ..... « '" ..а ro ..... '" I Q) Q , о а о а.. :s: 2i N >D U >- 5 N ..... м >D ,..  >D О ! са м  ..... u u о , ::> о ..... '" о r--- ---. " I ::Е о .-.: о::  N м -i  NM , i ro ro ro а.. '" .е- "" '" '" >- "" :s: >D >- :j' ro >D >D  <D Q) Q '" Q) , v А :I:   :I: >- N м а.. N   <::[ <  F= '" bj о х "" "'са 2i ro 0(") ::> "" "':s;: :s: '" ::>ш ..... х Q;З: u u >- ..... 2i Е:: Q) :I: Х 8: «;' Q) >- 1;; '" :i а.. 2i u '" :s: ,.. :I: ..... О ..... Q) '" ..... Q) ro :I: ''''' Е:: Q) Е:: ro ro а.. о :s: :I: а.. о ,.. "" .е- м :I: Q) Е:: О '" Q)  ro о а.. о :s: Q) <::f 00 '" Е:: Е:: ,.. ..... Q) :j' ro ro u ..... ::> N о :s: :I: i c:t >- :I:  :s:  с::{  с::{ м t:: :s: u ro I '" ''''' :s: :s: ..... :I: Q) :I: Q) ,.. Q) :s: Q) '" ..... '  :I:  :s: о 11 13 о 8- Е:: :s:  Q) :s: Е:: а.. са t--- О Е::  з '" е ""  '" '" '" '::! '" а '" <::3 '" ::! ;:j '" <::3 ;;;.  t3- ...: ..... N .....  о :I: >- U :s: а.. 
328 Часть 11: Прие,иы и технолосии тестирования :::s  ::-   ос ::::r    Q  , :::s е   ::: ос    е >            '"  :::s е ... Q :::  е ос   ):: ... а е  ... Qo ...    Е' ::- ."\ :с Q 'S! t'')О;  :::  ::-    T   c:;o.. '" <.) :s:   !;< '-' s  2f ..... Q) Е::  о..     со   jS:; :::Е о о g-e   : :I: <.) :I: о о V о> о> о> о> о> о> I о  ":  о  Q) с:; >D О о.. Е:: 0..'" Q) ..... ::;; gJ о ..... :I: о  С'. са   ::;;    :I: ;r ::S:: о  а u  ::;;о..::!, >-2 '-'ООЕ[ ::s:: 1:: :I: Q) ,.. с:; '-' '" ''''' :s: '-' о   ::W:::: g:;    <:;. '" с:; q: '" '" о ::s:::   с:; 2t cti: о о q: :I: Е::  ::;;   о> о> о> о> о> о> N ..а '-' :s: Е:: ::;;  :s: :i 8..ro  ca м u g- о> о> о> о> о> о> Q) :s: :I: ro '" Q) 8. :s: с:; ro a} ::;; M о  2 >- '" t;  O> (;'5 А N ..... Q) >- о.. :s: С', ::;; ro 0....... о Q) -& '-' о с; о о 9 o:i- ''''' о ''''' '" о о >D о.. с:; 2-&0 с::;  ; , Q) :S: "'" :I: '-' ! I Q) с:; о Е:: Q) О :I: ..а с:; Q) 1;; '" '" >D О :;; с:; о '" ::;; :S: ..... '-' :S: Q)  :;; о..о:: g1;; tJ iS) Е:: Q) :I: '"  ; '" 5 :S: хА :;;..0 :I: ro 1;;t--- ,.. V Q) Е:: А  Е:: ОШ C::{V ro ::;; ::;; ro е- о о.. t:: ci Q) ::;; :S: о.. Е:: ro -=- Q) :S: ::f 2 '" с:; '" ro о.. Е:: >- Q) '" ,  >-   s;  g о ro о.. N 5 d:s "" '-' :;; Е;'::;; о ::;; ro Q) е- :I: о :;; g. с:; Q) '" >D ::;; 8.:s: Е:: Q) '" :S: '-' ::f ..а 1;; Q) 13 , '" ro t;-&....., '>.::;;< '-'00 5.:I:u)   5 2!:",I:l. 
330 Часть П: Приемы и технолосии тестирования На рис, 12,8 был IIриведен IIернЫЙ черновик IIеречня функuий системы отслеживания IIроблем, Это скорее основа будущеrо СIIиска, IIОСКОЛЬКУ в нем отражены лишь функuии caMoro BepxHero уровня, очевидные llOсле caMoro IIoBepxHocTHoro знакомства с системой, Однако, несмотря на IIOBep хностность, этот СIIИСОК уже обладает ОIIределенной uенностью, Держите ero на своем рабочем столе, чтобы каждый раз, KOrдa IIонадобится IIpOBe рить, не забыта ли какаянибудь из функuий IIporpaMMbI, можно было с НИМ свериться, РаСIIечатка может служить и контрольным СIIИСКОМ, В KO тором одним иветом можно отмечать устойчивые функuии IIporpaMMbI, а друrим  те, которые IIока еще работают IIЛОХО, Второй черновик IIеречня функuий может быть уже более орrанизован ным, Выберите такую орrанизаuию, которая IIокажется вам наиболее eCTe ственной и удобной, ПОIIробуйте составить алфавитный СIIИСОК всех команд IIporpaMMbI, Для команд, активизируемых с llOМОЩЬЮ меню, скорее Bcero, больше IIодойдет иерархическая структура, IIовторяющая структуру меню, Но это вовсе не обязательно, В качестве альтернативы можно opra низовать информаuию BOKpyr конuеIIТУальной схемы IIporpaMMbI, объеди няя в [РУIIIIЫ те функuии, которые лоrически связаны между собой, участвуют в решении общих задач, обработке одних и тех же входных дaH ных или rенераuии одних и тех же выходных, На рис, 12.19 IIриведен второй черновик СIIиска функuий системы OT слеживания IIроблем, Большинство функuий ero IIервой версии оставлены без изменений, Только функuия 5, Работа с файлами данных, разбита на две составляющих: Чтение данных из файла и Запись данных в файл, Для IIервой из этих IIОДфУНКUИЙ В IIлан добавлено IIодробное ОIIисание, 1, Составьте IIеречень самых высокоуровневых и самых очевидНЫх для IIользователя Функuий (команды, действия, OIщии меню), 2, Выделите IIОДФУНКUИИ этих основных Функuий (все достуIIные OII uии и варианты выбора из llOд.\lеню IIporpaMMbI), 3, Проследите работу IIОДФУНКUИЙ настолько rлубоко, наскоЛЬко это возможно, (На этом уровне каждая строка СIIиска должна IIpeДCTaB лять элементарное лоrическое действие IIporpaMMbI  у Hero не должно уже быть никаких управляющих IIарамстров,) 4, Перечислите входные и выходные условия каждой функuии и IIOД Функuии IIporpaMMbI, 5, Составьте СIIИСОК всех СIIособов диалоrа с IIрОrpaммой IIрИ ВЫllOлне нии каждой из ее Функuий  через клавиатуру, мышь и друrие устройства, И lIаКОllец, превратите каждую строку caмozo IIUЗКОZО уровllЯ в тестовое задаlluе. РИСУНОК 12.18. Расширение списка функций пpOcpa.MlotbI 
['лава 12: Планирование и документация 331 1, 2, 3, 4, 5, 5.1, 5.1.1, 5,1,2, 5.1,3, 5.13.1, 5,1,3,2, Вывод окна заставки (с датой, авторскими IIравами и т.п,) Ввод имени пользователя Ввод новых отчетов о IIроблемах Редактирование старых отчетов о IIроблемах Работа с файлами данных Чтение данных из файла Ввод имени файла и дисковода Проверка, не добавлен ли уже файл к базе данных Для каждой записи файла: Чтение записи Переход к следуюшей записи, если текушая запись IIомечена как уже добавленная в базу данных ЗаIIолнение поля "Номер отчета о IIроблеме" Если какиелибо из обязательных IIолей пусты, вывод записи на экран для ввода их значениЙ (lIеобязательно) Вывод заIIИСИ на экран для подтверждения IIользователем ее добавления в базу данных (lIеобязательно) Печать заIIИСИ Добавление заIIИСИ в базу данных Пометить заIIИСЬ как добавленную в базу данных Пометить файл как добавленный в базу данных Возврат в меню "Работа с файлами данных" Обработка ошибок чтения/редактирования записей файла Неверное имя файла или дисковода Файла нет на диске Ошибка дисковою ввода/вывода Файл уже IIрочитан и добавлен к базе данных ПОIIытка сохранить заIIИСЬ с пустыми обязательными IIОЛЯМИ Ввод значения IIОЛЯ, отсутствуюшеrо в СIIравочном файле Принтер не [отов ЗаIIИСЬ данных в файл Работа с файлами приложений Формирование итоrовоrо отчета Системные утилиты Разработка новых форм и отчетов CIIpaBKa 5,1,3,3, 5,1,3.4. 5,1,3.5, 5.1,3,6 5.13,7, 5,1,3,8, 5.1.4. 5,1.5, 5.1,6, 5.1,6,1, 5,1,6,2, 5,1,6,3, 5,1,6.4, 5.1,6,5, 5,1,6,6, 5,1,6,7, 5,2, 6, 7, 8, 9, 10, РИСУНОК 12.19. Второй черновик списка функций системы отслеживания проблем 
332 Часть П: Приемы и технолосии тестирования Список функuий проrраммы можно расширять все дальше и дальше, Например, ero элемент 5.1.3.6 (необязателыJ)) Печать записи можно разбить на составляюшие, чтобы показать, что проrpамма сначала прове ряет, включен ли принтер и [отов ли он к печати, Лучше Bcero расширять список постепенно: если попытаться составить ero сразу, вы просто утонете в обилии выполняемых проrраммой мелких операций и у вас не хватит времени на ее тестирование, На рис, 12,20 развернут третий элемент списка  Ввод новых отчетов о проблемах, Такой детализированный и иерархически орrанизованный список заслуживает названия фуНКЦионаЛЬНО20 плана просраммы, Коrда спи сок настолько подробный, каждый ero элемент соответствует единственной лоrической операции проrраммы, Это уже почти rотовЫЙ набор тестовых заданий, Уrлубляя составленный план, лучше Bcero придерживаться следуюших направлений анализа, . Все ФУlIкции проrраммы, . Все видимые подФУlIкции, . Все комаllды, выполняемые проrраммой, . Результаты lIажатий каждой комаllдllОЙ клавиши в каждом месте проrpаIМЫ, . Каждое меllЮ и каждая есо комаllда. !L1Я отображения этой инфор мации тестировщики обычно пользуются картами меню  диаrрам мами свободной формы, Диаrрамма показывает, куда ведет каждая команда, В нее вписываются названия всех меню и экранов, . Все сnoсобы достижеllUЯ каждоzо режима или экраllа просраммы. Как добраться до KOHKpCTHoro меню, диалоrовоrо окна, формы, как перевссти проrрамму в заданное состояние? Имеет ли значение, каким способом пользователь попадает в определенный режим, или это все равно? . Все сnoсобы выхода из каждоzо режима или экраllа просраммы. Как перейти к следующему меню, диалоrовому окну, форме, состоянию проrраммы? Как затем вернуться назад? Как прервать ввод данных? Как прервать выполнение проrраммы из данной точки? . Каждая форма ввода даllIlЫХ, ди(JЛоzовое ОКIIО и ОКIIО сообщеllия. Проанализируйте rраничные значения данных, внесите информацию в соответствующую таблицу, Покажите, как попасть в каждую из этих фОрl, каковы различия, определяемые последовательностью действий пользователя (например, различное поведение проrраммы при первом и втором открытии данноrо окна). Перечислите специ 
Тлава 12: Планирование и дОКУ,ltентация 333 3,2,5, 3,2,5,\, 3,1, Отображение первых 24 строк фор1Ы отчета 3,1,), АВТОlатическое заполнение HOlepa отчета о проб,1еlе 3.1,2, (Необязательно) Если в течение однOI'О сеанса работы вводится БО;lее одноrо отчета, аВТОlатическое заполнение полеЙ "ПрОI'раIlа", "Версия", "Фамилня" и "Дата" значеНИЯIИ из предыдушеl'О отчета 3.1,3. Переыешение курсора в поле "Тип отчеI'а" 3,2, Назначение клавиш во вреIЯ редактирования полеЙ 3.2,), <FI>  Отображение lеню справки 3,2,2, <F2>  Персрисовка экрана 3,2,3, <F3> Печать теКушеl'О отчета 3,2,3,1, Проверка I'ОТОВIIOСТИ принтера к печати 3.2,3.2, (Необязательно) ПрОl'ОIl страницы 3,2,3,3, Печать копии (копиЙ) отчета о проблеlе 3,2.4, <Стрелка вверх>  персмешение курсора к ближаЙшо!у полю IIад теКУЩИI, И пюрируется , KOI'aa курсор находится в верхнеЙ строке, <Стрелка вправо>  ПереlеШСНИе курсора lIа один СЮIВол назад Если курсор lIа пеРВО1 СИlволе ПО:IЯ, переlешеllие el'O к rlOследнему СИ1Волу преiiblДУШСI'О ПО;IЯ Ес:ш курсор на перВО1 СЮ!ВО;lе IIepBol'o ПО:IЯ, нажатие клавиши ИI'норируется <C!rI+A>  ИI'норируется <Ctr\+B>  Переlешеllие курсора к предыдушеIУ ПО;IЮ, Если курсор находится на ПерВО1 поле, нажатие клавиши ИПIOрируется 3,2,8, <Ctr\+C>  "Очистить все поля и начать снаЧ<Lта'!" 3,2,9, <CtrI+D> Если все обязательные поля заполнены: "Ввод отчета ОКОI.Jчен'!" 3,2.5,2, 3,2,6, 3,2,7, иначе "Не ВВедена необходимая ИНфОр!аЦИЯ", Перемсшение курсора к незаполненному полю, 3,3, Выход из формы без сохранения данных 3,3,1, <CtrI+Q>  "Вы действительно хотите выйТИ без сохранения данных'!" 3,3,2, Выход 3.4, Обработка ошибок 3.4,), Значение выходит за пределы ДОПУСТИ1ОI'О диапаЗOlIa 3,4,2, В справочном файле Нет соответствуюшей записи 3.4.3, Не MOI)' найти шравочный файл 3.4.4, Для записи данных на диске IleT !CCTa 3.4,5, ДРУI'ая ошибка дисковOI'О ввода/вывода РИСУНОК 12.20. Подробный план третьей функции системы: ввод Новых отчетов о проблемах 
334 Часть Il: Приемы и технолосии тестирования альные команды, выясните, как выЙти из данноrо окна с coxpaHe нием и без сохранения информации, Покажите, куда пользователь llOII<lдает после этоrо, . Обработка ошибок в данной части проrраммы. Как правило, удоб нее выносить обработку ошибок в отдельный раздел ехемы, а не описывать ее внутри каждоrо подраздела, Матрицы Матрица похожа на таблицу  обе они состоят из строк и столбцов, В самой верхней строке (строке заrоловков) показано, какая информация содержится в каждом из столбцов, В первом столбце мноrих таблиц и всех матриц показано, какая информация содержится в каждой из строк, Различия между терминами "таблица" и "матрица" состоят в следую шем, . rлавная функция таблицы  описательная, В ней описывается поведение проrраммы (как на рис, 12,16) или аппаратноrо обеспе чения, Имея достаточно полную спецификацию, можно полностью заполнить таблицу, даже и не приступая к тестированию, После этоrо, уже в ходе непосредственноrо тестирования, поведение про [раммы будет сравниваться с данными таблицы, . rJiавная функция матрицы  сбор данных, Это исключительно удобная структура для тестирования пар значений переменных, co единения двух обстоятельств, типов аппаратноrо обеспечения или событий, Заrоловки столбца и строки определяют условия теста, Ero результат записывается в соответствуюшую ячейку, Часто такая за пись представляет собой просто "птичку", показывающую, что про [рамма ведет себя правильно, Матрицы Дисковоrо ввода/вывода Матрица дисковоrо ввода/вывода  это классический пример широко используемой тестовой матрицы, Предположим, что для записи данных на диск в проrpамме имеются следуюшие команды, . Сохраllить. Копия данных памяти записывается на диск, . Сохраllить как. Копия данных памяти записЫвается на диск с HO вым именем, . Печать в файл (ASC/I). Выходные данные форматируются так, как если бы они отправлялись на текстовый принтер (т,е, только с про стейшими управляюши1И кодами, такими как табуляции, перевод строки или возврат каретки), но записываются они не в порт прин тера, а в дисковый файл, 
Тлава 12: Планирование и документация 335 . Печать в файл (форматироваllllая). Выходные данные форматиру ются так, как если бы они отправлялись на текущий принтер, но записываются в дисковый файл, В файл включаются и все необхо димые управляющие коды, Предположим также, что в проrраммt; имеются следующие функции чтения данных с диска, . Открыть. Стирание из памяти информаuии текущею файла данных (возможно, после ее сохранения) и заrрузка в память HOBoro файла, . Добавить. Заrрузка содержимоrо указаннorо файла в память в KO нец текущеrо OTKpbIToro файла, . Вставить. Заrрузка содержимоrо указанноrо файла в память со вставкой ero в текущую позицию в уже открытом файле, . Импортировать текст. Открыть текстовый файл, созданный дpy rим приложением и хранящийся в формате, не являющимся для проrраммы родным, . Импортировать zраФику, Заrрузить изображение в память, Теперь допустим, что пользователь пытается сохранить или прочитать файл одноrо из следующих типов, . ОчеllЬ малеllький файл (1  2 байта), . ТипиЧIIЫЙ файл. . Большой файл (больший доступноrо объема RЛМ), Пусть проrрамма может работать на компьютерах со следующими типа ми дисков, . Дискеты lIизкой емкости. . Дискеты высокой емкости. . Жесткий диск. . Сетевой диск. . Оптический диск. . RAMaUCK. и наконец, предположим, что ПрОИЗОllШО одно ИЗ следующих событий, . Диск пОЛОII  на нем нет места для записи данных командами Co храllить, Сохраllить как или Печать в файл, . Диск почти пОЛОII  он заполняется в процессе записи данных или при создании BpeMeHHoro файла для их чтения, . Диск защищеll от записи. 
336 Часть 11: Приемы и технолосии тестирования . Taймayт. Диск (скорее Bcero, сетевой) слишком долrо не отвечает, . Сбой или отключеllие питаllия. . КлавиатУРIIЫЙ ввод. Нажатие клавиш во время чтения или записи данных, . Активllость мыши. Переlещение или щелчки кнопок мыши во время чтения или записи данных, Вообще, вариантов подобных событий великое множество, Перечислен ные примеры можно разбить для анализа на четыре катеrории, . Файловые операции (такие, как открытие и сохранение), . Характеристики файлов, такие как тип, формат и размер, . Аппаратура, как, например, типы жестких дисков, Сюда может входить и список совмеСПI,\юrо оборудования, . Условия сбоев, как, например, заполнение диска или аппаратный сбой, Орrанизовать эти катеrории информании в матрицы ввода/вывода мож но Мltоrими способами, Один из них показан на рис, 12,21, Составленная матрица станет вашим путеводителем: следуя ей, вы по очереди выrlO;lните тесты, соответствующие каждой из ее ячеек, и поста вите в них соответствующие отметки, Например, работая по приведенной на рис, 12,21 матрице, тестировщик попытался сохранить данные (вторая строка) на зашищенном от записи диске (третий столбец) низкой емкости, Проrрамма выдала корректное сообщение об ошибке, и дальнейшие ее ilеЙствия были вполне разумны, поэтому тестировщик отметил ячейку, лежащую на пересечении второй строки и TpeTbero столбца (***), Матрица дисковоrо ввода/вывода  это одна из самых важных диаr рамм тестировщика, На наш взrляд, лучше Bcero сначала составить спис ки для BCt:X четырех перечисленных катеrорий, соответствующие возможностям именно вашей проrраммы, а затем построить таблицы для ввода и вывода, Друrие матрицы, связанные с аппаратным обеспечением На рис, 8,4 приводил ась тестовая матрица для сравнения различных типов принтеров, Заrоловками ее столбцов служили названия принтеров, а заrоловками строк  их сравниваемые ФУНКllии, В друrой матрице можно было бы по казать типы принтеров и объемы их оперативной памяти, Для тестирования подошло бы полностраничное rрафическое изображение, Если проrрамма напечатает такое изображение без сообщения о нехватке памяти принтера, значит, тест пройден, 
[лава 12: Лqанирование и доку,иентация 337 :::1  1.1 Q :(  ос ::!  шш j , [! Аl "..J " I ! Ш'.! "....,':', , ' )  1 1  ' I " :::11 ! :::  '" ':::1 Q :(    :( :r 1.1 :::1 ::  '" I I ! TI  ::: '  ::- Q :::    :( 1.1    Q g I   I  I  5 I  O "" ro "" ..а ..... ". :I: ro а.. >< о tJ с:; ,,,. ro -& са ..а 1;; ;:r 0>1 1:::1  с '" :5  <::3 "1:> с '" '" с '" с '" с '" <.J '" "1:> <::3 ::r '" s.. :::  ..-: N N .....  о :I: >- U :s: а.. 
338 Часть 11: Прие;llЫ и технолоcuи тестирования Матрица операционноrо окружения в этой матрице строки (или столбцы) MorYT соответствовать перемен ным окружения  типу и версии операционной системы, диспетчера па мяти, языку, стране и т,п, Столбцы (строки) Moryт также представлять IIеременные среды, а МOI'ут соответствовать отдельным параметрам, типам аппаратуры, кодам ошибок и всему остальному, что потрt:бует тестирования в комплексе с параметра ми операционной среды, Матрица комбинаций входных данных Случается, что ошибки, связанные с вводом, определяются не самими данными или событиями, а их комбинациями, Если проrpамма сбоит толь ко в том .случае, КOI'да пользователь вводит 60 символов в третьей строке экрана, после чеrо нажимает стрелку вправо  на;IИЦО ошибка, и эту ошибку ни за что не выявить, тестируя отдельные действия и переменные, К сожа;Iению, в большинстве про!рамм количество возможных комбинаций входных деЙствий и данных столь велико (а чаше и просто бесконечно), что протестировать их все невозможно, Поэтому вопрос состоит в том, как выявить наиболее интересные из них, Майерсом (Myers, 1979) описан сложный, но комплекснЫЙ подход к этой задаче, называемый прuчuнно-следственнымu дuшраммамu (Cause-effect Graph , iпg) Мы не будем описывать ero в данной книrе, однако тем, кому предстоит серьезно заниматься тестированием, рекомендуется ero изучить, Наш собственный подход носит более экспериментальный характер, Комбинации входных условий мы изучаем прямо по ходу тестирования, Таким образом, в поле нашеrо зрения попадают не все теоретически воз южные варианты, а самые естественные из них, Очень полезно обратиться к проrраммистам со списком переменных проrраммы и спросить у них, какие из этих переменных абсолютно нсзависимы, Но полностью полаrать ся на их информацию не стоит: вопервых, память может их подводить, а BOBTOpЫX, КТОJ\ибо из ПрOl'рам,\IИСТОВ может наЙти занятным подбросить вам заведомо ложную информацию, Так что для надежности все равно выполните несколько проверочных тестов, Как следует поработав с проrраммой и почувствовав, что связи между ее данными уже достаточно прояснились, мы приступаем к более последо вательному тестированию их комбинаций, Матрицы сообщений об ошибках и клавиатурных комбинаций в этой rлаве уже рассказыва;IOСЬ о таблице, описываюшей реакцию проrраммы на все возможные нажатия клавиш, Наста;1O время более под робно рассмотреть этот вопрос, 
[лава 12: Планирование и дОКУ;ltентация 339 в системах с rрафическим пользовательским интерфейсом все сообще ния об ощибках выводятся в диа;lOrовых окнах, В ответ на сообщение пользователь должен щелкнуть на кнопке ОК И;IИ нажать клавишу <Enter>, Любые друrие ero действия окном иrнорируются, Однако на практике даже в системах со встроенной ПОДilержкой диалоrовых окон проrраммисты нередко снабжают отдельные окна возможностью реаrировать и на друrие события, Тестировщики часто спрашивают, зачем тестировать все окна сообще ний в проrрамме для Macintosh, если все они работают одинаково, Если тщательно протестировано одно из окон проrраммы, можно считать, что протестированы все, Однако опытные спеuиалисты знают, что это HeBep но, Нам не раз приходилось ста;Iкиваться с ситуациями, коrда приложения Macintosh, Amiga, Windows и DOS разруша;IИСЬ именно нестандартными действиями пользователя в окне сообщения, Конечно, невозможно нажать каждую клавишу в каждом диало/'овом окне проrраммы, но следует всеrда иметь ввиду, что нажатие клавиш, не имеющих никакоrо эффекта в одном диа;IO/'ОВОМ окне, может разрушить друrое, Поэтому мы выработа;IИ подход, позволяющий оптима;IЫIЫМ обра зом протестировать проrрамму на предмет подобных ситуаций, В ero OCHO ве лежит матрица, строки которой связаны с диалоrовыми окнами проrраммы, а столбцы  с rруппами клавиши их сочетаний, Для каждой строки (т,е, в каждом окне сообщения) проверяется несколько клавиш из каждой rруппы, Один из способов разбиения клавиш на rруппы показан на рис, 12,22, Документирование тестовых материалов в этом разделе рассказывается о документах, описывающих процесс тестирования, Это не только плановые документы  в них записывается, что вы дела;IИ, почему, коиа, какими были результаты и что должно быть сделано да;Iее, Мы уже rоворили о том, каково назначение тестовой документации и какую пользу она может принести, если ее правильно при менять, Теперь давайте поrОl!ОрИМ о типах плановых документов, Коrда rоворят о тестовой документации, вовсе не имеют в виду некую монолитную КОlщепuию, Напротив, возможных типов документов orpoM ное множество, Некоторые из них более полезны, чем друrие, некоторые дешевле, некоторые носят более фундаментальный характер, Приступая к каждому новому проекту, вам предстоит решать, какие из всех этих MHO rочисленных документов лучше Bcero удовлетворят ero нуждам, 
340 Часть 11: ПрuеllfЫ u техltолосии тестИf!utll/lll/JI Основной набор ASCII Не буквенно-цифровые стандартные печатные симвопы A5CII, Мы часто объединяем их вместе, хотя на самом депе он относятся к четырем разпичНЫМ rpуппам Цифры Буквы BepxHero и нижнеrо реrистров Расширенный набор A5CII Клавиши модификаторы Функциональные клавиши Клавиши управпения курсором Клавиши цифровой клавиатуры Европейские клавиатуры В Hero входят комбинации с КЛ.1ВИlllеи <Clr/>, Интересны дпя тестирования OOO-null, 007-6ИII, 008-[15, 009-ТаЬ, 01o.LF, 011VТjHome, 01UF, 013,CR, 026-EOF, 027-Esc, Не буквенно-цифровые (коды A5CII 32-47) <Пробел> ! " # $ % & ' ( ) . + ,  . j, Не бухвенноцифровые из середины диапазона кодов (коды A5CII 5864) ; : < = > ? @, Спедующая серия не буквенно-цифровых симвопов (коды ASCII 9196) [ \ ]  ', Спедующая серия симвопов (коды A5CII 123127) { I } - <Del>, (Коды A5CII 4857) О 1 2 3 4 5 6 7 8 9 (Коды ASCII 6590) А В С D Е F G Н I J К L М N О PQR5TUVWXYZ, (Коды ASCII 97 122) а Ь с d е f 9 h i j k I m пор q r s t u v w х у Z, (Коды A5CII 128254) Интерпретация этих клавиш опредепяется припожением В зависимости от клавиатуры этими клавишами MOryт быть <Alt>, <5hift>, <Ctrl>, <Соmmапd>, <Option>, <Left+Amiga>, <Right+Amiga>, Обычно их нажимают в паре с друrими клавишами  нажатые самостоятепьно, они, как правипо, не производят никакоrо действия, Выясните, какой набор сочетаний кпавиш поддерживается вашей операционной средой, Обычно имеет смысп протестировать все интересные стандартные значения, а также некоторые друrие, Разрабатывая табпицу клавиатурных комбинаций, выдепите дпя сочетания тестируемой клавиши с каждым из модификаторов по отдепьному стопбцу, Протестируйте их как по отдепьности, так и в сочетании с клавишами- модификаторами Протестируйте их по отдепьности и в сочетании с клавишами-модификаторами, Как правипо, все эти сочетания будут иметь разпичный эффект, Вовсе не обязатепьно, что у всех клавиш дополнительноrо циф!Х)воrо блока будут эквиваленты в основном блоке клавиатуры, В неанrлийских раскладках у левой и правой клавиш <Alt> может быть разное действие, Кроме Toro, в этих раскладках имеются так называемые мертвые клавиши: пользователь нажимает мертвую клавишу, определяющую вид акцента, затем символ, который он хочет акцентировать, и получается акцентированный символ, РИСУНОК 12.22. Труппировка СU;ltволов для тестирования I\лавиатурносо ввода 
[лава 12: Планирование и документация 341 Кто пользуется тестовой документацией rлавным критерием ценности документа является то, насколько он понятен читателю, Именно на это и ориентируется составитель ДOKYMeH та, а потому он должен точно знать, кто ero будет читать и какова степень компетентности этоrо человека, Кроме Toro, важно, для чеrо будет исполь зоваться данный документ  в одних случаях достаточно KopoTKoro пояс нительноrо описания, а в друrих требуются четкие и подробные инструкции, Временные оценки, приведенные в следующих разделах, основаны на опыте нащей собственной работы и, разумеется, очень приблизительны, Личные заметки Это простейщие из документов, Но все же их следует составлять так, чтобы, прочитав их несколько месяцев спустя, можно было разобраться, о чем идет речь, какие и почему выполнялись тесты и какие результаты были получены, Старайтесь писать их как можно аккуратнее, но при этом будьте кратки, Время, затрачиваемое на заметки о проведенных тестах, должно быть в пределах от половины до TpoeKpaTHoro объема времени, необходи Moro для их разработки и выполнения, Назначение личных заметок может быть следующим, . Описаllие тестов, которые будут проводиться повтОРIlО. Вместо Toro чтобы заново продумывать каждый тест, можно обратиться к заметкам, сделанным на предыдущем этапе работы, В этих заметках MOryT описываться достаточно сложные подробности, Если речь идет о комплексном тесте с множеством rраничных условий и друrих специфических значений, опишите их все и не забудьте добавить, каково их назначение, То('да после изменения про('раммы сразу будет ясно, какие изменения нужно будет внести в такой тест, . Напомиllаllие о том, что уже сделаllО. Как ни странно, выполнить один и тот же тест десяток раз на протяжении нескольких дней на самом деле ничеrо не стоит, Иноrда тестировщик забывает, что тест уже выполнен, иноrда не уверен в этом и на всякий случай выпол няет ero еще раз, Если аккуратно вести журнал проводимых тестов, всей ЭТОЙ путаницы и потерь времени вполне можно избежать, . Напомиllаllие о том, что еще предстоит сделать. Аккуратно запи сывайте все идеи о будущем тестировании, В дальнейшем, разраба тывая новые тесты, вы можете обращаться к этим записям, . Ответы lIа вопросы проzраммистов. Если проrраммисту не yдaeT ся воспроизвести найденную вами ошибку, он может попросить провести дополнительные тесты, которые, на ero взrляд, MorYT быть 
342 Часть 11: ПриеАtы и тех//олосии тестирова//ия связаны с IIроблсмой, ВЫIIОЛНИЛИ ли вы эти тссты? В точности ли тс, О которых вас IIрОСИЛИ? Какими были рсзуш.таты? Заметки для Apyroro члена команды Рсчь идст о сотрудникс, тсстирующсм тот жс IIрОДУКТ, что И вы, У НСЮ MOI'YT возникнуть К вам ВОlIрОСЫ, или жс ОН можст IlOlIрОСИТЬ ОIIИсанис OAHOI'O или нсскольких IIРОВОДИМЫХ вами тсстов, На составлснис такою ОIIИсания можст уйти столько врсмсни, сколько нсобходимо ДJIЯ разработки тсста, а дажс в 5 раз большс, В замстках можст быть слсдующая информация, . Как выполнить каждый тест. Это ОIIИсанис можст быть коротким, IIОСКОЛЬКУ IIрсдназначастся ДлЯ достаточно OIIbITHOl'O сотрудника, . Ожидаемые результаты каждОi!О теста. Инота стоит такжс ОIIИ сать и всроятныс условия сбоя, . Смысл каждОi!О значения данных. Кота IIpol'paMMa мснястся, а IIРОВСДСННЫС вами тссты IIРСДСТОИТ ВЫIIOЛНЯТЬ APYI'OMY сотруднику, ОН можст СlIрОСИТЬ У вас, что слсдуст измснить, И IIрСЖДС BCCI'O сму нсобходимо будст выяснить назначснис данных ИСХОДНОI'О тсста, ВО МНОI'ИХ случаях вам нс IIРИДСТСЯ IIИсать длинных IIOЯСНСНИЙ, 11O скольку назначснис данных будст очсвидно из ожидаСМОl'О рсзуль тата, . Любые друzuе специальные инструкции, наlIрИМСр, как доЛl'О слсдуст ждать ОIIРСДСЛСННОI'О события или как быстро нажимать клавиши ДЛЯ ОIIРСДСЛСННОЮ тсста, . Какие тесты необходимо выпОЛllять реi!УЛЯрНО (РСI'РСССИОННЫС TC сты), какис из них наиболсс быстрыс и IIрОСТЫС И каковы ваши соображсния 110 IIОВОДУ дальнсйшсю тсстирования, . Каково назначение данных тестов. Какая часть IIpOl'paMMbI ими исслсдустся? Какис IIроблсмы MOI'YT быть выявлсны С наибольшсй всроятностью? Если выlIлняютсяя I'PYIIlIbI связанных тсстов, ОIIИШИ тс их С этой точки зрсния, В частности, можно ОlIисать общсс Ha значснис I'PYIIIIbI, затсм 1I0дробно ОIIИсать один из тсстов, а остальныс IIрсдставить как вариации IICpBOl'O, Так и IIИсать будст быстрсс, и IIОНЯТЬ ЛСI'ЧС, Заметки для Apyroro OnbITHOrO тестировщика Разница МСЖДУ этим и IIРСДЫДУЩИМ случаями в том, что на этот раз IIрСДlIOЛaJ'астся, что вас нс будст 1I0близости, чтобы отвстить на ВОlIрОСЫ, Если, HallpllMcp, вы разрабатывастс матсриалы 110 контракту, 110 CI'O завср шснии к вам ужс нсльзя будст обратиться, Поэтому на Оllисанис каждOl'О 
rлава 12: Плаllироваllие и доку.меllтация 343 тсста IIланируйтс вдссятсро большс врсмсни, чсм на CI'O разработку и BЫ IIОЛНСНИС, Вам IIРИДСТСЯ IIрсдоставить слсдуюшис свсдсния, . Все, что пишется для члеllа команды, но в болсс 1I0дробном изло жснии, Особснно аккуратно слсдуст указывать, какой рсзультат оз начаст сбой, а какой  УСIIСШНОС IIРОХОЖДСНИС тсста, Если вам кажстся, что опрсдслснныс инструкции сложны для IlOнимания, IlOlIрОСИТС КОI'онибудь ВЫIIOЛНИТЬ 110 ним тсст И IIОСМОТРИТС, как он СlIравится и что сму будст НСIIOНЯТНО, (Особснно часто 1I0добныс сложности возникают IIрИ ОlIисании тсстов, связанных с BpCMCHHЫ ми lIарамстрами ВЫIIOЛНСНИЯ IIpOI'paMMbI,) . Дополнительные аналитические материалы, ДОIIOЛНИТСЛЬНЫС ОIIИ сания тсстов, их связсй, 1I0дробныс ОIIИсания I'PYIIlI тсстов, а нс каЖДОl'О ВХОДЯШСI'О в них тсста 110 отдсльности, . Зависимости. Если, наlIрИМСр, IIpOl'paMMa можст читать максимум 80 байтов данных за один раз, вы будстс тсстировать сс с 80 и 81 байтом, Если затсм возможности IIpOl'paMMbI будут расширсны до 256 байтов, старыс тссты IIОТСРЯЮТ смысл, ТСIIСрЬ тсстирусмыс объс мы данных нсобходимо будет увсличить до 256 и 257 байтов, В ОlIисании этих тсстов должно быть явно указано, что они IIРСДНаз начсны ДЛЯ IIpOl'paMMbI с IIOТОЛКОМ в 80 байтов, Это замсчанис луч шс BCCI'O вынссти В отдсльный раздсл IIOA названисм "Зависимости" или "ПРСДIIОЛОЖСНИЯ", Тота вам нс IIРИДСТСЯ lIисать, что дслать, ссли СlIсцификация измснится, ОIIЫТНЫЙ тсстировшик IIрскрасно сообразит это сам  Iлавнос, чтобы у HCI'O была вся нсобходимая информация, Т,С, чтобы он знал, что с данным lIарамстром IIporpaM мы связаны такисто и такисто тссты, Заметки для следующеrо выпуска nporpaMMbI (планируемоrо, вероятно, через roA) Послс ВЫlIуска IIpol'paMMbI работа тсстировшиков над нсй обычно IIpC крашастся, чтобы вскорс возобновиться ужс над слсдуюшим ВЫIIУСКОМ, При этом ВОВСС нс обязатсльно, чтобы им занимались тс жс люди, а IIОТОМУ будушим тсстировшикам очснь IIрИl'ОДЯТСЯ любыс ваши замстки, HCKOTO рыс из тсстовых матсриалов им, возможно, будст трудно IIОНЯТЬ, Поэтому IIOAI'OTOBbTC СllСЦИальный КОМlIЛСКС ЗШIИссй ДЛЯ оБЛСl'ЧСНИЯ их 1I0нимания, Эти зшIИСИ будут 1I0добны ОlIисанным в IIРСДЫДУШСМ раздслс, Прсдставьтс ссбс будуших тсстировшиков как архсолOl'ОВ, Им IIРИДСТ ся IIрокаlIываться сквозь ворох вашсй докумснтации, вссвозможных замс ток, дисков и T,II, ВIIОЛНС всроятно, что ВСС, ЧСI'О они нс CMOryT IIОНЯТЬ, будст IIрОСТО отброшсно, Или жс, что сшс хужс, отдсльныс матсриалы будут 
344 Часть 11: ПриеАtы и тех//олосии тестирова//ия неверно интеРlIретированы, и в результате будут IIРОlIускаться ошибки, Имейте также в виду, что будушим тестировшикам IIридется не только ВЫIIOЛНЯТЬ уже l'oToBbIe тесты, но и модифицировать МНОl'ие из них, 11O скольку К тому времени IIpOl'paMMa наверняка изменится, Итак, вашим 1I0следователям будут крайне необходимы следуюшие материалы, . Подробности О каждом тесте. Как el'o ВЫIIOЛНИТЬ и какие ожида ются результаты, . История сбоев пpOi!paммbl. Какие IIроблемы выявлялись каждым из тестов, как они выlляделии и какие изменения были внесены в IIpO l'paMMY для ИСlIравления ситуации, . Дополнительные соображения и проблемные вопросы по поводу каж aOi!O из тестов, зависимости тестов от IlOведения IIpol'paMMbI и ClIe цификации, Сценарий теста для HeOnbITHOrO тестировщика Этот человек может быть ОIIЬПНЫМ 1I0льзователем КОМlIьютера (lIpO I'раммистом, руководителем, системотехником), а может быть и совсем новичком, Как бы там ни было, ОIIьпа тестирования IIpOl'paMMHbIx IIpOДYK тов у Hel'o нет и с тестируемой IIрOl'раммой он абсолютно незнаком, По этому ему необходимо 1I0дробное IIOШaI'овое руководство  сценарий теста, Назначение сценариев и обеСlIечиваемые ими BbIl'OAbI MOI'YT быть сле дуюшими, . Работа по сценариям позволяет сократить размер i!pyппbl тecти ровШlия. В критической ситуации можно IIOДКЛЮЧИТЬ к работе над IIроектом ДОllOлнительный lIерсонал и быстро el'o обучить, Таким людям необходимо будет IIрОСТО следовать сценариям  от них не требуется особых знаний и навыков, и их заРlIлата обычно юраздо меньше, чем у основных СlIециалистов, . Сценарии освобождают персонuл от самой утомительной работы. В двадцатый раз ВЫIIOЛНЯЯ один и тот же тест, кто YI'OAHO будет делать ею сонно и невнимательно, ВО МНOI'ИХ случаях IIревосходным решением IIроблемы может быть 1I0ручение IIОВТОРЯЮШИХСЯ тестов временным сотрудником, . Сценарии прекрасно подходят для стандартизированных наборов тестов. Они MOI'YT быть основой реI'реССИОННОl'О тестирования, однако самые сложные из тестов не следует 1I0ручать дилетантам, . Хороший сценарий производит неотразимое впечатление на PYKoвoд ство. Не следует недооценивать значение ЭТОI'О обстоятельства, 
rлава 12: Плаllироваllие и доку.меllтация 345 к сожалению, здесь же имеется и целый ряд IIроблем, . Неопытные тестировщики (включая и MHOZUX достатОЧ1l0 oпыт ных проzраммистов)  это плохие тестировщики. Для 1I0дтверждения ЭТОI'О факта IIриведем IIример из нашей соб ственной IIрактики, Мы исследовали IIроизводительность нескольких IIрекрасных СlIециалистов из отдела технической 1I0ддержки, Эти люди занимались жалобами 1I0льзователей, уже КУIIИВШИХ наш IIpO дукт, Их заинтересованность в IlOиске IIроблем была крайне BЫCO ка, Работали они 110 1I0дробным И очень тшательно 1I0дютовленным сценариям, Параллельно с ними IIpol'paMMY тестировали несколько сотрудников нашей I'PYIIlIbI  ту же версию и 110 тем же сценариям, Результат был однозначным: ОIIьпные тестировшики нашли больше ошибок, IIричем среди них БЬL1И такие, которые вообше бьulO трудно IIрОIIУСТИТЬ, И все же неСlIециалисты их IIрОIIУСТИJiИ, Особенно IIЛОХО HeollblТHbIe тестировшики СlIравляются с трудноуло вимыми ошибками или ошибками, связанными с временными lIapa метрами ВЫllOлнения IIpol'paMMbI, Они редко документируют ошибки, которые трудно IIОВТОрИТЬ, Кроме TOI'O, они не документи руют IIроблемы, которые, как им кажется, MOI'YT быть связаны с неверным 1I0ниманием IIporpaMMbI, НеОlIытные тестировщики не дo кументируют ошибку, если им кажется, что читатель отчета IIOСЧИ тает ее незначительной, И есть еше МНО\'О ДРУI'ИХ IIроблем, которые они IIРОlIускают или оставляют недокументированными, . Написание хорошеzо сценария требует MHOZO времени. На наlIиса ние хорошеl'О сценария и IIOДI'ОТОВКУ СОIIУТСТВУЮШИХ материалов (КОIIИЙ экрана, файлов и T,II,) уходит В 515 раз больше времени, чем на IIOДI'OTOBKY и ВЫllOлнение ИСХОДНОI'О теста, . Сценарий ни в коем случае не должен содержать ошибок. У тести ровшиков, которые им руководствуются, нет ни olIblТa, ни знаний ДНЯ ИСlIравления ошибок в сценарии, Если чтото 1I0йдет не так, как в нем наlIисано, они IIрОСТО не будут знать, что делать, И если Ta кой тестировшик 1I0ймет, что в сценарии есть ошибка, он не будет документировать даже те IIроблемы, которые увидит, IIОСКОЛЬКУ 1I0считает, что они связаны со сценарием, а не с самой IIроrpаммой, Разрабатывая сценарии, следует IIOСТОЯННО иметь в виду, что они IIИ шутся не для OIIbITHbIX тестировшиков, а значит, в них должна быть COBep шенно иная информация, Скорее Bcel'o, вам IIридется составлять оба ТИlIа документов, В сценарии ничеl'О нс I'ОВОрИТСЯ о назначении тестов и их входных данных, Ведь неОllЬПНОЮ тестировшика такая информация толь ко смутит, rлавное содержание сценария  это IIроцедура ВЫllOлнения теста, и в частности, следуюшая информация, 
346 Часть 11: Приемы и теХIIО,Ю?/lИ II1сстUfЮ(iO/I/I,'1 . Четкие пошаlовые иllстРукции для выпОЛllеllИЯ теста. 1::1'0 ИСIIOJI н ите;IЬ НС должсн ДОI ады шпься, что н КаК дслать, это ДО;lЖНО быть совершенно чстко ЗанисаllО в IIНСТРУКЦИИ, . ТОЧllое описаllие ожидаемых результапlOв, ВК:IЮЧаЯ и то, что должен видеть тсстировщик на КаЖ;lOМ ',лапе инструкаии, O'leHb IIOJ\СЗНЫ риснечатки кониН ЭКраНа, Отметые в них Маркером, КУДа именно слсдуст смотрсть, . Описаllие вОЗМОЖIlЫХ вариаllтов llеудаЧIlОi'О прохождеllия теста проzраммой. Не вдаВШIСЬ во внутренние мехаНIIЗМЫ работы IIpOl'paM мы, расскажите, 'ПО можеl' бьпъ нс ЛIК И как это будет ВЬН';lядеть, Приведите IIрИlеры TOI'O, что тестировщик может увидеть или услы шать в случае сбои, . Квадратики, в которых тестировщик будет 011Lнечать, что тест выполиеll. СценариЙ \lOжет И\lеть фОрIУ контрО,ЫЮI'О СIIИСКа или БЛаНКа, в которыЙ вписываются ответы на вопросы, Если нсобходи МО, чтобы теСПIРОВЩИК обратил ВНИ\lаНllе на опредслснныi'l аспект IlOведения IIpOI'pa\lМbI, следует внести в сценариЙ соответствующий ВОlIрОС, То, как ОРl'аНllЗовать саенариЙ, может сушествсНlIO IlOlI:IИЯТЬ На резуль таты работы, ИНСТРУКЦИII LюJlЖНЫ быть от;!елсны от ОllНсаниЙ, наlIрllмер, Что сде.lать должно бьпъ Зallисано в отдеЛJ,НОМ СТОJlбце, нерсд Что вы увидите, Нс lcHce важсн 11 IЮРЯ;lOК З,Ыalшii, ТССТIlРОВШИК не должсн IIe рескаКI1IШТЬ меЖ;IУ к.;\зссами тестов, Kpo\IC '1'01'0, у Hel'O НС :lOлжно быТl, чувства, что ОН ЗрЯ Tep!le'l вреIЯ, Ilрежде '1е\l II.:ре;ЫIЪ сцснариЙ вре\ICI!IЮМУ Ilерсоналу, IIреЛJlожите СI о t.:IЯ ОIJробоваllИИ \)IIЫТIIО\I\' тестировшику, Заметки для руководителя Ваш руководите;н" вероятнее Bcel'o, сам ЯВ;lиется ОIIЬПНЫ,\1 тестировщи КОМ, и IIOЭТО,\IУ все ваШII тестовые .lаН:РИd:lЫ бу:!ут t:\IY IJlIтересны, ОДНаКО лучшс душ\Ть о нем КаК об аД\lинистраторе 11 ОСЛIВИТl, в стороне еl о Tex НИ'lескиЙ ОIIЫТ, Ilреждс Bcel'o el'o IIIпересует НРОДВI1жеНIlt: Работ 11 то, Ha сколько хорошо IIpOTeCTl1pOBaHa каЖjlаи из составляющих llpOl'paMMbI, Возможно такжс, что ero З;Нllпсре,уст, КОI':Ш в IЮё;lеЛНI1Й paJ ВЫIIO:lнялея ОlIрсдслснныii тест 11,:111 KOliIa тестировался тот аснект Ilрш'ра\l\IЫ, в KOTO ром ТО;IЬК() что ВЫЯВ:lсна еср"еJlIая ОllIиGка, В иде<L1С JaMCTКlI ЛjJЯ рн;оводите,'IИ IIроекта JО;IJКIIЫ храниться 11 базе данных, В IIcii ДО:IЖНО был, 110 OJlIOii 'jalll1CII ;ЦЯ ":lЖ.:1О1'O TeCla, а C;\\IH ,IаllИСl1 jIO:JЖНЫ СО;lсржап, С.'IС,!уюшую ИIIl(Юр\lаШ1Ю, . Имя и.lИ I/(Hlep, одllОЗllаЧIlО идеllтифицирующие тест, . Пабор h.',lассuФикациЫIllЫХ идеllтификаторов, В\Н?С ,е :ни "денти фика mpJ,1 у"а JJ.!I<аЮI', '1'10 с 11O,\IOJ1lЫО ла!lНОl'О Tt:CTa Ilровериетси 
rлава 12: Плаllироваllие и доку.меllтация 347 восстановлснис информации с диска, сортировка, выбор ОIЩИИ из rлавноrо мсню и отображснис сортирусмых данных, Блаrодаря TaKO му КОЛИ'IССТВУ идснтификаторов IIрИ возникновснии IIроблсмы лсrко отыскать всс связанныс с нсй тссты, . Список результатов тестирования, Для каждою из циклов, в KOTO рых ВЫllOЛНЯЛСЯ данный тсст, в СIIИСКС указывастся тсстировщик и номср цикла, а рсзультат тсста ОIIРСДСЛЯСТСЯ как пройден или не пройден (со ссылкой на отчст о IIроблсмс), Кромс TOI'O, IIpol'paMMY слсдуст раздслить на ряд функциональных об ластси и для каждой из них оцснить IIриблизитсльнос количсство нсобхо димых тсстов, Со врсмснсм, KOI'Aa ващ собствснный СIIИСОК функций IIpOI"paMMbI будст расщирсн, можно IIСРССМОТРСТЬ это разбиснис, ЭТО IIOMO жст формировать "llOказатсльныс" OPICTbI о том, сколько тсстов для каж дой из областсй ужс ВЫIIOЛНСНО и сколько сще IIРСДСТОИТ, Документы для юридическоrо использования Если клиснты IIОДадут на ващу КОМllанию в суд за ощибки в IIpol'paM мс, адвокат должсн будст доказать, 'ПО тсстированис IIpol'paMMbI IIРОВОДИ лось тщатсльно и на AocTaтo'IHoM IIРОфсссиональном уровнс, Если это и в самом дслс так и ссли сбои IIpOl'paMMbI MOryT обходится клиснтам O'ICHb дорою, всдитс заlIИСИ о IIродсланной работс, СlIрОСИТС у юриста КОМllании, какие заlIИСИ будут сму наиболсс IIOЛСЗНЫ, Подробнсс этот ВОlIрОС рассматривастся в I'лавс 14, Типы тестовых документов в этом раздслс ОlIисьшастся нссколько ТИIIOВ докумснтов, составляющих тсстовыс матсриалы, Мноrис из них основаны на стандартс ANSljlEEE Standard 829298З fi)r Software Test f)оситепtаtiоп, в котором IIРСДlIринята IIOIIbIT ка ОIIРСДСЛИТЬ унивсрсальный набор докумснтов 1UIЯ IIРОМЫШЛСННОЮ ИСIIОJlЬ зования, О мноrих ДРУI'ИХ СlIсцификациях 1UIЯ тсстовых докумснтов IIИЩСТ Ша;шсйср (ScI1llImcycr, 1987). Стандарт 8292983 можно за нссколько ДOJшаров заказать 110 слсдующс му адрссу: Complltcr Socicty or thc IЕЕЕ Р. О, Вох 80452 Worldway Postal Ccntcr Los Angc1cs, СА 90080 Можно такжс IIОЗВОНИТЬ в офис IEEE Standards Salcs в Нью Джсрси 110 тслсфону 20 1 981 0060. В стандартс 829 НИ'lсrо нс I'ОВОрllТСЯ о том, В каких случаях нсобходим каждый из IIСРС'IИСЛСННЫХ В НСМ докумснтов, Выбор КОМlIлскса ДOKYMCH 
348 Часть 11: Прие.мы и теХllOЛ02ИИ тестирова//ия тов ОIIРСДСЛЯСТСЯ нуждами IIроскта и ЛИ'IНЫМИ IIРСДlIO'ПСНИЯМИ СЮ PYKO водства, IIОЭТОМУ мы воздсрживасмся от каких бы то НИ было совстов 110 этому IIОВОДУ, Единствсннос, что можно сказать навсрняка,  это то, 'ПО никто и НИКОl'Да нс станст составлять всс IIСРС'IИСЛСННЫС в стандартс дo кумснты, Болсс TOI'O, форма и содсржанис этих докумснтов такжс зависят от ваШСl'О выбора: ссли какойлибо из них 1I0казался вам IlOлезным, это сшс нс зна'IIП, 'ПО нсльзя ОIIУСТИТЬ нскоторыс cro составляюшис, Стандарт никоим образом нс должсн вас связывать, Он ОlIисан в этой КНИI'С IIOTO му, что являстся хорошсй основой, которую IIOСЛС тшаТСЛЬНОl'О анализа слсдуст адaJIТировать к собствснным нуждам, И IIОСЛСДНСС: нс IIытайтссь наlIисать всю докумснтацию до начала тсстирования, Псрвый 'IСРНОВИК TCCTOBOI'O IIлана ЛУ'IШС написать зарансс, остальнос жс юраздо эффсктив нсс дорабатывать 110 ходу тсстирования, Кромс тою, IIOЛСЗНО IIСРСД нача лом тсстирования раСlIростраНИТh срсди заинтсрссоваННОl'О IIсрсонала КОМIIЛСКС IIРИСМО'IНЫХ тсстов, Тестовый план в этом докумснтс ОIIРСДСЛЯСТСЯ содсржанис работ 110 тсстированию IIpOl'paMMHol'O IIродукта, Это можст быть одинсдинствснный докумснт, но 'Iашс он прсдставляст собой цслый КОМlIЛСКС докумснтов, IIOЛНЫЙ IICpC'ICHb которых IIРИВОДИТСЯ В отдсльном раздслс плана, Вот как раздслы TCCTOBO 1'0 IIлана ОIIРСДСЛЯЮТСЯ стандартом [ЕЕЕ 829, . Идеllтификатор тестовОi?О nлаllа. Это уникальнос имя или номср IIлана, Такой идснтификатор IIОЛСЗСН IIрИ хранснии докумснтов в базс данных, . Введеllие. В этом раздслс приводятся ссылки на всс связанныс юри дичсскис докумснты И стандарты, а такжс плановыс докумснты ca Moro продукта, . Тестируемые элемеllты. Рсчь идст о 1I0длсжаших тсстированию IIpol'paMMHbIx компонснтах  функциях, модулях, возможностях и T,II, Можно либо IIСрС'IИСЛИТЬ их IIрЯМО здссь, либо сослаться на соотвстствуюший докумснт, Кромс Toro, в этот раздсл включаются ссылки на СlIсцификации (трсбования и просктныс докумснты) И докумснтацию к IIрОДУКТУ (руководство пользоватсля, руководство по установкс IIродукта и т,п,), . Тестируемые ФУllкции. Снабдитс их ссылками на СlIсцификацию КОМlIлскса тсстов, . lJетестируемые ФУllкции. Какис имснно и IIОЧСМУ, . Подход. ОIlИШИТС обший IIОДХОД к тсстированию: ксм оно ВЫIIOЛНЯ стся, каковы основныс видов IIланирусмых работ, какис ТСХНОЛОI'ИИ и срсдства примсняются для тсстирования каждой из основных 
rлава 12: Плаllироваllие и докумеllтация 349 l'рУПП функuий продукта, Каковы критерии aAeKBaTHOI'o тестирова ния каждой l'рУППЫ? Стандартом определяется, что именно здесь, а не в разделе "Календарный план" приводятся базовые требования, включая крайние сроки завершения работ и требования к наличию персонала и тестируемых элементов, . Критерии nрохождеиuя тестов. Как тестировшик определяет, про шла ли ПрОl'рамма конкретный тест? . Критерии nриостаиовки и возобновлеиия работ. Перечислите все возможные причины, по которым тестирование может быть прекра шено до решения проблемы, Что должно быть сделано, чтобы рабо ты можно было продолжить? Какие тесты после ЭТОI'О должны быть проведены повторно? . Докумеитацuя. Это список всех тестовых документов, которые дол жны быть составлены для данною продукта, . Задачи тестироваиuя. Перечислите все задачи, которые решаются в ходе I10ДI"OТОВКИ к тестированию и el'o проведения, Покажите зависимости между задачами, укажите, какие особые навыки или спеuиалисты необходимы для выполнения каждой из них, Здесь же указывается, кто и KOIAa выполняет работы и насколько они TPYДO емки, . Необходимое оборудование. Здесь перечисляется все необходимое для работы аппаратное и ПрOl'раммное обеспечение, тестировочные cpek ства, лабораторное оборудование и т,п, . Ответственность. Это перечень l'рУПП и отдельных лиu, OTBeT ственных за управление, проектирование, подrотовку, выполнение, контроль работ, исправление ошибок, решение проблем, обеспече ние необходимою оборудования и т,п, . Необходимый nерсонал и обучение. Спеuиалисты каких квалифика uий и в каком количестве необходимы для решения поставленных задач, какое обучение необходимо пройти имеюшимся сотрудникам? . Калеидариый nлаи. Перечислите ключевые даты, укажите, KOl'Aa необходимы конкретные ресурсы (люди, техника, инструментальные средства и др,), . Риск и иеnредвидениые обстоятельства. каковы наихудшие преk положения о выполнении TecToBoI'O плана? Изза чеl'О тестировши ки MOI'YT не уложиться в сроки и что будет предпринято в этом случае? . Утверждеиие. Кто утверждает тестовый план? Укажите место для их lюдписей, 
350 Часть /1: Приемы и техllОЛОсИИ тестироваllИЯ Список функций Этоrо документа в стандарте IEEE 829 нет, О списке Функний проrpам мы подробно рассказывалось в соответствующем разделе этой Iлавы, EI'O можно включить В раздел TecToBoI'O плана "Тестируемые элементы", а можно сделать отдельным документом, Критерии приемки на тестирование ЭТОI'О документа в стандарте IEEE 829 также нет, Приемочные тесты  это небольшой набор тестов, которые должна пройти ПрОI'рамма, прежде чем она будет принята тестовой l'рУППОЙ ДЛЯ проведения ПОЛНОI'О uикла тестирования, Если ПрOl'рамма не проходит эти тесты, значит, она еще слишком нестабильна, чтобы с ней стоило возить ся, На приемочные тесты, как правило, должно уходить меньше получаса, и уж никак не более двух часов, Если в данном проекте используются приемочные тесты, напишите документ с их тОЧIIЫМ определением, Передайте ею ПРОI'раммистам, при чем сделайте это заранее  до начала первOI'О uикла тестирования, Этот документ должен быть настолько подробным, чтобы ПрОl'раммисты МОIЛИ самостоятельно тестировать по нему ПрОl'рамму еще до TOI'O, как передадут ее вам, Это позволит им устранить самые явные ошибки так, чтобы их никто не увидел, Спецификация комплекса тестов Этот документ определяет, как будет тестироваться каждая функuия или I'руппа функuий ПрОl'раммы, В соответствии со стандартом IЕЕЕ 829 в Hel'o входят следующие разделы, . Идеuтификатор спецификации тестовОi?О nроекта. Это уникальное имя или номер документа, . Тестируемые фуuкции. Это область применения данной спеuифика uии, . Ilодход. Этот раздел дополняет и расширяет соответствующий раз дел TecToBoI'O плана, В нем описываются спеuифические тестовые теХНОЛОl'ИИ, Как анализируются результаты тестов (визуально или ПрОl'раммным путем)? На каких I'раничных и ДРУI'ИХ условиях OCHO вывается выбор конкретных тестов? Каковы оrpаничения и требова ния, общие ДЛЯ всех (или большинства) тестов? . Определения тестов. Пере'lислите и коротко опишите все тесты jlaHHol'o комплекса, Если тестируется мною различных типов фун кuиИ, комплексов тестов также может быть достаточно MHOI'O, . Критерии прохождения тестов. Как тестировщик решает, прошла ли тест данная функuия или комбинаuия функuий? 
[лава 12: Плаllироваllие и докумеllтация 351 Спецификация отдельноrо теста в соответствии со стандартом 829, спеuификаuия, описывающая отдель ный тест, включает следующие разделы, . Идеllтификатор спецификации теста. Это уникальный номер дo кумента, . Тестируемые элемеllты. Для каких функuий. модулей и т,п, преk назначается данный тест? Приведите ссылки на спеuификаuии и руководства, . Спецификации ввода. Приведите значения всех входных данных. их диапазоны или имена файлов, Здесь указывается все, что так или иначе относится ко входным данным теста: содержащие их области оперативной памяти, значения, передаваемые операuионной системой, друrими проrpаммами или базами данных. выводимые на экран запро сы, а также взаимосвязи этих элемеНТОl3 данных, Сюда же относятся и временные характеристики ввода, Например, если тестировщик должен ввести информанию, пока МИl'ает индика тор активности диска или в течение секунды после получения опре делеННОI'О сообщения, об этом следует написать в данном разделе, . Сnецификацuя ввода. Перечислите все выходные значения и сооб щения, Если время ответа имеет значение, указывайте и el'O, . Необходимые ресурсы. Здесь перечисляются спеuифические требова ния к аппаратному и прОl'раммному обеспечению, ДРУI'ИМ техни'!ес ким средствам и персоналу, . Особые nроцедурные требоваllUЯ. В этом раздеJlе описываются He стандартные действия по настройке и тестированию ИJlИ спеuифи ческие формы анализа результатов, . Зависимости между тестами. Какие тесты должны быть выполне ны перед данным тестом, почему и что будет, если ПрОl'рамма их не пройдет? Спецификация процедуры тестирования в этом документе описывается последовательность действий по выпол IIL'НИЮ каЖДОl'О набора тестов и анализу их результатов, В соответствии со L'1<lHAapTOM 829 в Hel"O включаются следующие разделы, . Идентификатор спецификации процедуры тестироваllUЯ. . НаЗllачение. Для чеl'О служит данная проuедура? В раздел включа ются пере крестные ссылки на все связанные с ней тесты, . Особые требовШlUЯ. Здесь приводится перечень всех проuедур. KO торые должны предшествовать данной, спеuифические навыки TC( 
352 Часть 11: ПРИемы И тех//олосии тестИРОIII/llII!1 тировщика, особые требования к аllllаралюпроrраммной среде и инструментам, . Последовательность выполнеllUЯ процедуры. В перечень включаются следующие из необходимых действий, о Запись в журнале. Спеuиальные методы и;!и формат протоколи рования результатов или наблюдений, о Настройка. ПОДl'Oтовка к выполнению IIроцедуры, о Начало. Как начать выполнение проuедуры, о Выполнение. Перечень действий, выполняемых в данной проuе дуре, о Измерения. Как выполняются тестовые измерения (например, как фиксируется время ответа), о Приостановка. Как ПРИОСТi\новить тест в случае необходимости (например, если он слишком длинный и тестировщик хочет уйти домой на ночь), о Возобновление. С KaKoro места и как проuедура возобновляется после приостановки, о Остановка. Как завершить выполнение проuедуры, о Восстановление. Как вернуть окружение в исходное состояние, о Непредвиденные обстоятельства. Что делать, если чтото пойдет не так, Перечень необходимых элементов Этот документ сопровождает материалы, необходимые для проведения тестов, В нем сказано, что именно получает тестировщик, В соответствии со стандартом 829 он включает следующие разделы, . Идентификатор переЧIlЯ необходимых элемеllтов. . Передаваемые элемеllты. В этом разделе указьrваЮТС51 имена и HO мера версий предоставляемых ПрOl'рамм и модулей, а также фами лии людей, ответственных за их предоставление, . МестОllахождеllие. rAe будут находиться предостаВ;lснные матсри алы  на диске, ленте, в общем каталоrе, в папкс') Как они поме 'leHbI? . СостОЯllие. Изменились ли тестируемые компонснты с тех пор, как вы в последний раз с ними работали? Какие из документированных проблем уже решены? Изменилась ли спеuификаuия или поведение ПрОI'раммы? Какие из изменений моrли отразип,ся на надежности ПрОI'раммы? Отличаются ли предоставляемые материалы от спеuи 
[лава 12: Плаllироваllие и докумеllтация 353 фикаuии или руководства и, если да, какие из документов правиль ны? Какие еще предстоят зна'lительные изменения? . Утверждение. Сотрудники, ответственные за предоставляемые Ma териалы, должны подписать данный документ, подтверждая, 'ПО все элементы l'OTOBbI к тестированию, Тестовый сценарий ЭТОI'О документа в стандарте 829 нет, О ею назна'lении и содержании уже рассказывалось в разделе "Сuенарий теста ДЛЯ неОПЫТНОl'О тестиров щика", Вот из 'Iel'o он состоит, . Инструкции общеzо характера. Это пояснения о том, как читать и использовать сuенарий, как и KOJДa заполнять отчеты о проблемах, IAe их найти и т,п, Всю эту информаuию можно предоставить Tec тировщику в виде отдельною документа, чтобы не переl'ружать cцe нарий, однако в любом СЛУ'lае неопытному тестировщику она абсолютно необходима, . Начало. В этом разделе приводится описание проuесса настройки среды и подrотовки к выполнению теста, . Пошаzовые инструкции для выполнения каждоzо теста. . Квадратики для отметок о прохождении каждоzо шаzа и отметок о результатах. . Поля для описания поведения пpozpaммbl, а также для заметок обо всем непОllятном и вопросы, ответами на которые должны служить эти описания, Позднее опытный тестировщик проанализирует эти ответы, самостоятельно проанализирует нестандартное поведение проrpаммы и, вероятно, напишет uелый ряд новых отчетов о про блемах. )Курнал тестирования Этот журнал предназна'lен для протоколирования проuесса тестирова tlИЯ и всех заслуживающих внимания событий, Стандарт 829 определяет, 'ПО он должен состоять из следующих разделов. . Идентификатор журнала тестирования. . Описание. Тестируемый объект, ВКЛЮ'lая номер версии, место про ведения тестирования, аппаратное обеспе'lение (тип компьютера, объем памяти, принтер и т.п.), информаuия о ПрОl'раммной конфи rураuии (операuионная система, номер ее версии и т.п,), . Действия и события. Что происходило в проuессе тестирования. Запись может включать следующие составляющие. 12 \.1' 
354 Часп", / J- //ри('.'ны tI п{('\1иJ-lО,'1I11 ",('( 11111/'(/11(111/111 о Процесс. Какой была проuедура тестирован,,>!. ... 1 <) 1'1,1 1 l'тlJ(l'H' лем происходящеl'О и какой была роль ЭТОI'О 'IC;lI1llt....:1 11 11"'11O;ll!e нии теста. о Результаты. Что произошло, 'ПО ВЫ видели, слышали и Т.П., l'Ae записаны выходные данные, о Аномальные события. Неожиданные события (как правило, объясняющиеся ошибками в ПРОI'рамме). Что происходило до и после них. о Идентификаторы отчетов об инцидентах. Номера составленных отчетов о проблемах. Отчет об инциденте во время тестирования Это отчет о проблеме, Форма отчета, описанная в данной КНИI'е, отли чается от стандарта 1 ЕЕЕ, По cTaHAapry в отчете должны быть следующие поля: идентификатор отчета, описание, входные данные, ожидаемые pe зультаты, реальные результаты, аномалии, дата и время, ШaJ' проuедуры, среда выполнения, попытки повторения теста, тестировщики, наблюдате ли, ссылки на тестовые планы и спеuификаuии, Итоrовый отчет в конце каждой серии тестов составляется ИТОI'ОВЫЙ отчет, и такой же отчет составляется по завершении uикла тестирования, В нем коротко описывается проделанная работа и оuениваются ее результаты, Вот какие разделы определяются для этою отчета стандартом 829, . Идентификатор итоzовоzо отчета. . Описание. Что тестировалось (включая номера версий), в какой среде, как вы оuениваете полученные результаты? Приведите ссылки на спеuификаuии тестов, . Отклонения. В чем и почему проuедура тестирования отличалась от описанной в спеuификаuии? . Оценка адекватности тестирования. Было ли тестирование Ha столько полным, как TOI'O требует тестовый план? Какие модули, функции, возможности ПрOl'раммы или их комбинаuии протестиро ваны недостаточно и ПО'lему? . Обобщенное описание результатов. Какие выявлены проблемы, какие из них устранены, каковы принятые решения? Какие из про блем оставлены нерешенными? . Оцеllка. Общая оценка каЖДОl'О из элементов (ПрОI'рамм, модулей) на основе результатов ею тестирования, Каков риск, связанный с el'o реальной эксплуатаuией, и вероятность сбоев (необязательно)? 
II'I(({/ 1.' 11 !(IJ'"jJ(!titllltl(' 11 (Jол I 111 ',,"'(IЦllJl ....5S . 3атриЧl'lI/lые ресурсы. Сколько ;Iюдей работало над описанными тестами, сколько затрачено маШИННОl'О времени, рабочеl"О времени сотрудников, какие еше использованы ресурсы и какие произошли нестандартные события, . Утверждеlluе. Документация в файлах данных и управляющих файлах Создавая файлы входных данных ДЛЯ тестов, старайтесь по возможно сти включать в них комментарии, поясняющие выбор каждою из значений, То же самое касается и файлов, управляющих выполнением тестов, Если их форматом допускаются комментарии, не скупитесь на пояснения к каждому выполняемому этапу, Лучше Bcel'o Орl'анизовать тестирование таким образом, чтобы, выпол НЯЯ каждый из тестов, видеть на экране или на БУМaJ'е el'o ожидаемые результаты. TOIAa их сразу же можно сравнивать с ПОЛУ'lенными. В этом СЛУ'lае отображать или распе'lатывать описания IIРИ'IИН выбора TOI'O или ИНОI'О зна'lения данных или той или иной проuедуры не следует, Эта ин формаuия будет только занимать лишнее место и отвлекать тсстировщика от результатов теста, rораздо лучше, если она просто будст BCCl'Jla 110)[ рукой (например, в файле, который можно открыть в любой МОМСНТ), В отношении встроенных комментариев существует одна сложность , по сравнению с документаuией они rораздо менее стандартизированы, Фактически их форма отдается на откуп автору, и есть вероятность, что некоторые файлы останутся вообще недокументированными или KOMMeH тарии в них будут поверхностными и неаккуратными, И уж ВО всяком случае комментарии редко бывают такими подробными, как распечатанные документы, Однако есть у комментариев и важное преимущество  их леrко обнов лять, KorAa сотрудник изменяет проuедуру тестирования, комментарий находится прямо у Hero перед rлазами, К тому же комментарии не теряют ся  если у вас есть тестовый файл, значит, есть и текст ero описания, Заключение Мноrие тестировщики слищком увлекаются написанием бумаr, забывая, 'ПО их основная работа  поиск и исправление ошибок, В этой I"лаве описан uелыЙ ряд документов, но это вовсе не озна'lает, 'ПО необходимо составлять их все, Отбирайте только самое необходимое, сообразуясь с нуждами KOHKpeTHoro проекта, 
Часть 111 Управление проектами и zpyппaмu r лава 1 З. Объединяющая rлава 14. Управление rруппои тестирования Приложение . Распространенные проrраммные ошибки 
Fлава 13 Объединяющая Назначение этой rAaBbI Итак, вы уже знаете, как тестировать проrраммное обеспечение, как пла нировать эту работу, и имеете представление о том, как плановые и про ектные документы связаны с ее результатами, Теперь пришло время перейти от технических вопросов к орrанизационностратеrическим, Реальный мир полон оrраничений, Не только желательную работу никоrда не удается выполнить в полном объеме, но даже ту, которую, на ваш взrляд, вы обязаны сделать, (Таким был урок второй rлавы,) Не лучше положение и у руководителя проекта, Он пытается соблюсти разумный компромисс между надежностью продукта, ero функциональными возможностями, CTO имостью И скоростью разработки, Поэтому, делая упор на качество продук та, он должен идти на уступки в друrих не менее важных дпя компании вопросах. В разrоворах с руководителем следует обязательно это учитывать и не упорствовать в том, что кажется полезным с точки зрения полноты Te стирования  старайтесь, как и он, сохранять широту взrляда на вещи и pac сматривать все проблемы с точки зрения пользы для проекта в целом, а не только cBoero узкоrо участка работы, Т orAa у вас BcerAa будет взаимопо нимание, с точки зрения реальноrо проекта в реальном мире работа rруппы тести рования BcerAa связана с затратами, Они должны окупаться, а окупиться они MorYT не иначе, как если будут удовлетворены запросы пользователей и повысятся доходы компании, Именно это и является rлавным критерием оценки результатов вашей работы, и именно это позволит получить допол нительное финансирование  только докажите, что оно окупится, И лучший способ доказать окупаемость своей работы  это показать, что она позво ляет снизить друrие затраты, связанные с качеством продукта. В самом начале каждоrо проекта ero руководитель вырабатывает стратеrию, позволяющую максимально снизить затраты на разработку и обладающую той степенью rибкости и той направленностью, которые помоrут наиболее эффективно решить поставленные задачи, Выбранная руководителем стратеrия разработки может оказаться классическим методом водопада, эволюционной 
[лава IЗ: Обьеди//яющая 359 схемой или же ero собственной вариацией oAHoro их этих двух методов, Менее вдумчивый менеджер может просто следовать однажды усвоенному подходу, не задумываясь об иных возможностях и их преимуществах, Как бы там ни было, выбранная им модель определяет, KorAa и в каком порядке выполняются различные виды работ, и в частности, KorAa продукт тестиру ется и KorAa в Hero вносятся исправления, Вам как руководителю rруппы Te стирования необходимо понимать выбранную модель до мельчайших деталей, Иначе, планируя работу своей rруппы, вы рискуете наделать серьезных оши бок, Например, если значительная часть тестирования пользовательскоrо ин терфейса проrраммы будет проведена на этапе, KorAa изменить ero будет уже нельзя, большинство документируемых вами проблем так и останутся нерешенными, Если же некоторые изменения все же будут внесены в про rpaMMY, это может нарушить планы друrих сотрудников, работающих над проектом, Так что плохо будет всем, Итак, для эффективной работы и rладких взаимоотношений с руководством исключительно важно правильно понимать цели, преследуемые руководите лем проекта при планировании распределения затрат и направлений OCHOB ных усилий, выбранную им стратеrию разработки, а также видеть полное соотношение составляющих качества продукта и связанных с ними затрат KOM пании. Только TorAa вы сможете rоворить с руководителем проекта на ero языке и только TorAa сможете объяснить, а если необходимо, и доказать, что для полноценноrо тестирования продукта, отвечающеrо задачам дaHHO ro проекта, необходимо выполнить такието виды работ в TaKOMTO объеме, а если этоrо не сделать, то возможны такието и такието последствия, В данной rлаве речь пойдет о разбиении проекта на ряд последовательных этапов. Рассказывая о том, какая работа выполняется на каждом из этих этапов, мы основывались на опыте, полученном нами (и нашими коллеrами) в ходе множества проектов во множестве компаний, Однако приведенные рекомендации НЕ следует рассматривать как Единственно Правильный Спо соб орrанизации проекта, Напротив, как и с любым друrим слособом, с ним связано множество проблем. Однако, скорее Bcero, структура вашеrо про екта будет очень похожа на описанную в этой rлаве. Мы же хотим просто помочь вам в выборе необходимых типов тестирования, Обзор В . данной rлаве рассматриваются следующие вопросы: Чем приходится поступаться при разработке проrраммноrо обеспечения Модели разработки Затраты, связанные с качеством продукта Сроки разработки Проект продукта Анализ пользовательских данных Первоначальная функциональность Почти альфа Альфа . . . . . . . . 
360 Часть 1/1: Уnравлеllие nроектаАtИ и ?руnnш>tU . Пребета . Бета . БетатеСТl1роваНl1е вне KOMnaHl111 . ЗамораЖl1ваНl1е пользовательскоrо I1нтерфеi1са . Перед завершеНl1ем . КОЭффl1Цl1енты надеЖНОСТI1 . Последняя проверка цеЛОСТНОСТI1 . Выпуск продукта . АнаЛI1З продукта после ero выпуска БиБАиоrрафия По вопросу о контроле качества nporpaMMHbJx продуктов можно порекомен довать бестселлер AMepl1KaHCKOro общества контроля качества (American Society for Quality Control) Рriпсiр/еs of Qиa/ity Costs (Campanella, 1990), Он будет очень полезен тем, кто захочет BHeApl1Tb в свое;:; KOMnaHl111 cl1cTeMY контроля затрат на качество продукта, Кроме Toro, I1HTepeCHbJ KHl1rl1 TaKI1X авторов, как Джуран 11 rpai1He (Juran & Gryna, 1980), а также Феi1rенбаум (Feigenbaum, 1991), в rлаве 3 уже рассказывалось о стадl1ЯХ разраБОТКI1, 11 MHOrl1e определен ные там концеПЦl111 I1СПОЛЬЗУЮТСЯ в данно;:; rлаве, rласс (Glass, 1992) paCCMaT pl1BaeT этапы разраБОТКI1 nporpaMMHoro продукта с ТОЧКI1 зреНI1Я РУКОВОДl1теля проекта, помоrающеrо npOrpaMMI1CTaM УЛУЧШI1ТЬ ero качество, Чем ПРИХОДИТСЯ поступаться разработчикам проrраммноrо обеспечения Работа руководитсля проскта заключастся в том, чтобы обсспсчить выпуск высококаЧССТВСННОI"О продукта в заданныс сроки и при этом уло житься в рамки ОТПУЩСННОI"О бюджста, Однако эта задача нс ВССljШ оказы вастся выполнимой, В сфсрс разработки ПрОlраММНОIО обсспсчсния прсвышснис сроков И бюджста  самос обычнос дсло, Чтобы всс жс выполнить свою залачу и удсржать проскт в рамках OT ПУЩСННОI"О врсмсни И рссурсов, CI"O руководитслю В опрсдслснныс момснты приходится псрссматривать имсющисся рсзультаты работы и решать, какис из оставшихся задач должны быть обязатсльно выполнсны, а от каких при дстся отказаться за нсимснисм врсмсни или ACHCI", Такой перссмотр даль нсйших планов можст выполняться за нссколько мссяuсв или днсй до выпуска продукта, А поступаться в консчном счстс приходится слсдующим: . надсжностью IIродукта; . количсством и 1';lvбиной CI"O функuий; 
Тлава IЗ: ОбьедИllяющая 361 . дены"ами, необходимыми ДЛЯ выполнения дальнейшей работы; . сроками выпуска продукта, В принятии решения, особенно на поздних стадиях разработки, OI"POM ную роль ИI"рает I"ибкость выбранной стратеl"ИИ, Но какой бы ни была эта стратеl"ИЯ, возможности руководителя проекта ускорить и удешевить el"o разработку будут Оl"раничены рядом естественных факторов, . Надежность. Чтобы удешевить продукт и выпустить еl"O быстрее, проще BCel"O сократить время тестирования и оставить в ПрОI"рамме множество ошибок, Однако, даже если ЭТОI"О не делать, в продукте все равllО останется некоторое количество ошибок, которые МОI"ЛИ бы быть выявлены в ходе Д3.ilьнейшеl"О тестирования, Ведь тестирование  проuесс бесконечный, но так или иначе КОlДанибудь приходит ся остановиться, . Функциональность. Еще один способ сокращения проекта заключа ется в el"o упрощении, Если одна из функций продукта ШlOхо спро ектирована или закодирована или же техническая сложность ее ре3.iIИзаuии окаЗ3.ilась недооuененной, руководитель проекта может сэконОмить время и дены"и, просто отказавшись от этой функuии, или оставив ее усеченный вариант, Однако не с каждой функцией ПрОI"раммы можно поступить подобным образом, Отсутствие HeKO торых составляющих может резко снизить ценность продукта для пользователя, То же самое касается и неудобных способов решения определенных задач, . Деньт. Бывает, что для успеШНОI"О завершения проекта необходимо пойти на дополнительные затраты, Возникшие проблемы можно решить таким образом: купить дополнительный инструментарий, нанять высокопрофеССИОН3.ilЬНЫХ консультантов или подключить дополнительный пеРСОН3.iI, Последний вариант используется чаще BCel"O, однако это не BcerAa ПОМОI"ает, Ведь чем больше людей рабо тает над проектом, тем больше возникает всевозможных проблем и тем выше el"o стоимость, Руководящие сотрудники вынуждены OT влекаться от своих основных задач, Орl"анизуя работу HOBOI"O персо н шШ , В результате это может даже затянуть весь проuесс разработки, (См, Брукс (Brooks, 1995),) Это касается дополнительноl"O подклю чения к работе как ПрОI"раммистов, так и тестировщиков, В конце проекта и тот, и ДРУI"ОЙ варианты MOI)'T серьезно дестабилизировать работу всей команды, . Дата выпуска. Если проект выбивается из I"рафика, el"O РУКОВОJLИ тель может отлоЖить выпуск, Однако это может обойтись KOM""IJJ1JJ крайне AOPOI"O, 
362 Часть 111: Управлеllие проектаАtИ и ?руппа.ми о Непосредственная стоимость продолжения работ. Эти затраты определяются зарплатой всех участников проекта, о ДОПОJшительные потери. Если работа выполняется по контракту, руководитель может предусмотреть пеню за несоблюдение сроков или Значительный бонус за своевременное завершение проекта, Если продукт должен быть выпущен к началу определеННОI"О ce зона, например, к осени, Рождеству или Новому I"OAY, пропустив el"O, можно потерять часть покупателей, Кроме TOI"O, задержка ВЫПУСка продукта может привести к тому, что устареет техника, на ко'Торую он ориентирован, или на рынке появятся конкуриру юшие продукты, Очень важно понимать, что рынок завоевывает продукт, появившийся первым, и по количеству продаж он пре взойдет более качественные продукты, выпушенные KaKoeTO время спустя, Поэтому задержка выпуска ради повышения каче ства I1родукта может el"o похоронить, о Потерянные затраты на маркетинr. Если продукт разреКJ\амиро ван CJ1ишком рано, к моменту el"o выпуска придется все повторять сначала, о Пара.rlЛельные проекты. Люди, работаюшие над проектом сверх срока, МОI"ЛИ бы уже выполнять ДРУI"УЮ работу, Таким образом, задержки OAHOI"O проекта отражаются и на ДРУI"ИХ, о Отсyrствие ожидаемой прибыли. Если доходы от выпуска продук та ДО.l1жны быть немедленно вложены во чтото ApYI"oe, если эти деньп! срочно нужны компании  TOlДa у вас большие пробле мы, Модели разработки nporpaMMHoro обеспечен ия Модель разработки ПрОI"раММНОI"О обеспечения  это тот принuип, ПО которому руКоВодитель проекта составляет план выполнения задач, О клас сических моделях разработки, их достоинствах и недостатках подробно рассказывалось в I"лаве 12, Пример Орl"анизаuии работ по методу водопада ПрИВОДИJ1СЯ в таве З. Этот же метод мы еще раз рассмотрим с ДРУI"ОЙ точки зрения в I"лаве 14, у каждой Модели свое соотношение возможностей ускорения и удешев ления проекта, Поэтому руководитель должен решить, какие el"o составля ющие с наиБОJlьшей вероятностью MOI"YT подвеРI"НУТЬСЯ изменениям, и выбрать модель, наиболее I"ибкую именно в этих областях, Если, например, набор функuий проrpаммы жестко фиксирован и ни одна из них ни в коем случае не может быть удалена, бессмысленно выбирать модель, ориентиро ванную на СНЮКение стоимости продукта за счет сокращения el"o функций, 
Тлава 13: Обоедu//яющая 363 Обычно У люБОI"О спеuиалиста в этой области имеется четкое представ J\ение об относительных преимуществах и недостатках каждой модели, Однако, несмотря на профеССИОНaJlЬНЫЙ опыт и веские лоrические обосно вания, эти представления весьма субъективны, В частности, собственное мнение на этот счет имеется и у каждОI"О из авторов этой КНИI"И, однако эти мнения различны, Имея это в виду, НИКОlДа не пытайтесь критиковать руководителя проекта за Неверный Выбор Модели разработки, В следующих двух разделах рассказывается о проблемах и путях их решения, связанных с методом водопада и эволюuионной моделью разра ботки, На их при мере мы хотим показать, как следует подходить к аНaJIИ зу любой модели, которая покажется заслуживающей внимания, Попробуйте подобным образом проаНaJIизировать методики, используемые в вашей компании, Традиционный метод водопада Метод водопада представляет собой классический подход к управлению IlpOeKTOM, Особенно часто он применяется для крупных разработок, В соответствии с этим методом проект разбивается на ряд последовательных этапов  аНaJIИЗ требований, разработка проектной документаuии, коди рование, тестирование и выпуск, Подавляющая часть работ каЖДОI"О этапа завершается до наЧaJlа следующеl"О, Например, разрабатываются функцио HaJlbHbIe требования к продукту, KOlДa этот документ I"OTOB, начинается разработка внутренней и внешней спеuификаuии, После завершения и утверждения спеuификаuий начинается кодирование, В теории все звучит красиво и очень убедительно, Таков стандартный подход, и руководители МНОI"ИХ l"рУПП тестирования просят ПрОI"раммистов el"o придерживаться, Тестировщики задоЛl"О до наЧaJlа тестирования полу чают в руки спеuификаuию, полностью описывающую продукт и Оl"рани чивающую количество еl"O последующих изменений, Спеuификаuия облеl"чает планирование работ по тестированию, формирование их бюдже та, KaJleHAapHOI"O плана, подбор перСОНaJlа, Описываемый метод первоначально предназначался для разработки ПрОI"раММНОI"О обеспечения по контрактам, В этом случае требования к продукту формирует заказчик, и делается это заранее, поскольку на их основе определяется стоимость разработки, Кроме TOI"O, заказчик должен проанализировать и одобрить внешний дизайн, спеuификаuии МНОI"ИХ потоков данных, определения МНОI"ИХ отчетов и еще uелый ряд ДРУI"ИХ деталей, причем все эти документы должны быть СОI"ласованы до наЧaJlа кодирования, Только после ЭТОI"О начинается собственно создание продукта, Если требования заказчика к продукту по какимлибо причинам изменят ся, эти изменения вносятся в продукт, но вся уже проделанная работа все равно ОlUlачивается, Именно такова юридическая схема действий, но кто сказал, что юристы  хорошие инженеры? 
364 Часть III: Управлеllие прпектаАtИ и сруппаАtИ Серьезнейшим недостатком метода водопада является то, что все клю чевые конструкторские решения должны быть приняты на этапе, коща сотрудники еше не составили ПОЛНОI"О представления о продукте, В значи тельной степени оно формируется в ходе разработки, а до ее начала леl"КО ошибиться в оценках сложности или наилучшеl"О способа реализаuии OT дельных функuий, Еше мало изучены конкурируюшие ПрOl'раммы, Еше не сформировано четкое представление о разрабатываемом продукте  peaJlb ном, а не планируемом, поскольку, только поработав с ПрОI"раммой ДOCTa точно ДОЛl"ое время, можно как следует оuенить ее сильные и слабые стороны. почувствовать ее характер, Все это станет возможно только пос ле создания первой работаюшей версии продукта, Каковы же возможности руководителя проекта, который близок к за вершению, но не укладывается в сроки, если проект разрабатывается по методу водопада? . ФуНКЦUОllальность, К этому моменту все требования к продукту уже давно сформированы, спеuификаuия I"OTOBa, и если продукт Haxo ДИТСЯ на тестировании, то и кодирование также завершено, Поэто му удаление функuий в обшем случае незначительно сокрашает время или стоимость разработки, Если одна из функuий СlIроектирована или реaJIизована настолько плохо, что всю работу необходимо переделать, тоща ее УДaJlение из продукта может пойти на пользу проекту, Однако, если от неудач ной функuии зависят ДРУI"ие 'Iасти продукта, сделать это уже не так просто, . ДенЬi?U. Поскольку спеuификаuия полностью I"OTOBa, ничеl"О не стоит подключить к проекту дополнительных ПрОI"раммистов, Получив четкое и ясное представление о поставленной задаче, они MOI'YT сходу приступать к кодированию, . Дата выпуска. Коща проделано столЬко ПОДl"отовительной работы, жалко от чеl"олибо отказываться, Поэтому, часто, КОI"Д,а все функ uии ПрОI"раммы уже закодированы, принимается решение продлить сроки разработки и провести все запланированное тестирование, . НадеЖlюсть. Если все функuии уже написаны, подключен допол нительный перСОНaJI, а проект попрежнему не укладывается в cpo ки, остается только прекратить тестирование и выпустить продукт как есть, со всеми оставшимися в нем ошибками, В этом случае давление на тестировшиков невероятно возрастает, у них остаются считанные дни на то, чтобы либо доказать, что продукт не I"OTOB к выпуску, либо подтвердить, что в нем нет слишком серьезных оши бок, Последнее, впрочем, лишь предположение, базируюшееся на том факте, что подобных ошибок не ВbIЯвлено в течение последних дней, 
Тлава IЗ: Обьедuняющая 365 Итак, если проект разрабатывается по методу водопада и не укладыва ется в rрафик, el"o руководитель может подключить дополнительный пер сон ал, отложить дату выпуска или выпустить некачественный продукт, Защитники ЭТОI"О метода утверждают, что МНОI"ИХ неприятностей мож но избежать, если проrраммисты с caMoro начала проанализируют требо вания и проектную документаuию и тщательно спланируют свою работу, Если же какуюлибо из задач не продумать заранее, ее рещение в дальней щем будет связано с больщими проблемами, Тщательность предваритель Horo планирования особенно важна в тех случаях, KorAa продукт разрабатывается для oAHoro пользователя или KOrдa значительную часть продукта составляет аппаратное обеспечение, которое невероятно Aoporo lIерепроектировать, ЭВОЛЮЦИОННЫЙ метод При эволюuионном подходе к разработке проrpаммноrо продукта фун кции добавляются к нему последовательно, одна за друrой, Любая проrрамма может обладать минимумальным количеством функ uий, а может быть напичкана всем, что только пришло в rолову проrрам мисту, При эволюuионном подходе продукт развивается в направлении от первой крайности ко второй, Это значит, что вначале продумывается суть будущей проrраммы, ее идеолоrия и основные задачи, Затем проrраммис ты пищут ядро проrраммы, спроектированное таким образом, чтобы ее леrко можно было расщирять, добавляя все новые и новые возможности, Набор функций ядра минимален, однако они все же составляют независи мую проrpамму, rотовую к тестированию, Ядро тестируется и отлаживает ся как полноuенный продукт до тех пор, пока не получится вполне стабильная проrрамма, Затем проrраммисты добавляют к продукту новые функции  по одной или небольщими связанными rруппами, После каждоrо такою добавления проrрамма проходит новый uикл тестирования и исправляется до тех пор, пока снова не станет достаточно стабильной, Проuесс добавления функций и отладки проrраммы продолжается до тех пор, пока не получится достаточно приемлемый продукт, Это означа ет, что, если необходимо, ero уже можно продавать, хотя и остается еще множество нереализованных функций, которые моrли бы сделать ero бо лее конкурентоспособным. Но и без них продукт представляет собой по лезную проrрамму, которая вполне удовлетворит мнотих потенuиальных пользователей. Дальще все зависит от наличия времени и денеr, Если разработку про дукта можно продолжить, ето возможности постепенно расщиряются все тем же эволюuионным методом: добавили функцию  отладили проrрам му, добавили следующую  опять отладили, Блаrодаря такой стратеПIl1 
366 Часть III: Управление проектаАtИ и сруппаАtИ компания постоянно имеет полноuенную и стабильную проrрамму, даль нейшее усовершенствование которой можно прекратить в любой момент, зная, что вся наиболее важная работа уже выполнена, Со временем про [рамма вырастает в надежный и полезный продукт с боrатыми возможно стями, При методе водопада rруппа тестирования находится в состоянии по стоян ной неопределенности, Как составить реальный календарный IUlaH работ, KOrдa никому не известно, сколько еше в проrрамме ошибок и сколько времени понадобится на их поиск и устранение? При эволюuион ном подходе все rораздо определеннее, Как минимум последняя отлажен ная версия продукта Bcerдa [отова к выпуску, а в новой версии добавлена только одна функция, так что область поиска ошибок достаточно локали зована, Последним преимушеством эволюuионноrо подхода является ero rиб кость: по ходу работы и по мере уrлубления понимания продукта требова ния к нему можно пересматривать, а это значит, что в конечном счете продукт получается более совершенным, Вот что можно сделать, если проект, реализуемый эволюuионным Me тодом, выбивается из rрафика, . Функциональность. Как только сформирован минимальный набор функuий, образуюших приемлемый продукт, от остальноrо можно спокойно отказаться, Раз проrраммисты не проектируют новых функций ДО тех пор, пока не наступает время их добавления, такой отказ не будет означать, что значительный объем работы по проек тированию и написанию документаuии проделан зря, . Деньт. Вместо Toro чтобы отказаться от добавления новых функ uий, моЖно реализовать их быстрее, подключив дополнительные ресурсы, Узким местом в этом случае станет проектирование про дукта, поскольку подключить новых конструкторов rораздо сложнее, чем исполнителей, . Дата выпуска. rлавная мошь эволюuионноrо подхода заключается в том, что он предоставляет руководству невероятные возможности контроля за rрафиком работ, Дата завершения проекта свободно может переноситься в ту или иную сторону в зависимости от требо ваний момента, И нередко руководитель решает выпустить продукт вовремя, не добавляя в Hero оставшийся десяток функuий, При этом, KorAa бы ни было принято решение о выпуске, сделать это можно буквально в течение нескольких недель, ведь продукт Bcerдa стабилен, . Надежность. Продукты, разрабатываемые эволюuионным путем, Bcerдa o'leHb надежны, Поскольку после добавления каждой новой 
rлава 13: Обьедu//яющая 367 Функuии ПРОJlУКТ полностью отлаживастся, основныс усилия по тсстированию приходятся на начало проскта, KorAa руководство рсшаст прекратить разработку и выпустить проrрамму в свст, нсоб ходим лишь нсзначитсльный объсм завсршаюшсrо тсстирования, чтобы подтвсрдить сс [отовность, При этом, дажс ссли такос рсшс нис принимастся раньшс срока или до Toro, как всс задуманнос будст полностью рсализовано, нет риска, что выпушснная проrpа,\!ма будст содсржать ссрьезныс ошибки, Затраты на тсстированис продукта при эволюuионном подходс довольно вслики, ПОСКОЛЬку оно начинастся очснь рано, Однако ближс к кониу разработки объсм тестирования rораздо мсньшс, чсм при мстодс водопада, что нссколько уравниваст расходы, К тому жс нс приходится тратить BpC мя на IIланирование тсетов и тсстированис тсх функuий, от рсализаuии которых руководство откажстся в случас uейтнота, Однако в рсализаuии эволюuионноrо мстода разработки сушсствуют и сложности, Одна из них заключастся в том, что проrpаммистам приходится совмсшать написанис HOBoro кода с отладкой cTaporo, Если разработка нс укладывастся в сроки, у них возникаст искушснис вмссто исправлсния ошибок быстро проrраммировать новыс функции, Однако дслать этоrо ни в косм случас нсльзя, поскольку проrрссс получается только кажушимся, Ошибки будут накапливаться, и это свсдст на нст всс прсимушсства выб ранной стратсrии, В рсзультатс руководитслю проскта придстся дслать выбор мсжду выпуском нскачсствснноrо продукта и псрсносом даты завср шсния проскта, При выборс эволюuионноrо подхода нсопытыыM руководитслсм сушс ствуст опрсдслснный риск, Руководитслю можст показаться, что, поскольку продукт развивастся со врсмснсм, нст нужды проводитъ тшатсльнос началь нос IUIaнированис, Это оrpомная ошибка, Успсх вссй разработки зависит от rибкости ядра и продуманности основных конuспuий, А для достижсния rибкости нсобходимо дажс болсс тщатсльнос IUIанированис, чсм при мстодс водопада, всдь должны быть прсдусмотрсны всс возможныс способы и направлсния расширсния продукта. Если жс ядро разработано нсудачно, при добавлснии каждой новой функции проrраммы cro придстся псрсдс лывать, а это свсдст на нст всс прсимушсства выбранноrо подхода, Кромс Toro, в концс разработки можст оказаться, что нс хватаст одной из важнсй ших функций, бсз которых продукт нс будст полноuснным, И придстся добавлять сс, отодвиrая дату выпуска, Нс BcCrдa правильно понимают суть эволюuионноrо мстода сотрудни ки rpуппы маркстинrа, Рскламируя продукт, они нсрсдко анонсируют тс cro функции, которых в консчном вариантс можст нс оказаться, НСТ нужды rоворить, что TaKoro быть ни в косм случас нс должно, 
368 Часть 111: Управлеllие проектаАtИ и сруппаАtИ у руководства есть и еще один способ завалить проект, разрабатывае мый эволюuионным методом, Если не начать тестирование продукта cpa зу же, как только будет [отово ero ядро (а такое может случиться, если все тестировщики заняты на ApyroM проекте, выбивающемся из rрафика), бу дет нарущена вся стратеrия, К тому времени, Korдa к ядру начнут подклю чаться новые функции, оно еще не будет полностью отлажено, С ростом сложности продукта тестировщикам и проrpаммистам крайне сложно будет наверстать упущенное и привести очередную версию к состоянию полной стабильности, В результате получится нечто похожее на плохо орrанизован ный проект, разрабатываемый по методу Водопада: тестирование начато достаточно поздно, продукт очень нестабилен, и к тому же спеuификаuия все время пересматривается, к проrрамме добавляются все новые и новые функции, KorAa и старые еще работают KoeKaк. Приходится подключать к тестированию дополнительные ресурсы, ero стоимость непомерно возрас тает, а проект все равно выбивается из rрафика, и качество результата оставляет желать лучщеrо, При любом подходе к разработке от rpуппы тестирования зависит очень MHoroe, Но при ЭВОЛЮUИОнном методе у нее больще Bcero возможностей завалить работу, и этот риск обязательно следует учитывать, rv10дель разработки и тестирование Как следует разобравщись в выбранной руководителем проекта модели разработки, следует проанализировать ее влияние на проuесс тестирования, Вот что означает для тестировщиков выбор метода водопада, . Как можно раньше проанализируйте пользовательский интерфейс. Можно воспользоваться для этоrо прототипами п porpa,\! мы, . Как можно раньше начните разработку тестовОi?О плана. Это по зволит критически проанализировать спеuификаuию (или ее черно вики) и выявить возможные проблемы, связанные с тестированием будущеrо продукта, . Нельзя приступить к тестированию раньше, чем продукт будет к нему i?отов. Проблема в том, что, если проектирование и кодирова ние продукта затянется, тестирование тоже будет начато позже cpo ка, Поэтому следует тщательно продумать свои действия в такой ситуаuии, Вопервых, вы отвечаете за то, чтобы сформированная rpуппа квалифиuированных тестировщиков не простаивала, С одной стороны, она должна приступить к работе, как только продукт бу дет [отов, С друrой стороны, если проrрамма не будет достаточно стабильна, ее придется вернуть проrраммистам на доработку, а Te стировщиков заrрузить друrой работой, которая позволит ускорить 
rлава 13: Обьедu//яющая 369 проuесс в дальнейшем, Например, они MOI)'T заняться автоматиза uией тестов или формированием дополнительных файлов тестовых данных, Необходимо также разработать эффективную стратеrию подключения к проекту дополнительных людей, если в последнюю минуту придется прибеrнуть к такому варианту, Мноrие простые, но рутинные операuии можно поручить неквалифиuированному или не имеющему опыта работы с данной проrраммой персоналу, повысив тем самым отдачу от OCHoBHoro состава rруппы, Однако задачи ДЛЯ подключаемых людей должны быть определены заранее, и вся cxe ма действий должна быть достаточно продумана, поскольку, KorAa сроки начнут сильно поджимать, времени на это уже не будет, . Тестирование  это наиболее ответственный этап разработки. К моменту начала тестирования проrрамма уже практически полно стью написана, После прекращения поиска ошибок она сразу же выходит в свет, Если проект достаточно велик для подключения нескольких тестировщиков, подумайте о том, чтобы назначить OДHO [OДBYX человек ДЛЯ постоянноrо выполнения неформальноrо тести рования, Цель работы такою сотрудника  каждую неделю находить пару настолько серьезных ошибок или недостатков, что выпустить с ними продукт просто невозможно, Во время исправления этих оши бок остальная часть rруппы будет последовательно "прочесывать" проrра,\!му в соответствии с планом, Эта тактика особенно хорошо зарекомендовала себя на больших и серьезных проектах, [де она позволяет сэкономить очень MHoro времени, (Предупреждение: Hи КОсда не откладывайте документирование серьезных ошибок, прибе реrая их на случай, если за неделю не удастся выявить ничеrо серьезноrо, Такие вещи MOI)'T очень Aoporo вам обойтись, особенно если ктонибудь об этом узнает, Никоrда этоrо не делайте, Никоr да об этом даже не думайте,) А вот каковы следствия выбора эволюuионноrо метода, . ПЛанируйте рано начать тестирование. Как только будет сформи рован базовый набор функций проrраммы, необходимо будет при ступить к тестированию ее надежности, . Планируйте периодическое проведение анализа функциональности и удобства npOi!paммbl. Если только что добавленная часть проrрам мы покажется вам неудачной, у вас будут все шансы добиться ее из менения, . ПЛанируйте разработку тестовОi!О плана nараллельно с тecтиpoвa нием. Заранее разработать ero не удастся  ведь не будет ни преk мета тестирования, ни даже спеuификаuии, 
370 Часть ПI: Управление проекта,\1И и сруппа,fИ .. .. ..... .., .... u '" .... .... .... >'" '" 3' ........ ....  "" .......... .... о :т .... ..........  ........ .. .... s .......... .... g ........ .. .... :I: '" '" '" ........ ...... .... \1! ........ .. .... 2t '" ............ 5 о t:: ............ О '" Е ............ "' '<   ............ s -:r о> ......... :si  s '" ........ ::f '< !3s Е s .... .. ;ij ,g 2s. '" .... .  '" '" .. . '" "- '"  .. g :I:  "' s .. i< ..-:  "" ..  ....  '" о :I:  :I: >- '" u '" :s; :I: о.. '" :; '" J5 :I: <:t ro :I: '" :I: '" '" ::!i :I: S  '" '" s !;< о аз с::: ::r "' ""  .... <::: '" s Q.)  "" '" о >'" аз О s ..... Q. О а.> s о Q.) о L.. -е- "" '" <::: :I: s :I: '" S аз О  '" аз :х: '" '" :I: О аз s  о аз "" '" "" ::r '" Q.) :I:  8. '" аз >- О Q.) Q. о  s u 8- '" о Q. G <::: <::: :; :I: О S Q. Q.) U "' S  s  ::!i s Q.) ..... ""  о Q.) g Q.) Q.) G s Q.)  s s :I: Q.) S Q. :I:  8. Q.  '" s :I: <::: '" :I: S '" t:: u :I: '" J5  () u аз t:: s '" u r:D :I: О <::: u s 1;; s О Q. '" S <::: 0.0. :I: S :I: <::: '" aJ» <t ::!i '" :I: .... :; Q. :I: о о "' .... е .... '" о Х '" 
rлава IЗ: Обьедu//яющая 371 . Планируйте выполнить самую серьезную часть тестирования как можно раньше. Никоrда не откладывайте критические тесты "на потом", Руководитель проекта может в ;lюбое время остановить разработку, и они так и останутся невыполненными, Такое действи тельно случается: двоим авторам этой К!lиrи приходилось выпускать продукты за три месяuа до запланированноrо срока, Затраты на качество Затраты на качество продукта  это затраты на предотвращение оши бок, их поиск и испраВ;lение, С точки зрения бизнеса деньrи вкладываются в тестирование потому, что выпуск продукта с ошибками в конечном сче те обходится дороже, Если удастся доказать, что определенный вид тести рования сэкономит компании деньrи, ero финансирование вам обеспечено, Продумав, как соrласовать работу своей команды с общей стратеrией разработки продукrа, вы, возможно, захотите включить в свой план рабо ты, которые обычно в компании не практикуются, Например, в компании может быть не принято, чтобы тестировщики ана,1изировали внешний дизайн продукта, или же им может не выделяться для этоrо достаточно времени, Друrими примерами подобных нестандартных работ может быть анализ записей rруппы поддержки пользователей, автоматизаuия тестов, выполнение рутинной работы низкоквалифиuированными тестировщика ми или вообще непрофессионалами, подключаемыми к работе в крайних случаях, тестирование на совместимость с широким диапазоном внешних устройств или орrанизаuия бетатестирования, В каждом случае вам при дется доказывать руководству, что проведение соответствующих работ по зволит предотвратить серьезные потери или затраты в будущем, Чем больше вам известно о затратах компании, связанных с качеством проrраммноrо продукта, тем больше у вас шансов доказать необходимость новых тестовых проuедур, Обычно эти затраты подразделяются на четыре катеrории (Кампанелла (Campanella, 1990)), . Затраты на предотвращение ошибок: все расходы на предотвраще ние ошибок в проrраммном обеспечении и документаuии, . Затраты на исправление npoi!paммbl: стоимость работ по тестиро ванию и Bcero остальноrо, что делается компанией для поиска оши бок, . Стоимость сбоев, про исходящих в стенах компа1lии: расходы изза ошибок, обнаруживаемых в проuессе разработки и тестирования продукта, . Стоимость сбоев, происходящих вне компании: расходы изза оши бок, обнаруживаемых (оБЫ'IНО пользователями) после выпуска про дукта, 
372 Часть I/I: Управле/[uе проекталш u сруппалtU Примеры каждоrо из этих четырех видов затрат приведены на рис, 13,2, Исследования Фейrенбаума (Feigenballm, 1991) показали, что типичная компания тратит на предотвращение ошибок от 5 до 10 проuентов общих затрат на качество, еще 2025 проuентов уходит на исправление проrрам мы, и оставшиеся 6575 проuентов суммы "съедают" последствия BHYTpeH них и внешниХ сбоев, Предотвращение Пересмотр дизайна Анализ требований Пересмотр спецификации Обучение nроrраммистов допускать меньшее количество ошибок Проrраммирование защиты от сбоев (проверка вводимых данных, обработка исключительных ситуаций и т, n,) Внутренние сбои Исправление ошибок Реrрессионное тестирование исправленных фраrментов nporpaMMbl Откладывание тестирования определенных частей nporpaMMbl Потери времени пользователей, если продукт эксплуатируется внутри компании Замедление работы технических писателей Переnисывание разделов руководства Затраты, связанные с задержкой выпуска продукта Ресурсы, которые моrли бы быть затрачены на друrие продукты, если бы данный был выпущен вовремя Исправление Тестирование "стеклянноrо ящика' Тестирование "черноrо ящика' Тестирование rруnnой технической nОJlдержки Обучение тестировщиков тому, как находить больше ошибок Бетатестирование: собственные пользователи, представители заказчика, независимые пользователи Приемочное тестирование заказчиком Внешние сбои Звонки в отдел технической поддержки Подrотовка ответов rpYnnbl технической поддержки Возмещение убытков Замена версии продукта на исправленную Смяrчение разrромных статей в периодике (до их появления) Судебные nроцессы РИСУНОК 13.2. Затраты на качество 
rлава IЗ: Обьедuняющая 373 rруппы контроля качества обычно систематически собирают всю ин формаuию о соответствующих затратах, Если получить к ней доступ не удается, не отчаивайтесь, MHoroe можно выяснить у сотрудников rруппы технической поддержки, коечто может рассказать руководство, а об oc тальном можно и доrадаться, Проанализировав собранную информаuию, вы поймете, как повышение затрат на предотврашение и исправление ощибок помоrает уменьшить последствия внутренних и внешних сбоев, а значит и снизить соответствующие расходы, На этой основе можно строить соб ственные aprYMeHTbI в пользу проведения необходимых видов работ, Последовательность этапов проекта Обычно руководитель проекта публику ет календарный план, важнейшие этапы KOToporo носят названия альфа и бета, Первый из них завершается объявлением о rотовности альфаверсии проrраммы, а BTO рой  объявлением о rотовности бетавер сии, TO'IHbIe определения этих состояний разработки от компании к компании меня ются, В общем случае альфаверсия про [раммы  это полностью завершенный, хотя и еще полный ошибок, продукт, в то время как бетаверсия уже ПО'IТИ [отова к выпуску, Основные этапы проекта преk стаВлены на рис, 13,3, Разбиение разработки на этапы вовсе не озна'lает, что все поставленные зада'IИ pe шаются последовательно, одна за друrой, Как раз наоборот, мноrие работы выполня ются параллельно, например, в то время как одни части проrраммы только пишутся, друrие уже MOI)'T тестироваться и описы ваться в руководстве пользователя, При эволюuионном меТоде разработки в то же самое время может выполняться и разра ботка требований к продукту, создание ero прототипа и написание спеuификаuии, На рис, 13.4 (а, б, в и с) приведен наш вариант календарноrо плана работ (разуме ется, без конкретных сроков), Проектирован ие Реализация базовых функций Почти альфа Альфаверсия Пребета Бетаверсия Замораживание пользовательскоrо интерфейса Перед завершением Последняя проверка целостности Выпуск продукта РИСУНОК 13.3. Основные этапы проекта 
374 Часть JJJ: Управление проектами и сруппами [ ." S :х: ''"' ." О '-' !>.." & s:  s ::r s '" (о    "'::!; tf -е.  g. g &) 5 )  :х: * !S! ;ij8.2S.  с:: с::  :::s :::    =: ("j  ." S :х: ."  '" :s:  :::s :::   =:   :с  s s ::r '" :J5   !:; ::rs ." '-' с:: '-' ''"'    ъ 5. ." с:: =r '-' '" s 5 :с   со '" :х: :J5 Q. ." S Q; :х: ." ::! 3' о Q af @  :s: "' Q,) (о о:::  .5 е о:::   af 1:5: ::!; '" С; е s 8.8. <.... s .... 8.t>s C::\O о о::: Q,) S G :'"  о::: s  s    5  s8.ш    s:  ::i:  g 1iJ   2s. '8.t:. !2 .... о "" '" Q. '" '" Q. ." ." S О :х: "' ." [! 1:-0  3' Q  '" Q. '"  :х: о Q. '" '" с:: ." S S S :х: ::r '"  "' s & ." '" ::!; S о о '"  =:     :х: ''"' '" :х: '" ''"' '" s '" '" <:( '"  s '" s ''"' <:( '" :х: s '" ." S :х:  s * i< :х: ''"' '" :х: s "' -& о '" 2s. :х: о  s  а. 3 'g ::r .... >. ." :х: ." Q. Q. с:: ,;1 :х: :х: ..... с:: U <:: са са =:   CII S :1: 1\1 111 О a.1\I   CII  &.а. с с "' о  .... х :J5 :х: :х: '" '" <:( s е х х    :х: с:: ..,    '8  Q,) е  s о .., х х а i   s Q. S ........ ;ij    е е '-' .., :il  о '"   с:: ) "'-& s Q.    s '" е      ta  5 ... "' Q.'" ." :х: с::  !2 с:: .... '" о .... "" :х: '" '" Q.s   а. "' s ::!; !2 s 3' "' '" .... '-' о с:: '-' "' о !i: ." Q.  :х: о '" "' о '" s 3' "' о Q. S  .... со .... ." "" х :J5 :х: ::r О ::!; ." S Q. с:: (O 15 i< ""'"   :х: а. е  Е( о Q. с:: ." S :х: \1!  ." 5 '-' :s: ''"' ." '" '" '" "' s '-' :х: '" \1! '" о  3f.  g. t;"" >- о !2 '-' s о с:: О ;ij ::r '" :I: 
Fлава 13: Объединяющая 375 е О :х:  :; Q. О '" -е. '"' о> :х: :х: \1! О 8. ;ij  ::r '-' са о> :I: .... '" s :х: са  gj Q.:x: s :х:   .... Q е а !f  :  2f Q.   :  taS?,tf :I: D!' :; i !2 '" !f са g t= о> s о> :х: s \1!  8.  8.   s  О  е-  ! .. ! :! ос .з: 3: iiI  !i$. t,g-& s '" :х: s о> ::rs О :х: о> о> :; :J5 о> :х: Q.     :х: 1iJ Q.ca  .. li; ",'"  2'112 <::  \о  е  :х: '" '" . :2!2 tf :::i: .U о:::  '" s :х: са '" О '" Q.s О :х: \О\1! О 8. '" s !2 .... са 1iJ с') .... о> S   \1! са О !;: Q.o> S :;   с; О <:: <:(  '" о> s :х: са '" О Q. S i<  Q. <::  са .... i '"'\о S tf s )ca e g  O о:х:  х   ф ti' с:: i" a. Ф s: I---  (O <=8.  о 1--- са :I: с:: са '" s '" О :х: Q. о> ::r са i<  Q. <= е О '" О .... '-' о> .... е О '" О  \о О о> \о S S  б  а '" о> <= '-' ::r :J5 s О са g !2 '-' s Q. '" s :х: са '" О Q. S  .... (O :iJ s <=  '" е <:( О О :х: .... .., о>  .... са s ::r S :х: ::r О са '" '" О S ",-е. s s ;ij g  5 '" !:: '< -6' с "" s:: с " с  1;} 2. s:: ::; '< !:: .g '"  '" "" :;; s:: '" !:: tr) <:i !2  са t; О <:: .. l' !i i!  о С '" s :х: са '" О  Q. S О о> s '" :х: s са :х:  са  8-  s   с') .... \1! ....   '" о> е t> »'"' Q. '-' са ''"' :х: О са :х: с; ::r <= О !s! !i ;ij 5  s ..,,..............,.... .., "" .... о> s :х: са 8- s :; :; са е- 8. <:: о> s :х: о> с; '" S Б :s: О о> s :х: \1! ''"' 8.0>   '-' 2f  :;  о :J: >- U :s; а.. 
376 Часть lJJ: Управление проектами и сруппами        х о> '-' ., о> s :х: \1! о Q. S .... '-' о> .... .. о \О S 3 о х :J5 :х: \1! :J5   ::!;  *  о е- :ж: о ::i: Q.  о> с:: :х:  j  ф ...... 8- :а    '8    Q      f......' :J5 i2  gj  t>:J: !f s 5 i5  т j ii '-' :х: с:: g Oc;  i5:5   :с   о> s 3' :J5      а;-  8  s s ::r '" .... s!. х с; :J5 с:: :х: '-' :х: '" о> '" ;jj х <:(   '" с::  О   :х: \1! о Q. S :J5   .... '" Q.  8- :х: с::  ''"' ::!; о> g. -&с; 0>\0 :I: О .,  '-' о> .... s s '" ::r о ",\О '" S S 3 -&0  о::  о> '-' '-' с:: х s с..>  5 ., ., о '" '"    .... s '-' '" Q.   \1! :х:  ::r S с;  ................... ..... .....  о> о> о> Е  s s ., s :х: о> s !f :х: '" '" х О :J: ., ., '" '" '" :J5 .... о> s о .... .., ., 8. j .... :х: с; :х: Q. .... '"  о о :х: о> ., '"  , oS 8. ar Q. s  \О i< ::!;  ;ij   s .... <:( 8. '  .... ::!;  <:(  о 5 3 ::r '" :х: s  о о '" Q. '-' '" '" о Q. ..... ::!; о:::[с::<:( :s: о :I:<:(>- :I: Q. '" с::    со 't .:i х :J5 :ж: \О  О с:: >- ::!; о> :х: о с:: '-' о> о g !S. '" i)i<., ......    о:: х о:: Q. g  S:: g. с..> с (о  ...... ",!i е- s с:; Q,) ...... g.i о:::  ('1) S ;а   о::   c::aS1O  s    & ; о ::i: cif о о ;ij  Х ;ij ;ij ib g-g а; а; :I::r.:X::I: :J5 ::!;  s e- 8.'-' с:: !f     s: e .,  8 ::i: * '-' '" о> ",\О   S !f 8.a с.... с:: '",  :i '-' '", .... о> !f' :i '-' о> s :х: о> а   5 3 :S: о со .8 dI а. с о> s :х:  ., о> Q. S '" S :ж: :х: t; о> '" о> :r. с::;:...... х с; с:: :J5 О ,",:х: ' ::!   g t> i s с:;  cif J5 '8 ......  :  о :r. о 000:: Q,) i6::i:M 1ag5J5 eg.o ., е t> о ''"' 3i 8. ;jj  е  о ::r Х :х: :ж: :J5     :х: *  g!a;- ta Осс:::!: :iJ x.J]Q:)  , * Q; S  '"  (о ...... g о Q.  :s:  t>  ):5:  SQ.Q,)(O с..> t:: :r. :ж: 9 ::!; s G о> ::!; ., о '-' ::!; '" о> :х:  '" о> s а;  с::  o  ::!; ....  10 Q. '" с:: с:: '" 
Fлава IЗ: Объединяющая 377 са :х: са с; с:: Е о "'  '-' о> .... Е о :х: .., с; о> .... са ::r :х: s1 о о> s :х:  Q. о> "' >; s s ::r са '" '" s s .... :х: са о>  -а .... >-"' с; са !>.!i! s  '" * s с;   :ж: Q. а с:: с:: :J5 ni "' :х: са о> с; S с:: :х: о> Е  о c:t  Ь t;'g ca. са :J5 "' :; .... о> '-' .... '-'  е  :r. >-):5: Q.!f 5  i5  s: ; е  g. о Q. '-' :ж: о> :;: ::r S са '" "' s1 са с:: >- о> s 3' Q :J5 i:;' .... s 2' 8 о> s :х: о> >'"' 3 s Q.::r   -& ! [' 'Y  со  ш о> s :х: о> а   5 3 :S: о "' о  s Q. о> .... са :; х :J5 "' Е :х:  о> '" Q. са :; '" s     '" '" s s с:: ,;1 '" о>  "'  э '-' :ж: s ''"' <:( са  Е s1 '-' ..,  ?l) о са о> i:j о> .., о> Q. с; .... о> о :х: <:: с:: s s s ::r са .... :х: о>   Q. .... О :; 1iJ Q. о> <:: х :J5 :х: :х: о> с; "' са Q. с:: '-' S о> s :х: са 8- s .... '-' :J5  :; :; '& 5.8-  с:: "' О "' с:: О .... о> :х: о о>  '-' са :J5 Q. L!J-& "' .... '-' >'"' О Q. ....  '" s :х: са "' о Q. S  .... :2 s ::r >'"' :J5 :х: с; о <:: s s :х: о> 3 о> Q. '" са Q. О :; с; о> о> с; <:(\0 '" О са Q. а. с:: '" s :х: са "' о Q. S  .... Е !f  :; Q. О -& "' Е о .... s '" s ::r са '" s с;  <:: :iJ  "' :х: са .... Q.,-, ) )  a.<:( :; са '" \о S 3 о :; :J5 :х: :х: о> * о \'о о о с:: '" s :х:  о> 8  .... са  [ Q.E g! !f .... >'"' о> :J5 :; "' <:( Q.O> о> Q. <:: с:: Q s :х: са "' s  е g. s1 :; :i!   е 1;; о> "' о '"   с:: g   g са  >'"'  S >'"' :х: о>  с; о>  !i: <:: s х :J5 :х: s ::r '" О .... "' о са \ОС>. са с:: Q.'-'  Х Q.s 3 о .., :;  s  5 са g 8- \00> :; '" S @- s s :х: са с:: :; s1 о> :х: "' '" s :х: о> :х: с; о с:: :J5 "' "'  .... ..,  8. :J5 ::r s с; \о са .... о> s '" '-' о> ::r S :х: х {Е. s s Q.  "' '" s са ::r:x: !:! са s с; с; с:: e s  !:!  :х: о> 8 о> s :х: са "' о Q. S t; о> .... сь :;; L!J , ..., ..,,....,...... сь .... о> "' \о s1   "' 8- е е    1iJ <:: <:( ....  "' S1 !2  * "' Q.o о> Q.  <::  :; '" с; >'"' о> (о   а; о a:I af g.s <::\00 х :J5 о> :х: s ::r    s :х: s с:: са с; са .... s :I:  >.  '" :,: '"   с ""  '" !:: '< -6' с  с " с :,:   с "" ::: '" '< !:: .g '"  '" "" :о ::: '" !:: tr) '6 o:t "" ....  о :J: >- U :s; а.. 
378 Часть JJJ: Управление проектами и сруппами е ''"' '" о> S '" !f :х: "' s aJ .... s "' :х: "' :; '-' 3 '" о> .... о> :; с; ''"' <=> !2 3 '-'   8. "'   ,,", s   '" 2s. '" :х: с:: .... х '-' Q. \о Q. о>  s  :J5 s '-' с:: s .... * 8 ::r '" Q. с:: :J5 о> '" 3 s '"  '" са '-'  .... са "' ....  о> с; с:: е  '" .... :; :::s :х: '" '" :J5 s о> s '-' е :; х са х  о> Q. Q. S S !f :х: о> са €i :J5 2 :J5 х '" s  с:: :х: :; "' \1! ''"' '" о> Е- :х: :х: :J5 с:: "' :х: g! са с; '" s :х: :х: CIi) :х: i< :х: .... са s1 .... '" t; 8. :х: :х: aJ 8. '" е .... s '-' "' 8. :х: с:: о> о> о> Q s о> о>  '" ..о са .... s :а 3'  с::  8 '" 8. :; х :; Q. .; !i;; s s '"  >- :; "'  "' о> s 8 bl Q. S о>  с:: о> s о>  с:: :J5  .... ::r са :х: :х: :J5 >- с:: с; t; 5 Q. :х: '-' 8. S2 "' !!i са :; .... с:: 0>'8  х :в :х: о> .... '-' о> о> s са Q.8. .... с:: :2 s с; :; :2 s !f с; с:: '-' s Q.  .... '" с; <:( с:: g "'  :; '" са "'  с:: * са S са о> :J5 с:: Q.  о> о> о> о> '" '" :х: '" :х:  s :х:  s s s s s  :х: '" :х: :х: :J5 :х: :; :iJ :х: :х: :х: :х: о> :; * '" "' х :х: gj :x: са :х: о> х s !f са :х: о> о> :х: о> s s о> :х: s  s са :J5 с::  "' "' .... :х: :х: :х: о>  :х: 3 Q. <:( 8 :х: :х: 8.  с; а 3 '" s о> '"  '" :х: s :J5 са '" о> "' с; '" .... са s '" с; '" ..о '-' Q. с; 3  о> '" :J5 s :х: с:: с:: s са Q.", '-' !i ....  с:: '" :J5 :J5  '"  g  .... о> Q. с:: S  1iJ  с; о> са са с Q. а.  '-' '" '" с:: о>  .... ::r са :х: "' '" с '" "' ..... а. '" О .._-- _....._._y.  -... . ...... '"  s :::s са :х: са :х: о> :J5 ::: .... са :а :;   Q. ..о о> '" са  '" .... Q. .... о> са '-' .... ::r с:: S  ''"' о> '-' '-' о> s с:: s s с:: са '" >- о> ''"' =: :х: '" s "' s "' о> '" .... :х: .... s !f са  о> '-'  с; s <:( g "' '" о>  g * '" са "' s '" "'  Q.ca .... !iS1 с; s1 !;i g. с:: Q. '" S '-' с:: :х: о> >- Q. >-  :s: '-' u са Q. С Q. С '-' . ..  v .... .. , ., ..-. ... -. . s '" :;  '-' '" s s  s s :х: 5 са s 3 о> х ;ij са  с; '" :J5 :; i :J5 "' '" :х: s :;  :iJ \O  Q.  :с  8:  :2 с:: s ::r о> Q. !f 2! о> са   а. с:: са с:: :; с:: ... . . ..  ,_. M'' ....,..  о> :х: о> '-' ''"' i ....  s s 3 '" :J5 :; :; са Q. 8. s с:: :х: о> s  9  :Е '" с::   :iJ  о> :х: <:(    Q. '" S с:: \о '" '-' са Q. :s: а. с:: х :J5 :х: '" :х: s  ::r ........  :Х::Х: 1::' (O(OSS    cacai6B ' '   :Х::Х: :х: ..CI ..CI J5 ..CI   ::i:  e :х: :х: Е- :х:  б@,б s s 3 '" о> s :х: о> с; "' са Q. с:: '-' :s:  :с =:     ::!: :х: s1 о> '" '-' :х: '-' ..о   с:; с"') 3"  s s2     с;  а {з.ос:: ёj  111 I O) I Ф са t... Ф 111 s'" 0-& g.ia. ::Е '" с:: А CII 111 ;s; О 5i !i: C')jEC...s = . , 2 '" А  S о :а ... :z: "'ж 111 s >-! о-&::Еа. c..ii!  
[лава 13: Объединяющая 379 ." :J5 Q.  s1 rй '" S '-' ::r  '" "' "' '" ." ." :; S S S Х c:t с;  '" ig са х с:: '" S Х ." :J5 :а :; са ." Q..... с:: '-' '-' S S '-'    j ."  а  ...... ф g  [ @ @.  Q.  с..> '" '-' ." S  :; са са '" "' .... S '" Х Х i"   1:.: ...... s    е 5  !f 5 !i  '-' '"  е.  8. .... ." '-' а. "' с:: :J5   eE- !f.,,8. с; i5 с:: g с; S с:: S  !i х ." !J!  "' с::;: :r. IS '" Х ."   а "' S ." с:: с;  о    с::  , .., , ,'., S  i ." Q. а. с:: '" '" \о S 3 '" ." S Х ." :а са Q. с:: '-' :s: :о: 2 >os :! ::Е :1: '" О 1\1 О ]   о s с,) c-& '" S Х са "' '" Q. S t; ." .... :2 S ::r ti '" >,", 8.  х :J5 Q. са .... '-' >,", S Х ." с; "' са Q. с:: '-' S ." S Х \1! '" '" S g  ..... '"  х х ." 3' >- с:: >- ." '-' "' :; ." са "' :J5 с;     х-В 8. @ с:: с:: х :J5 ." Х S Х Х ." !J!  са с; Q. .... t; '" 8. с:: '-'   а. '-' :J5 :; :; са е- '" Q. с:: S g Х * ?J х са '" х ." ::r О  '" :,: '"  а '1:> с ""  '" !:: '" -6' с  с " с :,:  '"  с  '" '"  '" ;} '" "" :;; ::: '" J5 .; o:t "" ....  о :J: Ь :s; а.. 
380 Часть III: Управление проектами и сруппами ''"' :J5 '" Q. '" с::  :::s ::: 1:1 CIi) Q  =: ("j  s s  :х: са  :iJ'" :х: 5 '" са от '" :х: .., '" :х: ::r", 0<:(  :::s ::: 1:1      I:i: , s :; s '" 1;; s ::r :Х: '" '" с:: :Х:  '-' g  с::[ ш о о::: :;:<:( о::: О S (Q  Ll5!r  a:X '" :if :; с:; с:; с:; о  li   <:: е с:: s '"   :с fir  s  ar "'С>. а. с:: 1:1 :с  \с5 1:1 9-  '" '" \о S  х :J5 :Х: :Х: '" '" s s ::r '" :Х: са '"    @"    '" s :Х: '" '" '" са Q. с:: '-' :s: ::: 1:1  :s: '" t; .. са '" :Х: .. :Х: g.t) с: ., '" u '" с: "'Q.Q) r:: 1: ::r '" '" s Q. са .... :Х: '" :; :; s1 '" ''"' s '"  :ij !;I   '" '" Q.", <:: '" '" s :Х: са '" '" Q.   '" 15 :Х: ar  s '" s ::r са '" [ ..: '" '" :;  '" Q. '" '" \о S  :; '" :Х:  '" а. s са :Х: са '" с:: '" 15 '" '" .... '-' '" .... '" s ;ij  :J5 '"  s1   ff a:I (о <:( '" са  (о s :r. Х a:I x Q.o    ca;ij t5 g.  8.tJ  Q.  :::i:  х '" 1;/ [ ......, :; ! i   : I I i: са  I I I  @- Сй ф 1 '!i1 li I:ii! ш1.!J g Iii'  с5 15 i I I ! , I i шшшТ ! \ I 1 "1 i , I I I ! I шшш! I I х :J5 :Х: :Х: '" 3' >- с:: :J5 '" х :J5 '" Q. '" с:: '"  g g. '" 2: '" s Q. Q. <:: '" :; '" .... са '"    Q. с:: '" :J5 ::r '-' '" .... со " Sss i а.8.8. <:: с: с:: :; '" 1;; '" .а'" '"   t:o Q.C: '" :J5 ::r '-'  5 .. u >- 1: :i r:a   о;   '1:> а ""  '" Е '< ..б- а  а "     а "" ::: '" '" Е а \Q '" ;} '" "" :;; ::: '"   o:t "" ...  о :J: Ь :s; а.. J 
rлава IЗ: Обьедu//яющая 381 Необходимо 1I0дчеркнуть, что это только IIример, ни одна известная нам КОМlIания не IIридерживается в точности этой схемы, В каждой KOM lIании ОlIределяются собственные базовые этаlIЫ разработки, но, как IIpa вило, они очень IIOХОЖИ на IIриведенные в этой КНИI'е, IIОСКОЛЬКУ это наиболее естественный и ЛОI'ИЧНЫЙ IIОРЯДОК решения lIеречисленных CTaH дартных задач, Далее в этой I'лаве 1I0дробно анализируются IIриведенные таблиuы и рассказывается о том, какие работы 110 тестированию IIpol'paMMHol'O IIpO дукта соответствуют каждому из lIеречисленных этаlIОВ, (Примечание: МНОl'ие из ИСlIользуемых в этой Iлаве терминов ОlIределялись в Iлаве 3,) Проектирование продукта Это самый lIервый этаlI разработки, на котором ОlIределяется, что же будет IIредставлять собой задуманный IIрOl'раммный IIрОДУКТ, При IIpoeK тировании lIервым делом формулируются требования к 11 роду КТУ, а затем разрабатывается el'o внутренняя и внешняя структура, Подробное ОIIисание ЭТОI'О IIроцесса можно найти у таких авторов, как Де Макро (De Macro, 1979), [аус и ВейнбеРl' (Gallse & Weinberg, 1989), rилб (Gilb, 1988), rолд и Льюис (Gollld & Lewis, 1985), Оулд (Ollld, 1990), ВейнбеРl' (Weinberg, 1982), Йордан (Yollrdon, 1975), Йордан иКонстантайн (Yollrdon & Constantine, 1979), Проrраммирование на этапе проектирования продукта ПРИСТУlIая к IIроектированию IIроrpаммы, ее конструкторы или IIpeДCTa вители заказчика IIрежде Bcel'o ОlIределяют требования к IIporpaMMe и IIpO думывают свои IIредложения по их реализаuии, офОР:\lЛЯЮТ все это в виде отдельных документов, IlOсле чеl'О составляется контракт, Только IlOсле ЭТОI'О может начаться собственно IIрОl'раммирование, Если разработка Be дется методом ВОДОlIада, на этаlIе IIроектирования разрабатываются BHYT ренняя и внешняя СlIеuификаuии, Более детальное IIланирование внутренней и внешней структуры IIродукта может быть IIродолжено и 11O зднее, rv1аркетинrовая деятельность на этапе проектирования продукта в это же самое время в отделе маркеТИНl'а I\сдется активная исследова тельская работа, Ее uель  IIOМОЧЬ конструкторам IIродукта в формирова нии ero видения, собрав для этоrо максимум информации о требованиях рынка и нуждах IlOльзователей, ДЛЯ ЭТОI'О из 1I0тенuиальных 1I0льзователей IIродукта формируются небольшие дискуссионные I'PYIIlIbI, которым IIpek 
382 Часть III: Управление проектами и сруппами ЛaI'ается обсудить eI'O возможности, часто на при мере прототипов прО!'рам мы, Сотрудники отдела маркетию'а МО!'УТ провести опрос пользователей, работавших либо с предьrдушими версиями разрабатываеМОI'О продукта, либо с ДРУI'ИМИ аналО!'ичными прО!'раммами, Они расспросят пользовате лей о том, какие функции желательно было бы включить в проrpамму, как они оuенивают качество конкурирующих продуктов (и почему) и сколько они моти бы заплатить за подобный продукт, Возможно, что в этой работе IlOтребуется и ваше участие, Документирование на этапе проектирования продукта Некоторые I'рУППЫ документирования на этом этапе IIOМОI'ают состав- лять спеuификаuии продукта, Тестирование на этапе проектирования продукта Если повезет, вам предложат проанализировать проектные документы, как только они будут написаны, Это прекрасная возможность познакомить ся с продуктом и начать планирование собственной работы, В Iлаве 3 уже рассказывалось о том, какие недостатки может найти в проектной документаuии тестировщик, Однако на деле тестировщики редко высказывают какиелибо замечания, Они скорее пользуются предоставлен ной ВОЗМОЖНОСТhЮ пораньше ознакомиться с прО!'раммой, Если же вы все же окажетесь активно вовлеченным в проuесс проектирования, обратитесь к КНИI'ам таких авторов, как laycc и ВейнбеРI' (Gause & Weinberg, 1989) и Фридман и ВейнбеРI' (Freedman & Weinberg, 1982), Если в компании строю соблюдается принuип водопада, реuензирова ние проектной документаuии пользовательскою интерфейса может быть для вас единственной возможностью изменить чтото в этой области, В этом случае следует отнестись к делу со всей серьезностью и проанализи- ровать проект продукта самым тщательным образом, Обратитесь в I'PYII!IY технической поддержки за статистической информаuией о расходах, свя- занных с недостатками IlOльзоватеЛЬСКОI'О интерфейса предыдущих разра боток компании, Это поможет доказать руководству, что время, которое вы собираетесь потратить на ана,1ИЗ проектной документаuии, будет потраче но не зря, Подrотовка к автоматизации тестирования Нередко самое важное, что вы можете сделать на этапе проектирования,  это продумать, какой прО!'раммный код поможет автоматизировать про иесс тестирования или сделать eI'O более эффективным. Этот код может быть включен l!рЯМО в продукт или написан в виде отдельных служебных проrрамм, Вовсс нс обязательно, что все, о чем вы попросите, будет cдe 
f'лава IЗ: ОбоедUI/ЯЮЩая 383 лано, Но если высказать свои пожелания вовремя, т,е, на этапе проекти рования, да еще подкрепить их веской ар['ументаuией, четко объяснив назначение каждо['о средства, то!'Да у вас будут все шансы получить если не все, то хотя бы часть задуманнО!'о, Вот несколько примеров [lOдобнО!'о инструментария, . Автоматизация печати. Для этой uели вам потребуется возмож ность управления печатью из командной строки запуска проrpаммы, Это означает, что прО!'рамма должна принимать как минимум сле дующие параметры: имя файла, который необходимо распечатать, имя ВЫХОДНО['О файла, если печать выполняется не на принтер, а в файл, имя принтера (возможно, и е['о драйвер) и настроечную ин формаuию (шрифт и разрешение печати), По окончании печати прО!'рамма должна немедленно завершать свою работу, Обладая Ta ким средством, можно сформироваТh пакетный файл, который запу стит про['рамму, передаст ей всю необходимую для печати информаuию, сравнит результирующий файл с ею предыдущей Bep сией и напечатает результат, после чею запустит следующий тест, В разделе [лавы 8 "Несколько [lOлезных замечаний о тестировании печати" этот вопрос рассматривается подробнее, . Исследование памяти. Ино[да ИСКЛЮ'lИтельно полезной оказывается возможность в любой точке прО!'раммы нажать определенную кла вишу и получить информаuию об использовании и содержимом оперативной памяти, Информаuия эта может быть самой разной, В одних случаях достато'!но выяснить объем свободной памяти, В ДРУ['ИХ может потребоваться перечень свободных блоков памяти и их размеров, Просто невероятно, сколько можно придумать новых Te стов и СКОЛЬКО трудновоспроизводимых ошибок можно отловить БЛaI'одаря одному только знанию доступно['о объема памяти перед началом определеннО!'о проuесса, по е['о ходу и после завершения, Тестировщики просто отказываются этому верить, пока не убедят ся на собственном опыте, . Клавиши быстРОi!О nеремещенuя. Речь идет о скрытых командах, ПОЗВОЛЯЮЩИХ быстро переместиться в определенную точку прО!'рам мы, Это особенно полезно при тестировании некоторых и['р, . Копии экрана. Вам наверняка [lOтребуется быстрый способ копиро вания содержимою экрана на принтер или в файл (а может быть, и в последовательный порт, если данныс анализируются в реальном времени за ДРУ['ИМ компьютером), Утилита, копирующая экран, должна обладать возможностью перехватывать не только изображе ние, но и текстовый курсор или указатель мыши, Одной ИЗ полез ных возмОЖностей TaKol'o средства является сохранение копии 
384 Часть I/I: Управлеllие проеКтами и сруппами последней информаuии, ВЫВОДИМОЙ прО!'раммой ПрИ ее разрушении, И если ['ОТОВОЙ утилиты, способной выполнить подобную работу, найти не удастся, можно попросить про['раммистов создать ее, Подrотовка тестов для приемки продукта, разработанноrо по контракту Если прО!'раммный продукт разрабатывается по заказу ДРУ['ОЙ компа нии, исключительно важно включить в контракт приемочные тесты, Набор этих тестов заранее со[ласовывается с заказчиком и выполняется им по завершении разработки, Если прО!'рамма проходит приемочные тесты, зна чит, работы по контракту выполнены и дальнейшие изменения продукта должны оплачиваться отдельно, Приемочные тесты должны быть очень СТрО!'ИМИ и однозначными, Перед тем как передавать ['ОТОВЫЙ продукт за казчику, их обязательно необходимо выполнить самим, чтобы убедиться, что все в порядке, Ни в коем случае нельзя допустить, чтобы заказчик ютовил приемочныс тесты самостоятельно, без ваше['о участия, Не буду чи профессионалом в тестировании, он может создать слишком неопреде ленные, сложные или длительные по времени выполнения тесты либо тесты, для выполнения которых потребуется такой уровень качества про ['раммы, который не соответствуст стоимости разработки, Посоветуйтесь об этом с корпоративным юристом, Анализ стабильности приобретений Если решено приобрести для uелей разработки или тестирования про дукты дру['их компаний, все эти продукты должны быть протестированы, Только убедившись, что продукт достаточно стабилен, можно тратить на нею дены'и, Скольких проблем можно было бы избежать, если бы проrpам мы все['да тестировались перед покупкой! Анализ пользовательских данных Качество  понятие сложное, Высококачественный прО!'раммныЙ про дукт должен обладать всеми необходимыми пользователю возможностями и при ЭТОМ не иметь ошибок (Джуран (Juran, 1989)), И прежде все['о о качестве продукта позволяют судить отзывы е['о пользователей, Если разрабатывается уже не первый выпуск продукта, обязательно проанализируйте информаuию, полученную от е['о пользователей, причем начните эту работу как можно раньше, Для обратной связи с пользовате лями существует uелый ряд способов, . Пресса. Это журнальные и ['азетные статьи, реuензии, обзоры, rpуп пы новостей в Internet, . Письма от [!ОJlьзователей, Читайте все получаемые письма, особен но са,\!ые ДJIИ!lI!ЫС из НИХ, 
f'лава IЗ: Обоедu//яющая 385 . Телефонные звонки пользователей, Если ваша компания настолько велика, что звонков оченьочень мно['о, попросите у сотрудников rру[IПЫ технической !Iоддержки сводные данные о типах жалоб и количестве звонков по поводу каждой из проблем, Скорее все['о, сотрудники этой ['руппы CMOryT отслеживать до 15 кате['орий жалоб, Сядьте вместе с ними и сформируйте список наиболее важных для вас проблем, . Дискуссионные zpynnbl и дру['ие беседы с выбранными пользователя ми, Сотрудники ['руппы маркетию'а часто интервьюируют неболь шие rруппы пользователей, чтобы выяснить их мнения по отдельным вопросам, Ино[да их интересует реакция пользователей на новые идеи, в дру['их же случаях  мнения об уже эксплуатиру ющемся продукте, По возможности обязательно посещайте все Ta кие обсуждения, . Телефонные опросы. Сотрудники отдела маркетию'а MOryT обзвонить полсотни или сотню пользователей и спросить, какие изменения они хотели бы видеть в следующей версии продукта и что им особенно не нравится в текущей версии, Можно позвонить и просто заре['и стрированньш пользователям, и тем из них, кто сам звонил с жало бами, и задать им одни и те же вопросы, Основной упор в подобных опросах следует делать на надежность продукта, Из перечисленных источников можно получить множество полезных сведений о качестве продукта, Например, обозреватели периодических изданий мо['ут указать на отсутствие функuий, о которых большинство нынешних пользователей про['раммы пока еще даже и не думают, Однако в этом вопросе было бы опрометчиво ориентироваться на мнение пользо вателей  через ['од оно кардинально изменится, В то же время обозрева тели часто не упоминают о самых вопиющих ошибках, Как правило, они знакомятся с продуктом поверхностно, не эксплуатируя е['о в реальном режиме, поэтому большинства ошибок они просто не замечают, Совсем иначе обстоит дело с пользователями  рано или поздно они сталкивают ся даже с наиболее скрытыми и редко проявляющимися ошибками, Их звонки и письма ['ораздо чаще указывают именно на ошибки в проrpамме, а не на ее недостающие возможности, Собирая всю описанную информаuию, тестировщик преследует такие uели, . Выявить пропущенные ошибки. При тестировании последне['о BЫ пуска проrpаммы в нем наверняка были найдены не все ошибки, Не сомневайтесь: о том, что осталось, охотно сообщат пользователи, Их письма и звонки помо['ут заполнить пробелы тестово['о плана, ,  ].711 
386 Часть III: Управлеllие проектами и сруппами . Определение важности незамеченных или отложенных проблем. Выделите 10 или 15 проблем, изза которых компании пришлось потратить больше BceI'O времени и AeHeI', Если удастся выяснить, во сколько конкретно обошлась поддержка пользователей по поводу каЖДОI'О из вопросов  замечательно, Руководитель проекта HaBep няка счастлив будет наконец избавиться от старых и дорО!'остоящих ошибок и охотно зарезервирует средства для их исправления, . Основа для оценки откладываемых проблем. Во мнО!'их прО!'раммах имеется uелый ряд ошибок и недостатков, которых пользователи так НИКОIда и не заметили, Сравнивая список отложенных ошибок пре дыдущеI'O выпуска ПрОI'раммы со списком полученных жалоб пользователей, можно предсказать, какие из ошибок вызовут наи худшую реакцию, KOIAa руководитель проекта решит отложить про блему, которая, на ваш ВЗI'ЛЯД, вызовет бурю недовольства пользователей, можно будет показать ему сводки пользовательских звонков по похожим вопросам и то, во сколько это обходится KOM пании, . Обоснование затрат на дальнейшее тестирование. Предположим, что покупка компьютеров для проверки их совместимости с разра батываемой ПрОI'раммой обойдется в S20 тыс, Если предыдущий выпуск проrpа,\!мы уже ЭКСIUIуатируется и никто из пользователей не жалуется на ее несовместимость с этой техникой, нет нужды идти на такие затраты. Если же, напротив, звонки недовольных пользовате лей этих компьютеров обходятся I'руппе технической поддержки в S40 тыс" приобретение оборудования полностью окупится, Собранные данные о мнениях, пожеланиях и жалобах пользователей представляют значительный интерес не только д.ня вас, но и для руководи теля проекта и персонала отдела маркеТИНI'а, Всех их интересуют прсдло жения по усовершенствованию продукта, информаuия об изменениях демО!'рафической или пользовательской базы, И хотя эти вопросы в дaH ной КНИI'е не расс,\!атриваются, следует иметь в виду, что ваши изыскания MOI'YT быть частью более обширных исследований, проводимых компани ей для повышения эффективности ее работы, Мы рекомендуем составить подробные мноюстраничные таблиuы про блем и вопросов пользователей, Подсчитайте количество обращений по каЖДОIУ вопросу, Для каЖДОI'О источника данных заведите отдельную таб лиuу, Прежде всею просмотрите письма, обзоры и результаты опросов  это поможет идентифиuировать проблемы и составить их список, OCTaBb те в таблиuах побольше места для тех вопросов, которые поначалу будут пропущены, jJ,JIЯ каЖiJ,ОI'О из проектных предложений подсчитайте, сколь ко человек одобряет включение в прО!'рамму данной возюжности, а сколь ко не одобряе'i', 
Ilава IЗ: ОбьедUllяющая 387 Почти наверняка окажется, что большая часть жалоб связана со cpaB нительно небольшим количеством проблем, Это хорошо известный прUllцuп Парето (Pareto Prif1cip/e, Джуран и lрайне (.Juran & Gryna, 1980), МакКейб и Шапмейер (МсСаЬе & Schulmeyer, 1987)), Собрав данные, отсортируйте жалобы в порядке убывания их частоты, (Не удивляйтесь, если окажется, что этот порядок для разных источников окажется различным, Обозрева тели отмечают иные пробле,\!ы, нежели пользователи, пишущие письма и звонящие в отдел технической поддержки, А мнения пользователей, OTO бранных случайным образом и опрошенных сотрудниками компании, бу дут отличаться от мнений первых двух кате!'орий,) На наш ВЗ!'ЛЯД, самым удобным представлением информаuии являются таблиuы жалоб пользова телей, отсортированных по частоте, Но есть и более классический подход  составление auacpaMAtbI Парето (РатеlO Chart), лучше все!'о описанной в кнИ!'е Уолтона (Walton, 1986), Если возможно, приведите в таблиuах uиф ры затрат на техническую поддержку (затраты на чтение писем и ответы на них, средняя стоимость телефонно!'о звонка, среднее время телефонно!'о раз!'овора с пользователем о каждой из проблем и т,п,), Анализ пользовательскоrо интерфейса Некоторые тестировщики (и авторы документаuии) обладают тапантом выявлять недостатки пользовательскО!'о интерфейса еще на этапе е!'о про ектирования, Если среди ваших подчиненных есть такой спеuиапист, под ключите е!'о к анализу проектной документаuии как можно раньше, Пусть у это!'о сотрудника будет время как следует прочитать ее и обдумать, Это принесет разработке большую пользу, Обсуждение даты начала тестирования в хорошей команде разрабоТ'!иков тестирование начинается еще до ТО!'О, как написан весь про!'раммный код, Если же работа ор!'анизована шюхо, в начале проекта масса времени тестировщиков тратится зря, Поэто му С самО!'о начала обсудите с руководителем проекта схему действий, Обычно руководитель охотно пересматривает порядок выполнения про !'раммистских задач, с тем чтобы повысить эффективность тестирования, Если вы укажите, какие из частей прО!'ра,\!мы сложнее всею протестировать и какие МО!'УТ содержать наибольшее количество серьезных ошибок, он co !ласится, чтобы они были написаны и переданы на тестирование в первую очередь, Если, например, важнейшей из функций разрабатываемой прО!'раммы является высококачественная печать и если прО!'рамма должна безукориз ненно работать с самым широким диапазоном принтеров, обсудите с PYKO водителем проекта, какие из частей проrpаммы связаны с реализаuией этой функции и какие из них МО!'УТ быть !'отовы уже в первой версии про!'ра\! мы, которая будет передана на тестирование, 
388 Часть III: Управлеllие проектами и сруппами Что еще включает процесс приrотовления к тестированию Если преДПОЛaI'ается тестировать ПрOI'рамму с определенными видами оборудования, с е['о производителями следует связаться как можно раньше, Особенно это важно в тех случаях, ко!Да необходимые устройства предпо ЛaI'ается не купить, а взять напрокат (см, ['лаву 8), Подумайте об исследовании конкурирующих продуктов, Ведущий Tec тировщик проекта должен знать рынок проrpамм разрабатываемою типа и быть в курсе общих для них всех ошибок, Начните поиск бетатестировщиков, Хороших спеuиалистов найти Bce ['да сложно, Вполне возможно, что вы найдете добровольuев среди бета тестировщиков конкурирующих продуктов, Однако имейте в виду, что они будут рассказывать конкурента,\! о достоинствах и недостатках вашей про ['раммы и о ходе разработки, Некоторые из них передадут копии ПрOI'рам мы своим друзьям или поместят их в !nternet, Так что, вопервых, тщательно отбирайте людей, а BOBTOpЫX, будьте ['ОТО вы ко всем возмож ным последствиям, Реализация базовых функций На этом этапе ПрOI'рамма может работать только в одном видеорежиме, Она может печатать только на одном принтере, В ней может отсутствовать большая часть задуманных возможностей, Она наверняка полна ошибок, А при эволюционном методе разработки на данном этапе вообще ['отово только ее ядро, Проrраммирование после реализации базовых функций ПрOI'ра,\!мисты продолжают определение частных задач, проектируют все новые и новые модули и пишут ПрOI'раммный код, Только при методе водопада к этому времени все проектные работы уже завершены, Еще одно исключение составляют ПРOI'ра,\!мистыанархисты, которые сначала пишут ПрOI'раммный код, а потом ею спеuификаuию, Тестирование после реализации базовых функций Как только ядро про['раммы ['отово, можно и нужно приступать к Te стированию, Про['раммисты, конечно, проверяют свою работу, но KTO ТО должен делать это извне, Это может быть тот же про['раммист, е['о помощник или профессиональный тестировщик, На данном этапе Tec тирование может быть еще достаточно неформальным, Можно просто путешествовать по ПрOI'рамме, экспериментировать с ней без како['о бы то ни было плана, 
f'лава 13: Обьедu//яющая 389 Однако если разработка ведется эволюuионным методом, именно на данном этапе начинается самое что ни на есть серьезное тестирование, uель КОТОрOI'О  добиться полной стабильности ядра ПрOI'раммно['о продукта, Для начала определите uели тестирования, Набросайте список ключе вых задач, подумайте, кто из сотрудников может их решать, и приблизи тельно оuените, сколько на это потребуется времени, То, что получится, будет первым черновиком календарнOI'О плана и бюджета работ, HeCMOT ря на свою приблизительность, этот документ очень важен, поскольку послужит основой для дальнейшей работы, Как только продукт оказывается в состоянии делать чтото полезное, ктонибудь из сотрудников компании должен начать е['о использовать, В одних компаниях этим занимаются ['лавньш образом тестировщики, в дpy ['их  менеджеры, ОсоБOI'О значения это не имеет, [лавное, чтобы тести рОВIники были в курсе всех выявляемых проблем и вовремя их документировали, Эксплуатаuия ПрOI'раммы в реальном режиме ИI'рает в тестировании очень важную роль, Если не работать с продуктом так, как это делает пользователь, uелый ряд проблем ускользнет от ваше['о внима ния, Кроме ТО['О, мно['ие ошибки или недостатки интерфейса кажутся He значительными, пока вы не натыкаетесь на них каждый день или каждые пять минут или пока они не затрудняют решение жизненно важной для вас задачи, Именно практика, а не просто эксперименты с ПрOI'раммой и oд норазовое выполнение ее команд позволяет понять реальную ценность ее возможностей и реальное значение ее недостатков, Почти альфа На этом этапе большая часть про['раммы уже ['отова, а значит, опреде лился ее стиль и характер, В некоторых компаниях начало альфаэтапа является определенным рубежом, на котором меняются основные направления работы, Например, с этою момента может начаться ш[анирование и выполнение тестов, напи сание руководства, Если так ор['анизован и ваш проект, ряд поД!'отовитель ных работ стоит провести заранее, за несколько недель до начала альфаэтапа, Ведущий тестировщик должен поработать с ПрOI'раммой и подумать, не осталось ли в ней настолько серьезных проблем и не упуще ны ли настолько значительные функции, что назвать то, что имеется, пол ноuенной альфаверсией пока еще нельзя, Кроме тот, на этом поД!'отовительном этапе ведутся интенсивные обсуждения с руководителем проекта uело['о ряда ключевых вопросов, Как моЖно больше времени за резервируйте ДЛЯ тестирования: ведь необходимо будет убедиться, что все со[ласованные изменения и исправления успешно внесены, Как правило, окончательная проверка соответствия ПрOI'раммы требованиям, предъявля емым к альфаверсии, выполняется руководителем проекта и тестировщи ка,\!и совместно, 
390 Часть I/I: Управлеllие проектами и сруппами Альтернативой проверки состояния ПрОl'раммы перед офиuиальным объявлением ['отовности альфаверсии является ее проверка после это['о события, Однако в этом случае, хотя руководитель проекта искренне верит, что с прО!'ра.\!МОЙ все в порядке, при дальнейшем тестировании, как пра ВИJ:О, выявляется еще uелый ряд серьезных ошибок, Проrраммирование накануне завершения альфаверсии На этом этапе продолжается постановка задач, проектирование, коди рование, исправление ошибок и тестирование "стеклянною ящика", Документирование накануне завершения альфаверсии План документаuии, скорее все['о, уже практически ['отов, В одних компаниях тестировщиков привлекают к работе над этим планом, в дру['их  нет, Если вы будете работать на планом, то, скорее все['о, от вас потре буется отдельный анализ руководства, интерактивной справочной системы, учебника и дру['их дополнительных материалов (например, библиотеки файлов примеров), Уделите особое внимание календарному плану работ по документированию продукта  если вам придется в них участвовать, aHa лиз и редактирование документаuии не должны совпасть с самыми напря женными периодами тестирования, Как правило, план документаuии включает ее о[лавление и приблизи тельные оuенки объема каждо['о раздела, Вы можете помочь техническим писателям, указав, объемы каких разделов ими недооценены, Если речь зайдет об особенно сложных функциях прО!'раммы, их выявление может помочь не только техническим писателям, Если руководитель проекта уви дит, что определенная функuия настолько сложна, что ее трудно даже описать в руководстве, он может принять решение опереработке проекта прО!'раммы и упрощении этой функции, Структурой интерактивной справочной системы может определяться и то, как пользователь будет переходить от одной темы к дру['ой, В большин ство современных систем встраиваются пере крестные ссылки, упрощающие работу пользователя, но сильно усложняющие задачу тестировщика, Как протестировать все эти ссылки? Возможно, вы найдете инструментальные средства, упрощающие эту работу, Тестирование накануне завершения альфаверсии Прежде все['о позаботьтесь о необходимом для работы оборудовании, Закажите то, что планируется купить, и поищите возможности взять напро кат остальное, 
f'лава 13: Обьедu//яющая 391 Пере['оворы с компаниями, у которых можно одолжить необходимую технику, следует начать как можно раньше, Учтите, что придется выпол нить ряд формальностей, заполнить БУМaIХ MOryT возникаТh неожиданные сложности и задержки, и, если времени до выпуска у вас не так уж MHO ['О, например, месяuа тричетыре, вы рискуете не получить ТО['О, что заду мано, Если цели и ключевые задачи тестирования еще не определены, откла дывать дальше некуда, Оuените, сколько времени и людей потребуется ДЛЯ решения поставленных задач, Под['отовьте первую версию плана тестирования, Начните с само['о очевидною, оставив детали "на потом", Вопервых, они еще не раз МOI'УТ поменяться, а BOBTOpЫX, мно['ие подробности станут очевидны позднее, в ходе освоения объекта тестирования, Прежде все['о включите в план сле дующее, . Перечислите поддерживаемые устройства (такие, как принтеры), . Составьте список основных функций npOi!paMMbl, команд меню, опuий, т,е, составьте первый вариант списка тестируемых функций, . Подi!отовьте структуру плана тестирования, перечень е['о OCHOB ных разделов, Например, поД!'отовьте место для списка ['раничных условий, который будет составлен позднее, Стоит еще раз подчеркнуть, что документаuии не должно быть слиш ком мно['о, Это ваш рабочий инструментарий, который должен отвечать практическим задачам, Все, что не требуется ДЛЯ тестирования, не требу ется вообще, И не поддавайтесь искушению проводить uелые дни, COCTaB ляя документаuию и вообще не занимаясь тестированием, Обязательно проверяйте на деле все, о чем пишете, Так и документация будет точнее, и основное дело  поиск ошибок  будет ПРОДВИI'аться вперед, Проведите базовое тестирование ПрOI'раммы, Выполните самые очевид ные тесты, не затрачивая слишком МНО['О времени на каждую из областей или функuий. На этом этапе больше внимания уделите полноте охвата продукта, а не ['лубине анализа каждой детали, Если ПрOI'рамма преДЛaI'а ет пользователю выбор из нескольких вариантов, проверьте их все, OДHa ко если вариантов десяток, протестируйте дватри из них, Не следует также тестировать все возможные комбинаuии входных значений  для это['о время еще не пришло, Введите информаuию везде, !'Де это возможно, но не старайтесь НaI'рУЗИТЬ ПрOI'рамму свыше ее возможностей, Если ['ранич ные значения данных известны, проверьте их, а если нет  оставьте это на будущее, Посмотрите, как ведет себя про['рамма в нормальном режиме работы, не сбоит ли она даже в тех случаях, ко!'Да ее пользователь О'lен[, аккуратен, И только если у вас после это['о останется еще немно['о BrCMt:. 
392 Часть 111: Управлеllие проекта,ии и ?руппами ни, подумайте, что мо[ло бы привести проrpамму к сбою, и попробуйте это выполнить, Такое весьма поверхностное тестирование позволит выявить OI'ромное количество ошибок, Прежде чем оно будет выполнено, не стоит вдаваться в нюансы работы отдельных функuий и тратить время на те фРaI'менты ПрOI'раммы, которые просто написаны пока еще очень поверхностно, без проработки :Iеталей, Альфа Стро['о['о определения альфаверсии ПрOI'раммы не существует, Можно выбрать один из предложенных ниже вариантов, а можно сформировать собственные критерии, отвечающие нуждам конкретнOI'О проекта, . В альфаверсии ПрOI'раммы имеются практически все ее основные функции, Однако некоторые из них MOryT еще отсутствовать или работать крайне нестабильно, Индивидуальность ПрOI'раммы на этом этапе уже полностью сформирована, виден ее характер и основные возможности, А вот такие детали оформления, как музыка и rpафи ка, МOI'УТ пока еще отсутствовать, Если ПрOI'рамма должна поддер живать ряд устройств, форматов данных, взаимодействовать с рядом однотипных приложений и Т,П" в альфаверсии может поддержи ваться только несколько экземпляров из это['о набора, . В альфаверсии ПрOI'раммы имеются все ее функции, хотя в HeKO торых из них мо['ут еще оставаться серьезные ошибки; поддержива ются все типы устройств, но работает только по нескольку устройств каждо['о типа, Спецификаuия и конструкторская документаuия практически ['ОТОВЫ, все основные про['раммистские задачи выпол нены, Никаких неожиданных трудностей в дальнейшем не предви дится, . При эволюuионном методе разработки в альфаверсии ядро про ['раммы полностью сформировано, Кроме ТО['О, написаны все важ нейшие функuии про['раммы, она представляет собой, хотя и OI'раниченный в своих возможностях, но уже вполне приемлемый продукт, Им можно пользоваться, видны ею идеоло['ия и характер, однако МНО['ИХ полезных функций пока еще нет, Проrраммирование после завершения альфаверсии По достижении альфарубежа у про['раммистов остается еще очень МНО['О работы: доработка функuий, исправление ошибок, пересмотр внеш не['о дизайна и спеuификации в ответ на замечания пользователей и Tec тировщиков, переработка внутренней структуры про['раммы в целях повышения ее производительности, Начинается (или продолжается) рабо 
f'лава 13: Обьедu//яющая 393 та над файлами данных  шаблонами, примерами, мультимедиа, трансля uионными таблиuам для драйверов и Т,П, Если в компании принято начинать тестирование только после I'OTOB ности альфаверсии и между этим рубежом и выпуском продукта остается очень мало времени, руководитель проекта может сознательно объявить о ['отовности альфаверсии, KOIДa до ЭТО['О еще явно далеко, Отнеситесь к такому е['о поступку с пониманием  ведь это фактически е['о единствен ный шанс спасти проект, вовремя начав тестирование, Виноват здесь не он, а навязанная ему модель разработки, Маркетинrовая деятельность после завершения альфаверсии С это['о момента обычно начинается работа над упаковкой продукта и маркетию'овой литературой, Собственно ['оворя, работа эта может начать ся несколько раньше или несколько позже  rлавное, чтобы к выпуску все было ['отово, Анализ дизайна упаковки и проверка всей маркетиНI'ОВОЙ литературы на техническую точность входит в обязанности отдела тестирования, Разуме ется, речь не идет о тоне или стиле изложения либо о маркетию'овой Ha правленности информаuии, Вы отвечаете только за техническую сторону вопроса, Как правило, большинство дат календарнOI'О плана отсчитываются от преДПОЛaI'аемой даты выпуска продукта, Это касается и всех маркетиНI'О вых материалов, хотя их стараются разработать как можно позже, чтобы в них отражалось реальное состояние ПрOI'раммы на момент выпуска, KOTO рое может отличаться от первоначально запланированнOI'О, То же самое относится и к руководству пользователя: ею отправляют в печаТh заблаюв ременно, поскольку дело это долюе, однако не настолько рано, чтобы е['о информаuия оказалась недостоверной, Необходимо учитывать тесную взаимосвязь сроков разработки различ ных составляющих проекта, Если сроки разработки проrpаммы затяrивают ся, должны быть вовремя перенесены все даты, связанные с датой выпуска продукта, Для это['о руководитель проекта должен вовремя получать от вас четкие и ясные отчеты о состоянии продукта и объеме оставшейся части работ по тестированию, Документирование после завершения альфаверсии Первый черновик справочной системы и руководства пользователя обычно бывает ['ОТОВ вскоре после завершения альфаверсии, Вам необхо димо будет их прочесть и проанализировать, а также протестировать по ним ПрOI'рамму, поэтому заранее зарезервируйте для это['о время, (Если спра вочная система очень проста, она может разрабатываться и несколько 
394 Часть 111: Управлеllие проектами и ?руппами позже, чтобы меньше пришлось переделывать в случае изменения прО!'рам мы,) Тестирование после завершения альфаверсии Во мнО!'их компаниях тестирование начинается именно с это!'о BpeMe ни, Однако лучше начать пораньше, чтобы к моменту !'отовности альфа версии работа уже шла полным ходом, Вспомните кривую стоимости исправления ошибок, Чем дальше продвИ!'ается работа над проектом, тем эта стоимость выше, В то же время ошибку, найденную достаточно рано, ле!'ко исправить, и эти исправления незначительно отражаются на дру!'их составляющих продукта и дру!'их частях про!'раммы, На ранних стадиях тестирования вашей целью является поиск всех наиболее очевидных про блем в каждой области про!'раммы, На этом этапе тестирование еще дo вольно поверхностное, обзорное, без у!'лубления в детали, Как только в руках у вас окажется первый черновик руководства пользователя, можно будет приступать к е!'о тестированию, точнее, к Tec тированию проrpаммы по этому руководству, поскольку все, о чем !'оворит ся в руководстве, необходимо будет выполнить за компьютером, Каждый пример, каждая упомянутая клавиша или команда, каждый способ работы или решения определенной задачи, каждое утверждение и ero очевидные следствия  все должно быть скрупулезно проверено, Первые пару uиклов тестирования вам придется работать с очень HeCTa бильной прО!'раммой, так что выполнить все сказанное в полном объеме будет невозможно, Тем не менее, будет найдено множество ошибок и проблем, и у вас останется достаточно времени на их обдумывание, В Te чение перво!'О пОЛIIОЮ uикла тестирования должно быть сделано следующее, . НаЧllите с aKmU(JHOi!O наступлеllUЯ. В ходе первО!'о цикла тестиро вания будут написаны десятки или сотни отчетов, охватывающих все основные аспекты проrpаммы и документаuии, работу всех проrpам мистов и технических писателей, Ваша деятельность должна быть видимой, а ее производительность не оставлять сомнений, В исправ лении найденных ошибок должны быть задействованы все, . Изучите продукт. Хотя вы и не станете опытным пользователем, каждая функция прО!'раммы должна быть вами опробована, . ПЛан тестированuя должен быть i!отов к nредставлению PYKoвoди телю nроекта. Это не значит, что план необходимо полностью за верШИТh и проработать все е!'о детали, Этот документ развивается во времени, по мере тестирования он все время у!лубляется, расширя ется и корректируется в соответствии с меняющимся состоянием прО!'раммы, Составление плана и само тестирование нико['Да не должны рассматриваться как отдельные проuессы, 
f'лава IЗ: ОбьеrJu//яющая 395 . Поднимите вопросы о структуре и интерфейсе продукта. Если в этой области имеются проблемы, их необходимо обсудить как мож но раньше  как только вы составите первое впечатление о продук те и хоть немною е\'О поэксплуатируете, Если чтото покажется вам явно неудобным или непонятным, сразу же составляйте COOTBeTCТВY ющий отчет, . Протестируйте руководство. Проверьте каждый факт и ею слеk ствия, После это['о передайте техническому писателю копию PYKO водства с пометками, Еще одну такую же копию оставьте себе  вам еще не раз придется с ней сверяться, . Оцените общее качество продукта. . Сформируйте собственное впечатление о стабильности каждой основной области прО!'раммы. Выделите наиболее слабые из них и укажите руководству, какие функции еще не ['отовы к тестиро ванию. . Оцените надежность проrраммы. Сколько uиклов тестирования потребуется для ее отладки? Сколько ошибок преДПОЛaI'ается найти? (Конечно же в первый раз эти оценки будут более чем приблизительными. Но от проекта к проекту вы будете набирать ся опыта и сможете оuенивать ситуаuию все более точно.) Вот первое, что следует сделать после завершения альфаверсии про ['раммы, . Получите утвержденный руководителем проекта список поддержи ваемых устройств. Включите этот список в план тестирования. . Начните первый цикл тестирования устройств. К концу альфа этапа должен быть пройден как минимум один полный uикл это['о вида тестирования, . Начните формирование комплекса pezpeccuoHHblX тестов. Эти Tec ты будут выполняться в начале каждо['о цикла тестирования про ['раммы или ее части. Набор ре['рессионных тестов периодически должен пересматриваться и обновляться, Некоторые области про ['раммы будут нуждаться в особенно тщательном тестировании, особенно те, в которые вносился uелый ряд изменений, наклады вающихся одно на дру['ое, Такие латаныеперелатанные фрaI'мен ты прО!'раммы BceI'Aa самые ненадежные, поэтому их все следует знать и раз за разом повторять для них обстоятельные ре['ресси онные тесты до тех пор, пока вы не убедитесь в их полной CTa бильности, . Пересмотрите потребности в ресурсах и опубликуйте календарный план работ. Еще раз продумайте список задач своей rpуппы, оцени 
396 Часть 111: Управлеllие проектами и ?руппами те сроки их выполнения и необходимое количество людей, Черно вик это['о списка может быть уже опубликован, однако после пер во['о предварительноI'O uикла тестирования у вас наверняка возникнут новые соображения, Теперь, имея не который опыт рабо ты с прО!'раммой, можно составить не просто предварительный Ha бросок, а документ, которо['о вы будете придерживаться в дальнейшем, Поэтому список задач должен быть полным, т,е, в нем не должно быть ничею, что не будет выполнено, и при этом ни одна важная часть работы не должна быть упущена, На выполнение OT дельной задачи из ЭТО['О списка должно уходить от половины дня до недели, Назначьте каждой задаче конкретные сроки, Это нелеI'Кая работа, но она очень важна, Именно по календарному плану PYKO водитель проекта сможет в дальнейшем сверять реальное продвиже ние работы, По мере продвижения работ альфаэтапа будет расширяться тестовый план и у[лубляться тестирование, . По мере необходимости разрабатывайте и публикуйте приемочные тесты. (Приемочный тест  это набор тестов, который должен быть пройден очередной версией прО!'раммы перед началом новою uикла тестирования,) Во мно['их компаниях до тою, как будет ютова бетаверсия, прО!'рамма принимается на тестирование в любом co стоянии, независимо от ТО['О, прошла ли она приемочные тесты, Это не мешает разработать и опубликовать такие тесты заранее, просто не следует настаивать на их прохождении прО!'раммой до O['OBopeH ною срока, . Подzотовьте и заполните рабочие списки и схемы. Среди них MO ['ут быть следующие документы, Перечень всех списков, таблиц, схем и т.п. Какие виды записей планируется вести в ходе тестирования? Какие виды тестов пла нируется проводить и какие искать ошибки, не включенные ни в один из рабочих документов? Чтобы проверить, все ли возможные виды ошибок охвачены планом тестирования, воспользуйтесь приложением к этой книrе, Данный перечень поможет вам в формировании исчерпывающеrо списка задач, выполнение которых будет означать, что ПрОI"рамма полностью протестирована, Полезен он будет и при составлении календарною плана, распределении ресурсов и планировании БЮk жета, . Диаrраммы входных rраничных условий. . Диаrpаммы выходных rраничных условий. 
f'лава 13: Обьедu//яющая 397 о Список функций, включающий стратеI'ИИ поиска ошибок управ ления потоком (например, ошибок начальных состояний), описа ния возможностей и последствий переходов между состояниями, повторнOI'О входа в состояния или выхода из состояний без BЫ полнения требуемых действий (например, ввода запрошенных данных), о Список всех сообщений об ошибках. о Тестовые матрицы конфиrураций устройств. о Таблицы сравнительных данных дая тестирования производитель IЮСТИ ПрOI'раммы (в сравнении с ДРУI'ИМИ ее версиями или про дуктами конкурентов), о Описания наrpузочных тестов. Стратеrии тестирования потоков данных и последствий измене ния существующих данных, о Таблицы, в которых описываются функции каждой клавиши в каж,П,ОЙ области проrраммы. (Если по всей ПрOI'рамме КЩ1ВIIШИ работают одинаково, эти таблиuы будут несложными, Однако данный факт необходимо ПрОRерить, поскольку то, что так CKa зал руководитель проекта или ПрOI'раммист, еще не значит, что так и есть на самом деле,) о Стратеrии поиска условий rOHoK, проблем, связанных с обменом сообщениями, общими данными, прерываниями, а также ДРУI'ИХ проблем, которые не MOI'YT быть обнаружены путем ПрОСТOI'О линеЙНОI"О тестирования, о Матрицы зависимостей между входными данными или опuиями, о Диаrраммы использования памяти функциями проrраммы. Это исследовательские средства, в которых вовсе не обязательно воз никнет потребность, Они бывают полезны при разработке про I'рамм, для которых требовании" памяти являются важной характеристикой, или при поискс ,IIОСПРОИЗВОДИМЫХ ошибок, о И MHoroe Apyroe. В приложении к КНИI'е приведен ДЛИННЫЙ пе pe'leHb ошибок, Прочитайте е 1"0 , чтобы убедиться, что планом тестирования охватываются все ошибки, которые MOryT встретить ся в вашей ПрОI'рамме, . Не пытайтесь выполнить все сразу. Чередуйте разработку тестовых материалов с непосредственным поиском ошибок, Что бы вы ни делали, BceIAa оставляйте для этоrо время, Даже к кониу альфаэтапа вся перечисленные материалы I'OТОВЫ не будут, Разрабатывайте их постепенно, сначала прорабатывая структуру списков и таблиц, а затем, по мере освоения определеннай области ПрОI"раммы, 3aIlO;l 
398 Часть 111: Управлеllие проектами и ?руппами няйте их информаuией, О;!нако работа 110 подютовке тестовых Ma териалов все же должна ощутимо продвИ!'аться вперед, ведь это основа Фундамента.;IЬНО['О тестирования, Кроме планирования и подютовительно['о тестирования на а.;Iьфаэта пе аВТОlатизируются некоторые тесты, ПреЖ;lе всею, это ре['рессионные тесты, которые МО!'УТ либо полностью выполняться компьютером, либо автоматизироваться хотя бы частично, Автоматизаuия ре['рессионных Tec тов позволит значительно сэкономить рабочее время: вместо Toro чтобы тратить е['о на бесконечное выполнение одних и тех же старых тестов, вы сможете посвятить е['о разработке и выполнению новых, . Архивируйте все нетривиальные файлы данных. Не забывайте co провождать файлы короткими заметками об их содержимом и назна чении, Не заставляйте себя или сотрудников каждый раз вспоминать, что именно находится в данном файле, При таком обилии информаIlИИ, похожих версий одних и тех же данных, cxoд ных тестов, нече['о lIOЛ<l['аться на память, Ина'lе кончится тем, что придется разрабатывать некоторые тесты сначала, Если комментарии включаются прямо в файлы, поД!'отовьте еще один документ с пе речнем всех имеющихся файлов и кратким описанием их назначе ния, чтобы все материа.;IЫ, необходимые для проведения каждо['о теста, можно было быстро найти, . Архивируйте все повторно используемые пакетные файлы, файлы данных и сохранеНllые последователЬ/юсти нажатий клавиш. Раз делите их на две ['руппы, Самые важные из них, а также те, с KOTO рыми мо['ут В да.;Iьнейшем работать дру['ие сотрудники, сопроводите подробными комментариями, OCTa.;IbHbIe  более краткими, . Подzотовьте файлы даl/IIЫХ для тестироваl/UЯ печати. Начните со стаНД<lртных файлов, которые подойдут д.ня тестирования всех типов устроЙств, Потестируйте прО!'рамму с их помощью, выводя инфор мацию как на принтер, так и на диск, ПоД!'отовьте пакетные фай лы, чтобы в следующий раз все эти тесты можно было выполнять автоматически и сравнивать выходные файлы различных версий прО!'раммы или различных драйверов устройств, . Подzотовьте КОllфиzурационные тесты. Составьте полный список возможных составляющих операuионной среды прО!'раммы, В час тности, в не['о войдут версии операuионных систем и дополнитель ною системнО!'о проrpаммнО!'о обеспечения, Количество возможных конфи[ураций, скорее все['о, будет очень велико, так что придется ПОДУМ<lТЬ над рюработкой нескольких всеОХВ<lТЬ!В<lЮЩИХ тестов, по зволяющих ВЫЯВИТЬ И,\lеющиеся проблемы с Н<lибольшей вероятно стью, ДОСТ<lньте необходимые модели внешних устройств (модемов, 
Тлава IЗ: Обоедu//яющая 399 мыши, видеоплат и т,П,) и начните ПОД!'ОТОRКУ соответствующих Te стовых файлов, . Автоматизируйте прием очные тесты. Если каждый раз, ко['да будет ['отова очередная версия прО!'раммы, планируется выполнять стандартную серию коротких тестов, их стоит автоматизировать, Ведь выполняться эти тесты будут множество раз, и не только Tec тировщиками, но и дру['ими сотрудниками, в частности, прО!'рамми стами, Для автоматизации этих тестов может потребоваться прО!'раммное обеспечение ДЛЯ перехвата и воспроизведения клави атурно['о и иною ввода, перехвата выходной информаuии (в частно сти, изображения на экране) и выделения из нее важных фРaI'ментов, Зафиксировав однажды результаты правильной работы прО!'раммы, можно сравнивать их с результатами работы каждой новой версии, Имейте в виду, что коммерческие прО!'раммы подоб НО['О рода нередко бывают полны ошибок, так что, приобретая их, требуйте у продавuа месячную ['арантию, В автоматизаuии тестирования, как и во всякой дру['ой работе, имеют ся свои трудности и издержки, В среднем на автоматизаuию теста уходит в 10 раз больше времени, чем на е['о создание и выполнение вручную, . Займитесь автоматизацией тестирования как можно раньше, иначе эта работа не окупится, . На самых ранних этапах тестирования Jlучше посвятить время не автоматизаuии тестов, а их выполнению, Этап предварительно['о поверхностнО!'о тестирования прО!'раммы очень важен, и выявляе мые в е['о ходе ошибки лучше не откладывать "на потом", . Заранее автоматизированные тесты позволяют существенно повы сить производительность работы в самые напряженные периоды, . Не стоит автоматизировать тесты слишком рано, поскольку про['рамма может настолько измениться, что вся работа окажется проделанной зря, . Однако приемочные тесты следует создать заранее, поскольку они будут выполняться так часто, что каждая минута их автоматизиро ваннО!'о выполнения позволит существенно сэкономить время, . Рано начатые работы по автоматизации МО!'УТ вызвать политичес кие проблемы, На автоматизаuию теста требуется так МНО['О BpeMe ни, что эта работа окупается только в случае, если он выполняется более десяти раз, Некоторые руководите;IИ проектов утверждают, что их чудесным продуктам достаточно и ДBYXTpex uиклов тестирова ния, И хотя В этом случае руководитель наверняка ошибается, такая 
402 Часть 111: Управлеllие проектами и ?руппами ситуации ['ОНОК, Следуя интуиuии, старайтесь найти самые слабые места прО!'раммы, Цели вашей работы должны быть следующими, . Как можно раньше выявить основllые ошибки. На разработку тестов уходит очень мно['о времени, Если изза серьезных ошибок в про ['рамме она будет значительно переделана, часть это['о времени может оказаться потраченной зря, С друюй стороны, значительную часть ошибок, и в том числе самых серьезных и требующих наиболь ших переделок, можно выявить в ходе одно['о массированною рей да по прО!'рамме или ее выбранной области, Поэтому имеет смысл сначапа провести такой рейд, а уж потом браться за скрупулезную проработку нюансов, . Дать себе время подумать. Почитайте и подумайте о выбранной области прО!'раммы, У вас должно выработаться ясное видение воз можных проблем и ошибок, а также типов необходимых тестов, Поэкспериментируйте с областью проrраммы ровно столько, сколь КО необходимо ДЛЯ выявления самых серьезных проблем, Это даст вам неделю или две на ее обдумывание, прежде чем тестирование будет продолжено (в течение это['о времени будут исправляться найденные ошибки), . Как можно раньше исправить самые серьеЗllые ошибки. Чем paHb ше составить отчет о проблеме, тем раньше и с тем большей Bepo ятностью, она будет решена, . Улучшить состояние npoi!paммbI. Помните, что тестирование про ['раммы может быть прекращено в любой момент, Неформапьное тестирование ['ораздо мощнее базовО!'о и позволяет выявить юраз до больше Ilроблем, Кроме ТО['О, оно выполняется быстро, так что, если с само['о начала пройтись таким образом по всем областям проrpаммы, можно уже на ранних стадиях тестирования обеспечить определенный уровень ее надежности, Интенсивное плановое тестирование Выберите одну из областей прО!'раммы и полностью на ней CKOHцeHT рируйтесь, После КОрОТКО!'О нефОРМШlЬНО['О тестирования можно перейти к плановой и скрупулезной работе, Довольно трудно решить, с какой области проrpаммы начать, Тут MO жет БЬПh uелый ряд соображений, о которых уже рассказывшlOСЬ в Пlаве 12, Вот первые кандидаты на тестирование, . Области про['раммы, которые при предварительном тестировании показWIИСЬ наиболее слабыми, 
Тлава IЗ: Обьеди//яющая 403 . Области про!'раммы, ошибки в которых будут наиболее заметны пользовател ю, . Наиболее часто используемые составляющие прО!'раммы, . Особенности про!'раммы, выделяющие ее среди конкурирующих продуктов, . Компоненты прО!'раммы, которые труднее все!'о исправлять, . Самые понятные ДЛЯ вас функциональные области, С че!'О начинать  это вопрос личных предпочтений, Вместо то!'о чтобы писаТh подробные планы тестирования слабейших составляющих прО!'рам lbI, мы обычно начинаем с их массированнО!'о неформапьно!'О тестирова ния, а дальше свое дело делает пачка отчетов о пробле,\Iах  пока мы в течение нескольких uиклов тестируем остальные части прО!'ра1МЫ, COCTO яние ее слабейших участков значительно УЛУ'lшается, Впервые тестируя определенную облаСТh прО!'раммы, вы наверняка не успеете полностью спланировать необходимые работы в течение одно!'о цикла, Это!'о и не требуется, Выполните такой объем бумажной работы, который покажется наиболее разумным, а остапьное оставьте ДЛЯ следую щих uиклов, Ведь не обязательно, чтобы все проводимые тесты были зара нее спланированы  чтото можно придумывать прямо по ходу работы, Реrрессионное тестирование Один раз тщательно протестироваТh каждую область проrpаммы еще не ,lOcтaTo'IHo  ее тестирование необходимо реryлярно повторять, Проrpамма IIOСТОЯННО меняется, возникают новые проблемы, повторно появляются старые ошибки, Реl"рессионное тестирование должно охватывать прО!'рам му так же полно, как и первоначапьное, однако не требовать так же MHO 10 времени, Прежде все!'о в набор ре!'рессионных тестов включаются проверки всех недавних исправлений прО!'раммы, Этот набор непостоянен, тесты ВКЛю 'Iаются в не!'о, затем KaKoeTO время спустя удаляются, уступая место HO вым, Большая часть ре!'рессионных тестов выполняется одиндва раза, Однако существует и некоторое более постоянное подмножество тестов, составляющее ядро ре!'рессионно!'о набора, Ре!'рессионных тестов не должно быть слишком мно!'о  только необ ходимый минимум, ПOJIНОСТhЮ покрывающий выбранную область проrpам lbI, Ими должны по возможности охватываться все аспекты этой области (ПОДПРОI"раммы, rраничные условия и т,п,) И все ситуаuии, чреватые сбо ями и ошибками, Кроме ТО!'О, желательно, чтобы эти тесты были быстры ми, Конечно, на практике выполнить требование "минимум времени при максимальном охвате" довольно сложно, Включайте в набор самые инте 
404 Часть 111: Управлеllие проектаМlIlI ?руппами ресные и полезные тесты, позволяющие проверить, хорошо ли исправлены выявленные ошибки, Проводя базовое и неформальное тестирование, включайте лучшие из тестов в реl'рессионный набор, Остальные тесты разрабатывайте в процессе IIланирования, Как МИНИМУI половина ею Bpe мени должна быть посвящена тестам, которые будут выполняться по He скольку раз, Подумайте о следующей стратеl'ИИ выполнения реl'реССИОННОl'О тести рования: одна часть тестов выполняется для каждой версии проrpаммы, ДРУl'ая  для каждой второй или третьей версии, третья  еще реже, Это поможет ускорить проuесс тестирования, сохраняя полноту охвата проrpам мы, Ближе к кониу разработки, кота новые версии MOryT передаваться на тестирование все чаще и чаще, описанный прием сослужит вам неоuени мую службу, Замечание о циклах тестирования Идеальный uикл  это полное тестирование одной версии продукта, На практике же набор тестов меняется от версии к версии, В одних компаниях тестирование очередной версии проrpаммы начина ется только после TOI'O, как полностью протестирована предыдущая версия, В ДРУI'ИХ ПрOl'раммисты передают ПрОl'рамму тестировщикам TOIAa, KOlДa в нее внесено столько изменений, что работа над предыдущей версией теряет смысл, На ранних стадиях проекта временные интервалы между версиями MOryT составлять от двух ДО шести недель, По мере продвижения работы эти интервалы сильно сокращаются, и к кониу проекта новые версии MO I'YT передаваться на тестирование каждые несколько дней, Однако слишком короткие uиклы  это не работа, Не успеет тестиров щик провести приемочные тесты, несколькО реl'рессионных и написать коекакие заметки, как пора переходить к новой версии ПрОl'раммы, Так MHOI'O ошибок не найти, Постарайтесь добиться утверждения TaKoI'o календарнOI'О плана работ, при котором 2530% рабочеl'О времени можно будет тратить на планирова ние и выполнение новых тестов, Именно они с наибольшей вероятностью позволяют выявить оставшиеся в ПрOl'рамме недостатки, На начальных стадиях тестирования это время у вас будет, А вот дальше, KOI'Aa сформи руется uелая батарея реrpессионных тестов, на новые эксперименты Bpe мени будет оставаться все меньше и меньше, Поэтому старайтесь по возможности сократить время реl'реССИОННОl'О тестирования и удлинить время каЖДОl'О uикла, Пре..бета ВО МНOI'ИХ компаниях l'OTOBHOCTb бетаверсии считается одним из важ нейших рубежей разработки, По el'o достижении принимаются важные 
Тлава IЗ: Обьеди//яющая 405 решения, завершаются одни виды работ и начинаются ДРУl'ие, Если так обстоит дело и в вашей компании, за дветри недели до завершения бета версии стоит заняться коекакой проверочной работой, Проанализируйте общее состояние ПрOl'раммы и ее отдельных функций, Достаточно ли она надежна, и все ли в ней уже на своих местах? Действительно ли имеющу юся версию можно с чистым сердцем назвать "бета"? Как правило, такое проверочное тестирование и общая оценка состояния ПрOl'раммы выполня ются совместно тестировщиками и руководителем проекта, В некоторых компаниях в календарный план разработки включается этап, который следует непосредственно за альфаэтапом и называется эта пом ПОДl'отовки бетаверсии или просто пребета, Он довольно короткий и предназначается для доведения проrpаммы до состояния бетаверсии, Py ководитель проекта решает, что проrpамма I'Oтова к испытаниям, Он объяв ляет об этом коллективу, и после дОЛl'их обсуждений, испытаний, исправлений и повторных проверок руководитель rруппы тестирования наконец соташается, что бетаверсия l'OTOBa, В друrих компаниях утверждение бетаверсии проводится не так OTKpЫ то, но В той или иной форме этот проuесс сотасования и внесения пос ледних исправлений все равно неизбежен, Как и перед объявлением альфаверсии, будьте l'OTOBbI к OI'POMHOMY количеству последних изменений и исправлений, Планируйте свое время так, чтобы проверять их быстро и немедленно сообщать о результатах, Бета Как и у альфаверсии, у бетаверсии ПрOl'раммы множество определе ний, Вот несколько примеров, . Бетаверсия  это версия, которую можно передать бетатестuров щuкам, т,е, людям не работающим в компании, но l'OTOBbIM поэкс плуатировать KaKoeTO время ваш не вполне еще отлаженный продукт и сообщить о своих впечатлениях и найденных ошибках, Будет ли в бетаверсии реализован полный набор запланированных функций ПрОI'раммы, зависит от выбранной модели разработки, То, что продукт I'OTOB К оценке сторонними пользователями, еще не значит, что он полностью завершен, . В типичной бетаверсии проrpаммы, разрабатывающейся методом водопада, все функuии l'OTOBbI и протестированы, фатальных ошибок нет, серьезных очень мало, несущественные файлы данных l'OTOBbI, по крайней мере, на 50%, почти завершены файлы для драйверов устройств, l'OTOBbI все проектные документы и продукт соответствует требованиям, 
406 Часть 111: Управлеllие проектаАtи и ?руппаАtи . в ТИIIИЧНОЙ бетаверсии IIporpaMMbI, разрабатывающейся эвОЛЮЦUОII IIЬ/М методом, I'OTOBO ее ядро и тот набор базовых функuий, которые делают ее IIриемлемым IIрОДУКТОМ, ПРOl'рамма IIОЛНОСТЬЮ IIротести рована, и, возможно, в ней есть даже некоторые ДОllOлнительные функuии, При эволюuионной юдели разработки такое состояние ДОСТИI'ается достаточно рано, что IlOзволяет рано lIередать IIporpaMMY сторонним бетатестировщикам, а значит, заблаl'овременно узнать мнение 1I0льзователей и сэкономить средства на ее тестировании, Альфа и бета не обязательно должны быть единственными КЛЮ'lевы ми рубежами разработки, Можно ОlIределить и еще один рубеж (caM ма?), на котором в IIРOl'рамме уже будет множество разнообразных функuий, а отсутствующие не будут иметь значительнOI'О влияния на ее маркеТИНl'овые характеристики, Этот рубеж будет означать, 'ПО разработка IIОДХОдИТ к кониу И вся основная работа уже BbIllOJ\HeHa, После завершения бетаверсии IIpol'paMMbI руководитель IIроекта OlIpe деляет окончательную КОНфИl'ураuию YCTaHoBo'IHbIX дисков, Составляется СIIИСОК файлов, ОlIределяется их формат и то, будут ЛИ они сжатыми, [o товится lIервая КОIIИЯ дисков, на которых BlecTo некоторых файлов МOI'ут быть IIрОСТО заlЛУШКИ  lIустые файлы с заранее ОlIределенными имена ми, Проrраммирование после завершения бетаверсии Если в IIpol'paMMe остались неоконченные элементы, их необходимо доделать, Однако таких составляющих уже не МНOI'О, и большая 'lacTb уси лий IIрOl'раммистов IlOсле завершения бетаверсии наlIравляется на ИСlIрав ление ошибок, создание файлов данных, наlIисание установочных утилит и блоков 1I0ддержки оставшеl'OСЯ alIlIapaTHol'o и IIporpaMMHOI'o обеСlIечения, Что касается IIроектных работ, то их объем и характер на этом этаlIе зависят от IIрИНЯТОl'О в КОМlIании ОlIределения бетаверсии IIpol'paMMbI, Возможно, именно теlIерь наСТУIIИТ время для "наведения красоты" и ВЫllOлнения 1I0желаний 1I0льзователей, IIринимавших участие в бетатести ровании, Если же 1I0льзовательский интерфейс к этому времени "заморо жен" и любые конструкторские изменения заlIрещены, значит, на этом этаlIе будут только ИСlIравляться ошибки, Обычно в IIроиесс работы с бетатестировщиками так или иначе оказы вается вовлеченным весь основной lIерсонал IIроекта  IIрОI'раммисты, [РУlIlIа технической 11 оддержки, l'pYlllla маркеТИНl'а и, конечно, l'pYIIlIa тестирования, Хотя IIрОl'раммисты и не контактируют с бетатестировщи ками HellocpC;lcTBeHHo, они MOryT заниматься наlIисанием служебнOI'О IIpO rpaMMHoI'O KO;la, неоБХО;lИМОI'О для Орl'анизаuии бетатестирования или 
Тлава 13: Обьеди//яющая 407 защиты IIрОl'раммы от "lIиратов", Последней uели MOryT служить следую щие средства, . Бомбы с часовым мехаllизмом, разрушающие IIpol'paMMY IlOсле OII редсленной даты, . ИмеНllые версии, во IНОI'ие места кода которых встроено, HelIocpeд ственно или в зашифрованном виде, имя бетатестировщика, EI'O имя отображается такой версией IIpOl'paMMbI на экране, и, если Te стировщику вздумается раСlIространять IIpol'paMMY тем или иным СlIособом, каждый будет знать, чьих рук это дело, Даже если "lIират" удалит свое имя из IIpOl'paMMHol'O кода, он наверняка IIРОIIУСТИТ те места, l'Ae имя зашифровано, Если IlOсле ЭТОI'О он IlOместит свою KO IIИЮ IIpol'paMMbI в CompuServe, откуда ее сможет заl'РУЗИТЬ хоть uелый мир, КОМlIания сможет доказать в суде, что именно этот че лове к является виновником ее 1I0терь, (Хотя едва ли бетатестиров щик достаточно БОI'ат, чтобы КОМlIенсировать 1I0тери КОМlIании, сама Уl'роза раскрытия IIредотвратит нелеПlЛьные действия,) . Защита от копирования, если только удастся найти достаточно эффективное средство, . Дpyzue приемы, являющиеся профессиональными секретами. Анализируя IIроблеМhI, о которых сообщают бетатестировщики, имейте в виду, что ИХ источником может быть и добавленный в IIpol'paMMY защит ный код, Поэтому, если ошибка не ВОСIIРОИЗВОДИТСЯ, IIроверьте ту версию npol'paMMbI, с которой работал сообщивший о ней тестировщик, Маркетинrовая деятельность после завершения бетаверсии Если УlIаковка и ДОllOлнитеJ'ьные материалы еще не l'OTOBbI, работа над ними IIродолжается, Обложки и этикетки дисков обычно разрабатываются на бетаэтаlIе, так что 110 el'o завершении rpYIIIIa тестирования должна быть I'отова их IIроверить, Сотрудники rpYIIIIhI маркеТИНl'а MOI'YT работать с бетатестировщиками и сообщать руководству об их замечаниях и IIреД;lOжениях, Они же MOryT отсылать КОIIИИ IIродукта обозревателям из lIериодических изданий и Ha стаивать на тех изменениях, которые IIOСllOсобствуют их более блаl'ОIIРИ ятным отзывам, Вообще, BOKPYI' таких изменений Bcel'Aa создается очень наlIряженная атмосфера, С одной стороны, их IIOЛИТИ'lеская важность бес СlIорна, А с друюй стороны, они MOI'YT 1I0влечь за собой новые серьезные IIроблемы и ошибки, которые lIеред самым вьшуском, МЯI'КО юворя, неже лательны  изза них может оказаться IIOA Уl'рОЗОЙ своевременное завер шение IIроекта, 
408 Часть 111: Управление nроектаАtи u ?руnnаАtи Документирование после завершения бетаверсии ПОJ\НЫI ХОДОМ IIродолжается разработка 1I0льзовательской ДOKYMeHTa uии, Она ДОIJOлняется, корректируется, анализируется и снова корректиру ется, ТеХНИ'Iеские lIисатели вклю'шют в руководства технические таблиuы, советы 110 разрешению IIроблем, Часто, не дожидаясь замораживания IlOльзоватеЛЬСКОl'О интерфейса, технические lIисатели начинают снимать КОIIИИ экранов, Составляется IIредметный указатель, 1I0ка еше без номеров страниu, Уточняются лиuен зионные СОПJашения, авторские IIрава и T,II, Если СlIравочная система еше не l'oToBa, начинается работа над ее TeK стом, Тестирование после завершения бетаверсии НезадоЛl'О до завершения бетаверсии IlOlIросите руководителя IIpoeK та IIOДllисать IIЛан тестирования, Хотя как минимум однажды он уже зна комился с IIЛаном работ вашей I'PYIIIIbI, в ходе IIредыдшеl'оo этаlIа этот Шlан довольно сильно изменился, Поэтому необходимо еше раз COlJlaCOBaTb все ключевые ВОlIрОСЫ, касаюшиеся масштаба и сроков работ, а IJlaBHOe, IIОЛНОТЫ IIреДlJOлаl'аеМОI'О тестирования, Убедитесь, что вы IIOЛНОСТЬЮ 1I0нимаете APYI' ApYI'a и между вами не осталось никаких IIротиворечий, Как следует IIроверьте маркеТИНl'овые материалы, lIеред тем как они уйдут в IIРОИЗВОДСТВО, Если вы до сих IIОр не тестировали IIрОДУКТ в реаль//ом режиме, IIрИlШ10 время ВIIЛОТНУЮ заняться этой работой, Тестирование IIродукта в реальном режиме озна'lает el'o полноuенную ЭКСlIлуатаuию, ВЫllOлнение той работы и решение тех задач, которые будет решать с el'o IIOМОЩЬЮ 1I0льзователь, Если разрабатывается текстовый IIроцессор  составляйте в нем заметки и отчеты, Если тестируется IIpOl'paMMa для создания IIрезентаuий  создай те IIрезентаuию, и не IIробную, а самую настоящую, для реальною совеща ния, Тестирование в реальном режиме ВЫllOлняется абсолютно независимо от OCHOBHOI'O TecToBoI'O IUlaHa, Даже если Шlановые работы не укладываются в раСlIисание, ни в коем случае не IIренебреl'айте тестированием IIpOl'paM мы в реальном режиме, IIОСКОЛЬКУ множество ее недостатков IIРОЯВЛЯЮТ ся только IIрИ таком СlIособе работы, Продолжайте ВЫllOлнение TecToBoI'O IIЛана, утубляя исследование IIpO l'paMMbI и ДОIJOЛНЯЯ формальные тесты нестандартными ЭКСlJериментами, . Пришло время IIOABepl'HYTb IIpOl'paMMY самым суровым наl'рузкам и самым бескомпромиссным испытаниям, К этому времени вы уже IIрекрасно знаете IIpOl'paMMY и имеете БOl'атый ОIIЬП 1I0иска ошибок, Пришло время для 1I0следней массированной атаки на ошибки  дальше будет уже IIOЗДНО, и лучшие ваши открытия не IIринесут IIOJlЬЗЫ IIроекту, 
f'лава IЗ: Обьедu//яющая 409 . Еще раз IIроверьте ИСllравления всех наиболее серьезных ошибок. . ВОСlIользуйтесь IIриобретенным ОIIЬПО1 ДЛЯ 1I0иска новых оши бок, . Поработайте над те1И ТРУДНОВОСIIРОИЗВОДИМЫМИ ошибками, KO торые ;10 сих IIОр не ИСlIраВ;lены, Протестируйте IIpol'paMMY на I'раницах ДОIIУСТIIМЫХ диаlIазонов, 1I0работайте с ней на бол\'шой скорости на самой медленной технике, Сl'енерируйте нестандартные ситуации, IIротестируйте обработку ошибок, ВЫllOлните все, что \южет IIривести IIporpaMMY к сбою, . Если над IIрOl'раммой работает несколько тестировщиков, IIУСТЬ один из них IIOСВЯТИТ все свое время IIОИСКУ новых IIроблемных областей IIродукта, Этот СОТРУДНИК IlOможет вывести тестирова ние за рю.IКИ сложившеl'ОСЯ KpYI'a задач и увидеть IIРОlIушенные ранее Ilроблемы 11 IlOтеНUИaJIЫIO слабые места IIpol'paMMbI. . Проследите за тем, чтобы вносимые в npOi!paммy исправленuя He медленно тестировались. Это 1I0лезное IIравило в конце разработ ки IIриобретает особое зна'!ение, ПрОI'раIМИСТЫ должны узнавать о неудачных ИСlIравлениях в течение нескольких дней, IIOKJ они еще хорошо IIOМНЯТ каждую наlIисанную CTpOtlKY кода, . Завершите тестирование всех устройств, всех заlI'Iанированных КОНфИI)'раций, Эта работа, начатая на альфа<ПШlе, вероятно, не была до сих IIОр окончена изза выявления все новых и новых ошибок, Но даже если вам удалось I1ровести всю заlIланированную работу, ее необходимо 1I0ВТОрИТЬ, чтобы убе2!ИТЬСЯ, что все 11OIIpe жнему в порядке, Некоторые сотрудники неДОУ\lевают, IlOчеIУ не начинать тестирование устройств IlOсле завершения бетаверсии, чтобы не IIРИХОДИЛОСЬ ВhlllOЛНЯТЬ еl'О дважды, Ответ IIрОСТ: в этой части IIpOI'p3\11hI оБЫ'IНО так MHOI'O ошибок, что 1I0вторное тести рование все равно необхо;lИlO, и, если ОТJIOЖИТЬ начало работы, заканчивать се ПРlщется на этаlIе фИНaJlЬНОl'О тестирования, . Продолжайте автоматизацию тестов, даже еС;1II кажется, что эта работа уже не ОКУIIИТСЯ, Нередко для полной отладки IIpOlpaIMbI требуется I'ораздо больше циклов тестирования, че\l ОЖИДaJIOС\', И IIОСКОЛЬКУ lIоследние из них IIРI1ХОДНТСЯ на са\fыii конец проекта, экономия времени может chIrpaTb здеСI, решаюшую рол\" Автомати заuию можно прекратить только ТОIЛ:!, КОlда ИС'Iезают всякие cO\lНe ния в TOI, что тестироваllllС 'JавсршаClСН, O:IНaKo не стоит Вllадать в ДРУl'ую краЙlfOСТ\' и aBTo\l:! 1'11 !IIРОIЧIЪ все ПО;lРЯД, Отбирайте Tec ты очен ь тшатслыfO, аВТО\I:! III!II(1\ н только тс, которые наверняка 6У:1УТ В\,IIЮ:IНЯТI,СН Cllle \IНЩО (1а!, 
41 О Часть 111: Управлеllие проектаАtИ и ?руппаАtИ . Протестируйте все файлы дшlНЫХ, включая мультимедиа, шаблоны, IIримеры и T,II, Выберите небольшую I'PYIIlIY ТИIIИЧНЫХ файлов и запишите время, ушедшее на их тестирование, ЭТО IIOЗВОЛИТ оuенить длительность одною uикла, чтобы точнее СlIланировать дальнейшую работу, Необходимо 1I0заботиться том, чтобы текушее состояние работ BcelAa было очевидным, а также о том, чтобы составляе!ые отчеты о IIроблемах рассматривались вовремя и 110 ним IIринимались конструктивные решения, . Реzyлярно предоставляйте руководству отчеты о состоянии пpoeK та с данньши о нерешенных IIроблемах и важными статистически ми сведениями, Эти отчеты реl'УЛЯрНО формируются в течение всей разработки, но ближе к ее кониу им следует уделять большее вни мание, . Аккуратно обращайтесь со статистическими aaHllblMU. Каждая uифра в отчете и особенно данные о количестве новых и старых IIроблем должны СОlIровождаться корректной интеРlIретаuией, Не заставляйте читателя caMol'o ДОl'адываться о значении тех или иных 1I0казателей, Иначе у руководства может создаться IIревратное BlIe чатление о ходе работы и состоянии IIpol'paMMbI, . Как следует подумайте, прежде Чем подключать к проекту новых тестировщиков перед самым концом разработки. Чтобы войти в курс дела, им требуется время, и 1I0началу они MOI'YT составлять мною беСlIолезных отчетов и IIОСТОЯННЫМИ ВОlIросами отрывать от работы ДРУI'ИХ сотрудников, В результате они скорее замедлят рабо ту, нежели ее ускорят, . Распростраllяйте среди заинтересова1l11ЫХ лиц списки отложеllllЫХ проблем и реl'УЛЯрНО собирайте совешания 110 их lIересмотру, На бетаэтаlIе такие совешания должны стать еженедельными, Еше IIOЗ же их можно IIрОВОДИТЬ каждые несколько дней, Все важнейшие решения должны IIриниматься как можно раньше, а не откладывать ся до самою ВЫlIуска, Те IIроблемы, которые, на ваш ВЗIЛЯД, требу ют обязатеЛЬНОl'О решения, выделяйте в раСlIространяемых СlIисках красным карандашом, чтобы СОТРУДНИКИ обдумали их как можно более серьезно, . Распростраllяйте среди заиllтересоваllНЫХ лиц списки недостатков полыователЬСКОi!О интерфейса и неудачных конструкторских реше ний, ЭТИ СIIИСКИ также ДО:IЖНЫ стать IIредмстом реryлярных совеша ний, IIриче\! необходимо уделить им внимание как можно раньше, чтобы к мо!ею)' замораживания IlOльзоватеЛЬСКОl'О интерфейса все ключевыс изменения уже были внесены, 
Тлава 13: Обьедu//яющая 411 Как только у вас в руках окажутся черновики руководства 1I0льзовате ;IЯ, начинайте с ними работать не откладывая, Получив руководство на бетаэтаlIе, 1I0старайтесь IIроработать el'o до TOI'O, как бетаверсия будет :ншершена, О тестировании документаuии 1I0дробно рассказывалось в l'Лаве 9, Вот ее важнейшие 1I0ложения, . Поскольку вы, скорее Bcel'o, лучше освеДОlлены о 1I0следних изме нениях IIporpaMMbI, чем автор документаuии, проверьте ее дocтoвep ность. . Предупредите техническоzо писателя о намечающихся изменениях npozpaммbl. . Проверьте, нет ли в npozpaммe функций, не описанных в дOКYMeH тации или описанных недостаточно полно и понятно. . Подключая к nроекту новоzо тестировщика, пору чите ему прежде всеzо протестировать npozpaммy по последней версии руководства пользователя. Как IIравило, к cpeAHel'o масштаба IIроектам новые тестировшики 1I0дключаются в IIромежутке между серединой альфа этаlIа и "замораживанием" IlOльзоватеЛЬСКОl'О интерфейса, Постоянно отслеживайте ход работы, сверяя ее результаты 110 календар ному IIЛану, Подводить ИТОI'И лучше всею еженедельно, Какие новые за дачи 1I0ставлены, какие из них уже решены? Как они влияют на ВЫllOлнение заlIланированной работы, сколько времени отнимают? Укла дываетесь ли вы в сроки? Если нет, то какис меры можно IIреДIIРИНЯТЬ? Может быть, следует сократить нскоторые виды работ или вообше от них отказаться? Не IlOможет ли дслу УВСЛИ'lение числа тестировшиков? А воз ,чожно, IIрОl'раммисты отстали от !'рафика так сильно, что ваше отставание не имеет значения, Внрочем, IlOследнее соображение не может служить оправданием, и вот 1I0чему, . Если вы работаете слишком медленно, то находите ошибки IlOзднее, чем это было бы сдслано IJ соответствии с IIЛаном, Так что давно наlIисанная часть HpOI'paM\lbI оказывается не l'oToBa в срок IIОТОМУ, что вы не нашли в ней ошибки вовремя, . Пытаясь наверстать УlIушенное, вы начинаете работать быстрее, составляемые oPIeTbI становятся скомканными инеразборчивыми, 110 ним труднее ВОСlIрОИ3ВОДИТЬ ошибки, а в результате обшая работа заТЯI'ивается еше больше и ее качество страдает, . Ошибки MOI'YT оставаться в IIpOrpaMMe IIОТОМУ, что отчеты о них IIЛОХО составлены, В этом случае между документированием ошиб ки и ее ИСllравлением может IIОЛУЧИТЬСЯ большая задержка, вызван ная тем, что руководитель IIроекта не сразу IIОНЯЛ серьезносп, пробле,\IЫ, И это це:IИКОМ ваша вина, 
412 Часть 1/1: Управле//ие проектаAtи и сруппаAtи Итак, ошибки в проrрамме должны выявляться и документироваться вовремя, и их описания в отчетах должны быть четкими и понятными, Только В этом случае руководитель rpуппы тестирования может утверждать, что в задержке выпуска продукта нет ero вины, Сторонние бетатестировщики О реакuии пользователей на продукт желательно узнать до ero выпус ка в продажу, Однако получить необходимую информаuию не так просто, Нередко бетатестирование не дает ожидаемых результатов изза TOro, что ero uели плохо продуманы, а весь проuесс плохо орrанизован, Какой, например, смысл, в проведении тестов, на результаты которых компания не успеет адекватно отреаrировать? Составляя задания для бетатестиров шиков, подумайте, какова uель каждоrо теста и почему erO не MorYT про вести сотрудники компании, Подумайте и о том, как узнать, что запланированные тесты действительно проведены, и в полном объеме, Одной из причин сложностей в орrанизаuии бетатестирования является большое разнообразие возможных uелей этой работы (рис, 13,5), 1, Получение консультаuии экспертов 2, Блаrожелательные отзывы в прессе 3, Выяснение Toro, как будет использоваться продукт 4, Доработка дизайна 5, Поиск ошибок 6, Ана.;IИЗ производительности и проверка совместимости с определенными видами оборудования 7, Подrотовка предложений для следуюшеrо выпуска РИСУНОК 13.5. CeAtb целей бетатестирова//ия в//е коAtпш/Uи . Получеиие консультации экспертов, В первый раз разработчики выясняют мнение экспертов еше на этапе проектирования продук та" Речь тоща идет о ero будуших возможностях и структуре, обсуж даемых, возможно, на примере уже созданноrо прототипа, Во мноrих компаниях бытует убеждение, что никто посторонний не должен видеть продукт до самых последних этапов ero разработки, К мнению экспертов обрашаются после завершения бетаверсии, однако от таких консультаuий ма.;1O толку, поскольку продукт прак ТИ'lески [отов и вносить в Hero серьезные изменения уже поздно, 
[лава 13: Обьедu//яющая 413 Если вас интересует мнение экспертов, выясните ei!O как можно раньше. . Обзоры в nрессе. Нскоторыс профсссиона.аьныс обозрсватсли чув ствуют ссбя польщснными, ссли в продукты вносятся прсдложснныс ими измснсния, Таким продуктам rарантированы их блаrожслатсль ныс отзывы, Разумсстся, нс всс обозрсватсли rорят жсланисм уча ствовать в разработкс продукта, Мноrис просто знакомятся с ним, нс высказывая собствснных прсдложсний, Сотрудники rруппы Map кстинrа должны знать характср каЖдоrо из обозрсватслсй и роль их изданий в формировании мнсния потрсбитсля, чтобы рсщить, кому из них нсобходимо отправить продукт пораньщс, чтобы успсть по лучить отзыв И внссти нсобходимыс измснсния, а кому достаточно отправить проrрамму псрсд самым выпуском, . Всевозможные конкурсы и рейтинzu. Нскоторыс издания и орrани заuии объявляют конкурсы на лучщий продукт опрсдслснной KaTC rории, Участис в них можст стать важной составляющсй рскламы продукта, Сотрудники rруппы маркстинrа отправляют продукт таким орrанизаuиям либо зарансс, чтобы получить их отзывы и внссти нсобходимыс измснсния, либо нсзадолrо до выпуска, ссли их pCKO мсндаuии нс важны, . Выяснение mOi!O, как будет использоваться продукт, и доработка дизайна, Нсзадолrо до выпуска продукта имсст смысл дать cro пользоватслям и !lОСМОтрСп" как они будут cro эксплуатировать, Это поможст болсс успсщно прсдетавить продукт в рскламс, Кромс Toro, нскоторыс важныс замсчания ПОМОI)'Т сrладить нсровности дизайна, внссти полсзныс усовсрщснствования, Чтобы это ста.;1O возможным, продукт должсн пробыть в руках пользоватслсй нс мсньщс мссяuа, и сщс мссяu или болсс нсобходимо зарсзсрвировать для послсдую щих исправлсний, В общсй сложности бстатсстированис должно начаться как мини мум за дссять нсдсль до выпуска продукта, Только тоща удастся выполнить самую типичную задачу этоrо этапа  выяснить как будст использоваться продукт и каковы cro наиболсс ссрьсзныс нсдостатки, . Поиск ошибок. Бстатсстированис вовсс нсобязатсльно должно про изводиться внс компании, KorAa вы понятия нс имсстс, 'по на ca мом дслс дслают с проrраммой тсстировщики, выполняют ли они ващи поручсния, и ссли да, то в каком объсмс, Попробуйтс убсдить руководство поступить иначс и нанять прсдставитслсй ПрСДПОJI<II'а 
414 Часть 111: Управле//ие проектаAtи и сруппал1U elOro рынка, чтобы они выполнили необходимое тестирование в стенах компании и под вашим надзором, Это даст вам uелый ряд преимушеств, Прежде Bcero, поскольку этим людям будут платить, они отработают все положенное время, Проrрамма при этом не выйдет из стен компании, что снизит риск ее нелеrХlьноrо распро странения, Вы сможете наблюдать за работой пользователей, а зна ЧИ1, rораздо лучше быть в курсе всех возникаюших проблем и Toro, как эти проблемы решаются, Получ ив отчет от сторонних бетате стировшиков, нередко приходится тратить MHoro времени на попыт ки воспроизвести описанную в нем ситуаuию, а если это не удается  ПОДОJl\)' выяснять ПО телефону, что к чему, Если же все происхо дит у вас на rлазах, подобных потерь времени нет, Бывает также, что некоторые моменты в проrрамме смущают пользователя или оказы ваются ему непонятными, О таких моментах ДХlеко не все пользо ватели рассказывают в отчетах, но леrко поделятся своими затруднениями, если вы рядом, . Анализ производительности и проверка совместимости с KOHKpeт ным оборудованием. Привели в лабораторию все возможные виды принтеров, модемов, компьютеров, мышей, звуковых и видеоплат и Т,П" пусть даже на время, просто невозможно, Тем не менее, про [рамма должна работать с orpOMHbIM количеством устройств, Луч шим, а иноrда и единственным решением проблемы может стать отправка проrраммы владельuам интересующеrо вас оборудования, Все это требует тщательной орrанизаuии, . Прежде Bcero напишите для бетатестировщиков обстоятельный план работ. Он должен быть простым, понятным, кратким, леr ко выполнимым, По возможности все результаты работы тести ровщиков должны распечатываться или сохраняться в файлах, чтобы вам не приходилось воспроизводить происходящее по их словесным описаниям, . Позвоните каждому из тестировщиков, чтобы убедиться в полу чеllИИ всех отправленных материалов. . Через неделю позвоните тестировщикам еще раз и спросите, как продвиrается работа, Помните, что не они, а вы заинтересованы в своевременном выходе продукта, а потому должны сделать все от вас зависящее, чтобы вовремя узнать о результатах тестирова ния, . Тестировщиков должно быть больше Ilеобходимоrо минимума  по два на каждый тип оборудования или каждый тип тестов, В результате такой предусмотрительности удваивается количество О1сылаемых материхюв и телефонных звонков, но зато rаранти 
[лава 1 з: Объеди//яющая 415 руется своевременность получения результатов, (Конечно, тести ровщикам rоворить о том, что вы подстрахова.;IИСЬ, не следует,) . тщателыlo сплаllируйте время и дрyrие ресурсы, необходимые для поддержки бетатестировщиков, Примите во внимание поиск людей, подписание соrлашений о нераспространении информа uии, настройку или модификаuию проrраммы, написание плана тестирования, подrотовку копий продукта, конвертов, телефон ные переrоворы, ответы на вопросы тестировщиков и их жа.;юбы, получение и анализ рсзультатов их работы, Если сложить все это вместе, получится шестьвосемь часов на каждоrо тестировщика, и это при условии, что и тесты, и продукт будут достаточно про стыми, При их усложнении время, которое придется затратить на поддержку тестировщиков. пропорuиона.;IЬНО увеЛИ'lИвается, Замораживание пользовательскоrо интерфейса Раньше или позже в разработке наступает момент, коrда все да.;lьней шие изменения пользовательскоrо интерфейса, т,е, праКТИ'lески любые видимые изменения проrраммы запрещаются, Любому видимому исправ лен ию, даже если оно явно лучше, с этоrо момента преДlIочитают невиди мое, Разумеется, MOI)'T быть и исключения из этоrо правила, но только в самых крайних случаях, коrда найдена катастрофическая ошибка и ее никак нельзя исправить, не затронув интерфейса проrраммы, В некоторых компаниях пользоватсльский интерфсйс "замораживается" одновременно с проrраммным кодом перед самым выпуском проrраммы в производство, Если интерфейс иrрает в проrрамме ключевую роль, как, например, в иrрах, [де ero привлекательность значительно важнее скрупу лезной точности руководства, такая стратеrия вполне оправдана, В друrих компаниях, напротив, интерфейс "замораживается" рано, за долrо до rотовности бетаверсии, Это значительно увеличивает возможно сти автоматизаuии тестирования и облеrчает работу техничеСЮIХ писателей, однако не позволяет усовершенствовать дизайн проrраммы по результатам бетатестирования , В следующих разделах предполаrается, что пользовательский интерфейс "замораживается" спустя несколько недель после завершения бетаверсии и за несколько недель до rотовности окончательноrо варианта продукта, Проrраммирование после "замораживания" пользовательскоrо интерфейса Проrраммисты продолжают исправлять ошибки, но делают это так, чтобы внешне ничеrо не менялось, Они работают над повышением ПрОll3 
416 Часть 111: Управле//ие проекта!',ш и сруппаЛlll водительности ПрOl'раммы, разрабатывают образuы файлов данных, пишут установочное ПрОl'раммное обеспечение, Зная, что проrрамма установки разрабатывается или, по крайней мере, дорабатывается в последнюю оче редь, авторы документаuии обычно откладывают описание проuесса YCTa новки проrраммы, Если предполаrается распространять демонстраuионную версию продукта, то ее разработка обычно также начинается после "замо раживания" пользовательскоrо интерфейса, Маркетинrовая деятельность после "замораживания" пользовательскоrо интерфейса Поскольку дизайн продукта "заморожсн", обозреватели периодических изданий больше не MOI)'T требовать ero изменений, rруппа маркетинrа приступает к массированной подrотовке рынка, работая над тем, как эф фектнее представить продукт будущим пользовате;IЯМ, Ее сотрудники [OTO вятся к рассылке демонстраuионной версии продукта, дорабатывают наклейки, этикетки и прочие rрафические и текстовые матеРИХIЫ, чтобы то, что написано и нарисовано на коробке, ПОЛIIОСТЬЮ соответствовало ее содержимому и реклама продукта была достоверной, На этот этап приходится пик активности rруппы маркетинrа, но боль шая часть ее деятельности никак не касается тестирования, Впрочем, если продукт выйдет позже занланированноrо срока, вся маркетинrовая работа окажется проделанной впустую  пользователи забудут об анонсированном продукте, и всю рекламную деятельность ПРИдется начинать сначх:а, Документирование после "замораживания" пользовательскоrо интерфейса с этоrо момента может быть "заморожен" и текст справочной системы, хотя чаще это делается несколькими днями или неделями позже, В HeKO торых компаниях используется прямо противоположная стратеrия, коrда основная часть текста справочной системы пишется после "заморажива ния" пользовательскоrо интерфейса, Это наилучшее время для снятия копий экранов и последней провер ки точности руководства, Вслед за этим руководство верстается и отправ ляется в печать, Одни компании придерживают руководство до тех пор, пока не будет [отов окончательный вариант проrраммы, в друrих rотовится первая печатная копия, которая еще раз редактируется перед начхlOМ фИНХlьноrо тестирования, Тестирование после "замораживания" пользовательскоrо интерфейса Заранее запланируйте время для проверки точности руководства пользо вателя, Если вы прорабатывали ero достаточно тщательно, на этот раз 
[лава 1 з: Объеди//яющая 417 довольно беrлоrо просмотра, Задержитесь только на подробных описани ях проuедур или последовательностей событий, пошаrовых инструкuиях и копиях И описаниях экранов, На проверку каждых десяти страниц долж но уходить примерно около часа, К этому времени каждая область проrpаммы уже тшательно вами иссле дована, Оставшееся время, скорее Bcero, будет затрачено на реrрессионное тестирование, Следуйте своему плану, Пора пересмотреть сложившийся список реrpессионных тестов, особен но для тех областей проrраммы, которые зарекомеНДОВХIИ себя лучше Bcero, . Если пара тестов похожа, слабейший из них можно удалить. Мож но ero заархивировать, но попадаться вам на rлаза он больше не должен, . Проверьте, нет ли в наборе неэффективных тестов. Если проrpам ма постоянно проходит определенные тесты, заархивируйте их и УДХlите из реrрессионноrо набора, Некоторые из таких тестов мож но оставить, но выполнять не на каждом uикле тестирования, Скорее Bcero, вы продолжите тестирование некоторых внешних YCT ройств, даже если проrрамма будет уже работать с ними вполне KoppeKT но, А вот поиск недостатков дизайна после ero "замораживания" прекраща ется, Важнее убедиться, что не остхюсь никаких серьезных ФУНКUИОНХIЬ ных ошибок, Продолжайте добавлять в план важные или интересные тесты, Что касается OCTXlbHbIX, то не стоит тратить MHoro времени на их ДOKYMeH тирование  просто выполняйте их и все, Пользуясь теперь уже фундамеНТХIЬНЫМИ знаниями о проrрамме, по ищите пути разрушения данных, Изменяйте их чутьчуть и Очень сильно, меняйте сами данные и их формат по отдельности и вместе, Отслеживай те изменения содержимоrо и объема памяти проrpаммы в поисках возмож ных предпосылок будущих проблем, Просмотрите открытые отчеты об ошибках, Почему эти ошибки до сих пор не исправлены? . Еще раз протестируйте пpozpaммy по всем открытым отчетам. Может быть, какието из описанных в них ошибок на самом деле уже исправлены, Однако то, что проблему не удается воспроизвес ти, еще не значит, что это так, Проверьте, воспроизводится ли ошибка в той версии проrраммы, по которой составлялся отчет, Затем спросите у руководителя проекта, действительно ли ошибка исправлена, . Попробуйте упростить оставшиеся отчеты. 14 ,," 
418 Часть 111: Управле//ие проектаAtи и сруппаAtи . в ответ на иторирование ошибок действуйте эффективно. В KOH ие проекта может наметиться тенденuия к массовому исчезновению, откладыванию и забыванию отчетов, они МOI)'Т попадать к проrрам мистам с большими задержками, Сознательно или несознательно вся команда, включая и руководителя проекта, может стремиться изба виться от составляемых вами отчетов, вместо Toro чтобы активнее исправлять описанные в них ошибки, Пусть это послужит вам сиr НХЮМ, что люди УСТХIИ И деМОРХlизованы бесконечными задержка ми и проблемами, Постарайтесь в такой ситуаuии действовать профессионально, В обстановке, коrда общее напряжение достиrло предела, эмоuии и открытое выражение недовольства только навредят делу, Вашим оружием в этой битве может стать система отслеживания проблем, Еженедельно составляйте отчеты об отложенных и Hepe шенных вопросах и направляйте их не только младшему, но и cpek нему и высшему руководству, Если вашим непосредственным руководителям это не понравится, настаивайте на том, что такое широкое распространение отчетов в конце разработки является CTaH дартной проuедурой, Постоянное напоминание о недоделанной pa боте заставит сотрудников понять, что, пряча rолову в песок, ошибок не исправить, Если эта тактика не сработает, напишите докладную записку и спро сите у руководителя, как вам быть, Удачи! Подrотовка к финальному тестированию На этом этапе доделывается все, что еще не [отово, в частности, дopa батываются файлыI данных и установочные утилиты, К ero наЧХIУ не дол жно остаться ни одноrо OTKpbIToro отчета о проблеме, Иноrда в начале этоrо же этапа "замораживается" пользовательский интерфейс, Тестирование проrраммы, однако, продолжается, и вполне возможно обнаружение еще нескольких серьезных ошибок, После их исправления, коrда больше ничеrо серьезноrо найти не удается, начинается этап после дней проверки uелостности, Проrраммирование на этапе подrотовки к финальному тестированию ПрОI'ра\lfиеты исправляют только те ошибки, о которых распорядится руководитсль проекта, OCTXlbHbIe остаются неисправленными, даже если исправить их совсем несложно, Руководитель проекта откладывает эту 
[лава IJ: Объеди//яющая 419 работу до следующеrо выпуска проrраммы, поскольку слишком велик риск, 'ПО исправление одной ошибки повлечет за собой друrие, которые OCTaHYT ся незамеченными, Документирование на этапе подrотовки к финальному тестированию Технические писатели rотовят сопутствующие матеРИХIЫ, проспекты, тексты файлов, Все это вам необходимо будет проверить, Значительная часть информаuии приложений будет исходить от вас, Прежде Bcero, это сведения о самых последних изменениях продукта, BHe сенных уже после Toro, как руководство пользователя ушло в печать, Tex ническим писателям важны изменения дизайна продукта (измененные диалоrовые окна, меню, команды), новые предупреждения и сообщения об ошибках и изменения возможностей проrpаммы (например, маКСИМХlьное количество одновременно обрабатываемых объектов), Тестирование на этапе подrотовки финальной версии Для тестировщиков этап подrотовки к выпуску фИНХIЬНОЙ версии яв ляется особенно важным, Если в проrрамме ОСТХIИСЬ настолько серьезные ошибки, что ее нельзя выпускать в производство, это ваш последний шанс их найти. [лавными направлениями работы сейчас являются следующие, . Продолжайте поиск серьезных проблем, Если в течение определен Horo времени ни одной такой проблемы найти не удастся, это будет означать, что работа окончена, ДХlьше будет выполнена последняя проверка uелостности продукта, после чеrо он уйдет в производство. На этом этапе на первый план снова выходит стратеrия поиска ошибок под руководством интуиuии И опыта, а не формальноrо плана, Проверьте все наиболее слабые точки проrpаммы, выполняй те любые тесты, которые кажутся вам наиболее обещающими, . Убедитесь, что при последних исправлениях ошибок ничеzо не Hapy шилось. Коrда вы получаете по три новых версии в день, а на BЫ полнение TecToBoro плана требуется две человеконедели, эта задача оказывается не из леrких, В этом случае наиболее эффективна сле дующая технолоrия, Получив очередную версию проrраммы, преж де Bcero IIроверьте, как работает последний исправленный фраrмент и ничеrо ли не нарушено BOKpyr Hero, Затем перейдите к общему Te стированию по плану, продолжив ero с Toro места, на котором вы остановились, получив данную версию, Выполнив таким образом весь план и меняя версии проrраммы по ero ходу, начинайте новый uикл, 
420 Часть /II: Управле//ие проектаAtи и сруппаAtИ . Поиск упущеННО20. Возможно, что, еще раз проверив всю ДOKYMeH таuию, вы найдете несколько невыполненных тестов, не до конца протестированных устройств и друrие неоконченные или вообще забытые задачи, По окончании данноrо этапа ни один критический тест не должен остаться невыполненным, На бумаrе все выrлядит просто, но на деле это самый напряженный и изнурительный из всех этапов проекта, Скорее Bcero, вы найдете несколько достаточно серьезных ощибок, которые придется исправить, После каждоrо исправления вам будет немедленно передаваться новая версия проrраммы, Это может происходить каждый день или даже дважды либо трижды в день, И тестировать ее необходимо будет немедленно, Иноrда случается, что руководитель проекта забывает сказать вам об изменениях, внесенных в самую последнюю минуту, Поэтому после полу чения каждой новой версии лучще Bcero сравнивать все ее файлы с их предыдущими вариантами, Заметив отличие, не связанное с тем изменени ем, о котором вам сообщили, спросите у руководителя проекта, что оно означает, Проведите еще один uикл тестирования устройств, Убедитесь, что каж дое из них проверено во всех возможных режимах, Проrоните еще раз архивные тесты  проrрамма их почти наверняка пройдет, но убедиться в этом еще раз все же не помещает, Проверьте, как ведет себя каждая исправленная часть проrраммы, OKOH чательно ли покончено с найденными ощибками, В последний раз раздайте сотрудникам список отложенных проблем, Поскольку все их команда разработки уже рассмаТРИВХlа на последнем совещании, это чистая проформа, Однако руководство все же должно Ha последок еще раз оценить качество выпускаемоrо продукта, Оценка надежности продукта После окончания последнеrо этапа тестирования продукта он либо отправляется в производство и затем в продажу, либо передается в руки тех, кому предстоит выполнить ero приемочное тестирование, Перед тем как продукт покинет стены компании, тестировщиков попро сят дать оценку качества проrраммы, rOToBa ли она к выпуску? PYKOBOД ство компании вполне может проиrнорировать ваше мнение на этот счет и поступить посвоему, однако узнать ero захочет наверняка, У качества продукта множество составляющих, включая интерфейс, фУНКЦИОНХlьные возможности, полезность и надежность, Однако PYKOBOД ство, скорее Bcero, мХIO интересует, что вы думаете о дизайне проrpаммы, ему важно ваше мнение о ее надежности, Поэтому заранее подrотовьтесь высказать свою оценку именнО этой составляющей качества, возможно, лишь с некоторыми комментариями по поводу дизайна, 
[лава 1 з: Объединяющая 421 Высокая надежность продукта означает, что пользователи едва ли най дут в нем ошибки, Если же такая вероятность достаточно велика и особен но ссли в проuессе эксплуатации MOI)'T проявиться достаточно серьезные ошибки, надежность продукта считается низкой, Обычно большинство py ководителей устраивает следуюшая система оuенки, . Низкая надежность. В продукте имеются серьезные ошибки, KOTO рые пользователь, скорее Bcero, обнаружит, Все это известные офи UИХIЬНО отложенные проблемы, . СредllЯЯ надежность. Посредине между высокой и низкой, . Высокая надежность. Продукт хорошо протестирован, и больше ни одной серьезной проблемы в нем найти не удается, Возможно, Ka кието проблемы и ОСТХIИСЬ не замеченными тестировшиками, но и пользователи едва ли их заметят, . Степень надежности неизвестllа. Проrрамма не была адекватно протестирована, или тестировшики сдеЛХIИ все от них зависящее, ничеrо ужасноrо не нашли, но уверены, что некоторые серьезные проблсмы ешс ОСТХIИСЬ, В этом случае необходимо объяснить, на чем основаны ваши подозрения, и предложить четкий план ВЫЯВJlе ния [Iредполаraемых проблем, Этим планом может предусматривать ся помошь сторонних консультантов или аренда необходимоrо alJlJapaTHOro обеспечения, причем и то, и друrое должно выполнять ся очень быстро, Минимальная надежность Ни одна компания не выпустит продукт, не соответствуюший ее мини MXlbHbIM стандартам качества, Вам эти стандарты MOI)'T быть неизвестны, поскольку едва ли они докумеНТХIЬНО зафиксированы, Однако в обшем случае как минимум требуется следуюшее, . Все 2раниЧные значения входных данных протестированы. Если проrрамма oTBepraeT определенные значения, она должна делать это коррсктно, . Последuяя версия руководства тщательно проверена. Она правиль но описывает поведение проrраммы, Тестировшики выполняли все упомянутые в ней команды, выбирали все возможные значения опuий, выполняли все описанные последовательности действий и отвеЧХIИ на все задаваемые проrраммой вопросы всеми возможны ми способами, Все это работает, по крайней мере, если речь не идет о какихлибо совершенно неожиданных комбинаuиях, . Протестированы все основllые аппаратllопРOi!раммные конфи2ура ции. Проrрамма работаст как минимум с наиболее распростраllrlllll.1 
422 Часть III: Управлеllие проекталlU и сруппалш ми типами аппаратуры и системноrо проrраммноrо обеспечения из тех, с которыми она должна быть совместима, . Редактирование параметров команд, nовторе1lие действий и любые их последовательности не должны выводить nрО2ра.мму из paвHoвe сия. . Система устойчива к любым ошибкам, которые может допускать пользователь. На самом деле стандарты компании должны быть rораздо выше, и так оно, скорее Bcero, и есть, Попробуйте составить свой собственный список, дополняя вышепере'lисленные критерии теми, о которых вам удастся уз нать, Этот список может стать вашей опорой в обосновании ненадежнос ти выпускаемой проrраммы, если такая необходимость возникнет, Если проrрамма не соответствует какомулибо из перечисленных критериев, степень ее надежности считается неизвестной. Сообщив об этом PYKOBOД ству, вполне можно получить дополнительное время для тестирования ее ненадежной области, Нередко на рынке появляются продукты, явно не соответствующие даже базовым критериям надежности, На нащ взrляд, в этом полностью вино ваты тестировщики, Если бы они вовремя поставили руководство в изве стность о ненадежности определенной области проrраммы, проблема вполне моrла БыI быть решена, Оценка надежности каждой составляющей продукта Надежность каждой области или составляющей проrраммноrо продук та имеет смысл оuенивать отдельно, Насколько вероятен сбой? Чтобы OT ветить на этот вопрос, необходимо знать уровень тестирования каждой из областей и то, как проrрамма проходила выполняемые тесты, Можно даже реrулярно публиковать отчеты о состоянии продукта с перечнем всех ero функuиона.;IЬНЫХ областей и классов выявленных проблем и с оuенками надежности каждой области, Если оценка надежности определенной области проrраммы оказывает ся низкой, перечислите в отчете все проблемы, на которых основано такое заключение, Если, на ваш взrляд, uелый ряд проблем еще только предстоит выявить, напишите и об этом, Укажите, сколько примерно времени пона добится для Toro, чтобы подтвердить или опроверl'НУТЬ ваши предположе ния, Будьте [отовы объяснить, как вы собираетесь это сделать, Если определенная область проrраммы не протестирована как следует, степень ее надежности неизвестна, Однако одной констатаuии этоrо фак та ма.;lO, Укажитс в отчете, сколько времени потребуется на проведение неформа.;lьноrо тестирования, позволяющеrо хотя бы приблизительно oиe 
Fлава /З: Обоеди//яющая 423 нить надежность данной области, Приведите примеры возможных ошибок, В случае затруднений обратитесь к приложению этой книrи, Опишите наиболее серьезные проблемы, которые не моrли быть выявлены уже про веденными тестами, Вы не можете утверждать, что в проrрамме имеются конкретные ошибки, Однако если вы пока не увере//ы в их отсутствии, об этом необходимо сказать, Окончательное решение Последнее слово Bcerдa остается за руководством, Оuенивать степень риска и вероятность успсха  это ero работа, В одних случаях принимается решение немедленно выпустить несколько несовершенный продукт, в дpy rих же  решение выпустить ero в следуюшем [оду, но зато уж абсолют но безупречным, Факторов, влияющих на принятие Toro или иноrо решения, может быть очснь MHoro, и прежде Bcero для этоrо необходимо rлубокое знание рынка и четкое видение собственной позиuии и uелей компании, которое имеется только у ее руководства, Работа руководитсля rруппы тестирования заключается в друrом  rарантировать правильное понимание руководством степени риска, Во что обойдется этот риск компании, руководство знает и так, как и то, что поставлено на карту, Руководству известно, во что обходИ1СЯ каждая неделя задержки, Ему известна стоимоСТь проводимых работ, От вас ему важно узнать о степени вероятности серьезных сбоев проrраIМЫ, которые MOI)'T повлиять на ее популярность или иметь друrие неприятные для компании последствия, Таким образом, ваша обязанность заключается в том, чтобы предостав лять людям, принимающим решения, всю необходимую для этоrо инфор маuию, касающуюся вашей работы, Информаuия о качестве продукта должна поступать им вовремя, в понятной и простой форме, не оставляю щей возможности для домыслов и недопонимания, Еще раз: и окончатсльное решение о выпуске продукта, и стандарты ero качества принимаются не вами, а руководством компании, KaKoro бы мнения вы ни были об этих стандартах, ваша задача выполнить свою pa боту настолько хорошо, насколько это возможно, И если вы будете следо вать описанной в данной rлаве стратеrии, это у вас получится, Последняя проверка целостности Итак, продукт [отов, Ему осталось только пройти последний uикл Te стирования, после чеrо будут записаны и отправлены на размноженис образuы установочных дисков, 
424 Часть 111: Управле//ие проектаAtи и сруппал1U Проrраммирование на этапе про верки целостности Задача проrраммистов попрежнему остается неизменной  они ис правляют ошибки, выявленные на этой последней стадии проекта, Возмож но, дорабатывается также демоверсия проrраммы, Затем вся работа архивируется, делаются последние записи, все [IРИВОДИТСЯ в порядок, Тестирование на этапе проверки целостности Мноrие компании к началу этоrо этапа прекрашают тестирование про [раммы, Фактически это просто означает, что описанная в этом разделе работа выполняется на предыдушем этапе, В друrих компаниях определяется отдельный этап последнеrо тестиро вания продукта перед выпуском ero в производство, Такое тестирование часто называют проверкой uелостности, Иноrда проверку uелостности выполняет rpуппа маркетинrа или друrая rpуппа тестирования, Вот ее uели, . Оценить надежность проzраммы в первый день ее использования. Для этоrо с продуктом работают так, как это будет делать сам пользователь в первый день ero эксплуатаuии, Особое внимание yдe ляется руководству пользователя и друrим учебным пособиям, Tec тировшики пытаются представить себе проблемы, с которыми может столкнуться большинство новых владельuев проrраммЫ, . Предупредить неzативные оценки обозревателей. Это последний шанс чтото исправить до Toro, как обозреватели наткнутся на oc тавшиеся оrрехи, Последняя проверка uелостности предполаrает базовое, а не наrрузоч ное тестирование, Тестировшик делает то, что будет делать типичный по купатель или обозреватель, знакомясь с новым ПрОДУК10М, Он не пытается вывести ero из строя, а просто изучает, как он работает, Однако если про верка uелостности выполняется KeMTO друrим, подrотовьте для этоrо че ловека все тестовые материалы. включая план тестирования, отчеты о проблемах, файлы данных, распечатки результатов и Т,П, Возможно, В ero задачи будет входИ1Ь независимая оценка вашей работы, Он может пользо ваться спискоМ вероятных ошибок, аналоrичным приведенному в конце этой книrи, В этом случае он будет по очереди выбирать ошибки из этоrо списка и выяснять, моrли ли они быть выявлены [Iроведенныии тестами, После завершения проверки uелостности начинается подrотовка YCTa новочных дисков, Для этоrо берутся новые никоrда не бывшие в исполь зовании диски, форматируются и проверяются на вирусы и сбойные сеК10рЫ, Проверяется объем свободноrо пространства на каждом диске, За тем на диски копируются установочные файлы, Результируюшие файлы сверяют с исходными, чтобы убедиться, что копирование прошло полно стью успешно, Зате,\I диски снова проверяются на вирусы, 
[лава IЗ: Объеди//яющая 425 После подrотовки образuов дисков проrрамма устанавливается с них на компьютер, Эта проuедура rарантирует, что установочная утилита работа ет правильно и все необходимые ей файлы успешно найдены, (Особенно это важно в случае. если какието из файлов не поместились на один диск и в последнюю минуту были перенесены на друrой,) Кроме этой основной работы, в ходе выпуска продукта выполняется следую шее: . Архиваuия образuов установочных дисков, . Архиваuия исходноrо кода, . Распространение среди заинтересованных сотрудников последних дополнений списка отложенных проблем и сбор подписей на необ ходимых для выпуска документах, . Обычно массовое производство установочных дисков начинается с Toro, что выпускаются их первые несколько наборов и возврашаются вместе с образuами назад для тестирования, Получив эти первые несколько наборов дисков, прежде Bcero сравните их с образuами, а затем установите проrрамму на компьютер с одноrо из них, CKO пируйте все файлы с одноrо из наборов дисков на друrие диски, чтобы убедиться в отсутствии ошибок ввода/вывода, и еше раз про верьте их на вирусы, Выпуск Убедившись, что дупликатор правильно копирует диски, можно начи нать их массовое производство, [отовые диски упаковываются вместе с друrими материалами в коробки и запечатываются, Если у вас остались хоть какието сомнения, продолжайте тестирование! Продукт попадет в руки пользователей не завтра, а значит, у вас есть еще время, возможно, несколько дней или недель, Если за это время будут найдены катастрофические ошибки, можно будет даже остановить произ водство, Конечно, это дороrо обойдется компании, но выпуск некачествен Horo продукта может обойтись значительно дороже, Друrим выходом из ситуаuии может быть немедленный выпуск новой исправленной версии продукта, Пользователи купят продукт как есть, а вскоре получат ero исправления, Автоматизаuия тестирования на этом этапе полностью прекращается, Исключение MoryT составлять лишь тесты, которые просто нельзя выпол ни1Ь вручную, На этапе выпуска продукта все ваше внимание должно быть сосредоточено только на выполнении тестов  ни планирования, ни ДOKY ментирован ия, Еше одной вашей важной задачей на данном этапе является подrотов ка к тестированию следуюшеrо выпуска, ПРИдется ли этим заниматься нам 
426 Часть III: Управле//ие проектаAtи и сруппаAtи ИЛИ KOMYTO друrому, эта работа может, а значит, и должна быть очень хорошо подrотовлена, У вас сейчас максимум знаний о продукте, макси мум опыта, вы помните каждую деталь, Коrда придет время следующеrо выпуска, MHoroe ужс позабудется, тем более, что это может быть не CKO ро и В промежутке вы будете заняты на друrом проекте, Наведите порядок в документаuии, Напишите заметки и рекомендаuии для спеuиалиста, который будет работать после вас, Распечатайте списки имеющихся тестовых материалов, снабдив самые важные записи подробны ми комментариями, Ваша uель  максимально облеrчИ1Ь тестирование сле дующеrо выпуска продукта, После выпуска Во мноrих компаниях по окончании работ проводится их заключитель ный анализ, Вас MOI)'T попросить подrотовить отчет обо всем, что проис ходило в ходе работы над проектом: что прощло удачно, что нуждается в доработке или усовершенствовании, каковы были самые серьезные пробле мы и какие важные работы так и не были выполнены, Этот отчет может быть подан в письменном виде или прочитан на ближайшем совещании, Для вас как для руководителя rруппы тестирования заключительный отчет о проведенной работе является важным политическим документом, Будучи правильно составлен, он принесет вам большую пользу, а в против ном случае может нанести большой вред, Поэтому, несмотря на крайнюю усталость, подrотовьте ero очень тщательно, Следующие несколько советов помоryт вам выбрать правильный подход, . Отчет должен быть конструктивным, rлавным образом пишите о том, что можно улучшить, а не о том, что было сделано плохо, . Сделайте особый акцент на достижениях и успехах, Выделите луч шие идеи, расскажите, кто и чем помоr облеrчить вашу работу, . Не делайте вид, что проблем не существует вовсе, Если проrpам мист, исправляя одно, постоянно портил друrое, не стоит утверж дать, что исправление ошибок проходило прекрасно и он хорошо делал свою работу, Можно вообще об этом не упоминать или опи сать проблему в мяrкой безличностной форме, но не стоит отриuать ее существование и ВВОДИ1ь в заблуждение слушатслей или tlИтате лей отчета, Если человек работал плохо или не выполнял своих обя занностей, утверждать, что все хорошо, было бы неразумно, . Избеrайте жалоб, Не указывайте ни на Koro пальuем, Не извиняй тесь и не оправдывайтесь, Не становитесь в позиuию защиты, . НИКОlДа не I'оворите и не намекайте, что KTOTO должен быть YBO лен, 
[лава IЗ: Объеди//яющая 427 . Не критикуйте дизайн и не вспоминайте о старых ошибках, . rОВОрИ1е о проблемах в форме констатаuии, в нейтральной безэмо uиональной манере, . Если вы считаете выпушенный продукт плохим, хорошо подумайте, прежде чем сказать об этом именно сейчас, Не забывайте, что Tec тировшик сознательно настраивается на поиск недостатков, это обязательная психолоrическая составляюшая ero работы, Тестиров шик должен считать продукт плохим, желать ero сбоев, Поэтому ваша оценка может быть необъективной, и вполне вероятно, что KaKoeTO время спустя она изменится, Однако, даже если продукт и в самом деле халтурный, заявлять об этом вовсе не обязательно, Если вы хорошо сделали свою работу, руководству и так об этом известно, Это вопрос ero политики и внутренних стандартов качества, Может быть, стоит просто улыб нуться и поискать друrую работу, "Хорошо подумайте" вовсе не означает "никоrда не rоворите", Если, на ваш взrляд, вопрос о стандартах качества или проuессе разработ ки может быть конструктивно решен и это пойдет компании на пользу, поднимайтс ero, . у слушателей или читателей вашеrо отчета ни в коем случае не должно сложиться мнение, что вы плохо сделали свою работу, Ca мокритика полезна, но не в данной ситуаuии, И она всеrда должна сопровождаться конструктивными решениями, . Будет замечательно, если ваш отчет сможет сначала прочитать xopo ший друr, мнению KOToporo вы доверяете, 
Fлава 14 Управление v zpyппou тестирования Назначение этой rAaBbI Поднятые в этой rлаве волросы представляют интерес rлавным образом для руководителей rpYnnbI тестирования. Однако перед вами вовсе не учебное пособие для руководящеrо персонала, Скорее, это описание нашеrо соб cTBeHHoro опыта, принципов и приемов, помоrавших нам в работе, и оши бок, которых леrко можно избежать, Наше видение роли rpYnnbI тестирования в обеспечении качества разрабаты BaeMoro компанией продукта очень отличается от общепринятоrо, Традици онно считается, что за качество целиком и полностью отвечает руководство компании, Однако, на наш взrпяд, руководителю rpYnnbI тестирования BOB се не обязательно оrраничиваться принятыми в компании стандартами каче ства, особенно если эти стандарты откровенно невысоки, Именно с позиции личной ответственности тестировщиков за качество их работы и самых BЫ соких критериев ero оценки и рассматриваются все поднимаемые в данной rлаве вопросы. Обзор r оворя о руководстве rрулпой тестирования, необходимо в первую очередь олределить ее задачи. Какую роль она иrрает в компании? Традиционно руководители rpynn тестирования стремятся осуществлять полный контроль за качеством продукта. Наши представления о собственной роли несколько скромнее  мы рассматриваем rpynny тестирования как техническую служ бу, в задачи которой входит выполнение определенных работ и предостав ление остальным участникам проекта определенной информации. 
[лава 14: Управле//ие сруппой тестирова//ия 429 Мноrие считают, что независимые тестовые лаборатории MorYT служить хорошим дополнением или даже альтернативой собственным командам тестировщиков. Хорошим дополнением они, возможно, и являются, но уж никак не альтернативой. r руппа тестирования держит под контролем все работы по тестированию всех продуктов компании, включая и работу неза висимых тестовых лабораторий. Далее в rлаве рассматривается составление календарноrо плана работ и способы оценки их производительности. Как оценить время, необходимое для полноrо тестирования продукта? Как защитить своих подчиненных от авралов, KorAa приходится либо бесплатно работать день и ночь, либо заслужить pe путацию людей, способных отказаться помочь компании в самый трудный момент? Последняя часть rлавы посвящена подбору персонала, Каких специалистов необходимо будет нанять? Какой должна быть их квалификация? Как в самых тяжелых ситуациях поднять моральный дух своих подчиненных? БиБАиоrрафия Если вам еще никоrда не приходилось занимать руководящие должности, почитайте книrу Друкера (Drucker, 1966), На наш взrляд, для руководителя rруплы тестирования понимание COBpeMeH ных тенденций в области работы над качеством rораздо важнее, чем даль нейшее изучение литературы по тестированию, Этой теме посвящены книrи таких авторов, как Деминr (Deming, 1982), Фейrенбаум (Feigenbaum, 1991), Ишикава (lshikawa, 1985), Джуран (Juran, 1989), Техника проведения совещаний хорошо описаНа в книrах таких авторов, как Дойл и Страус (Doyle & Straus, 1976), Фридман и Вейнберr (Freedman & Weinberg, 1982), Вам наверняка придется вести множество neperoBopoB, Нам нравится, как об этом пишут Фишер и Эри (Fisher & Ury, 1981) и Каррас (Karras, 1986), rлавной работой сотрудников rруппы тестирования является поиск и документирование ошибок, Бывает, что результаты этой работы заставля ют руководство отказаться от проекта, Случается и так, что пересматрива ется календарный план работ и выпуск продукта откладывается на меСЯI(Ы и даже [оды, Такие задержки MOryт СТОИ1ь проrраммистам и их руководи телям работы, а начинаюшей компании  независимости, Практически любой компании выrодно иметь собственную rpуппу про фессиональных тестировшиков, Преимушества, которые она получает, Ta ковы, . Компетентность. Тестировшики спеuиализируются на тестирова нии, и в этом деле они профессионалы, Они вместе обучаются, конструктивно критикуют друr друrа и знают свою работу так, как ее не знает никто друrой, 
430 Часть 111: Управление проектаAtи и сруппаAtи . Экономия времени. Korдa каждый занимается своим делом: тести ровщик  тестированиеl, проrраммист  проrраммированием, а технический писатель  составлением документаuии, тоrда их рабо чее время используется с максимальной эффективностью, Все рабо ты ведутся параллельно, и никто не отрывается от cBoero OCHoBHoro дела, Ни [IроrраIМИСТ, ни технический писатель все равно не MOryT протестировать проrрамму как следует, поскольку эта работа требует серьезной подrотовки и орrанизаuии и не может делаться от случая к случаю, Занимаясь тестированием, они бы очень непродуктивно тратили драrоuеНное время, . Независимость. Поскольку тестировщики подотчетны не руководи телю проекта, а своему собственному шефу (компетентному и дoc таточно независимому), они MorYT делать свою работу самым наилучшим образом, не заботясь о том, как будет выrлядеть PYKO водитсль проекта, коrда в проrрамме обнаружатся серьезнейшие недостатки, Руководство rруппой тестирования  это очень большая OTBeTCTBeH ность, Это бесконечные проблемы снеопытным персоналом, И очень мало славы, Психолоrическая наrрузка на руководителей тестовых rрупп так велика, что они чаще всех друrих сотрудников меняют место работы, Их политическая роль в компании крайне невыrодна  ведь они изобличают недостатки продукта, которые всеrда являются чьимито недоработками, а значит, сплошь и рядом наживают себе BparoB, Однако не все так мрачно, Можно создать прекрасную команду, KOTO рую будут uенить за оrромный вклад в повышение качества разрабатыва емых продуктов, и при этом сохранить Мирные и конструктивные отношения с друrими подразделениями компании, Можно сделать это без давления на своих подчиненных, орrанизуя их работу так, чтобы не было авралов и штурмовщины, причем добиться этоrо не за чужой счет и не жертвуя собственными моральноэтическими установками, В чем же секрет успеха, и что позволит не оступиться на таком тpyд ном пути, коrда порой приходится буквально ходить по лезвию бритвы? Честность, профессионализм и уважение к людям являются rлавным залоrом успеха руководителя rpуппы тестирования, Роль rpYnnbI тестирования Существует четыре основных типа тестовых rрупп, У каждой из них своя роль в компании и свои задачи, . Fpyппa контроля качества следит за соблюдением стандартов, . Fpyппa обеспечения качества пытается тем или иным способом [a рантировать соблюдение стандартов, 
[лава 14: Управле//ие сруппой тестирова//ия 431 . Служба тестирования ищет и документирует ошибки, . Служба поддержки разработки ВЫIюлняет ряд технических Зa.IIa'I, и в том числе тестирование, rруппа контроля качества Теоретически это очснь влиятельное подразделение, Инспектор сруппы ко//троля качества (Quality Coпtrol) южет задсржать выпуск продукта до тех пор, пока не будут соблюдены все стандарты и проuедуры и исправлены все ошибки, Какой заIaНЧИВОЙ кажется сотрудникам служб тестирования и разработки такая власть! Но ничто не дается даром, Инспектор rруппы контроля качества не просто снимает с конвейера пару бракованных банок консервов, Он останавливает всю линию, возмож но, единственную линию компании, и делает это не на lIару минут, а на несколько дней, недель или месяuев, Руководство компаllИИ реаrирует на такие события нсмедленно и может запросто отменить решение rруппы контроля качества и распорядиться выпускать продукт, каким бы ни было ero качество, Настоящей zpyппou контроля качества в любой компании является ее руководство. rруппа тсстирования помоrает руководству компании, предоставляя информаuию о текущих проблемах разработки и степени их серьезности, Однако предоставление информаuии  это одно, а принятие решений  совсем друrое, Здесь rруппа контроля качества обладает несколько более высокими полномочиями, чем обычная rруппа тестирования, поскольку может задержать выпуск продукта, не удовлетворяющеrо определенным требованиям, Однако сделать это она может только на некоторое время  пока руководство не проанализирует ситуаuию, чтобы принять окончатель ное решение, rруппа обеспечения качества [руппа обеспече//uя качества (Quality Assuraпce) делает то, чеrо //е может сделать обыкновенная I'руппа тестирования,  она обеспечивает качество продукта, Для этоro rpyrllIa обеспечения качества участвует в разработке от первоro до последнеrо дня, устанавливая стандарты, определяя проuедуры контроля и обучая людей тому, как лучше проектировать и разрабатывать проrраммные продукты, Таким образом, недостатки проrрамм не просто устраняются, а предотвращаются, rруппа обеспечения качества занимает ся также и тестированием, но это далеко не единственная ее работа, Чтобы справиться со своей задачей, rруппа обеспечения качества IЮJI' жна обладать оrромными полномочиями, а ее сотрудники  ВЫСО'lаЙlIн:ii 
432 Часть 1/1: Управле//ие проекта;ощ и сруппаAtи квалификаuией в uелом ряде профессий, Они должны быть высококласс ными проrpаммистами, техническими писателями, руководителями, проек тировщиками и аналитиками, Иначе им просто не будут доверять, В любой компании имеется rруппа, отвечающая за определение CTaH дартов, обучение персонала, управление работой и повышение ее эффек тивности,  это руководство компании, Именно оно обеспечивает качество выпускаемых продуктов, С ПОЛИ1ической точки зрения создание в компании отдельной rруппы обеспечения качества  это палка о двух концах, Ведь за качество продукта должен отвечать каждый, кто так или иначе участвует в разработке, и oco бенно руководство компании, Если же у людей появляется хоть малейшая возможность переложить эту ответственность на KoroTo друrоrо, они He медленно ею пользуются, Даже руководитель проекта может заявить: "Мое дело  вовремя ВЫПУСТИ1ь продукт, а за ero качество отвечает COOTBeTCTBY ющая rруппа", Любому, кто достаточно долrо проработал тестировщиком, наверняка не раз приходилось слышать подобные высказывания, Служба тестирования В задачи службы тестирова//ия (Testiпg Services) входит поиск ошибок и недостатков проrраммы, их описание и предоставление этой информаuии всем, кому она необходима, Решений относительно выпуска продукта py ководитель службы тестирования не принимает, он только предоставляет руководству информаuию о том, насколько продукт протестирован и KaKO во ero качество, Роль службы тестирования в разработке продукта может быть различ ной, В некоторых компаниях основными тестировщиками считаются сами проrраммисты, а служба тестирования им только помоrает, Как бы там ни было, служба тестирования отвечает за техническую сторону эТОй работы: анализ объекта тестирования, проектирование и под [отовку тестов, их выполнение и документирование, Все это требует опре деленной квалификаuии, которая имеет полное право быть предметом профессиональной rордости сотрудников службы, Ее руководитель должен поощрять это чувство, которое способствует созданию в коллективе блаrо приятноrо психолоrическоrо климата и профессиональноrо энтузиазма, Как известно, мноrим людям свойственно избеrать ответственности и по возможности перекладывать ее на друrих, Именно поэтому руководите ли проекта часто пытаются переложить ответственность за качество продук та на службу тестирования, Но это в корне неверно, Поэтому, если руководитель проекта утверждает, что проrраммисты вообще не должны тестировать написанный ими код, или хочет, чтобы вы взяли на себя OT ветственность за каждую имеющуюся в проrpамме ошибку, не поддавайтесь на провокаuию, 
[лава 14: Управлеuие сруппой тестирова//ия 433 За качество продукта отвечает руководитель nроекта. Служба тестирования только снабжает ezo технической информацией, сопровождая данные собственной интерпретацией. Все это вовсе не означает, что служба тестирования вообще ни за что не отвечает, Она отвечает за качественное тестирование, интерпретаuию ero результатов и их своевременное предоставление руководству, документиро вание своей работы, Но ни контролирующей, ни руководящей роли у нее нет, Участие службы тестирования в управлении проектом скорее KOCBeH ное, чем непосредственное, Ее сила заключается в собираемых данных и умении правильно их представить, И сила эта немалая, Переrоворами и убеждением нередко удается достичь rораздо больщеrо, чем просто OTMe ной выпуска продукта или вводом новых проuедур и стандартов, Серьезной проблемой, с которой сталкивается руководитель службы тестирования, является узость ее функций, Изза этоrо у части персонала rруппы мало возможностей для профессиона.;lьноrо роста, Тестировщики, которые хотят заниматься этой работой всеrда, такие возможности имеют: они MorYT совершенствоваться в своем деле, изучать новые технолоrии тестирования и ero автоматизаuии, новые подходы к планированию работ, новые стандарты, Но как быть с теми сотрудниками, которые стремятся сделать карьеру, чьи конечные uели лежат далеко за пределами тестирова нил? Служба поддержки разработки Конuепuия службы поддержки разработки (Deve/opiпg Services) является расширением конuепuии службы тестирования, Обе они являются служба ми, а значит, предоставляют чисто технические услуrи  это не админи стративные, не контролирующие и, как правило, аПОЛИ1ичные rpуппы, Они помоrают улучшить продукт, созданный друrими сотрудниками (проrрам мистами), используя дЛЯ ЭТОI'О профессиональные навыки, которых у про rраммистов нет, Если служба тестирования только тестирует продукт, то у службы поддержки разработки есть и друrие задачи, Ее сотрудники прини мают в разработке rораздо большее участие, а значит, имеют и больше возможностей для профессиональноrо роста, Основной задачей службы поддержки разработки остается тестирование, Но в зависимости от нужд конкретной компании MOryT выполняться сле дующие задачи, . Отладка, . Техническая поддержка пользователей, особенно в первые недели после выпуска продукта, . Редактирование копии руководства пользователя, 
434 Часть III: Управле//ие проекта;ощ И сруппаAtИ . Техническое редактирование руководства (с правом ВНОСИ1ь изменс ния, KOToporo обычные тестировщики не имеют), . Анализ эксплуатаuионных характеристик продукта, . Сравнительная оценка продукта, . Изучсние пользовательскоrо удовлетворения продуктом, Такой широкий Kpyr задач позволит большинству тестировщиков pac ширить свой профессиональный опыт и найти работу по душе, Расспросите своих подчиненных, какая деятельность им больше нравится, и COOTBeT ственно распределите дополнитсльные обязанности, Однако имейте в вИдУ, что их выполнение не должно превалировать над тестированием, которое всеrда остастся основной работой службы поддержки разработки, Рекомендации На наш взrляд, конuепuия служб rораздо более удачна, чем традиuион ные конuепuии rрупп контроля и обеспечения качества, Идея службы поддержки разработки нам очень нравится, но на деле нам еще ни разу не пришлось опробовать ее полный вариант, Что касается службы тестирова ния, то это проверенная временем и прекрасно зарекомендовавшая себя структура, Однако ее руководитель должен уделять самое пристальное внимание возможностям KapbepHoro роста своих подчиненных, иначе в rруппе будет сильная текучесть кадров, rруппа тестирования  не избавление проrраммистов Если в подразделении разработки проrраммноrо обеспечения нет rpуп пы тестирования, проrраммисты знают, что правильная работа проrраммы лежит полностью на их ответственности, Однако как только такая rруппа появляется, проrраммисты расслабляются и некоторые ошибки остаются ими незамеченными, (Собственно rоворя, ведь за это тестировщикам и платят, не так ли?) Эта ситуаuия не совсем верна, Проrраммисты обязаны тщательно Tec тировать свои проrраммы, они должны заботиться об их правильности и стабильности, Зная проrраммный код как свои пять пальuев, они находят ошибки rораздо быстрее тестировщиков, причем MorYT обнаружить такие проблемы, которые тестировщикам самостоятельно не найти, В свою оче редь, тестировщики анализируют проrрамму с иной точки зрения и видят те ее недостатки, которых не замечают проrpаммисты, Поэтому для полно ueHHoro тестирования проrраммы необходимы объединенные усилия обе их сторон, 
[лава 14: Управле//ие сруппой тестирова//ия 435 Поиск ошибок IIроrраммистами сраВНИ1ельно более дешев, Вспомните рисунок 3,1 из rлавы 3  чем раньше проблема выявлена, тем дешевле обходится ее решение, Этому есть несколько причин, . Проrpаммисту нет нужды повторять тесты, чтобы ВЫЯСНИ1ь, что идет не так, Он сразу обрашается к проrраммному коду, rдe быстро Ha ходит причину ошибки и немедленно се исправляет, . Проrраммисту не ПРИХОДИ1ся описывать проблему для KoroTo еше, . Проrраммист не тратит времени на выяснение Toro, как должна работать проrрамма, Ему не нужно составлять отчет о проблеме, отслеживать ответные действия и комментарии друrих сотрудников и печатать итоrовые и сводные отчеты, Он не занимается никакой бумажной работой  просто быстро находит и исправляет ошибку, Нередко в ходе проекта получается, что проrраммисты тестируют свою работу все меньше и меньше, Часто это происходит под давлением не в меру амбиuиозноrо руководителя проекта, который таким образом пытает ся ускорить разработку, невзирая на то, что в результате страдает качество продукта, КОlда эта ситуаuия достиrает cBoero предела, только что напи санный проrраммный код сбоит сразу же, как только попадает в руки Te стировшиков, Хотя эта тенденuия и мешает разработке, с ней ПРИХОДИ1ся считаться, Набирая команду тестировшиков, имейте в виду, что вам придется выпол нять и некоторую лишнюю работу, которую в идеале должны были бы дслать проrраммисты, Это одна из причин Toro, почему мы рекомендуем составлять команду как минимум из троих тестировшиков, не считая их руководителя, Альтернатива: независимые тестовые areHTCTBa Вовсе не обязательно, чтобы компания тестировала разрабатываемые проrраммные продукты исключительно своими силами, Можно обратить ся к услуrам фирмы, спеuиализируюшейся на этой работе, Получив про [рамму и чсрновики руководства, сотрудники этой фирмы проведут ряд uиклов тестирования, Традиuионно считается, что продукт будет надежнее, если ero протес тирует абсолютно независимая компания, Так утверждается во мноrих книrах по тестированию проrраммноrо обеспечения, Теоретически у высокопрофессиональных тестировшиков, которые ни от Koro не зависят и не испытывают давления со стороны руководства проекта, rораздо больше возможностей, Но наш собственный опыт этоrо не подтверждает, Напротив, имея дело с независимыми TeCTO выми аrентствами, мы сталкивались с uелым рядом проблем, 
436 Часть III: Управле//ие проектаAtИ И сруппал1U . Тестовые аzентства не так независимы, как кажется. Они рабо тают по контракту и заинтересованы в ero продлении, Следователь но, их rлавная uель  не протестировать продукт как следует, а удовлетворить заказчика, которым является руководство проекта, И если руководителю проекта хочется, чтобы продукт выrлядел лучше или быстрее ушел в производство, независимое areHTcTBo будет пропускать проблемы, лишь бы быстрее объявить, что все в ПОрЯk ке, . Стандарты аzентства MOZym быть недостаточно высоки. В час тности, сотрудники areHTcTBa едва ли станут критиковать дизайн продукта, Если плохо спроектированная проrpамма полностью COOT ветствует спеuификаuии и руководству пользователя, тестовое areH тство выдаст заключение о ее правильности и отсутствии каких бы то ни было проблем, . Персонал тестовоzо аzентства может не обладать достаточной квалификацией. В одном из известных нам areHTcTB работали необу ченные студенты, Их руководитель имел опыт проrраммирования, но в ЖИЗНИ не прочел ни одноrо учебника по тестированию, Едва ли он имел хоть какоенибудь представление о том, что такое rранич ные значения данных и зачем их тестировать, Хотя сотрудники большинства тестовых areHTcTB более профессиональны, упомянутая фирма до сих пор работает, Так что не стесняйтесь как следует побеседовать с персоналом фирмы, прежде Чем подписывать с ней контракт, Примите во вНимание и тот факт, что у TecToBoro areHTcTBa большие накладные расходы, так что вы платите за каждоrо ero тестировщика втрое больше, чем он в действительности получает, Если, например, тестовое areHTcTBo получает от вас S24 за каждый час работы OДHO [о тестировщика, ему будут платить только S8 в час, Таких низко квалифиuированных сотрудников, которые соrласились бы работать за эту плату, мы никоrда не нанимаем, Нам приходилось читать orpOMHoe количество плохо составленных отчетов о проблемах, предоставленных тестовыми аrентствами, В то же время собственные наши сотрудники проходят спеuиальное обу чение и выполняют такую работу всеrда качественно, . Аzентства пропускают значительные участки проzраммы. Напри мер, нам никоrда не приходилось встречать тестов для условий [o нок, разработанных независимыми аrентствами, Зато мы ВИдели катастрофические ошибки, которые были вызваны ситуаuиями [o нок и которые тестовые areHTcTBa пропустили или неверно ДOKYMeH тировали, 
[лава 14: Управление сруппой тестирования 437 Еще один пример: areHTcTBo, получившее $250 тыс, за тестирование продукта средней сложности, практически не проработало ero BЫ ходные документы, Убедившись, что проrрамма правильно вычиCJ1Я ет выходные значения, сотрудники не удосужились проверить, как она отображает эти значения в rрафиках и диаrраммах, [де оказал ся uелый ряд серьезных ошибок, . Аi?ентства MOi?ym не обеспечивать достатОЧНОi?О контроля и пoд держки тестовых работ проекта. Не думайте, что, как только подписан контракт снезависимым areHTCTBOM, собственных тести ровщиков южно тут же перебросить на друrой проект, Каким бы хорошим ни было areHTcTBo, KTOTO должен контролировать ero работу, взаимодействовать с ero сотрудниками, обучая их принятым в компании стандартам, изучать найденные ими ошибки и следить, чтобы проблемы, о которых они сообщают, вовремя решались, . Вовсе не обязательно, что аi?ентство поможет вам реалистичес ки спланировать бюджет тестирования. Заключая доrовор на два uикла тестирования, планируйте, что потребуется еще и третий, четвертый и т,д, Кроме Toro, не ждите, что продукт будет протести рован за меньшее количество uиклов, чем понадобилось бы вашей собственной rруппе, . Обычно аi?ентство Ilедостаточно знает тестируемый пpoi?paмм ный продукт. Оно может не знать, как должны работать подобные IlporpaMMbI, каковы преимущества вашей, не знают требований pЫH ка и Toro, на какие уступки конструкторы продукта [отовы пойти, а на какие  нет, Независимые тестировщики плохо представляют себе проuесс реалl,НОЙ эксплуатаuии продукта и не знают, в чем ПОЛI,зователь можст наrружать проrрамму до предела и какие 11Ja ничные значения данных он может попытаться превысить, Итак, продумайте, что вы хотите получить от TecToBoro areHTcTBa, Уч тите, что все это будет стоип, немалых денеr и времени, Решите, нужны ли вам полностью документированные тестовые материалы, приrодные для повторноrо использования, Как насчет автоматизированных тестов? Воз можно, все, что вам требуется,  это несколько uиклов основательноrо тестирования без подробных сопроводительных материалов, Только четко определив свои нужды и приоритеты, можно приступать к поиску COOTBeT ствующеrо TecToBoro areHTcTBa и переrоворам о контракте, В uелом, на наш взrляд, результаты работы независимых тестовых areHTcTB можно назвать посредственными, Коечто они делают неплохо, и мноrие компании успешно пользуются их услуrами, У независимых тестовых areHTcTB есть и определенные достоинства, В частности, их услуrи можно использовать как основу для собственной 
438 Часть III: Управле//ие проектаAtи и сруппами работы, Вместо Toro чтобы платить за длительное тестирование, можно заказать areHTcTBY разработку плана тестирования, наборов тестов и пред ложений по дальнейшей работе, Это задание достаточно сложное, и areH тству придется поручить cro своим лучшим спеuиалистам, Однако вы получите то, за что заплатите, У спеuиалистов areHTcTBa наверняка rораз до больший опыт тестирования, чем у вас, они работали с большим коли чеством разнообразных типов проrраммноJ'O обеспечения и MorYT предложить тесты для выявления проблеl, которые вам никоrда и в rоло ву бы не пришли, или же интересные и нестандартныe способы анализа и тестирования проrраммы, Объединив их работу со своей, можно получить прекрасные результаты, а заодно и коечему научиться, Последняя рекомендаuия: заключая контракт с тестовым areHTCTBOM, назначьте для тестирования продукта и несколько собственных сотрудни ков, Их работа будет заКilючаться в следуюшем, . Воспроизводить каждую ошибку, найденную сотрудниками щентства. При необходимости ваш персонал должен дополнять отчеты, чтобы четкость описания ошибок соответствовала стандартам компании, . Искать связанные проблемы. Это отнюдь не дублирование работы areHTCTBa, Ваш персонал знает продукт и ero разработчиков rораздо лучше, а значит, знает, те искать проблемы и какими они MorYT быть, . Критически анализировать пользовательский интерфейс npolpaм.мbl независимо от Toro, входит ли это в обязанности сторонних тести ровшиков, Цели компании и стиль ее продуктов известны вашим сотрудникам лучше, чем сотрудникам areHTcTBa, которым трудно судить, соответствует ли данный сомнительный аспект проrраммы стандартам компании или это явная недоработка, . Оценивать охват продукта проводимым тестированием. Все ли важные аспекты и области проrраммы тестируются сотрудниками areHTcTBa? Ишутся ли все возможные типы ошибок? В одних случаях ваши сотрудники будут указывать на слабые места в работе тести ровшиков areHTcTBa, в дрУl'ИХ  разрабатывать и выполнять HeДOCTa юшие тесты самостоятельно, Итак, независимое тестовое areHTcTBo не решает всех проблем компа нии и не может от начала и до конца взять на себя ответственность за полноuенное тестирование продукта, Найм сторонних специалистов может служить лишь дополнением к вашей собственной работе. Будет ли это дополнение знаЧительным или совсем небольшим, ответственность за Ka чество тестирования uеликом лежит на вас и компании все равно необхо ДИМ п ерсонал, ко НТрол ируюши й работу TecToBoro areHTcTBa и выполняюший то, чеrо areHTcTBo сделать не может. 
[лава 14: Управле//ие сруппой тестирова//ия 439 Советы по планированию Как руководитель rруппы тестирования вы отвечаете за часть работ по планированию проекта. Сроки тестовых работ оuеНивать очень сложно, поскольку они зависят от работы друrих сотрудников. Если проrраммисты не будут укладываться в rрафик, затянется и работа вашей rруппы. То же самое случится, если ошибок в проrрамме будет больше, чем предполаrа лось, или если пользовательский интерфейс будет постоянно меняться. Хотя все эти трудности вполне объективны, прятаться за ними не следует. Обязанность руководителя  предусмотреть все возможные проблемы и составить план работ своей rруппы с их учетом, Вот каковы ero uели, . Предоставить необходимую информацию руководителю проекта. Руководитель проекта должен знать, какие задачи стоят перед rруп пой тестирования и сколько времени потребуется на их выполнение, . Продумать возможные экстренные меры для обеспечения cвoeвpe MeHHOi?O выпуска продукта и выявить ресурсы для ei?O ускорения. Заранее выделите те задачи проrраммистов и технических писателей, которые MorYT задержать друrие части общей работы и поэтому обязательно должны быть выполнены вовремя, Определите те эта пы разработки, на которых дополнительные ресурсы MorYT значи тельно ускорить ее ход, Мноrие руководители проекта охотно идут на выделение этих ресурсов, особенно если речь Идет о ДОПОjJНИ тельных тестировщиках или проrpаммистах, Ведь в конечном счете, оплатив определенное количество человекодней и выпустив продукт на неделю раньше, компания сэкономит на оплате недельноrо Tpy да всех тех, кто работает над проектом, И при этом она раньше выйдет на рынок и раньше начнет получать прибыль, Так что подоб ные затраты окупаются с лихвой, . Быть честным со своими подчиненными. Руководитель проекта может попытаться ускорить выпуск продукта за счет сверхурочной неоплачиваемой работы персонала, Однако полученная при этом дo полнительная прибыль может дороrо обойтись Д"lЯ вас и вашсй KOM пании: вы теряете право называться порядочными людьми, ухудшаете психолоrический климат в коллективс, ка'/сство работы усталых сотрудников оставляет желать лучшсrо, а тскучссть кадров сильно повышается, Зато руководитсль, добившийся такой uеной ускорения выпуска продукта, становится l'epocM, Одной из иавных обязанностей руководителя i?pynnbl тестирования является защита своих подчиненных. 
440 Часть III: Управлеllие проектаAtи и сруппа;ощ . Повысить проuзводительность труда. Люди с rотовностью постара ются уложиться в жесткий, но выполнимый rрафик, Однако, если плохое планирование приведет к необходимости постоянной CBepxy рочной работы, не ждите от них энтузиазма, Уставшие сотрудники становятся невнимательными, работают неохотно, перестают преk лаrать усовершенствования, чтобы не затянуть проект еще сильнее, и наконец, некоторые из них, как правило самые высококлассные специалисты, просто увольняются, Итак, честные и объективные оuенки сроков работ жизненно необхо димы и вам, и компании, В следующих разделах приведены советы по их формированию, Оценка производительности и продуктивности в rлаве 6 рассказывалось о том, почему систему отслеживания проблем ни в коем случае нельзя использовать для оuенки производительности труда проrраммистов, Теперь же мы поrоворим о том, какую пользу может принести отслеживание производительности собственных ПОДЧиненных, Разниuа здесь в том, что проrpаммисты не являются вашими ПОДЧиненны ми, Поэтому любые попытки оuенки их деятельности будут восприняты в штыки, С друrой стороны наблюдение за производительностью собствен Horo персонала поможет улучшить cro работу и не приведет к конфликтам, поскольку результаты наблюдений не выйдут за стены вашей рабочей KOM наты, Страстным приверженuем оuенки производительности персонала явля ется такой известный автор, как Деминr (Deming, 1982), Он считает, что получаемые данные позволяют значительно повысить качество работы, Вот какие преимущества может вам дать оценка производительности работы co трудников rруппы тестирования, . Можно определить, сколько времени требуется в среднем на выпол нение конкретной задачи, На основе этих данных можно планиро вать работу в дальнейшем, . Если например, известно, что в среднем тестировщик находит OKO ло 8 ошибок в день, обычно от 1 до 25, вы не удивитесь, если KTO то из сотрудников найдет за день 24 ошибки, но, если их окажется 120, вы сразу поймете, что здесь чтото не так, . Наблюдая за динамикой показателей производительности подчинен ных, можно оuенить, каковы результаты ваших собственных усилий по ее повышению, Помоrает ли данный тип обучения? Ускоряет ли работу автоматизаuия определенных тестов или ВИдов деятельности? Для оuенки пользы усовершенствований необходима возможность aHa лиза динамики производительности работ, 
[лава 14: Управление сруппой тестирования 441 Вот несколько примеров Toro, что можно определить, . Среднее количество циклов тестирования. Наш опыт показывает, что типичная проrрамма достиrает коммерчески приемлемоrо каче ства после восьми полных uиклов тестирования, Однако эта oцeH ка не универсальна  для некоторых продуктов MOI)'T потребоваться дссятки uиклов, а есть и такие простые проrраммы, которые отла живаются за несколько uиклов, . Длительность типиЧНОlО цикла тестирования. Этот показатель имеет смысл только тоrда, коrда каждая версия проrраммы или определенной ее части всеrда проходит полный uикл тестирования, Если же новая версия проrраммы поступает каждую неделю незави симо от Toro, насколько протестирована предыдущая, данная oцeH ка теряет смысл, . Количество ошибок, документируемых за день одним тестировщи ком. Если один тестировщик находит за день в среднем 5 ошибок и вы предполаrаете, что Bcero в проrрамме их будет найдено около 1000, значит, на ее тестирование потребуется 200 человекодней, . Время тестирования OaHOlO устройства. При этом время настройки устройства следует учитывать отдельно, . Количество страниц документации, проверяемых за один час. Конечно, это время зависит от типа документаuии и uелей ее проверки, . Количество сообщений об ошибках, тестируемых за один час. Сколько времени займет тестирование Bcero блока обработки оши бок? . Часть (количество страниц) плана тестирования, выполняемая за один час. Сколько времени уйдет на выполнение Bcero плана? Можно придумать и множество друrих примеров, Целый ряд показате лей продуктивности проrраммноrо обеспечения приводит в своей книrе Джонс (Jones, 1991), Собранные данные послужат убедительной арI)'ментаuией в переrово рах с руководителем проекта, Оперируя конкретными uифрами, rораздо леrче объяснить, почему для тестирования проrраммноrо продукта потре буется не два uикла, как хотелось бы руководителю проекта, а восемь, Покажите, сколько времени занимает в среднем каждый uикл тестирова ния, и объясните почему, Блаrодаря такой обстоятельности вы сможете получить больше времени и персонала, а значИ1, обеспечить более спокой ную работу с rораздо лучшими результатами, Статистические данные о производительности персонала полезны, но roлько при правильном употреблении, Если вы попытаетесь использовап. 
442 Часть 111: Управле//ие проектаAtи и сруппал1U их для давления на подчиненных, утверждая, что они работают недостаточ но быстро, ничеrо хорошеrо от этоrо не ждите, В частности, такой извес тный автор, как Деминr (Deming, 1982), решительно выступает против подобноrо использования собранной информаuии, Если вы работаете в компании, i?ae статистические данные О производительности труда MOi?ym быть использованы против отдельных тестировщиков, не собирайте эту информацию. Определение и оценка каждой задачи Прежде чем пытаться оuенить общий объем необходимоrо тестирова ния, составьте полный список ero задач, В этом списке ничто не должно быть упущено, Понятно, что составить такой список и оuенить сроки выполнения каждой из задач не TaKTO просто, и одному человеку с этим не справиться, Вот хороший способ, как это сделать, Попросите руководство выделить вам на день или два конференuзал или большую комнату, Соберите вместе всех тестировщиков, которым предстоит работать над продуктом, Если проект невелик и проrрамму бу дет тестировать одинединственный сотрудник, приrласите еще коrони будь, имеющеrо опыт тестирования и знающеrо продукт (возможно, Toro, кто тестировал ero предыдущий выпуск), Принесите на собрание спеuифи каuию, план тестирования, план тестирования предыдущеrо выпуска, py ководства пользователя, заметки и любые друrие материалы, которые помоrут в определении задач, Возьмите лист бумаrи, запишите на нем все основные задачи тестиро вания и IIрикрепите ero к стене, У вас может получиться 5, 10 или 20 крупных задач  едва ли больше, Затем для каждой из основных задач перечислите на отдельном листе бумаrи все ее составляющие, Эти листы также развесьте по CTeHaI, Некоторые из подзадач MoryT оказаться настоль ко сложны, что потребуют дальнейшеrо разбиения, Их составляющие тоже перечислите на отдельных листах, Придумав еще одну базовую задачу, вы будете дописывать ее в rлавный список, а затем брать новый лист бумаrи и перечислять на нем все ее составляющие, Коrда все будет [отово, можно начинать собрание, Вначале каждый сотрудник несколько раз обойдет комнату, переходя от списка к списку и дописывая в Hero новые элементы, Каждый должен УВИдеть, что дописали друrие, и убедиться, что больше добавить нечеrо, Собрание должно проводиться по принuипу мозrовоrо штурма, Ero первая цель  собрать максимум идей, Поэтому пока не критикуйте ни одну из них, [lусть все, что приходит людям в rолову, попадет на бумаrу, Отобрать IIраВИJlьные Идеи вы сможете позднее, 
[лава 14: Управле//ие сруппой тестирова//ия 443 Составив списки, соберитесь все вместе для rpупповоrо обсуждения, По очереди выбирая из списка каждую задачу, попытайтесь определить, сколь ко времени потребуется на ее выполнение, Везде, [де только возыожно, разбивайте задачи на более мелкие и опредсляйте вре"IЯ выполнения их co ставляющих, Оuенивая время, записывайте три значения: кратчайший срок, длиннейший и средний, Нередко оuенки, даваемые вашими сотрудниками, будут казаться вам преувеличенными, Это нормально, Поощряйте совершенно свободное выражение людьми cBoero мнения, только пусть они обязательно обосно вывают высказываемые заключения, Ведь в конечном счете должна COCTa виться реальная картина, а не нечто желаемое, но невыполнимое, Не допускайте, чтобы сотрудник, высказавший неверную на чей либо взzляд оценку, почувствовал себя zлупым или виноватым. Напротив, всячески поощряйте свободное выражение сотрудниками собствеННОlО мнения. Оно вполне может оказаться верным. Если же нет, они сами поймут это в ходе дискуссии или некоторое время спустя. Коrда вы сложите время всех предложенных в ходе обсуждения задач, результат окажется orpOMHbIM, Он может в 5 или 10 раз превышать запла нированную длительность Bcero проекта, Это нормально, А вот если OKa жется, что предполаrаемые работы по тестированию прекрасно укладываются в rрафик проекта, тоrда стоит обеспокоиться, Теперь, имея четкий список задач, можно при ступать к принятию pe шений, . Выделите задачи, которые не MOI)'T быть выполнены, . Распределите приоритеты между остальными, . Решите, какие из задач будут выполнены только частично и какие это будут части, (При этом, выбирая тесты, вы в одних случаях будете Полаrаться на лоrику, а в друrих действовать методом случай Horo отбора,) . Выдслите задачи, требующие наиболее быстроrо выполнения (для тех из них, которые к тому же будут часто повторяться, можно зап ланировать автоматизаuию), . В случае необходимости напишите подробную и убедительную ДOK ладную записку, поясняющую. почему тестирование не может быть выполнено в запланированные PYKOBOДCTBOI сроки или почему вам требуются дополнительные тестировщики, а также чеrо можно дo стичь при большем количестве вреlени, людей или денеr, 
444 Часть III: Управление проектаAtи и сруппаAtи Классификация проекта Нередко стоимость работ по тестированию приходится оuенивать задол т до тот, как у вас ПОЯВИ1ся достаточно инфораuии, Поэтому вам нужна определенная схема классификаuии проектов с приблизительными oиeHKa ми их стоимости, . Начните с определения сложности продукта. Воспользуйтесь Tpex или пятибалльной шкалой, от простейшей проrраммы, которую вам коrдалибо приходилось тестировать, до мноrоФункuиональноrо, сложноrо для пониманИя и использования проrраммноrо продукта, . Затем сделайте предположения о том состоянии, в котором пpo дукт попадет вам в руки. Снова воспользуйтесь Tpex или пятибал льной шкалой, Сколько ошибок предполаrастся найти в проrрамме? В проrpаммах одних руководителей проеК10В больше ошибок, чсм в проrpаммах друrих, То же самое ОТНОСИ1ся и к проrpаммистам, Если в давно работающую проrрамму вносится Bcero несколько исправ лений, ошибок будет не MHoro, Если же разрабатывается самыЙ первый выпуск сложноrо продукта, он будет полон ошибок, . Определив шкалы сложности и надежности проектов, можно COCTa вить таблиuы оuенки их стоимости и длительности, Пример такой таблиuы с совершенно rипотетическими uифрами приведен на рис, 14,1, Ее данные можно интерпретировать так: на тестирование He сложноrо изменения высоконадежной проrpаммы хорошим проrpам мистом уходИ1 неделя; более сложное изменение в крайне ненадежной проrpамме (или выполненное плохим проrpаммистом) тестируется 64 недели, Ожидаемая надежность Высокая Средняя Низкая Низкая 4 16 Сложность проекта Средняя 4 16 64 Высокая 16 64 256 РИСУНОК 14.1. Таблица сипотетических оценок стОИЛlОсти работ 
[лава 14: Управление сруппой тестирования 445 Повторяющиеся задачи и задачи, выполняющиеся фиксированное число раз Одни задачи решаются в ходе проекта только один раз, друrие же по вторяются MHorOKpaTHO, . Задачи, выполltяющиеся Фиксироваltltое число раз. Большая часть из них выполняется только однажды, Например, только один раз анализируется первый черновик руководства пользователя, Сколько бы еще версий руководства ни проходило через ваши руки, первый черновик тестируется только однажды, Бывают и такие задания, которые выполняются заранее известное количество раз, Например, инструкuии по установке продукта про веряются обычно трижды: сразу после их написания, перед выходом руководства в печать и в ходе финальноrо тестирования продукта, Сколько бы ни вносилось В проrpамму изменений, насколЬко бы ни растяrивался проект, количество проверок установочных инструкций не меняется, Еще одним примером одноразовой работы является написание плана тестирования, Один раз проводится последняя проверка uелостности продукта, Однажды выполняются первое [Iриемочное тестирование, сертификаuия альфаверсии, сертификаuия бетаверсии и мноrие тесты устройств, Близки к этому типу и мноrие тесты rраничных условий  те, которые выполняются очень редко, . Повторяющиеся задачи. Большая их часть выполняется на каждом uикле тестирования, Например, в большинстве тестовых rрупп при получении очередной версии проrраммы прежде Bcero проводится быстрое тестирование ее функuиональности, . Мноrие реrрессионные тесты можно проводить на каждом втором или каждом третьем uикле, Это тоже повторяющиеся задачи, и KO личество их повторений зависит от общей длительности тестирова ния: если, например, проrрамма пройдет 30 uиклов тестирования, эти реrрессионные тесты будут выполнены 10 или 15 раз, Общее количество времени, необходимоrо для тестирования проrрам мы, складывается: . из суммы длительностей всех фиксированных заданий, . из среднеrо количества времени, уходящеrо на выполнение всех повторяющихся задач в течение одноrо uикла, умноженноrо на количество uиклов, Примерно к середине проекта вы уже будете проводить все эти вычис ления и прикидки быстро и практически безошибочно, Основываясь на уже 
446 Часть I/I: Управление пpOeKmaAtU и еруппаAtи имеющемся опыте, вы сможете точно оuенить КО;lИчество времени, необ ходимоrо для полноrо завершения тестирования продукта, Советы Вот несколько MoeHTOB, которые часто упускают из виду, . Если один человек тестирует несколько продуктов, учтите дополни тельное время, которое ему потребуется для переключения между ними, Каждый раз, переходя от одноrо проекта к друrому, такому спеuиалисту необходимо будет вспомнить, на чем он остановился и что делать дальше, . Накладные расходы лучше Bcero выделить в отдельный список, Кроме основной работы, приличное количество времени уходит на совещания, составление отчетов и прочие подобные дела, Постарай тесь поточнее выяснить, сколько именно, учитывая особенности работы и традиuии конкретной компании, Соберите своих людей rденибудь в кафе в спокойной располаrающей обстановке и побе седуйте с ними на эту TeIY, Подrотовьте список затрат времени, неизбежность которых можно убедительно объяснить руководству, Если ваши подчиненные тратят на тестирование по шесть часов в день, значит, работа прекрасно орrанизована, . Изучите индивидуальные особенности своих подчиненных. Одни люди по природе более быстрые, чем друrие, Некоторые охотно остаются после работы, Одни обладают прекрасными способностя ми к тестированию, а друrие лучше справляются с планированием и документированием работы, KTOTO с удовольствием учится HOBOy, а КТOTO, напротив, чрезвычайно консервативен, Все это необходи мо учитывать при планировании работ и предварительной оценке сроков их выполнения, Разумеется, Bcerдa поручать людям только ту работу, которая им больше Bcero по душе, вы не сможете, но знать об их желаниях и склонностях просто обязаны, . Учтите время, которое потребуется для найма дополнительных сотрудников. Если, не вкладываясь в rрафик, вы решите нанять новых сотрудников, с ними необходимо будет побеседовать, выпол нить стандартные формальности, обучить и ввести их в курс дела, (Подробнее все эти временные издержки описывает в своей книrе Брукс (Brooks, 1975),) . Если приходится сокращать объем работ, делайте это крайне oc мотрительно. Проведите еще одно планировочное совещание, Bep нитеСI, к спискам задач и совместно их пересмотрите, исходя из уже сформировавшеrося пони мания проекта, Orберите задания, которые не будут выполнены, области проrраммы, которые не будут тести 
[лава 14: Управление сруппой тестирования 447 роваться со всей обстоятельностью, документы, которые можно не писать, [лавным вашим ориентиром должно быть качество продук та: разумеется, оно пострадает, но ущерб должен быть минималь ным, Для каждоrо участника совещания должно быть очевидно, что оставшееся время будет использовано самым наилучщим образом, . Совещания. Совещания  вещь полезная, но не следует проводить их без необходимости или дольще, чем положено, Для тестировщи ка, напряженно работающеrо, чтобы уложиться в жесткое расписа ние, и беС!lлатно остающеrося для этоrо после работы, каждый час, потраченный на непродуктивном совещании,  это час ero сна или времени, которое он Mor бы провести с <.:емьей, Избеrайте отчетных собраний, Нет ничеrо скучнее, чем uелый час сидеть и слущать, кто что сделал за истекшую неделю, Если же в компании такие собрания считаются обязательными, разрещайте сотрудникам брать на них с собой какуюнибудь работу, Персонал Управление персоналом  работа не из леrких, и вам наверняка при rодятся советы по следующим вопросам: . Koro нанимать . Моральная поддержка . Карьерный рост Koro нанимать Проrраммисты отнюдь не обязательно являются хорощими тестировщи ками, Плохие пpozpaммucmbl обычно являются и плохими тестировщиками. Не принимайте на работу людей, уволыmемых из apyzux подразделений. Вот несколько характеристик хорошеrо тестировщика, . Последовательность и нацеленность на качество. . Псuxолоzия экспериментатора, а не теоретика. Каждый тест пред ставляет собой миниэксперимент, Тестировщик ничеro не должен принимать на веру, Все утверждения о возможностях проrраммы и способах ее эксплуатаuии он должен превращать в тестируемые допущения и проверять на деле, Проrраммисты склонны иrнориро вать замечания о дизайне продукта до тех пор, пока не получат от тестировщика неопровержимые и убедительные данные, например, 
448 Часть III: Управление проектаAtи и сруппаAtи информаuию о количестве звонков в отдел технической поддержки, вызванных данной проблемой в предыдущем выпуске продукта, Co ответственно тестировщик должен уметь найти такие данные, про явить в ЭТОМ вопросе изобретательность и иниuиативу, . Образование. Чем ero "больще", тем лучще, Особснно ценно уни верситетскос образование, Безусловно, полезны исследовательские навыки, особенно в области человеческоrо фактора, а также все знания и навыки, связанные с компьютером, . Некоторый опыт пРОi!раммированuя. Он очень полезсн, но все же не является определяющим фактором  uелый ряд превосходных тестировщиков, с которыми нам приходилось работать, в жизни не написали ни строчки проrраммноrо кода, Впрочем, хотя бы один компетентный проrраммист в команде должен быть обязательно, Друrие сотрудники CMOryT время от времени обращаТЬС!I к нему за советом, . Опыт работы со MHOi!UМU компьютерами и разнообразным пpo i!paммHblM обеспечением. . Знание комбинаторики. Тестировщик должен уметь приблизитель но оuенИ1Ъ или же точно вычислить количество тестов, необходимых для полноrо тестирования опредсленноrо аспекта проrраммы, Это бывает полезно во мноrих случаях, и в частности, позволяет реапь но соотносить проделанную работу и качество результата, . Умение хорошо выражать свои мысли в письменной и устной фор ме. Кажд,ОМУ тестировщику постоянно приходится составлять отче ты о выявленных проблемах и устно объяснять их суть  это неотъемлемая часть ero работы, Кроме Toro, он должен уметь пред сказать проблемы, которые возникнут у пользователя продукта, уви деть те места в документаuии и те элементы интерфейса, которые MOryт быть неверно поняты, . Талант поиска ошибок. Хороший тестировщик никоrда не оrрани чивается рамками формапьноrо TecToBoro !lлана  он копаст rлуб же, он обладает интуиuией и воображением, он способен ПРИдумывать нестандартные испытания и чувствовать слабые места проrраммы, Этот талант бесuенен, . Развитое абстрактное мышление. . Умение разрешать сложные и запутанные проблемы, находить выход из тупиковых ситуаций. . Умение эффективно использовать время. Если этой способности пона'lапу нет, со временем ее можно развить, 
[лава 14: Управление сруппой тестирования 449 . Способность к быстрому переключению. Не Bcerдa тестировщикам приходится часто переключаться между различными заданиями или видами работы, но, как правило, такая необходимость имеется, . Навыки планирования или способность к их развитию, . Наблюдательность, терпение, внимание к деталям. . Воображение и способность представить себя на месте apyzozo человека. Например, тестировщик может спросить себя: "Какие бы у меня возникли сложности, если бы я никоrда раньше не работал с компьютером?" . Умение читать и писать спецификации. Подводя итоr, можно сказать, что идеальный тестировщик образован, сообразителен, умеет четко выражать свои мысли, умеет и вникать в дeTa ли, и видеть картину в uелом, настойчив, но воспитан и обладает здравым смыслом, Он  творческая личность с орrанизаторскими и техническими способностями, Как видите, этот набор качеств несколько отличается от Toro, который необходим хорошему проrраммисту, Некоторые асы тестирования являются еще и превосходными проrрам мистами, а некоторые талантливые проrраммисты  превосходными Tec тировщиками, Однако в uелом эти два умения не связаны между собой: можно преуспевать на одном поприще и быть посредственностью на дpy [ом, Моральная поддержка В пятой rлаве, раt:сказывая о составлении отчета о проблеме, мы убеж дали читателя всячески щадить чувства проrраммистов, Однако ПрOJ1Jамми сты, как и все остальные сотрудники компании, ничуть не заботятся о чувствах тестировщиков, Напротив, вполне разумные люди, имея дсло с тестировщиками, часто становятся просто несносны, Вы будете просить своих подчиненных описывать найдснныс ошибки очень тактично, сохранять невозмутимость, какие бы отrоворки н и Haxo дил проrраммист для Toro, чтобы не исправлять проrрамму, Всс это стоит тестировщикам времени и сил, Не удивительно, что люди будут flpOTCCTO вать, особенно в напряженных ситуаuиях, коrда им flРИДСТСН \111010 рабо тать сверхурочно, Помните, что ваша прямая обязанность  З3lIlИlllаТl, своих 1I0дчинен ных и оказывать им моральную поддсржку, Поощряйте хорошую работу в ЛИ'IНОМ 1I0рННКС 11 Ilублично, Выделяйте наиболее отличившихся сотрудников во врС\IЯ общих совещаний или He формальныx мероприятий, отмсчайтс 11Х УСllехи записями в личном деле, Если в компании издастся lазста  IIрскрасно, пусть об их успехах узна 15 1," 
450 Часть I/I: Управление проектаAtи и сруппаAtи ет вся компания, Если руководство поощряет хорошую работу премиями, обязательно включайте ЛУЧШИХ из СВОИХ подчиненных в списки кандида тов, Недостаточно просто следить, чтобы задания выполнялись вовремя, Не оrраничивайтесь административным взrлядом на вещи  старайтесь вни кать в работу каждоrо из сотрудников, оuенивать то, как она выполняет ся и каково качество результата, Покажите подчиненным, что вы видите и uените, Korдa KTOTO из них: . проявляет особую дипломатичность; . составляет особенно подробные и понятные списки функuий про [раммы; . находит особенно интересные ошибки; . хорошо держится в напряженных ситуаuиях, сохраняя собранность и высокую работоспособность; . составляет прекрасные отчеты о проблемах; . успешно обучает KoroTo еще; . работает сверхурочно; . берет на себя работу, которой все стараются избежать; . демонстрирует творческий подход к делу, проявляет иниuиативу и увлеченность, пытается найти новый способ выполнения определен ной задачи, даже если этот способ не срабатывает, Тестировщикам необходима не только ваша личная поддержка, но и поддержка друr друrа, Ваша задача  орrанизовать Сплоченный коллектив людей, rордящихся своим профессионализмом, радующихся успехам друr друrа и активно поддерживающих своих товарищей, Каждому тестировщи ку нужен KTOTO, с кем можно посоветоваться, обсудить новые идеи, воз можно, пожаловаться на свои проблемы или вместе над ними посмеяться, Тестировщик должен чувствовать, что ero открытия важны и желанны, В противовес кислой мине руководителя проекта, узнавшеrо о новой особен но неприятной ошибке, товарищи нашедшеrо ее тестировщика должны вслух выразить ему свое восхищение, Для Toro чтобы в rруппе можно было создать такую творческую aTMOC феру энтузиазма и взаимной поддержки, эта rpуппа должна быть достаточ но велика  хорошо, если в ней будет как минимум четыре человека, Постарайтесь оrрадить тестировщиков от несправедливых нападок со стороны друrих сотрудников компании, Никоrда не повторяйте услышан ных жалоб или несправедливых претензий к своим подчиненным, Не [o ворите им о ВОЗМОЖНЫХ изменениях rpафика, пока эти изменения не будут утверждены окончательно, Не заставляйте тестировщиков rоворить с He приятньши ЛЮДЬМИ без крайней необходимости, 
[лава 14: Управление сруппой тестирования 451 Дайте руководству компании понять, что каждый раз, Korдa оно захо чет решить свои проблемы за счет ваших подчиненных, ему придется иметь дело с вами и вы будете зашишать своих людей всеми возможными спосо бами, Если руководитель проекта хочет, чтобы КТOTO из тестировщиков остался работать допоздна, он должен попросить вас об этом, Вы, в свою очередь, должны попросить об этом тестировщика, причем в такой форме, чтобы он свободно Mor отказаться, И если он откажется, вы сами должны сообщить руководителю проекта, что он не получит желаемоrо, При этом вы не должны rоворить, что выбор был сделан тестировщиком, Ваша обя занность  принять oroHb на себя, защищая и обереrая своих людей, rдe только возможно, Такой же политики следует придерживаться в отношении изменений rрафика работ, стандартов, перераспределения заданий между членами команды, Кто бы ни пытался давить на ваших подчиненных, у них всеrда должна быть возможность отказаться от ухудшения условий своей работы, Вы же должны активно противостоять такому давлению, Дайте руководству четко понять, что оно никоrда и никаким образ:ом не имеет права давить на ваших подчиненных и лишь в самых экстренных случаях может просить их о помощи, выражающейся в более напряженной или сверхурочной pa боте, Итак, стойте стеной за своих людей, и пусть они это видят, Тестиров щики, как и все остальные люди, делают rлупости и совершают ошибки, иноrда очень досадные, которые становятся видны всем BOKpyr, Никоrда не высказывайте им свое недовольство публично, Напротив, постарайтесь по возможности сrладить ситуаuию, соrласитесь, что допущена ошибка, но защитите своих подчиненных, Защищайте их работу, зарплату, должность и положение, их репутаuию, Не сомневайтесь, что они это увидят и oцe нят, а значит, будут больше вам доверять, Только так вы понастоящему заслужите их уважение, Прежде чем особенно спорные или политически важные записи и OT четы ваших подчиненных выйдут из стен отдела тестирования, обязатель но с ними ознакомьтесь, И если вы соrласны с мнением тестировщика, [отовьтесь ero отстаивать, Если тестировщик боится идти на KaKoeTO совещание, пойдите BMec те с ним, Если это невозможно, пошлите с ним ведущеrо тестировщика или хотя бы просто приятеля, Итак, в ответ на честный и самоотверженный труд люди должны чув ствовать, что их руководитель поддерживает их во всех, в том числе и рискованных, но правильных действиях, что он ПОд:lерживает их и Torдa, коrда они совершают ошибки, и что ero помощь всеrда с ними, 
452 Часть I/I: Управление проектаAtи и сруппаAtи Карьерный рост Большинство людей хочет профессионально расти, Они хотят учиться новому, приобретать технические навыки, расширять свои профессиональ ные возможности, Поюrите им в этом, Для мноrих тестирование является первым шаrом в индустрии про rpaMMHoro обеспечения, Они планируют стать проrраммистами, техничес кими писателями, руководителями, консультантами.., Вместо Toro чтобы пытаться удержать их в своей rруппе, используйте их стремления, Часто талантливые люди или профессионалы с очень нестандартным и ценным опытом оказываются в вашей комнате, ища возможности проверить себя, обоrатить свой опыт и знания, изменить направление своей деятельности, а возможно, повторно войти в работу после долrоrо перерыва, Вы можете предоставить им такую возможность и на полторадва [ода получить цeH Horo сотрудника, полноrо профессиональноrо энтузиазма, Может быть, это прекрасная возможность и для вас? Интервьюируя очередноrо кандидата на должность тестировщика, спро сите ero, почему он выбрал именно это работу. Если это ero профессия, подумайте, принесут ли eIY пользу полторадва [ода работы в вашей KOM пании, Сможет ли он научиться за это время чемуто, что ero интересует? Если да, примите этоrо 'Iсловека на работу, Не волнуйтесь, если ero пла ны идут rораздо дальше тестирования, Мало кто планирует навсеrда OCTaTb ся тестировщиком, И мало кто из тех, кто надолrо остался в этой профессии и стал в ней настоящим асом, преДПОJIarал, что будет именно так, Распределяя работу между tUIенами rруппы, имейте в виду их планы и стремления, Старайтесь, чтобы люди моrли извлечь из каждоrо занятия максимальную пользу для себя, Иноrда можно орrанизовывать сотрудни ку временную командировку в друryю rруппу, чтобы расширить ero про фессиональный опыт, Одни люди будут быстро покидать вас, обучившись всему, что их ин тересовало, Друrие же, напротив, задержатся rораздо дольше, чем плани ровали, Но все они будут работать с энтузиазмом  а это важнее Bcero, Вы будете приобретать новых и новых друзей  навсеrда, 
Пр ил оженuе Распространенные проzраммные ошибки Назначение этоrо пРИАожения в данном приложении описано более 400 ошибок, Эти описания очень KO ротки, в них содержится лишь самая интересная информация, Список ошибок приведен не только в качестве справочника, но и как OCHO ва для дальнейшей работы, Лучше Bcero прочесть это приложение полнос тью, от начала до конца, даже если это покажется вам скучным занятием, Если вы всерьез планируете заниматься тестированием проrраммноrо обес печения, не пожалейте времени, Вы получите прекрасную практическую базу  широкую и очень полную картину всех возможных проблем и ошибок, с которыми вам коrдалибо придется сталкиваться, Набор тестовых материалов  это не что иное, как список проблем и ошибок, которые Mozym встретиться в конкретной пpozpaммe, плюс набор процедур, позволяющих определить, имеются ли они на самом деле. Формировать список возможных ошибок по ходу работы  плохая практи ка. rораздо удобнее и надежнее иметь раз и HaBcerAa составленный rOTo вый список, из KOToporo можно будет отбирать то, что подходит для каждой конкретной проrраммы. Именно такой пример cTaHAapTHoro списка и пред лаrается вашему вниманию, 
454 Часть III: Управле//ие проектаAtи и сруппалш Тестируя новую проrрамму, вы будете не только отбирать подходящие эле менты приведенноrо списка, но и дополнять ero новыми описаниями ошибок. Поэтому лучше Bcero хранить ero в электронном виде, чтобы он BcerAa был под рукой и ero без труда можно было редактировать. Вот несколько примеров использования списка возможных ошибок. 1. Оценка тестовых материалов, разработанных KeMTO друrим, Заключив контракт на разработку тестовых материалов, вы получите несколько объемистых папок с описаниями тестов, Однако, как бы BHY шительно они ни выrлядели, наборы разработанных тестов не будут аб солютно полными. Вам придется тщательно проанализировать все полученные материалы и самостоятельно заполнить пробелы. Наш опыт показывает, что тестовые areHTcTBa нередко пропускают целые rруппы ошибок, например, они часто забывают об условиях rOHOK. К сожалению, разобраться в rOToBbIx тестовых материалах rораздо леrче, чем увидеть, чеrо в них не хватает, Вот TYTTO вам и придет на помощь rотовый список всех возможных ошибок. Формируя на ero основе список ошибок для конкретной про rpaMMbI, включайте в Hero все, что только может в ней встретиться, He зависимо от Toro, насколько это вероятно. Затем просмотрите получившийся список и проверьте, имеются ли в ллане тесты для выяв ления каждой ошибки из вашеrо списка. Вы наверняка быстро обнаружите целые классы пропущенных проблем. 2. Разработка собственных тестоВ. Составьте список ошибок, которые MorYT встретиться в проrрамме, пользуясь для этоrо данным приложением. Затем разработайте тесты для выявления каждой из включенных в список ошибок. Если вы сомневаетесь, возможны ли в проrрамме ошибки какоrолибо типа, спросите об этом проrраммиста. Приведенный список поможет и тем, у кото нет времени на разработку документации. Он может служить заменой плана тестирования, позволяя орrанизовать и упорядочить работу и rарантировать, что ничеrо не будет упущено, хотя тесты, разумеется, придется придумывать самостоятельно. З. Невоспроизводимые ошибки. Ошибку может быть трудно вослроизвести изза Toro, что вы не знаете ее причины или не знаете, какую функцию выполняла проrрамма в MO мент ее возникновения. Однако не стоит отчаиваться  обратитесь за помощью к этому nрuложению. Попытайтесь соотнести зареrистрированные симптомы с описаниями оши бок из этоrо списка, Постарайтесь проявить максимальную rибкость, поскольку ваш отчет об ошибке может быть неполным или неточным, 
ПРИЛОJlсе//ие: Распростра//е////ые пpocpa,IIAt//bIe ошибки 455 4, Неожиданные ошибки. Если выявленная ошибка оказывается для вас совершенно неожиданной (например, продукт уже rOToB к выпуску, и BApyr такая неприятность), проверьте, нет ли в nporpaMMe и друrих подобных ошибок. Скорее Bcero дело в том, что вы пропустили определенную rpynny тестов. Для исправ ления ситуации вам лриrодится лриведенный здесь слисок, Ошибки пользовательскоrо интерфейса Понятие пользовательскоrо интерфейса объединяет все аспекты продук та, с которыми имеет дело ero пользователь, Разработчики пользовательс Koro интерфейса пытаются достичь компромисса между такими факторами, как: . функuиональность; . быстрота изучения проrраммы новым пользователем; . леrкость запоминания необходимых приемов работы; . производительность; . вероятность возникновения ошибок пользователя; . удовлетворенность пользователя проrраммой, Проектируя пользовательский интерфейс, конструктор проrраммы учи тывает опыт и нужды ее будущих пользователей, а также возможности аllпаратноrо обеспечения и доступных проrраммных технолоrий, Для достижения разумноrо баланса между всеми перечисленными xa рактеристиками проrраммы конструктору так или иначе приходится чем то жертвовать, Поэтому, если в проrрамме встретится одна из перечисленных ниже ошибок пользовательскоrо интерфейса, она вполне может оказаться не случайной ошибкой, а намеренной уступкой, сделан ной конструктором ради улучшения друrой состаВЛЯЮщей качества продук та, Прежде чем составлять отчет об ошибке пользовательскоrо интерфейса, спросите у конструктора, почему проrрамма спроектирована именно так Возможно, окажется, что он принял в данном вопросе самое оптимальное решение, Подробное обсуждение вопросов, связанных с разработкой пользовательскоrо интерфейса, можно найти у таких авторов, как Бейкер и Бакстон (Baecker & Buxton, 1987), Хеландер (He1ander, 1991), Порел (Laure1, 1990, 1991), Рубен штейн и Херш (Rubenstein & Hersh, 1984), Шнейдерман (Schneiderman, 1987), Смит и Мойзер (Smith & Moiser, 1984), Это приложение написано так, чтобы cro Mor понять не только тести ровщик проrраммы, но и ее пользователь, Обязательно учитывайте, что с проrраммой MOryT работать самые разные люди и ИХ проблемы будут OT 
456 Часть I/I: Управление проектаAtи и сруппалш личаться от ваших, Поэтому постарайтесь проявить как можно большую rибкость, Функциональность Если с помошью проrраммы трудно, неудобно или невозможно выпол нить 'пото, чеrо может обоснованно ожидать от нес пользователь, значит, в ней имеется функциональная о ишбка , Избыточная функциональность Это ошибка, в которой очень трудно убедить разработчиков (Брукс (Brooks, 1975», Универсальная система, предназначенная для выполнения слишком большоrо количества разнообразных задач, сложна и в изучении, и в эксплуатаuии, Ее ПОЛJ.Зователи постоянно забывают, как выполнить то ИЛИ иное действие, К тому же таким системам обычно недостает конuеп туальноrо единства, Они сопровождаются OrpOMHbIM количеством ДOKYMeH таuии, обширной справочной системой, в которой леrко заблудиться; разделы руководств чересчур объемны, Кроме Toro, мноrоФункuиональные системы обычно не отличаются высокой производительностью, Пользова тел и часто совершают ошибки, а получаемые ими сообщения об этих ошибках бывают расплывчаты и носят чересчур общий характер, Основным критерием оuенки функuиональности продукта может быть следующий: если редко используемые функuии проrраммы усложняют использование ее базовых возможностей, значит, уровень функuионально сти проrраммы ВЫХОдит изпод контроля, Ложное впечатление о наборе функций продукта Руководства и маркетинrовая литература ни в коем случае не должны создавать у пользоваТеля впечатление, что проrpамма может больше, чем на само,\! деле, Неадекватность реализации базовых функций Если к одной из КЛючевых функuий проrраммы невозможно обратиться и если она реализована слишком узко ИЛИ слишком медленно работает, такая проrрамма не rодится для реальной эксплуатаuии, Например, если система управления базами данных 8 часов сортирует 1000 записей, ник то не захочет ею пользоваться, Пропущенная функция в проrрамме отсутствует описанная в спеuификаuии или очевидно необходимая функuия, 
Приложение: Распространенные просраAtAtные ошибки 457 Неверно работающая функция Функuия проrраммы должна выполнять одно (как правило, в COOTBeT ствии со спеuификаuией), а делает нечто друrое, Функция должна быть реализована пользователем "Если система обладает всеми необходимыми пользователю возможно стями, но при этом компоненты, реализующие некоторые из этих возмож ностей, пользователь должен "собрать" сам, то можно сказать, что она является инструментальным набором, а не завершенной проrраммой", (Рубенштейн и Херш (Rubenstein & Hersh, 1984),) Проrрамма не делает Toro, что ожидает от нее пользователь Например, если проrрамма должна сортировать список имен, едва ли KTOTO станет ожидать что Имена будут сортироваться в порядке ASCII, Кроме Toro, пользователи предположат, что проrpамма не будет учитывать ведущих пробелов и реrистра букв, Если же проrpаммист хочет убедить, что проrрамма должна работать таким неожиданным образом, он должен OTpa зить это в ее названии и документаuии, и желательно сще и внести в нее возможность альтернативноrо способа работы, Взаимодействие nporpaMMbI и пользователя В этом разделе описываются ошибки взаимодействия проrраммы и пользователя, Соответственно предполаrается, что речь идет об интерактив ной проrрамме, пользователь которой сидит за компьютером или термина лом, Отдельные ошибки MorYT относиться и к пакетным проrраммам, которые тоже выдают некоторую информаuию, например, сообщения об ошибках, Пропущенная информация Все, о чем пользователю необходимо знать, должно отображаться на экране, Желательно также, чтобы на экране отображалась информаuия, которую среднестатистический пользователь найдет полезной, Отсутствие инструкций на экране Как определить название проrраммы, как из нее выйти, какую клави шу нажать, чтобы получить справочную информаuию? Если в проrpамме используется командный язык, как узнать перечень ее команд? Проrрам ма может отображать всю эту информаuию при запуске, однако в любом 
458 Часть III: Управление проектами И сруппаAtИ случае пользователь не должен обращаться за отв.етами на все эти вопро сы К руководству, nporpaMMa рассчитана на то, что у пользователя всеrда под рукой печатная документация Можно ли использовать проrрамму, потеряв руководство? Неопытный пользователь нс должен полностью зависеть от печатной документаuии, Недокументированные возможности Если БОЛЬИlUнство функuий или команд уже перечислены на экране, то позаботьтесь, чтоБы были перечислены и все остальные, Пропуск несколь ких из них может смутить пользователя, или же он просто никоrда о них не узнает, решив, что на экране есть все, что нужно, и не доrадавшись заrлянуть в документаuию, Аналоrичным образом, если для некоторых команд проrраммы описа но их применение в особых случаях, необходимо позаботиться о таких описаниях и для всех остальных, Состояния, из которых сложно найти выход Если пользователю сложно определить, как выйти из нежелательноrо состояния проrраммы или прервать нежелательный проuесс, это так же плохо, как если бы выход не был предусмотрен вообще, Отсутствие курсора Курсор  один из основных инструментов пользователя, ОН указыва ет на активную точку экрана, а также подтверждает, что проrрамма рабо тает и ждет указаний, Поэтому курсор (текстовый или указатель мыIи)) должен обязательно постоянно присутствовать в любой интерактивной проrрамме, nporpaMMa не распознает ввод Интерактивная проrрамма должна реаrировать на ввод информаuии пользователем, В частности, если пользователь вводит текст, вводимые символы должны немедленно отображаться на экране, Следующие исклю чения не являются ошибками: . проrрамма находится в проuессе перехода из одноrо состояния в друrос; . проrрамма иrнорирует определенные действия пользователя; . пользователем дана команда не отображать ввод; . вводится пароль или друrая секретная информаuия, 
Приложе//ие: Распростра//е////ые пpocpaAtAt//ble ошибки 459 Длительное отсутствие активности Выполняя длительное задание (занимающее более двух секунд), про [рамма должна показывать пользователю, что она работает, а не заuикли лась или остановилась, Иначе пользователь не будет знать, нужно ли ему перезапустить компьютер или просто HeMHoro подождать, Желательно OTO бражать еще и индикатор, показывающий, какая часть задания выполнена и сколько времени еще осталось, Невозможность определить, выполнена ли данная nporpaMMe команда Проrрамма может выполнить команду не Torдa, коrда этоrо ожидает пользователь, или не отобразить на экране внесенные изменения, НаПри мер, удаленные данные MoryT оставаться на экране до тех пор, пока пользо ватель не выйдет из текущеrо режима, Подобные ситуаuии человек воспринимает как ошибки проrраммы и сам может реаrировать на них неправильно, допуская MHoro ошибок, Невозможность определить, что один и тот же документ открыт несколько раз Проrpаммы, позволяющие одновременно открывать несколько ДOKYMeH тов, должны проверять каждый открываемый документ и сообщать пользо вателю, если он открывается повторно, Иначе пользователь может запутаться во вносимых в документ изменениях, Кроме Toro, версии ДOKY мента должны иметь на экране разные имена, Например, если пользователь дважды открыл файл Му Doc, в одном окне этот файл должен иметь имя MyDoc:l, а в друrом  MyDoc:2 (или \IТOTO в этом роде), В качестве альтернативы можно вообще не разрешать дважды открывать один ДOKY мент, Неверная или смущающая пользователя информация Любая встреченная пользователем ошибка тут же подрывает ero ДOBe рие ко всей проrрамме, Незначительные на первый взrляд ошибки или недостаточно подробные сообщения проrраммы, изза которых пользова тель может сделать неверные обобщения или выводы,  обычно наиболее трудная часть раБОТЬf тестировщиков, поскольку добиться их исправления сложнее Bcero, Простая фактическая ошибка Обычная последовательность переходов по проrpамме  от общеrо к частному, Поэтому после выбора пользователем определенноrо режима или 
460 Часть 111: Управлеllие пpOeKmaAt[/ [/ сруппал1U команды на экране нередко остается информаuия предыдущеrо режима, большая часть которой излишня или не относится к делу, После каждоrо видимоrо изменения состояния проrраммы обязательно проверяйте всю информаuию на экране на предмет ее оптимальноrо соответствия новому состоянию, Синтаксические ошибки Проrраммисты не особенно заботятся об ошибках правописания, а вот на пользователя они производят самое неприятное впечатление, Все их необходимо исправлять, Неаккуратное упрощение Пытаясь описать ситуаuию или функuию проrpаммы как можно проще, автор сообщения может упомянуть только ее важнейший аспект, опустив важные подробности, Не желая пользоваться сленrом, он может переста раться и заменить необходимые профессиональные термины неэквивален тными им и неуклюже звучащими описаниями, что только затруднит понимание сообщения. Обращайте внимание на такие ошибки. ПОМНИ1е, что вы являетесь единственным технически [рамотным человеком, анали зирующим выводимый проrраммой текст. Неудачные метафоры Метафоры используются для сравнения компьютерных систем с чемто знакомым пользователю, Они помоrают лучше понять систему и предска зывать ее поведение, Однако, если предположения пользователя окажутся неверны, значит, метафора никуда не rодится, Например, метафорой явля ется пиктоrрамма с изображением корзины для бумаr, используемая во мноrих проrраммах для команды удаления файлов, Если удаленный файл можно вытащить из корзины, метафора верна, Однако, если файл исчеза ет в корзине навсеrда, в качестве метафоры лучше подошел бы измельчи тель бумаrи, Неточные названия команд и функций Команда СОХРАНИТЬ не должна использоваться для удаления файла или сортировки ero содержимоrо, Если в русском (анrлийском) языке за словом закрепилось определенное значение, названная этим словом KOMaH да должна ему соответствовать, Несколько названий одной функции Одна и та же функuия не должна иметь в проrрамме несколько назва ний, Пользователь не должен ломать rолову над тем, чем отличаются KO манды Тень и Наложить Tellb. 
Приложеllие: Распростраllеllllые про?рамAtllые ошибки 461 Избыточность информации Некоторые разделы печатной или интерактивной документаuии coдep жат столько технических подробностей, что интересующая пользователя информаuия среди них просто теряется, Если, на ваш взrляд, все эти Tex нические подробности MoryT быть полезны пользователю, подумайте о том, чтобы поместить их в отдельный раздел или приложение, В некоторых случаях чересчур подробное руководство является просто попыткой компенсировать неудачное конструкторское решение, Действи тельно ли пользователю нужна вся приведенная информаuия? И нет ли способа все же решить проблему, которую проrраммист считает неразреши мой? Коrда сохраняются данные? Предположим, что вы вводИ1С информаuию, которую проrpаМ!а должна сохранип" Сохраняются ли данные по мере ввода, при выходе, по OTдeJll, ной команде пользователя, каждые 15 минут или KaKTO еще? У пользова теля должен быть простой Сl\особ, позволяющий это выяснить, приче,\j ответ должен быть совершенно однозначным, Если же вы столкнулись с неоднозначностью, ищите ошибки, Возможно, два модуля проrраммы pa ботают в этом вопросе несоrласованно, Неудачная внешняя структура Продукт, предоставляемый пользователю, обычно состоит из ряда KOM понентов, Насколько леrко разобраться в назначении каждоrо из них? Неудачная внешняя структура продукта увеличивает время ero изучения и отпуrивает новичков, Чем меньше необходимо знать пользователю для выполнения определенной задачи, тем лучше, Справочная система и сообщения об ошибках ИХ текст часто рассматривается как незначительная составляющая про дукта и пишется неопьrrными проrраммистами или неопытными техничес кими писателями, Изменения этоrо текста выполняются в последнюю очередь, Следует помнить, что пользователь обращается к справочной системе тоrда, коrда у Hero возникают проблемы, О сообщениях об ошибках и rоворить не приходится, Пользователь расстроен, нервничает, и ему нуж на помощь, а не дополнительный повод для раздражения, Высокий уровень сложности С экрана читать труднее, чем с бумаrи (Шнейдерман (Schneiderman, 1987», Исследования показали, что максимальнО допустимым уровнем сложности текста на экране является уровень 5, И уж во всяком c;IY'lae 
462 Часть III: Управление проектаAtИ и сруппаAtи текст интерактивной Сllравочной системы и сообщений об ошибках не должен быть сложнее, чем текст печатноrо руководства, Сообщения про [раммы должны быть простыи,' краткими, предложения должны COCTaB ляться в утвердительной форме и содержать минимум технических терминов, даже если пользователь проrраммы является компьютерным спеuиалистом, Мноrословность Сообщения проrpаммы должны быть простыми И краткими, Как прави ло, у пользователя IlporpaMMbI нет времени на чтение чьихто мноrослов ных излияний, Если ПОjfьзователю потребуется получить дополнительную информаuию, лучше предоставить к ней отдельный быстрый доступ, Не стоит заставлять ero читать полстраниuы ради единственной фразы, Неуместная эмоциональность Сообщения проrраммы должны быть эмоuионально нейтральными и предельно корректными, Пользователю едва ли понравится, если проrрам ма будет тыкать ero носом в ero промахи, Проверьте, нет ли в проrpамме сообщений, которые MorYT вызвать у пользователя психолоrический дис комфорт, В сообщениях об ошибках не должно быть восклиuательных знаков  в одних случаях они MoryT быть восприняты как насмешка или "недоволь ство" проrpаммы, а в друrих  как сиrнал опасности, Тщательно подбирай те выражения  учтите, что само по себе появление окна с сообщением об ошибке уже заставляет пользователя напрячься, Поэтому тон сообщения должен быть спокойным, деловым и конструктивным, Слова "авария", "сбой", "разрушение", "потеря данных" крайне нежелательны на экране, и даже слово "ошибка" следует употреблять как можно реже, Тем БО,lее, что множество так называемых ошибок носят совершенно рабочий xapaK тер  это просто ситуаuии, требующие от пользователя определенных поправок или дополнительных указаний, А мноrих из них можно было бы избежать, если бы проrрамма была чуточку интеллектуальнее (а проrрам мист  предусмотрительнее), Фактические ошибки Нередко в документаuии и сообщениях проrpаммы приводятся HeBep ные примеры Toro, как правильно выполнить то или иное действие, Одни из них устарели, друrие неверны с "рождения", На одном из последних uиклов тестирования все они должны быть тщательно проверены, Контекстные ошибки Контекстнозависимые справочные системы и подсистемы обработки ошибок должны IIроверять, что делает проrрамма 13 момент их вызова, ИХ 
Приложеllие: Распростраllеllllые просраAtAtllые ошибки 463 сообщения, меню, рекомендаuии и т,п, зависят от ситуаuии, Это замеча тсльная способность проrраммы, если только она работает правильно, Неправильное определение источника ошибки Как минимум в сообщении об ошибке должно быть сказано, что имен но произошло не так, Если необходимо, должны быть приведены ошибоч ные данные, В хорошем сообщснии об ощибке указываются также ее причина и способ выхода из ситуаuии, Шестнадцатиричный код  это не сообщение об ошибке Сообщения вроде Error 010 в обычных прикладных проrраммах He допустимы, Исключения MoryT составлять только особые ситуаuии, коrда распечатка полноrо сообщения об ошибке слишком велика или неуместна, коrда этот текст  все, что компьютер успевает вывести перед сбоем или коrда проrраммой не пользуется никто, кроме ее автора, Отказ в предоставлении ресурсов без объяснения причины Если проrрамме не удается использовать принтер, модем, дополнитель ную память или друrие ресурсы, она должна не только сообщить пользо вателю о неудаче, но и объяснить ее причины, Сообщения "Принтер уже используется" и "Принтер не подключен" требуют от пользователя разных действий, Сообщения об ошибках, которые не являются таковыми Сообщения об ошибках должны выдаваться проrраммой в стандартной форме, и только Torдa, коrда ошибка действительно имеет место, Если же проrрамма в форме сообщений об ошибках будет информировать пользо вателя о рядовых событиях, он перестанет читать все подобные сообщения, Ошибки отображения Ошибки отображения информаuии на экране  это то, что может дис кредитировать проrpамму при первом же знакомстве с ней пользователя, К сожалению, проrраммисты часто считают их незначительными, полаrая, что, если с данными и их обработкой все в порядке, не страшно, если на экране \IТOTO HeMHoro не так, А зря, потому что ошибки на экране часто являются признаками более серьезных проблем, Два курсора Плохо, Korдa, перемещая фокус ввода из одной точки экрана в друryю, проrраммист забывает стереть старый курсор, Но еще хуже, если два KYP сора на экране являются отражением путаниuы в проrpаммном коде, Kor да неизвестно, какой из них активен, Тут MorYT скрываться очень серьезные проrраммные ошибки, 
464 Часть III: Управле//ие проектаAtи и сруппалш Исчезновение курсора Обычно курсор исчезает, коrда проrраммист отображает \IТOTO поверх Hero или, изменив ero координаты, забывает ero перерисовать, Возможны и друrие причины, например, курсор нарисован в той области памяти, которая не отображается на экране, Это плохо, поскольку так ничеrо не стоит запортить нужные данные, Курсор отображается не в том месте Курсор находится в одном месте экрана, а вводимые пользователем данные отображаются в друrом, Эта ошибка очень неприятна для пользо вателя, Кроме Toro, она может быть симптомом более серьезной проблемы, коrда неправильно интерпретируется ввод или не так сохраняются данные, Курсор вне области ввода данных TaKoro не должно быть никоrда, Обычно это ошибка кодирования, хотя некоторые проrpаммисты намеренно позволяют пользователю перемещать курсор в любую точку экрана, что является ошибкой проектирования, Отображение ввода не в том месте экрана Курсор отображается правильно, а вот вводимые данные  [дeTO в друrом месте, Недоочищена часть экрана После ответа пользователя на сообщение окно не исчезает с экрана или удаляется лишь частично, Это неприятно и часто мешает дальнейшей pa боте, Не выделены активные элементы экрана Если проrрамма обычно вьщеляет определенные элементы экрана, Ha при мер активное окно или поле ввода, она должна делать это Bcerдa, Не снято выделение Данные и параметры области их отображения обычно хранятся про rраммой отдельно, Поэтому после удаления вьщеленных данных занимае мая ими область экрана может остаться выделенной, причем это может быть незаметно до тех пор, пока в этой области не появятся новые данные, Отображена неверная или неполная строка Отображаемое на экране сообщение может содержать "мусор", фраr мент друrоrо, более длинноrо сообщения или, наоборот, быть урезанным, Такая ситуаuия может быть следствием как незначительной ошибки в проrрамме (проrраммист забыл очистить переменную, выделил под нее мало памяти и т,п,), так и очень серьезной, 
Приложеllие: Распростраllеllllые пpocpaAtAtllble ошибки 465 Сообщение остается на экране слишком долrо или исчезает слишком быстро Мноrие сообщения остаются на экране некоторое время, а затем исче зают, не требуя реакuии пользователя, Это время должно быть достаточ ным, чтобы 1I0льзователь успел заметить и прочесть сообщение, и зависиТ от ero важности, длины и от Toro, как часто оно появляется на экране, Если одно и то же сообщение в одних случаях остается на экране доль ше, чем в друrих, это должно вызвать у вас подозрение, Причиной может быть ситуаuия [онок, Постарайтесь опредслИ1Ь, в каких случаях получается какая задержка, а затем предложите проrраммисту внимательно проанали зировать код, Орrанизация экрана Экран должен выrлядеть орrанизованным, Информаuия не должна быть фраrментирована и разбросана [де попало, Различные классы объектов следует располаrать отдельно друr от друrа, их местоположение должно быть лоrичным, Существует множество теорий о том, как располаrать информаuию на экране, но все они сводятся к одному: пользователь дол жен леrко находить нужные элементы, Неэстетическое оформление экрана Это субъеК1ивная, но все же достаточно четко распознаваемая xapaKTe ристика, Пользуйтесь собственным чувством rармонии, а в случае HeYBe ренности обращайтесь к мнению друrих, Распространенными эстетическими недоработками являются: неудачное сочетание цветов, He равномерное расположение элементов, их непропорuиональные размеры, невыровненные строки и столбuы данных, Неудачная орrанизация меню Этот вопрос обстоятельно рассматривается такими авторами, как Шней дерма н (Schneiderman, 1987) и Смит и Мойзер (Smith & Moiser, 1984), Ero обсуждение заняло бы множество страниu, но здесь приводится лишь He сколько наиболее важных моментов, . Подобные или конuептуально связанные команды меню должны быть объединены в rpуппы, rруппы должны четко отдсляться одна от друrой, . Способ выбора элемента меню должен быть очевидным или указан ным на экране, . По возможноСти команды меню должны быть независимыми, Для достижения определенноrо результата пользователь не должен выби рать по очереди несколько команд, 
466 Часть I/I: Управле//ие проектаAtи и сруппалш . Выбор элсмента меню путем ввода ero первой (или друrой вьщелен ной) буквы предпочтительнее выбора по номеру, (Если для выбора из меню всеrда используются первые буквы команд, проследите, чтобы командам не присваивались странные имена,) Ошибки орrанизации диалоrовых окон Для изучения этоrо вопроса мы рекомендуем выпущенные компанией IВM учебные пособия SAA Advaпced lпterface Desigп Guide (1989) и SAA Basic lпterface Desigп Guide, а также пособие компании Apple Нитап lпterface Guideliпes (1987), . Диалоrовые окна должны иметь стандартизированный интерфейс, Например, они должны выводиться в одном и том же месте экрана, их текст должен отображаться одним и тем же щрифтом и одинаково выравниваться, заrоловок окна должен отражать название OTKpЫB щей ero команды, Если для выхода из окон и подтверждения запро сов используются клавищи (обычно <Enter> и <Esc», они должны быть одинаковыми во всех окнах, . Элементы диалоrовоrо окна должны быть орrанизованы лоrично, Связанные элементы должны располаrаться рядом, а их rруппы четко отделяться друr от друrа, . Поля ввода и выбора должны быть выровнены вертикально и rори зонтально, чтобы пользователь Mor перемещаться между ними с помощью клавищ управления курсором, . Зависимости между диалоrовыми окнами должны быть очевидными, Иначе, если действия пользователя в одном диалоrовом окне OTpa зятся на доступности опuий друrоrо, лоrически не связанноrо с ним окна, пользователя это может смутить, Труднонаходимые инструкции Пользователь всеrда должен знать, куда посмотреть, чтобы выяснИ1Ь, что делать дальще, Если экран заrроможден информаuией, определенная область всеrда должна быть зарезервирована для команд и сообщений, Кроме Toro, хорощим правилом является размещение критической инфор маuии в центре экрана, Неуместное использование миrания Миrающее изображение или текст MrHOBeHHO привлекает внимание пользователя, Однако ни в коем случае не следует злоупотреблять этим эффектом, поскольку он утомляет и раздражает, 
Приложеllие: Распростраllеllllые просраAtAtllые ошибки 467 Пестрые цветовые сочетания Умелый подбор цветов может сделать проrра.\lМУ привлекательной и облеrчить ее использование, а неумелый  сделать все наоборот, Цвета должны быть ненавязчивыми, спокойными, их не должно быть MHoro, Задача более ярких элементов  привлекать внимание при необходимос ти, а не отвлекать ero от основной работы, Обратите внимание на [apMO ничность цветовых сочетаний, По возможности следует предоставлять пользователю альтернативу, Использование цветов в качестве смысловоrо элемента интерфейса Конструктор проrраммы нс должен использовать цвета в качестве ин дикаторов, если рассчитывает, что она будет эксплуатироваться широким KpyrOM пользователей, Среди них MoryT быть дальтоники, а кроме Toro, у некоторых пользователей MoryT быть монохромные мониторы, Несоrласованность со стилем операционной среды Если в операuионной среде проrpаммы сушествуют определенные CTaH дарты пользовательскоrо интерфейса, лучше Bcero их придерживаться, Например, в современных rрафических средах интерфейс командной CTpO ки выrлядит анахронизмом, Даже если конструкторам проrраммы кажется, что они MoryT предло жить лучшее решенис, нс каждый пользователь захочет обучаться новым соrлашениям, Помнитс, что пользователь работает не с одной, а с uелым комплексом проrрамм, и он будет чувствовать себя rораздо комфортнее, если все они будут оформлсны В едином стиле, выводить одинаковые ди алоrовые окна в одних и тех же местах и по возможности управляться одинаковыми комаНдами, Невозможность избавиться от избыточной информации на экране Прекрасно, коr;щ на экране отображается меню проrраммы и панели инструментов, но ещс ;IУ'IШС, если опытный пользователь может убрать их с экрана и отображать только в случае необходимости, освободив себе тем самым рабочее пространство, Орrанизация команд и способы их ввода В этом разделе речь идет о том, как орrанизованы команды проrpаммы и как они представлены пользователю, Все возможные варианты стилей ввода команд рассматриваст в своей работе Шнейдерман (Schneiderman, 1987), Мы же предполаrаем, что конструктором проrpаммы сделан правиль ный выбор, и рассматриваем только ошибки ero реализаuии, 
468 Часть III: Управлеllие проектаAtИ И сруппал1U Несоответствия Чем большему количеству универсальных соrлашений подчиняется проrрамма, тем леrче ее ИЗУЧИ1ь и тем более профессионально она выrля дит, Однако выработать такие универсальные соrлашения нелеrко, и имен но ПОЭТОIУ в проrраммах обычно MHoro несоответствий, Так соблазнительно воплотить каждую идею независимо от друrих, Однако множество мелких несоответствий, таких незначительных, если рассматри вать их по отдельности, MoryT сделать проrрамму абсолютно неприrодной к использованию, Неуместная оптимизация Часто проrpаммисты допускают несоответствия в поведении проrpаммы ради повышения ее производительности, Однако каждое несоответствие делает проrрамму более сложной, Постарайтесь убедить в этом проrрамми ста, Стоит ли ради Toro, чтобы исключить OДHOДBa нажатия клавиш, делать изучение проrраммы более сложным и рисковать доверием к ней пользо вателей? Как правило, нет, Непоследовательный синтаксис Синтаксис команд должен быть простым в изучении, таким, чтобы через некоторое время пользователь просто перестал о нем думать, К син таксису относится, например, следующее: . порядок указания источника и места назначения копируемой или перемещаемой информаuии; . тип используемых разделителей (пробелы, запятые и т,п,); . порядок следования операторов и операндов (инфиксный (А+В), префиксный (+АВ), постфиксный (АВ+», Неодинаковый стиль ввода команд Команду можно выбрать из меню с помощью мыши или клавиш управ ления курсором, можно ввести ее первую букву, аббревиатуру, номер или воспользоваться функuиональной клавишей, В проrрамме должен исполь зоваться единый командный стиль, Если проrрамма предлаrает альтерна тивные способы ввода команд, они должны быть доступны во всех ее меню и режимах, Если же по объективным причинам способ ввода команд в разных частях проrpаммы должен быть различным, это должно быть оче видно пользователю, Нелоrичные сокращения Если в ПРOl-рамме используется командный язык, правила сокращений команд должны БЫТh лоrичными и леrко запоминающимися, Если для 
Приложе//ие: Распростра//е////ые просраAtAt//ые ошибки 469 команды delete используется сокращение del, а для команды list  ls, как 1I0льзователю это запомнить? Непоследовательные правила завершения ввода Правила, по которым пользователь сообщает проrpамме, что ввод дaH ных в поле завершен, должны быть удобными и лоrиЧными, Предположим, что в определенное поле можно ввести имя длиной максимум 8 символов, Если введенное пользователем имя состоит из 5 символов, он нажимает <Enter>, чтобы указать проrрамме, что ввод окончен, Если же введены все 8 символов, некоторые проrраммы автоматически предполаrают, что ввод завершен, и переходят к следующему действию, Это может СМУ1ить пользо вателя, а иноrда и быть неправильным, если пользователь ошибся и хочет \IТOTO исправить или просто еще думает, Несоответствие опций Если определенная опuия имеет смысл для нескольких команд, она должна быть доступна для них всех, При этом она должна одинаково Ha зываться и задаваться одним и тем же способом, похожие названия команд Если названия двух команд похожи, их леrко спутать, Непоследовательная интерпретация реrистра Если интерпретатор команд чувствителен к реrистру символов, все названия команд должны соответствовать одним и тем же соrлашениям (либо начинаться с большой буквы, либо состоять только из маленьких букв или только из больших), Неодинаковое положение команды в меню Если одна и та же команда встречается в нескольких меню или подме ню, ее трудно располаrать всеrда в одной и той же позиuии, Все же, если постараться, этоrо можно добиться, Неодинаковое использование функциональных клавиш Везде в проrрамме функuиональные клавиши должны быть связаны с одними и теми же командами, Перестановки (коrда в одном месте <F3> удаляет данные, а <F4> сохраняет, а в друrом месте <F3> сохраняет, а <F4> удаляет) совершенно неДОПУСТИМbJ, Непоследовательные правила обработки ошибок Встретив ошибку, проrрамма может сообщить о ней пользователю, а может попытаться ее исправить, После этоrо проrрамма может прекратить работу, перезапуститься или вернуться в предыдущее состояние, Обработ 
470 Часть I/I: Управле//ие проектаAtи и сруппаAtи чик ошибок lOжет сохранить информаuию о произошедшей ошибке на диске, дописав ее в имеюшийся файл, или записав поверх предыдушей информаuии, Вариантов множество, но поведение конкретной проrраммы должно быть последовательным и предсказуемым, Непоследовательные правила редактирования Для изменения любых введенных ранее данных должны применяться одни и те же клавиши и команды, Непоследовательные правила сохранения данных Проrpамма должна всеrда и везде сохранять данные одинаково, с одни ми И теми же интервалами времени и по одним и тем же командам, Нельзя допускать, чтобы в одних случаях данные сохранялись по мере ввода, в друrих  по достижении конца записи или при выходе из окна, а в Tpe тьих  вообше только по команде пользователя, Потери времени Проrрамма не должна тратить зря ни одной секунды времени пользо вателя, Лроrулки по меню Если проrpамма заставляет пользователя выполнять выбор за выбором, и в конце длинноrо пути выясняется, что необходимая ему команда Haxo дится в друrом месте, не реализована или для ее выПолнения необходимо вначале сделать \IТOTO еше, едва ли пользователь останется доволен, Про анализируйте сложные деревья меню на предмет таких ситуаuий, Выбор, который не может быть сделан В меню не должно бьrrь команд, которые невозможно выполнить, Как можно просмотреть или удалить данные, которых нет? Как можно распе чатать документ при отсутствии принтера? Как почувствует себя пользова тель, если на экране будет написано "Для получения справки нажмите <Fl>", а коrда он нажмет эту клавишу, проrрамма Скажет "к сожалению, справка по данной теме отсутствует"? Вы совершенно, совершенно уверены? Проrpамма обязана запрашивать у пользователя подтверждение крити чески важных или деструктивных команд, Прежде чем проrpамма перефор матирует заполненный данными диск, пользователь должен дважды подтвердить свое намерение, Однако не следует заставлять пользователя подтверждать каждую мслочь, Такая навязчивая предупредительность oд нажды приведст к тому, что пользователь автоматически нажмет Да для серьезной и разрушительной команды, 
Приложе//ие: Распростра//е////ые просраAtAt//ые ошибки 471 Непонятные названия команд Названия команд должны быть информативными, Не следует заставлять пользователя постоянно справляться в руководстве, что делает та или иная команда, Меню Меню должны быть простыми И лоrичными, Следует избеrать длинных меню, подменю неопределенноrо назначения, в которых пользователю трудно отыскать нужную команду, непонятных пиктоrpамм и названий, Без тщательноrо планирования длинные MHoroypOBHeBbIe меню становятся Ha стоящей катастрофой, Чересчур сложная иерархия меню П роrраммисты, создающие MHoroypOBHeBbIe меню, обычно следуют правилу, по которому НИ в одном меню не должно быть более семи эле ментов, Однако это правило rодится скорее для новичков, чем для профес сионалов, Опытный пользователь предпочтет сэкономить время на открытии вложенных меню, длинные же списки команд ero ничуть не смущают, rлавное, чтобы меню было тщательно спланировано, Интересные соображения по данному вопросу можно найТи в работах таких авторов, как Пейеп и POYCKXocтpaHД (Раар & RoskeHostrand, 1986) и MaKrperop, Ли и Лэм (MacGregor, Lee & Lam 1986), Неадекватные правила переходов по меню Даже в меню среднеrо уровня вложенности у пользователя в любой момент должна быть возможность вернуться в предыдущее меню, перейти на самый верхний уровень и выйти из проrраммы, Даже если в меню COT ни элементов, следует предусмотреть спеuиальные комбинации клавиш для их быстроrо выбора, Слишком MHoro путей к одному и тому же месту Если одни и те же команды присутствуют во множестве меню, проrрам ма явно требует реорrанизаuии, Не то чтобы команду никоrда нельзя было помещать в нескольких меню  в некоторых случаях это очень удобно,  но существуют определенные пределы, Если создается ощущение, что в проrрамме можно откуда уrодно попасть куда уrодно, ее внутренняя CTPYK тура может быть очень запутанной, а значит, и надежность должна вызвать у тестировщика большие сомнения, Невозможность перехода между определенными состояниями Некоторые проrраммы после выполнения пользователем определенных действий не позволяют ему выйти из Toro режима, в котором он оказался, 
472 Часть 1/1: Управле//ие проектаAtи и сруппаAtи иначе, как перезапустив проrpамму, Как правило, в таком оrраничении нет объективной необходимости, Связанные команды расположены в различных меню в сложном меню правильно сrруппировать команды не TaKTO просто, Конструктор может не подумать о связи между двумя элементами и поме стить их в разные меню, Составляя отчет о такой ошибке, поясните, как связаны эти элементы, и предложите, в какое меню их лучше Bcero поме стить, Несвязанные команды объединены в одном меню Некоторые команды оказываются [де попало просто потому, что КТOTO поленился подумать, к какой rруппе их лучше Bcero отнести, и, может быть, реорrанизовать все меню или добавить к нему еще один элемент caMoro BepxHero уровня, Командные строки Вводить названия команд сложнее, чем выбирать их из меню, Однако при больщом количестве команд и опuий опытные пользователи MorYT предпочесть интерфейс комаНдНОЙ строки, Для рещения некоторых задач менюориентированный интерфейс оказывается слишком rромоздким, В этом случае важно, чтобы набор команд был составлен так, чтобы их Ha звания :lerKO запоминались и вероятность ошибок была сведена к миниму му, Учет реrистра символов Если при распознавании команд проrрамма учитывает реrистр симво :lОВ, как праВИ:lО, ЭТО неудобно и ведет к ошибкам, ЛерестаНО8ка парамеТРО8 Наиболее распространенным примером является порядок указания ис точника и приемника данных, Например, команда сору FILEl FILE2 может означать копирование файла FILEl в FILE2, а может и наоборот, Сам по себе порядок параметров не имеет значения (люди леrко запомнят любой вариант), но для всех команд он должен быть одинаковым, Кроме Toro, приложения должны следовать правилам, установленным в операци онной системе, Не распознаются полные имена команд Сами по себе сокращения  вещь хорошая, но у пользователя Bcerдa должна бьrrь возможность ввести и полное имя команды, например, de!ete, а не de!, Полные имена запоминаются лучше, чем сокращения, особенно если единоrо правила для образования сокращений не существует, 
Приложеllие: Распростраllеllllые просраAtAtllые ошибки 473 Не допускаются сокращения у пользователя должна быть возможность ввести, например, del BMec то delete, Хотя такая возможность имеется не во всех системах, без COMHe ния, она очень удобна, Сложная команда в одной строке Некоторые проrpаммы требуют ввода чрезвычайно сложных команд, (Во всех ли случаях, Korдa А, В и С истинны, а D  ложно, истинно Х?) Пользо ватель, которому приходится вводить в одной командой сложные лоrические операторы, делает MHoro ошибок. Для подобных случаев rораздо лучше под ходят формы ввода, последовательные запросы и запросы по образuу, Отсутствие возможности пaKeTHoro ввода у пользователя должна быть возможность подrотовить список команд в текстовом редакторе, а затем предложить ero проrрамме LVIЯ выполнения, как если бы все эти команды были последовательно введены с клавиатуры, Отсутствие возможности редактирования команд у пользователя должна быть возможность редактирования Toro, что он вводит, как минимум с помошью клавиши <Back Space>, Если пользова тель попытался выполнить неправильную команду, проrрамма должна co обшить об этом, а затем предоставить возможность отредактировать введенную строку и повторить попытку, Нестандартное использование клавиатуры Если компьютер поставляется со стандартной клавиатурой, за клавиша ми которой традиuионно закреплены определенные команды, проrрамма должна придерживаться этих соrлашений, Невозможность использования клавиш управления курсором, функциональных клавиш и клавиш редактирования Все эти клавиши должны работать, даже если у части пользователей проrраммы их на клавиатуре нет, Нестандартное использование клавиш управления курсором и редактирования Эти клавиши должны работать так, как привыкли пользователи тех компьютеров, для которых предназначена данная проrрамма, Нестандартное использование функциональных клавиш Если в большинстве проrрамм клавиша <FI> связана с командой Справка, не следует связывать ее с командой Удалитьфайливыйти, 
474 Часть 111: Управле//ие проекта;ощ и сруппа.llИ Принятие недопустимоrо ввода Проrрамма должна иrнорировать символы, лоrически недопустимые во вводимых пользователем данных, например, буквы при вводе числовых значений, Она не должна принимать неДОПУСТИlые СИlВолы и отображать их на экране, Сообщения об ощибке в подобных ситуаuиях тоже излищни, Отсутствие индикаторов состояния клавиатуры у пользователя должна быть возможность в любой МЩIСНТ MrHOBeHHO определить состояние клавиатуры (нажата ли клавиша <CapsLoc>, активен ли режим замены символов и т,п,), Для этоrо служат индикаторы на самой клавиатуре, а также подсказки на экранс, Отсутствие реакции на управляющие клавиши у пользователя должна быть возможность прервать текущую операuию, Кроме Toro, проrрамма должна распознавать стандартные системные кла виши, например, <Рriпt Screen>, на которые быстро реаrируют друrие приложения, Пропущенные команды в этом разделе описываются отсутствующие в некоторых проrpаммах необходимые команды и функuии, Переходы между состояниями Большинство проrрамм осуществляет переходы из одних состояний в друrие, После запуска проrpамма находится в одном состоянии, В ответ на выбор пользователем какойлибо команды меню она изменяет свое COCTO яние, Обычно проrраммисты достаточно хорошо тестируют код, чтобы пользователь Mor достичь любоrо желаемоrо состояния проrраммы, OДHa ко они не всеrда предусматривают LVIЯ пользователя возможность изменить свой выбор, Невозможно выйти, ничеrо не сделав у пользователя должна быть возможность сообщить проrрамме, что последний выбор сделан им по ошибке и он желает вернуться к предьщу щему состоянию, Невозможно выйти из подпроrраммы у пользователя должна быть возможность прервать выполнение про rраммой текущеrо задания и вернуть данные к исходному состоянию, Например, это относится к редактированию или сортировке данных  пользователь южет решить отказаться от внесенных изменений и оставить файл таким, каким он был перед началом текущей операuии, 
Приложе//ие: Распростра//е////ые пpocpaAtAt//ble ошибки 475 Невозможно прервать выполнение команды у пользователя должна быть возможность прервать выполнение про rраммой текущей команды, Иноrда ему необходимо вернуться к начальной rочке и внести некоторые коррективы или же выбрать ДРУI)'Ю команду, Невозможность приостановить работу nporpaMMbI Существуют проrраммы, оrраничивающие время работы пользователя с определенными данными, например, время их ввода, Коrда время истекает, проrрамма изменяет свое состояние, Она может отобразить справочную информаuию, принять значение по умолчанию или даже завершить свою работу, Хотя эти оrpаничения обычно обоснованны и полезны, бывает, что пользователь вынужден прервать работу, В этом случае у Hero должна быть возможность сообщить проrрамме о необходимости сделать перерыв и через некоторое время продолжить работу с Toro же места, Предотвращение неприятностей в жизни случается все  и системные сбои, и ошибки пользователей, Проrраммы должны сводить их последствия к минимуму, Отсутствие возможности резервноrо копирования у пользователя должна быть возможность создать резервную копию данных, Во мноrих случаях проrрамма должна создавать такую копию автоматически (как только пользователь меняет данные), чтобы в случае любых проблем пользоваТС;IЬ леrко Mor к ней вернуться, Отсутствие команды отмены Команда Отме/lUтh обычно используется для отмены последних изме нений или последней ВЫllOлненной команды, а иноrда и rруппы команд, Оrpаниченной версией 'лой команды является команда Отме//ить удале//ие, восстанавливающая тот,ко 'ПО удаленные данные, В определенных типах проrрамм обе эти команды MOI'YT быть крайне необходимы, Отсутствие запросов на подтверждение команд Если данная пользователем команда удаляет достаточно большое коли чество информаuии, отменяет значительный объем выполненной работы или производит иные разрушительные действия, проrрамма обязательно должна запрашивать у 1I0льзователя подтверждение ero намерений, Отсутствие возможности периодическоrо сохранения данных Если пользователь вводит большое количество данных, проrрамма дол жна уметь сохранять их чсрсз определенные интервалы времени, Это [apaH тирует, что при люБО,\1 сбое большая часть введенной информаuии будет 
476 Часть I/I: Управле//ие проекта;ощ И сруппаAtИ сохранена, Данная функuия может включаться и отключаться по желанию пользователя, Обработка ошибок пользователем Приобретая опыт работы с проrраммой, пользователь выясняет, что часто делает ошибки определенноrо рода, Проrрамма должна по возмож ности предоставлять ему инструментарий ДJIЯ исправления таких ошибок и встраивания собственных проверочных средств (или условий), Не предусмотрены пользовательские условия проверки вводимых данных Если пользователь сам определяет форму или таблиuу для ввода дaH ных, у Hero должна быть и возможность указать, какие данные допустимы в каждом поле, Например, ввод в определенное поле может быть оrрани чен только числовыми значениями, Остальные данные проrрамма должна иrнорировать или oTBepraTb, Сложно исправить допущенную ошибку Исправление допушенной ошибки не должно вызывать затруднений, Пользователь не должен перезапускать проrрамму только для Toro, чтобы добраться до окна, в котором он вводил данные, и исправить их, Если на экране отображена форма ввода, то необходимо, чтобы пользователь Mor леrко вернуться к любому ее полю, если список  изменить любой ero элемент, не затраrивая остальные, Не предусмотрена возможность записи комментариев у пользователя должна бытb возможность вместе со сделанной работой сохранить и некоторые заметки, Такая функuия необходима и в системах разработки, которыми пользуются проrpаммисты, и в обычных прикладных проrpаммах, служаших для ввода и анализа информаuии, Отсутствуют средства отображения связей между nеременными Если проrрамма предоставляет пользователю возможность работы с рядом связанных между собой переменных, ему необходимы средства ви зуальноrо анализа этих связей, Разное Неадекватные средства защиты То, какая зашита необходима проrрамме и ее данным, зависит от ее назначения и требований рынка, В мноrопользовательских системах обыч но требуется возможность защиты данных от доступа друrих пользователей и даже системных адшнистраторов, Эта зашита может предусматривать 
Приложе//ие: Распростра//е////ые просрамм//ые ошибки 477 невозможность прочесть информаuию или же просто невозможность ее изменить или удалить, Вопросы защиты подробно освещает в своей рабо те Бейзер (Beizer, 1984), Избыточная защита Средства защиты проrраммы должны быть как можно более ненавязчи выми, Если вы работаете дома за собственным компьютером, не подклю ченным ни к какой информаuионной сети, проrрамма не должна заставлять вас без конца вводить пароль, Невозможно спрятать меню Мноrие проrраммы отображают на экране меню и панели инструмен тов, Как правило, все или основные команды меню и панелей доступны через определенные сочетания клавиш, Поэтому опытному пользователю удобнее убрать с экрана эти элементы, чтобы освободить место для OCHOB ной работы (например, для ввода и редактирования текста), Отсутствие поддержки стандартных функций операционной системы Если, например, в ОС используется система каталоrов, проrрамма дол жна позволять хранить данные в любых внешних каталоrах, Если в ОС определены символы подстановки (такие, как "*", заменяющий любую rруппу символов), проrрамма должна их распознавать, Отсутствие поддержки длинных имен файлов Коrдато, коrда памяти компьютеров едва хватало для основной рабо ты, а компиляторы были еще довольно неуклюжими, длина имен файлов оrpаничивалась шестью или восемью символами, Однако времена эти давно позади, Осмысленные названия файлов являются важным средством ДOKY ментирования, и они обязательно должны поддерживаться приложениями, Неrибкость npOrpaMM Некоторые IIpol'paMMJ,! являются очень rибкими, Любой их аспект ни чеrо не стоит изменить, Порядок выполнения различных заданий полно стью определяется 1I0льзователем, Однако не все проrраммы MorYT похвастаться такой настраивасмостью, Их разработчики не учли, что у пользователей MoryT быть разные вкусы и потребности, Из Bcero комплекса предоставляемых проrраммой функuий пользователь часто хочет отобрать определенный набор, который Bcerдa должен быть под рукой, а остальные убрать подальше, чтобы не мешали, Впрочем, неrибкость проrраммы  не Bcerдa недостаток, Последовательную систему с фиксированным набором возможностей леrче изучить, К тому же настройка проrраммы, функuии которой зависят одна от друrой, может быть делом достаточно сложным, 
478 Часть I/I: Управле//ие проекталш и сруппалш Настраиваемый интерфейс Проrрамма должна предоставлять простые и удобные средства настрой ки тех элементов интерфейса, от КОНфИI)'раuии которых зависит удобство и эффективность работы пользователя, Невозможность отключить звук Мноrие проrраммы используют в качестве сообщения об ошибке зву ковые сиrналы или же "озвучивают" клавиатуру, сопровождая каждое при косновение к ней rромким щелчком. В одних случаях это удобно, в друrих же может раздражать пользователя, а в ситуаuии, коrда в комнате работа ет несколько человек, вообще недопустимо, Отсутствие переключателя учета реrистра Если система способна различать строчные и прописные символы, эта возможность не должна быть жестко закреплена  лучше предоставить пользователю право выбора, Несовместимость с аппаратным обеспечением Проrрамма не должна быть жестко при вязана к конкретным типам аппаратноro обеспечения, Если пользователь модернизирует свой компью тер, проrрамма должна эффективно использовать ero новые возможности, Иrнорирование инициалиэации устройств, выполненной иэвне Если, например, проrрамма перед печатью посылает на принтер раз и навсеrда определенные управляющие коды, это ошибка проектирования, У пользователя должна быть возможность воспользоваться теми средствами настройки, которые предоставляет само устройство или операuионная си стема (например, выбрать один из собственных шрифтов принтера с помо щью переключателя на ero передней панели), Не предусмотрено отключение функции автоматическоrо сохранения Некоторые проrраммы защищают пользователя от потери информаuии в случае сбоя, периодически сохраняя вносимые им изменения, Эта исклю чительно полезная возможность ценна только TOrдa, коrда ее можно по желанию отключать, Пользователь не вссrда хочет сохранить данные, иноr да такое сохранение может принести вред, а не пользу, Невозможность эамедлить (ускорить) про крутку текста Если на экране автоматически прокручивается текст или сменяются кадры, скорость этоrо проuесса должна быть настраиваемой, 
Приложе//ие: Распростра//е////ые пpOcpaмAt//ble оши(i/>.И 479 Отсутствие возможности повторить последнее действие или выяснить, каким оно было Пользователю может потребоваться возможность повторить послсднюю команду, проанализировать ее или скорректировать, Невоэможно выполнить только что настроенную команду Если проrрамма позволяет пользоватслю выполнять настройку опреде ленных компонентов, изменения должны вступать n действис немедленно, Если же перезапуск проrраммы совершенно необходи, следует сообшать об этом пользователю, Он не должен [адать, почеу не выполняется только что настроенная команда, Не сохраняются настроенные параметры nporpaMMbI Прекрасно, если проrpамма ПОЗВО;Iяет пользователю отключить звук, Но rлавное  чтобы эта установка сохраНЯ,lась и пользователю не приходилось повторять ее при каждом запуске, Побочные эффекты настройки Изменение одних функuий проrраммы не должно влиять на работу друrих, Если же такие взаиюсвязи неизбежны, они должны быть четко документированы, Кроме Toro, необходимо сообшать о них пользователю каждый раз, коrда он настраивает взаимосвязанные функuии, Высокая степень настраиваемости Сушествуют настолько rибкие проrраммы, что практически все их ac пекты MorYT быть настроены пользователем, Проектирование таких про [рамм  задача чрезвычайно сложная, поскольку повышение rибкости ни в коем случае не должно быть достиrнуто за счет конuептуальной uелос тности и продуманности интсрфейса, Конструктор проrраммы должен уметь проанализировать ее с точки зрения опытноrо пользователя, понять, что ему может быть нужно от проrраммы, как она может быть использо вана, какие ее аспекты MoryT потребовать настройки, а какие, наоборот, должны работать раз и навсеrда определенным образом, Следует учитывать, что настройка продукта требует от пользователя ero длительноrо изучения, а также определенных конструкторских способно стей, Поэтому проrрамма с caMoro начала должна иметь вид законченно [о, uелостноrо и продуманноrо продукта, чтобы с ней Mor работать и неопытный или временный пользователь, Кто здесь rлавный? Некоторые проrраммы ведут себя довольно высокомерно, Их сообше ния крайне коротки, а стиль абсолютно непростителен  например, 
480 Часть 111: Управление проектами и сруппами IlOльзователь не может ни отменить свою комаНдУ, ни изменить введенные данные, Такие веши абсолютно неДОПУСТИIЫ, Проrраммы должны быть IIрОСТЫ В ИСlIользовании и \lаксимально дружественны, Их задача  облеr чать работу людей, а не усложнять ее, Навязывание ненужных оrраничений Некоторые ПрOI'раммы требуют, чтобы IlOльзоватсль вводил данныс в ОlIределенном 1I0рядке, завершал одну задачу перед lIереходом к друrой, IIРИНИМал решения, не IIроанализировав возможных 1 IOследствий, Вот IIРИ меры, . Почему, разрабатывая форму ввода, 1I0льзователь ДО:lжен ОlIределять имя, тип, ширину и друrие характеристики IIОЛЯ до Toro, как оно будет нарисовано на экране? Все эти параметры необходимо OlIpe делить до ИСllOльзования формы, но в IIроиессе IIроектирования ее внешнеrо вида ВllOлне можно обойтись и без них, . ОlIисывая задания в системе УlIравления проектом, ее 1I0льзователь должен IIрежде Bcero lIеречислить все задачи, затем всех сотрудни ков, а затем раСlIределить между ними работу, Если система не дает пользователю возможности lIерераСlIределять задания между COTPYk никами, едва ли она будет IIриrодна для практическоrо использова ния, Очень мноrие оrраничения налаrаются проrраммистом IIрОСТО изза ошибочноrо видения работы 1I0льзователей, "Для их же пользы" он закре пил в IIporpaMMe "оптимальную" 1I0следовательность действий, Дружественность к новичкам, создающая неудобства для onытных пользователей в проrрамме, ОlIтимизированной для новичка, задания MoryT быть раз биты на множество коротких IIOНЯТНЫХ действий, Однако для olIbITHoro 1I0льзователя обязательно должен IIрсдусматриваться более быстрый способ их выполнения, Навязчивая предупредительность и неудачная попытка сделать nporpaMMY интеллектуальной ПреДУlIредительность и искусственный интеллект IIporpaMMbI  это ее СlIособность СlIроrнозировать дальнейшие действия 1I0льзователя и ВЫIIОЛ нить соотвстствующие команды, не дожидаясь ero указаний, Это замеча тельная СlIособность, если только IIредположения IIporpaMMbI оказываются верными, АНaJlOl'И'lНЫМ образом прекрасной функuией может быть aBTOMa тическое ИСlIраВjJСНИС ошибок, если только проrрамма не "исправляет" 
Приложение: Распространенные просраммные ошибки 481 IIравильные данные, Люди делают достаточно собственных ошибок, чтобы терlIеть еще и 1I0стоянные ошибки не в меру преДУlIредительной IIporpaM мы, Наилучшим решением проблемы является IIредоставление 1I0льзовате лю возможности подтвердить каждое автоматическое действие проrраммы или отказаться от Hero, Запрос информации без необходимости Некоторые IIporpaMMbI запрашивают у 1I0льзователя информаuию, KO торую никоrда не ИСIIОЛЬЗУЮТ или IIрОСТО однажды отображают на экране либо же просят ero IIOBTOpHO ввести уже введенные однажды данные (не IIроверить и подтвердить их IIравильность, а именно ввести повторно), Как ни странно, такие ошибки чрезвычайно раСlIространены, Ненужное повторение действий Если пользователь ДОIIУСТИ,,l ошибку в середине длинной последователь ности действий, некоторые IIporpaMMbI заставляют ero все IIОВТОРИТЬ CHa чала, Друrие заставляют ero 1I0дтверждать каждый шаr при выполнении какихлибо нестандартных действий, Все это  неоправданные потери времени 1I0льзователей, Ненужные оrраничения Зачем оrраничивать количество 1I0лей или записей в базе данных, KO личество символов в текстовом документе, почему бы не допустить ввод в ячейки электронной таблиuы нечисловых данных? В IIporpaMMe не долж но быть оrраничений, которые никак не влияют на ее IIроизводительность или надежность, Производительность Мноrие OIIbITHbIe IlOльзователи считают производительность IIporpaMMbI одной из ее важнейших характеристик, Существует несколько ОlIределений IIроизводительности, . Скорость просраммы, т,е, скорость ВЫllOлнения ею стандартных за дач, НаlIример, как быстро текстовый IIроиессор lIеремещается к кониу файла? . Проuзводительность работы пользователя, Эта характеристика OTHO сится к быстроте выполнения более КРУIIНЫХ заданий, Например, сколько времени 1I0требуется 1I0льзователю на ввод и IIечать пись ма? . Ощущение производительности, Насколько быстрой IIporpaMMa Ka жется пользователю? 16 
482 Часть 111: УправлеНl/ е проеi<та,\1И и сруппаЛll/ a  в ;JJобом с;)учае работа высокоскоростной lIpOI'paIMbI снеудачным IIО:lьзовательским интерфейсоч кажется медленнее, чем на самом деле, Низкоскоростная nporpaMMa Мноrие ошибки IIроектирования и кодирования IIРИВОДЯТ к зачеJ\лению раБоIы IIрОl'раммы, Проrрамча может ВЫIIOЛНЯТЬ ненужную работу, наllрИ мер, иниuиализировать области IIaЧЯТИ, которые lIеред ИСПОЛl,зование1 обязательно будут lIерезаlIисаны, Или же IIроrрамча может без необходи мости IIОВТОРЯП, определенные действия, наlIример, делать внутри I!ИК;lа то, что может быть один раз выполнено вне ero, Любая задержка реакuии на действия 1I0льзователя IIредставляет собой I!роблему, Даже lIауза в четверть секунды \lOжет нарушить ero KOHиeHTpa uию и IIривести к существенному увеличению времени ВЫllOлнения Bcero задания, Медленное реаrирование п роrрачма должна неме:lленно отображать вводимые пользователем данные, Если 1I0льзователь замечает паузу между нажатием клавиши и IlOявлением символа на экране, значит, проrрамма реаrирует слишком медленно, а это IlOвышает вероятность ошибки 1I0льзователя, Быстрая pe акuия важна для любых событий  lIеречещения чыши, cBeToBoro lIера, rолосовоrо ввода, Как повысить производительность работы пользователя Даже IIроrpаччу с ЧПlOвенной реакuией нельзя назвать IIроизводитель ной, если она зачедляет работу IIО;Iьзователя, Вот IIричеры "узких мест": . все, что IlOвышает вероятность ошибок 1I0льзователя; . Iромоздкая схема ИСlIравления ошибок, KOrдa проrрамма, наlIричер, заставляет 1I0льзователя IIОВТОРНО вводить большое количество ин форчauии; . все, что ставит 1I0льзователя в ТУIIИК, заставляя ero обращаться к руководству или СlIравочной системе; . неОlIравданное увеличение количества деЙствий, необходичых для достижения определенноrо результата: отсутствие сокращений, раз биение задач на челкие 1I0дзадачи, требование подтверждения He значительных команд и T,II, Конкретные ошибки перечисленных типов описаны в друrих разделах даННОl'О I!риложения, Однич из эффективных четодов давления на PYKO водство В uелях повышения IIроизводительности IIроrpамчы является IIpO 
Приложе//ие: Распростра//е//l/ые просрамм//ые ОU/И()J..'l/ 483 ведение сравнительных ИСllьпаний, показывающих IIреимущесТlЮ уже И,\lеющихся на рынке аналоrичных IIроrрачм, Время ответа Хорошая IIporpaMMa не должна застаВ1ЯТЬ пользователя ждать, Она f1'll0BeHHO раСlIознает команды 1I0льзователя и назначает ич наивысший IIриоритет, НаlIричер, введите несколько строк текста, IIOKa текстовый IIроиессор lIерефорчатирует экран, Он должен немедленно IIрекратить форчатирование и отобразить введенный текст, Проrрамма, занятая друrими задачами, не распознает ввод Проrрамма, ориентированная на ввод данных, должна раСlIознавать ввод даже тоrда, коrда она занята друrой работой, Она запоминает вводи Iые IlOльзователеч данные и отображает их чуть позднее, Отсутствие предупреждений о длительных операциях Если на ВЫllOлнение очередноrо действия IIporpaMMe 1I0требуется более нескольких секунд, она должна сообщить об этом пользователю и указать IIредllOлаrаеIУЮ длительность IIроиесса, чтобы он Mor Сп.lанировать соб ственное время, Кроче Toro, необходимо IIредоставить пользователю воз \южность отчены кочанды, Отсутствие индикаторов хода работы выlIлнениеe очень длительных заданий желательно СОlIровождать инди каторачи, указывающичи, какая часть работы уже выполнена и какая еще oCTa;lacb, Проблемы таймаутов Некоторые IIрOl'ра\IЧЫ OI'раничивают время, выделенное 1I0льзователю ,'[ля ввода данных, За ИСК:lючениеч аркадных иrр, едва ли найдутся случаи, в которых такое оrраничение действительно необходимо, Тайчауты MoryT быть не только слишком короткими, но и слишком ;UIИННЫМИ, НаlIример, lIеред выполнением какоrонибудь длительноrо за дания в IIporpaIMe может быть IIредусмотрена lIауза, в течение которой IlOjlьзователь может это задание отменить, Если lIауза слишком длительна, это тормозит работу, Кроме Toro, один и тот же таймаут одним людям, ждущим ero OKOH чания, может IlOказап,ся JIЛИННЫМ, а друrим, вводящим данные, СЛИШКО\1 коротким, 
484 Часть 111: Управление проектами и сруппами Надоедливая nporpaMMa БИII! Вы уверены? БИII! Ваш диск ЗЩlOлнен на 85%, Пожалуйста, 1I0скорее ero освободите, БИII! Вы действителы/О уверены? БИII! За IlOследний час вы ни разу не сохраняли текст, БИII! Ваш диск ЗЩlOлнен на 86%, Пожалуйста, 1I0скорее ero освободите, БИII! Пожалуйста, введите еще раз свой lIароль, БИII! Вы ничеrо не вводите вот уже десять минут, Пожалуйста, выйди те из системы, БИII! Ваш диск ЗЩlOлнен на 86%. Пожалуйста, 1I0скорее ero освободите, БИII! Вы не ответили на 14 сообщений, НаlIоминания, IIреДУlIреждения и BOllpOCbI, разумеется, IlOлезны, но во всем следует соблюдать меру, Вам действительно нужна справочная информация и rрафика при скорости обмена 300 бод? При низкоскоростном соединении с сервером IIporpaMM и данных, коrда КОМlIьютер 1I0льзователя работает в режиме терминала, IIporpaMMa должна быть наlIисана так, чтобы через соединение lIередавался минимум информаuии, СlIравочная система, длинные меню, красивые картинки  все эти IIреимущества COBpeMeHHoro интерфейса MorYT IIрОСТО выводить 1I0льзователя из себя, коrда они медленномедленно IIрорисовываются на экране, Нередко в 1I0добных ситуаuиях наилучшим решением является интерфейс командной строки, Подобным же образом ИСIIытывать терlIение 1I0льзователя может и красивая, но медленная IIечать, Для сложных, но не необходимых rрафи ческих изображений стоит IIредусматривать быстро lIечатаемые черновые варианты, ВЫВОД Выходная информаuия IIporpaMMbI должна быть IIОЛНОЙ и IIОНЯТНОЙ читающему ее человеку или IIporpaMMe, Она должна включать все необхо димое 1I0льзователю и быть IIредставлена в желаемом им формате, Bыxoд ная информаuия должна направляться на любое указанное 1I0льзователем устройство, Невозможно получить определенные данные у IlOльзователя ДО;Iжна быть возможность IIОЛУЧИТЬ (увидеть и раСlIеча тать) любые данные, которые он ввел, включая и техническую информа 
Приложе//ие: Распростра//е//l/ые просрамм//ые ошиБJ.;И 485 uию, наlIример, формулы, введенные в ячейки электронной таблиuы, июt ОIIределения 1I0лей базы данных, Невозможно перенаправить вывод у 1I0льзователя должна быть возможность наlIравить вывод IIporpaMMbI на указанное им устройство, НаlIример, очень часто возникает необходи мость сохранить IIредназначенные для lIечати данные в дисковом файле, Затем их можно отредактировать или наlIечатать в друrой IIporpaMMe, бо лее быстрой И,,1И удобной, Проrрамма не должна IIреlIятствовать 1I0льзователю направлять данные на неожиданные устройства  IIлоттеры, ленточные наКОlIители и т,п, Формат, неподходящий ДЛЯ, дальнейшей обработки Если IIporpaMMa должна сохранять данные в формате, IIOНЯТНОМ друrой IIporpaMMe, необходимо IIроверить их совместимость, Это означает, что следует раздобыть КОIIИЮ второй IIporpaMMbI, сохранить данные в первой и IIрочитать во второй, Об этом тесте часто забывают, особенно если про rpaMMbI разработаны разными компаниями, Слишком мало или слишком MHOrO выходной информации у пользователя должна быть возможность модифиuировать отчет, что бы раСlIечатать только необходимую информаuию, Зачем ему просматри вать ворох распечаток в IlOиске ДBYXTpex строчек? Избыток информаuии является IIОЧТИ таким же серьезным недостатком, как и ее отсутствие, Невозможность форматирования выходной информации Полученные данные IlOльзователь может захотеть представить в удобном ему виде: чтото выделить, 1I0дчеркнуть, чтото отделить, переrpуппировать ОlIределенные данные, Для этоrо проrpамма может сохранять данные в формате какоrонибудь paclIpocTpaHeHHoro TeKcToBoro проuессора, Абсурдная степень точности CYIIO IIредставлять результат ОlIераuии 4,2 + 3,9 в виде 8,1000000, Выходные данные, как правило, должны окруrляться до степени точности входных или же просто соответствовать заранее ОlIределенному формату, 
486 Часть III: Управлс//ис пpOCKПIa,ltU и сруппами Невозможность форматирования заrоловков таблиц и подписей рисунков Следует IIредоставлять IIОЛhЗователю возможность изменять 1I0ложение, шрифт и даже текст IIOДllисей и заrоловков таблиu. диаrра\!м, rрафиков и T,II, Невозможность изменения масштаба rрафиков у пользователя должна быть возможность изменить заданный 110 умол чанию \!асштаб формируемых IIроrpаммой rрафиков и диаrрам\!. Обработка ошибок Ошибки в подсистемах обработки ошибок чрезвычайно paClIpOCTpaHe ны, Проrрам\!а может не раСlIознавать все возможные ошибки, не IIpeДOT вращать те из них, которые леrко \юrут быть IIредотвращены, или IIЛОХО СlIравляться с их 1I0следствиями. Предотвращение ошибок в книrе Йордана (Уошdоп, 1975) uелая Iлава 1I0священа технике IIpe дотвращения ошибок, ПрОI-рам\!ы должны быть защищены от неДОIIУСТИ Moro ввода и неlIравильной ЭКСlIлуатаuии, Простейшим способом защиты является IIроверка вводимых данных, Неверное начальное состояние Если ОlIределенная область lIамяти должна содержать нули, IIporpaM\!e не мешает это IIроверить, IIрежде чем ее ИСlIользовать, Неадекватная проверка пользовательскоrо ввода Недостаточно IIрОСТО сказать человеку, что он не должен вводить чи сел, состоящих больше чем IIЗ трех uифр, Проrpам\!а должна IIроверить, действительно ли введенные данные соответствуют этому условию, Если IlOльзователь мож'ет чтото ввести, IIporpaMMa должна адекватно на это среаrировать, Неадекватная защита от испорченных данных I'де rарантия, что хранящиеся на диске данные в порядке? Возможно, KTOTO редактировал файл, а может быть, он был испорчен в результате 3IJlшратнOJ'О сбоя, Даже если IIроrраммист IIроверил файл IlOсле ero запи си на диск, необходИ\1O удостовериться, что к моменту чтения файл остался в то,\! же состоянии, 
lIриложс//ие: Распростра//е////ые про?ра,IIМ//Ы(, Оlll//Щ,/i 4Х7 Не выполнена проверка переданных пара метров Подпроrрама не должна IIредполаrать, что ее всеrда вызывают IIpa. вильно, Она должна сама удостоверип,ся в адекватности lIереданных лан, ных, Недостаточная защита от ошибок операционной системы в операuионной системе имеются ошибки, Некоторые из них MorYT IIРОЯВЛЯТЬСЯ при обрашении IIриложений к определенны\! интерфейсным функuиям, Если, наlIример, IIроrpаммист знает, что IIрИ IlOlJытке lIечати данных сразу после их сохранения на диске операuионная система сбоит, он должен rарантировать, что IIporpaMMa ни IIрИ каких обстоятеЛl,ствах не будет этоrо делать, Не выполняется проверка версии Если ИСllOлняемый код хранится в нескольких файлах, KTOTO может IIOIIытап,ся ИСIIOЛI,зовать новую версию одних файлов со старой версией друrих, Модернизируя IIporpaMMHoe обеСlIечсние, нользователи часто :1O lIускают 1I0добные ошибки, Поэтому IIporpaMMa должна IIроверять версии всех своих файлов и сообщап, 1I0льзователю о несоответствиях, Недостаточная защита от неправильноrо использования Люди MOIYT на\lсренно вводип, в IIporpaMMY неверные данные, чтобы посмотреть, как она на это отреаrирует, Мотиваuий всех и каждоrо не IIреДУСМОТРИШh, Утвсрж:\сние, что ни один разумный 'Iеловек не станет ИСllOльзоваТh IIpO!'rafIY !lOдобным образом не защищает ее от людей He разумных, Выявление ошибок Как IIрави;ю, у IIrOlpa1\t1 достаточно информаuии для ОlIределения IIравильности Ю!JlJlЫХ ИJJИ их обработки, В этом разделе ОlIисаны HeKOTO рые часто ИПlOр!lrУСIh!С IIроrраммистами возможности выявления ошибок, Переполнение ПереlIОЛНСНИС  это ситуаuия, коrда результаты вычислений слишком велики, чтобы IIrOl'рюща моrла их обработать, Часто так 1I0лучается IIрИ сложении или УЩЮЖСIIИИ очень больших чисел, IIрИ делении на нуль ИJН1 делении очень \la.:JcHhKIIX чиссл, Проrpамма обязательно должна IIpOBCr$lll, 
488 Часть 111: Управление проектами и сруппами результаты подобных операuий, однако некоторые продукты этоrо не дe лают, Невозможные значения Проrрамма должна проверять переменные, чтобы удостовериться, что хранящиеся в них данные не являются заведомо неверными, Например, IIporpaMMa не должна IIринимать такие даты, как 3\ февраля, Если IIpO [рамма ВЫllOлняет одно действие, коrда некоторая lIеременная имеет зна '/ение О, и друrое, коrда она имеет значение 1, и никаких друrих значений lIеременная иметь не может, следует вее же IIроверить ее содержимое lIеред IIринятием решения, а не считать, что, если в lIеременной не О, значит, \, Непроверенные данные KTOTO может 1I0пытаться снять со cBoero счета \0 мпн долларов, однако IIporpaMMa должна заlIрОСИТЬ разрешение на такую транзакuию еще у He скольких людей, Флаrи ошибок Проrрамма вызывает IlOдllporpaMMY, в которой IIРОИСХОДИТ сбой, ПОk проrрамма заносит информаuию об этом в определенную переменную, называемую фЛGi!ОМ ОUlUбкu, После вызова проrрамма может IIроверить флаr, а может и забыть это сделать  такое случается довольно часто, Возвращенные подпроrраммой испорченные данные будут ИСllOльзованы как правильный результат, Аппаратные сбои Проrрамма должна учитывать, что устройства, к которым она ПОДКJ\Ю чается, MoryT сбоить, Мноrие устройства достаточно интеллектуальны, чтобы сообщить о неудачном выполнении переданных им команд, В этом случае IIporpaMMa должна прекратить взаимодействие с устройством и co общить О IIроизошедшем пользователю, Сравнение данных Подводя баланс своих доходов и расходов, вы сверяете предllOлаrаемый остаток денеr с реальным содержимым cBoero кошелька, Если суммы не сходятся, значит, в ваших заlIИСЯХ допущена ошибка, У проrрамм также часто имеется возможность сверить два набора данных или результаты IIроведенных двумя СlIособами вычислений, Восстановление после ошибок Происходит ошибка, проrpамма замечает ее и пытается чтото преДlIрИ нять, Часто код, выlIлняющийй восстановление IIOCJle нестандартных ситу 
Приложеliие: Распростра//е//l/ые просрамм//ы(' III/II/lih 11 4Х9 аuий, бывает очень IIЛОХО ОТЛi:lЖен, а иноrда даже не протестироваll I\OI\L'l', В то же время ошибки в 1I0дсистемах восстановления обычно И\lеют Kpaiil\l: неlIриятные последствия д.ля IlOльзоватеJIЯ, Автоматическое исправление ошибок Некоторые проrраммы СlIособны не только выявлять ошибки, но и исправлять их, никоrо не беспокоя, на основе друrих данных или опреде ленных правил, Это замечательная способность при условии, что исправ ление всеrда выполняется праВИ,,1ЬНО, Отсутствие сообщения об ошибке Проrрамма должна обязательно сообщать о любой своей ошибке, даже если ошибка внутренняя и ее последствия исправлены автоматически, Не обязательно сообщать об ошибке пользователю, иноrда достаточно сооб щить о произошедшем администратору мноrопользовательской сиcrемы И,,1И внести запись в файл журнала, Не установлен флаr ошибки Если в 1I0дпроrpамме происходит ошибка, предполаrается, что 1I0дпроr рамма установит соответствующий флаr, Если она этоrо не сделает, вызы вающая IIporpaMMa будет считать, что возвращенные ей данные верны, что IIриведет к новым ошибкам, Куда возвращается управление? Если в определенном фраrменте кода происходит сбой, пусть даже правильно обработанный, куда будет передано управление после этоrо? Особенно остро эта IIроблема стоит в проrpаммах, в которых используют ся не вызовы подпроrpамм, а переходы по команде GOTO, Прекращение выполнение nporpaMMbI из-за ошибки Ошибка в IIporpaMMe может быть такой серьезной, что либо проrрам ма прекратит свою работу сама, либо это сделает пользователь, Будут ли при этом закрыты все открытые файлы? Будет ли сделана необходимая запись в файле журнала? Короче rоворя, завершит ли проrрамма свою работу корректно или оставит после себя полнейший хаос? Обработка аппаратных отказов Проrрамма должна разумно вести себя в случае аппаратных сбоев и отказов. Если диск переполнен, она должна уметь записать данные на друrой носитель, а не потерять их. Если устройство долrое врея не OTBe 
490 Часть 111: Управле//ие проектами и сруппами чает, она должна lIредlIOЛОЖIПI" что оно отключено, а не сидеп, и ждать вечно, Ну нет у меня нужноrо диска! ПреДlIOЛОЖИ(, что lIpOl'paM\la lIрОСИТ пользователя вставиТl, диск с неоБХОДИ\lЫМJI ей Файла,\IИ, Если IIOЛI,зователь вставляет не тот диск или же диск не читается, IIporpaM\la сообшает об этом и IIрОСИТ вставить дpy rой диск, О;\IIако, если друrоrо диска у 1I0льзователя нет, должна быть ВОЗ,\lOжносп, сообшип, об это! IIporpaMMe и продолжить работу, а не lIe резаrpужап, систему, Ошибки, связанные с rраничными условиями Тра//ич//ое условие ОJ1ределяет IlOведение проrpаммы. Если это условие касается данных, то с одной стороны ОlIределяемой условие\1 rраниuы данные обрабатываются одним Сllособом, а с ДРУI'ОЙ  друrим, Вот три очень раСlIространснных IIримера ошибок, связанных с rpаничными усло ВИЯIИ, . ffеправилыюя обработка сра//ич//о?О ЗJ/а , че//uя Если lIporpaMMa увели чивает на 1 любое число, которое меньше 100, и oTBepraeT числа, которое больше 100, что она будет делать, если 1I0льзователь введет число 100? . Невер//ое ?ра//ич//ое условие, В СlIеuификаuии сказано, что lIporpaMMa должна увеЛИ'lивап, на 1 любое число, которое меныuе 100, но OT BepraTh все числа больше 95, . lfеправLL1Ы/UЯ обработка дШ/J/ЫХ, J/e соответствующих i!раJ/ИЧJ/ЫМ усло виям, Значения с одной стороны rраниuы невозможны, нежелатеЛl, ны, неДОIIУСТИМЫ или невероятны, Для их обработки вообше не написано никакоrо кода, Что делает проrрамма, если пользователь вводит ЧИс'10, которое БОЛl,ше 100,  корректно ero oTBepraeT или разрушается? На самом деле конuеlЩИЯ rpаничных условий rораздо шире, Она OXBa тываст не только данные, но вообше любые aCIleKTbI IlOведения проrрам мы, к которым может бып, IIрименено 1I0нятие rраниu. Любые фраrменты кода, Оllределяюшие чтолибо как наибольшее, самое старое, lIервое, самое длиннос, lIроизошедшее впервые и т,п" потенuиалыlO MorYT содержать одни 11 тс же ошибки, А раз так, 1I0чему бы не применять к ним одинако вые тер.чины, 
ПриложеJ/ие: Распростра//е////ые просраМЛtliы(' Оlllllбl-:II 491 Числовые оrраничения Одни числовые оrpаничения относительно IIрОИЗВОЛЬНЫ, друrие IIрСЛ стаВJJЯЮТ собой естественные rраниuы обрабатываемых IIроrраммой значс ний, У треуrольника ровно три стороны (не больше и не меньше), СУ\l\lа величин ero уrлов равна 180 [радусам, В одном байтс MorYT храниться значения от О до 255, Если символ является буквой, ero код находится в диаlIазоне о 65 до 90 или от 97 до 122, Оrраничения на равенство Элементы списка MorYT отличаться, а MoryT бып, и одинаковыми, Как сработает сортировка в каждом из случаев? Если в СIIИске содержатся чис ла, как на их основе будут вычислены результаты статистических функuий, в частности те, алrоритм вычисления которых в случае одинаковых пара метров включает деление на о? Количественные оrраничения Длина входной строки не должна IIревышать 80 символов, Что будет, если пользователь введет 79, 80 или 81 символ? Может ли в Сlшске быть только один элемент? Ни одноrо? Какова величина среднеrо отклонения д.ля списка чисел, состоящеrо из одноrо элемента? (Оно может быть нулевым или неопределенным,) Пространственные оrраничения Если, например, проrрамма рисует rpафик в IIрямоуrольнике опреде ленноrо размера, что будет, если одну из точек rрафика нарисовать вне прямоуrольника? Оrраничения времени Предположим, что проrраМfа отображает заlIрОС, 60 секунд ожидаст ответа, а затсм, если ответа нет, отображает меню, Что IIроизойдет, если пользоватеЛl, начнет чтото вводить в IIроиессе отображения меню? Предположим, что у ПОЛlтЗователя есть 30 секунд для ответа на телефон ный звонок, Через 30 секунд телефон lIерестает звонить и вызов перенап равляется оператору, Что будет, если снял, трубку на 30й секунде? Можно ли ответить на звонок по истечении 30 секунд, но до Toro, как на Hero ответит оператор? Предположим, что вы нажимаете на клавишу <Пробел> в то время, как операuионная систеlа заrружает с диска проrрамму. Что произоидет? Информаuия о нажатии клавиши может быть проиrнорирована, coxpaHe на операuионной для заrружаемой проrраммы или передана друrой aKTI1I1 ной в этот момент IIporpaMMe, А может быть, произойдет нечто COBCCI VЖ неожиданное, наlIример, разрушение системы, 
492 Часть 111: Управление проектами и сруппами Условия 201IOK представляют собой zраllUЧllые Зllачеllия времеllи. Условия циклов Вот пример uикла: 10 IF CountVar < 45 TНEN PRINT "Это циJtJI" SET CountVar ТО CountVar + 1 GOTO 10 ELSE QUIT Проrpамма печатает слова "Это uикл" и увеличивает значение перемен ной CountVar на 1 до тех пор, пока ее значение не станет равным 45, После этоrо проrрамма прекращает работу, Выражение CountVar < 45 является условием ВЫllOлнения uикла, rраничное значение (в данном случае MaK сималЫlOе) представляет в нем число 45, Возможно также наличие в условии цикла минималЫlOrо rpаничноrо значения, а также обоих: 10 < CountVar < 45, О теcrировании условий uиклов подробно рассказывает Бейзер (Beizer, 1990), Оrраничения объема памяти Каковы максимальный и минимальный объемы lIамяти, с которыми может работать проrрамма? (Дaдa, существуют проrраммы, которые не MorYT работать со слишком большим объемом памяти,) Как проrрамма использует свою память: разбивает на страниuы, сеrментирует? Не теряют ся ли первый или последний байты cerMeHTa? (Кстати rоворя, начинается ли их нумераuия с О или с I?) ИСflOЛI,зуется ли проrpаммой виртуальная память, т,е, выrружается ли часть страниu данных на диск? Если да, как выполняется чтение данных? Возможно так: страниuа  из памяти, CTpa ниuа  с диска, страниuа  из памяти, страниuа  с диска и т,д, Как это отражается на производительности проrраммы? Оrраничения, связанные со структурой данных Предположим, что проrрамма хранит данные в виде записей, Каждая запись состоит из имени сотрудника, ero учетноrо номера и ОКЛада. Пра вилыlO ли проrрамма читает с диска первую заПИСI,? Последнюю? Как проrрамма отмечает конец одной записи и начало следующей? Все ли дaH ные соответствую этому формату? Что, если у двух служащих окажутся одинаковые учетные номера? Оrраничения, связанные с аппаратным обеспечением Если мэйнфрейм способен обслуживать до сотни терминалов, что будет при подключении 99, 100, 1 О 1 ro, Что, если 100 человек одновременно попытаются к HeIY IIOДКЛЮЧИТСЯ? 
Приложеliие: Pacпpocmpalie//l/bIe просрамм//ые ошибки 493 Что произойдет, коrда диск заполнится до отказа? Если в каталоrе lOжет храниться до 128 файлов, что будет, если попытаться сохранить в нем 127, 128 и 129й файл? Если у принтера имеется входной буфер, что будет, если проrрамма заполнит ero, но у нее останутся еще неотправлен ные данные? Что будет, если в IIринтере закончится бумаrа или картридж? Невидимые rраницы Не все rраничные условия проrраммы видны извне, НаlIример, под проrрамма может вычислять результат 110 одной формуле, если значение apryMeHTa больше 100, и 110 друrой в противном случае, Очевидно, что 100 в данном случае является rpаничным значением, но вы можете даже не 11O дозревать об использовании TaKoro алrоритма вычислений, Ошибки вычислений ПроrР'lмма чтото вычисляет и 1I0лучает неверный результат, Этому MoryT быть три IIрИЧИНЫ, . Невер//ая ло?Uка, Ее IIРИЧИНОЙ может быть опечатка, наlIример, AA вместо А+А, Возможно также, что IIроrраммист неаккуратно разбил сложное выражение на несколько более простых, Возможно, он воспользовался неверной или неlIрименимой к данной ситуаuии формулой, (Это, впрочем, уже ошибка проектирования  код делает именно то, что хотел проrpаммист, но ero представление о том, что должно быть сделано, неверно,) . Неправ/иы/О выполняются арифметические операции, Возможно, что допущена ошибка при кодировании базовых функuий, например, сложения или умножения, Такая ошибка может проявляться при каждом выполнении данной операции (например, 2+25), а может только в некоторых случаях, Как бы там ни было, при работе про l-раммы, использующей неверно закодированную функuию, возмож ны ошибки, . Неточ//ые вычисле//ия, Если проrрамма выполняет арифметические операuии над числами с IIлавающей запятой, возможны ошибки окруrления и отсечения, После ряда промежуточных окруrлений 2+2 может оказаться равным 5, даже если в проrрамме нет лоrических ошибок, Данная область настолько велика, что в этом приложении мы paCCMaT риваем ошибки вычислений лишь самым поверхностным образом, Для начальноrо ознакомления с этим вопросом можно порекомендовать книrи таких авторов, как Конте и Де Буа (Conte & deBoor, 1980) и Кнут (Knuth, 1981), Для ero дальнейшеrо изучения подойдут книrи Конте и Де Буа, Карнахана (Carnahan), Лютера и Уилкеса (Luter & Wilkes, 1969), 
494 Часть 111: Управление проектами и сруппами Устаревшие константы Иноrда КОНСТalП/,\ ИСIIОЛЬЗУЮТСЯ в IIporpaMMax непосредственно, [Iри мерами MorYT служить следующис значения: к КОМlIьютеру может бып, IlOдключено до 64 терминалов; длина конфиrураuионноrо файла не долж на IIревышать 706 байтов; lIервы1И двумя uифрами [ода являются 19, Коrда эти значения \Iеняются, IIРИХОДИТСЯ меняп, и проrрамму, При этом случа стся, что, изменив значение в одном мссте IIporpaMlbI, забывают измснип, ero в друrом, что является источником множества ошибок, Ошибки вычислений Некоторые ошибки очень IIрОСТЫ, например, ВЫllOлнение сложения вместо вычитания или lIерестановка парамстров функuии, ИСlIравип, их обычно не составляет труда, Если IIporpaMMa запрашивает входные данные, ВЫllOлняет вычисления, а затем отображает результат, выполните те же вычисления самостоятелыlO и сравните полученные данные, Неверно расставленные скобки (А + (В + С) * (D + (А / С  В Е / (В+ (F + 18 / (А  F» »» Выражения с обилием скобок очень трудно проверяп, и в них леrко ошибиться, особенно коrда некоторое время спустя после написания про [раммы в нее вносятся изменения, Неправильный ПОрЯДОК операторов Проrрамма может выполняп, вычисления не в том порядке, в каком ожидает IIроrраммист, НаlIример, если ** означает возведение в cTelleHb, так что 5 ** 3 означает 5 в кубе, будет ли 2 * 5 ** 3 равно 1000 (10 в кубе) или 250 (5 в кубе умноженное на 2)? Неверно работает базовая функция Коммерческие языки и средства разработки проrрамм обычно постав ляются с определенным набором базовых функuий, таких как функuии, выполняющие сложение и умножсние, Кроме Toro, некоторое количество таких функuий проrраммисты MoryT написать самостоятельно, и эти фун кuии MorYT содержать ошибки, вероятность возникновения которых прямо IIропорuиональна сложности функuии, (CTporo rоворя, даже встроенные функuии языка не rарантированы от ошибок, хотя обычно они очень тща телыlO IIротсстированы,) Иноrда, желая сделать код более быстрым или коротким, проrраммисты пользуются неточными формулами аппроксима uии, 
Прило:нсе//ие: Распростра//ею/ые просрамлtl/Ь/е OU/l/r!/ill 495 Переполнение и потеря значащих разрядов IIерепОЛllеlluе (overjlow)  это ситуаuия, коrда результаты ВЫ'lllслеНlIii слишком велики, чтобы IIporpaMMa моrла их обработать, IIрсДlIOЛОЖИ' ;(.:1;) IIрИlсра, что IIporpaMMa хранит ВСС числа в uелом формате, выдсляя Jl,IH них 110 ОДНЩIУ байту, С числа,\1И от О до 255 все 1I0лучастся IIpeKpaCHo, Однако сложить 255 и 255 такая IIporpaMMa не может, IIOСКОЛl,КУ результат НС 11Olещается в один байт, Подобные вещи IIРОИСХОДЯТ и IIрИ ВЫЧl'С;lени ях с IIлавающей точкой, коrда дробная часп, оказывается слишком боль шой, Переполнение может возникнуть и в случае, коrда реЗУЛI,тат вычисле ния оказывается С:lИшком маленьким, Как IIpOrpaHle сохранить число 0,34674335, если для хранения дробной части выделен ТОЛl,ко один байт? В ЭТОI случае IIpOI-раммы IIOСТУlIают поразному  отсекают неIIOМССТИВШИ еся uифры или преобразуют реЗУЛl,тат в О, В обоих случаях Ю!ССТ место потеря Зllачащuх разрядов (uпderjlow). Ошибки отсечения и окруrления ПрСДllOложим, что IIporpaMMa может хранип, числа длиной не более двух uифр, В ЧИСЛС 5,19 три uифры, Если I1porpaMMa IIрОСТО отсечст uиф ру 9, она сохранит 5,1, Вмссто этоrо она может окруrлить число, и TOrдa будет сохранено 5,2, что rораздо ближе к исходному значеНII ю, Если язык проrраммирования позволяет хранить до двух десятичных lнаков, rоворят, что он работает с точ//Остью до двух цифр, выlIлняемыыe им вычисления будут неточными, Например, 2,056 равняется IIриблизитель но 74, Однако если ОКРУI';IИТЬ 2,05 до 2,1, TOrдa 2,056 будет равно IIрибли зительно 86, Если отсеЧI, uифру 5, получив 2,0, результатом возведения в степень будет 64, Языки, работаЮЩIlС с точностью до двух uифр, нам неизвестны, а вот работающие с точностью ДО шести uифр встрсчалИСI" Вычисления такой точности rодятсн аля IIрОСТЫХ расчетов, но в сложных мате,\lатических IIporpaMMax они MorYT I1ривести к очень серьезным ошибкам, Путаница с представлением данных Одно и то же число может быть представлено несколькими способами, которые неJII,ЗЯ путать, Предположим, наlIример, что проrрамма просит вас ввести число между О и 9. Вы вводите \, Проrрамма может сохранип, это число в формате с фиксированной точкой в одном байте, В байте 8 битов, так что ero содержимое будет таким: 00000001, Проrрамма может посту пить и иначе и сохранить АSС"код введенной цифры. АSСIlкод едини цы равен 49 или 0011 0001 в двоичном формате, В обоих случаях результат помещается в ОДНЩI байте, Позднее можно перепутать СlIособы хранени;) 
496 Часть 111: Управление проектами и сруппами и интерпретировать содержимое этоrо байта как число вместо кода или наоборот, ЭТО ТОЛI,КО один из множества возможных примеров, Неправильное преобразование данных из oAHoro формата в друrой Проrрамма просит ввести число между О и 9, Вы вводите \, Это сим вол, И проrрамма получает ero код  49, Чтобы превратить полученную инфОРIaЦИЮ во введенное вами число, проrрамма должна вычесть из 3Ha чения кода число 48, Вместо этоrо она вычитает 49 и получает О, Каждый фраrмент проrраммноrо кода, в котором выполняется преобразование формата данных, является IlOтенuиалЫIЫМ источником ошибок, Имейте в виду, что обычно в проrрамме выполняется orpOMHoe количество преобра зований  между различными форматами числовых значений, числами и строками, символами и uифрами и т,п, Неверная формула Во мноrих проrраммах используются сложные формулы, Проrраммист может ошибиться, переписывая формулу из книrи, взять вообще не ту фОрIУЛУ IЫИ же неправильно ее запроrраммировать, Неправильное приближение Мноrие формулы для приблизительной оценки значений разработаны задолrо до появления компьютеров, Они являются исключительно полез ным достижением, позволяющим сократить количество вычислений, но результаты получаются очень неточными, Блаrодаря вычислительной мощи современной компьютерной техники, в лlачительной части этих формул больше нет нужды, Однако они присутствуют во мноrих учебниках и по прежнему используются мноrими проrраммами, отчеrо страдает точность результатов. Поэтому планируя тестирование проrрамм, в которых MHoro математических и статистических расчетов, позаботьтесь, чтобы в rpуппе был хоть один специалист, основательно разбирающийся в этих вопросах. Начальное и последующие состояния Как правило, выполнение проrpаммой определенной функции начина ется с инициализации ее переменных. Процесс инициализации заключается в объявлении переменных, определении их типов, выделении для них памяти и присвоении им начальных значений, Начальные значения часто читаются проrраммой с диска, Что, если там не окажется файла? Иници ализаuия одних данных выполняется при запуске проrpаммы, дрyrих  при первом вызове Функции, а третьих  при каждО1 ее вызове, 
Приложение: Распространенные про?ра,,,,мны<, I/Ш/ll)hll 497 Возможныс стратеrии инициализации данных определяются НJЫКОМ IIроrраммирования, а их выбор в каж.п,ом конкретном случае  НУЖJlами IIроrраммы, Вот несколько примеров, . Объявленные в функции переменные MOryт сохранять свои значения от одноrо ее вызова до друrоrо, Такие переменные часто называют статическими, Их используют для тех данных, которые функция должна сохранить для следующеrо вызова, Друrие переменные эта же функuия может иниuиализировать при каждом своем запуске, Для правильной работы со статическими переменными функция должна определять, была ли она уже вызвана хотя бы раз, и, если нет, иниuиализировать все эти переменные, . Локальные переменные Функuии MOryт стираться из памяти сразу же после завершения ее работы, Такие переменные называют диHaMи ческими, Каждый раз, коrда функuия вызывается, она должна по вторно иниuиализировать все свои динамические переменные, . За присвоение переменной начальноrо значения может отвечать как компилятор, так и проrраммист. Если проrраммист не присвоил переменной начальное значение, одни компиляторы присваивают ей О, а ДРУI'ие не заботятся об очищении выделенноrо псременной участка lIамяти, и в ней может оказаться все что уrодно, Ошибки иниuиализаuии обычно проявляются при первом вызове фун кuии, коrда она не иниuиализировала свои переменные IIравильно, и при втором, коrда она неlIравильно выполнила повторную иниuиализацию. Иноrда ошибки инициа;lИзации зависят от пути выполнения IIporpaMMbI, За выполнение иниuиализаuии lIеременных MorYT отвечать фраrменты кода Функuии, выlIлняющиесяя в одних случаях, и не выlIлняющиесяя в друrих, Не присвоены начальные значения Мноrие КОМIIИЛЯТОРЫ очищают выделяемую для lIеременных память, таким образом иниuиализируя их нулями IЫИ пустыми значениями, OДHa ко, коrда начальное значение lIеременной не должно быть нулевым, MHO rие IIроrраммисты забывают ero IIРИСВОИТЬ. Такая ошибка обычно обнаруживается сразу, как только IIporpaMMa обращается к непраВИ,,1ЫIO иниuиализированным данным, Не инициализирована переменная, управляющая циклом Переменная, управляющая циклом, определяет, сколько раз будут выпол нены составляющие ero ОlIераторы, Например, проrpамма печатает первые l() строк TeKcToBoro файла. Как только достиrается 11 я строка, проrрам 
498 Часть 111: Управлеllие проектами и ?руппами ма останавЛ!шается, При следующем заlIуске функuия, ВЫllOлняющая всю эту работу, должна снова присвоип, счетчику строк значенис \, Не инициализирован указатель в lIеременныхуказателях хранятся адреса lIамяти, Такая lIеременная lOжет, наlIример, указывап, начало ОlIределенноЙ строки, Значснис указа теJIЯ может меняться: наlIример, вначалс он содержит адрес lIepBOrO СИI вола строки, затем BToporo, TpeTbel'o и т,д, Если указатель неправильно иниuиализировать или забыть иниuиализировать вообще, он может coдep жать неверный адрес, Если fJporpaMMa отображает фраrмент строки, "MY сор" ИЛИ не те элементы массива, скорее Bcero, ошибка связана с ИСIIOЛI,зованием указателей, Не ОЧИ1Цена строка в стрОКовых lIеременных хранятся 1I0следовательности СИМВОЛОВ, Если значением числовой lIеременной может быть 5, то значением строковой  Привет, меllЯ зовут Серrей, Строковые lIеременные MorYT отличаться по длине, Переменной, в которой хранилась строка Привет, меllЯ зовут Cep rей можно IIРИСВОИТЬ более короткую строку Пока. ПрисваИВallИе южст работать 1I0разному (это зависит от КОМlIилятора и выбранноrо СlIособа), Если IIроrраммист не ДОllишет в конец новой строки IIробелы, в результа те может IIОЛучиться Покает, меllЯ зовут Серrей, Не инициализированы реrистры Реrистрами называются спеuиальные области lIамяти объсмом в He сколько байтов, обычно находящисся внутри uентральноrо IIроиессора, Хранящимися в них данньши КОМIIЬЮТСР маНИlIулирует rораздо быстрее, чем теми, которые заIlисаны в обычной оперативной lIамяти, Поэтому IIроrраммисты часто пользуются реrистрами для BpeMeHHoro хранения дaH ных, Они КОIIИРУЮТ нескоЛl,КО IIсременных в реrистры, работают с ними, а затем КОIIИРУЮТ их значения обратно в lIамять, После этоrо бывает He обходимо восстановить исходные значения реrистров, о чем 'шсто забыва ют, Забывают также заrрузить данные в один ИЛИ несколько реrистров, Не сброшен флаr Фла?и  это lIеременные, значсния которых являются сиrналами об определенных условиях, Флаr может бып, установлен (истинен, включен, равен 1) или сброшен (очищен, ложсн, ВЫК;lючен, равен О или I), В HOp маЛЫIO1 состоянии флаr сброшен, Если одна часть ПрОI-раIМЫ хочет сооб щить друrой о наступлении определенноrо события  о сбое, иниuиализаuии переменной, ее переполнении, о TO,\I, 'ПО пользователь нажал на к;швишу, и т,п" тоrда она устанавливает флаr этоrо события, 
Приложеliие: Распростра//ею/ые просраМ.\II/ые О/uuб/i.1I 499 Состояние флаrа вссrда должно соответствовать условию, с KOTOPI,I\! 011 связан, Например, ПОДlIроrрамма может сбрасывать свой флаr при вызовс 11 устанавливать при выходе, Таким образом, установленный флаr будет означать, что выполнение проuедуры завершено нормально, Разумеется, никакая друrая проuедура ЭТИ,\1 флаrом пользоваться не должна, Некоторые IIporpaMMbI устанавливают и сбрасывают одни и те же фЛа!'И во мноrих !eCTaX кода, так 'ПО трудно сказать, достоверны их значениЯ или нет, Данные ДОЛЖНЫ были инициализироваться в ApyroM месте Функuия может иниuиализировать не все свои данные, Например, переменные, которыс она использует совместно с какойнибудь друrой функuией, Moryт иниuиализироваться обеими, Предположим, 'ПО несколь ко функuий из одноrо и Toro же ,\lеню используют несколько переменных, иниuиализируемых IIpOI-раммой IIрИ отображении этоrо меню, Если друrоrо СlIособа вызвать эти функuии нст, Torдa все в порядке, Но что, если одна из этих функuий присутствует и в друrом меню либо вызывается из блока обработки ошибки в друrой функuии или еще откуданибудь? Не выполнена повторная инициализация Проrраммист может забыть удостовериться, что при повторном вызове функuии в ее переменных содержатся правильные значения, Если, напри мер, переменная сохраняет свое значение от вызова к вызову и при ее создании компилятор автоматически присваивает ей О, IIроrраммисту ЭТО [о делать не нужно, Но только при первом вызове, Коrда функuия вызва на второй раз, в переменной, скорее Bcero, уже не нулевое значение, Ожидает ли проrраММ11СТ, что в ней всеrда О? Имейте в виду, что 11ниuиализаuия не всеrда выполняетсЯ в самом начале подпроrраммы, IIри одном способе входа в нее или одном пути ее выполнения данныс MOIYT бып, иниuиализированы правильно, а при дpy 10М  нет, Предположение, что данные не были инициализированы Иноrда проrpамма может иниuиализировать данные несколько раз под ряд, Такое повторение в общем не приносит вреда, за исключснием потерь времени, Путаница со статическими и динамическими переменными Ди//амические переменные создаются при входе в Функuию и разруша ются при выходе из нее, в то врсмя как статические создаются при са\юм 
500 Часть 111: Управление проектами и сруппами первом входе в функuию и сохраняют свои значения от вызова к вызову, В одних языках проrpаммирования локальные переменные функuий всеrда являются динамнческими, в друrих же проrраммист может при их описа нии определять и время их жизни, В этом случае проrрамIИСТ леrко MO жет забыть, как он объявил переменную, и обрашаться со статическими данными как с динамическими или наоборот, В результате проrрамма будет работать, исходя из неверных предположений о содержимом переменных, Не предполаrавшаяся модификация данных, выполняемая друrими подпроrраммами После инициализации подпроrрамма может использовать переменную, не меняя ее значение, При повторном входе в подпроrрамму или послс вызова из нее друrих подпроrрамм эта переменная может не иниuиализи роваться, поскольку проrраммист полаrает, что ее значение осталось неиз менным, Однако для этоrо переменная должна быть объявлена как локальная для данной функuии, Если же проrраммист забыл это сделать или язык проrpаммирования не поддерживает конuепции локальных пере менных, любая друrая проuедура может изменить значение данной пере мен ной, Ошибочная инициализация Проrраммист может присвоить переменной невернос значение, вместо переменной с плавающей запятой объявить целую, объявить динамическую переменную вместо статической или rлобальную вместо локальной, MHO rие из этих ошибок выявляются компилятором, но некоторые проявляют ся и В процессе выполнения проrраммы, Зависимость от инструментальных средств, которыми пользователь может не уметь пользоваться или которых он может не иметь Такое случается, хотя и не часто, rлавное же, что на ошибки TaKoro рода можно просто не обратить внимание, Например, проrраммист преk полаrает, что для изменения некоторых аспектов операuионной среды пользователь продукта воспользуется определенной утилитой, Тестировщик выполнит необходимую настройку перед первым запуском проrраммы, но потом о ней просто забудет, Ошибки управления потоком Управление потоком  это определение Toro, в какой последовательно сти и при каких обстоятельствах выполняются операторы проrраммы, Если очередным дсйствием проrраммы оказывается не то, которое предполаrал 
Приложеllие: Распростраllеllllые просраММllые ошибки 50 I Ilроrраммист, значит, имеет место ошибка УlIравления IIOTOKOM, РеЗУ;llтТа 10М может быть очевидно неверное поведенис IIporpaMMbI или ее остановка, хотя IlOследствия MoryT оказаться и не настолько очевидными, Очевидно неверное поведение nporpaMMbI Проrрамма отображает на экране "мусор" или выводит искаженное изображение, сохраняет "мусор" на диске, невпопад начинает печатать или выполняет совершенно неожиданные действия, Все это означает, что про l'paMMa вышла изrlOД контроля, Такие ошибки наиболее очевидны, и их леrко найти и исправить, Хотя они все выrлядят похожими, их причины MorYT быть различны, Ниже IIРИВОДИТСЯ несколько примеров подобных ошибок, Искать их СllеuиалыlO не имеет смысла, если только вы не обла даете некоторы,\1И познаниями в IIроrраммировании и не знакомы с BHYT ренней структурой IIporpaMMbI, Переход по GOTO Оператор GOTO lIередает управление друrой части IIporpaMMbI, Если УlIравление lIередано не туда, возможны самые разнообразные, но, как IIравило, очевидные IlOследствия, Проrрамма может "зависнуть", отобра зить на экране нечто явно неподходящее и T,II, У IIроrраммистов команда GOTO крайне неlIОlIулярна, и ее ИСIIOЛЬЗО вание считается дурным тоном, Сторонники CTpyктypHoro IIроrраммирова ния утверждают, 'по нет такой IIporpaMMbI, IIрИ наlIисании которой без лих ОlIераторов нельзя было бы обойтись, И болес тот, без них IIporpaM \lbI более 1I0следовательны и читабельны и содсржат меньше ошибок (Йор ;ЩI (Уошdоп, 1976)), Ошибки наиболее вероятны в следующих ситуаuиях, . Выполняется lIереход назад, особенно к ОlIератору, lIеред которым выполнялась необходимая иниuиализаuия данных и устройств; . выlIлняетсяя неlIрЮЮЙ lIереход  110 адресу, хранящемуся в lIepe менной, Если значенис lIеременной изменится, проrpамма перейдет к друrому месту кода, Читая исходный текст, трудно сказать, пра вильное ли значение будет находиться в lIеременной IIрИ каждом обращении, Лоrика, основанная на определении вызывающей noAnporpaMMbI ПОДlIроrpамма может ОlIределять, 'по ей делать, в зависимости от Toro, откуда она была вызвана, Если она не IIравилыlO ОlIределит то или друrое, IIроизойдет ошибка, Как IIравило, IIрИ ИСllOльзовании данноrо IIриема вызывающая IIроиедура устанавливает флаr или IIрисваивает ОlIределенной 
502 Часть 111: Управление проектами и срупl1а,\IИ lIеременноН значсние, IIOЗlJоляющее ОlIределип" откуда ВЫflOлнен вызов, Если этюlИ же флаrами 11 lIере"fенными IIОЛЬЗУЮТСЯ и друrие IIроuедуры, IIpOrpaM1a становится заIIутанной и в ней очснь вероятны ошибки, Поэто му такая ЛОl'ика IIрОI'раШИрОВalIИЯ крайне неlIОlIулярна, Использование таблиц переходов ПрOl-раммы lOrYT 1I0льзоваться таблиuами адрссов, 110 которым осуще ствляется lIереход в той И;IИ иной ситуаuии, Таблиuа адресов южет xpa ниться в ДИСКОВОI файле, чтобы ее можно было ре:rактировать, не меняя IIрИ этом IIporpaMMY, Это очень удобно для дальнейшей IIOд:lержки IIpOДYK та, но связано с ОlIрсделенным риском, . В таблиuе \lOrYT быть неверные адреса, особенно если она редакти руется вручную, . Если таблиuа длинная, IIрИ ес составлеНI1И леrко ДОIIУСТИп, ошибки и к тому жс IIРОIIУСТИП, их В ходе теСТl1рования, . ПреДIIOJЮЖИМ, 'ПО в таблиuе IIЯТЬ элементов и IIроrрЮlма выбира ет один из них в зависимости от значеНI1Я ОlIределенной lIepeMeH ной, Что будет, если значением этой lIеременной окажется 6'1 . После модификаuии кода можно забыть обновить таблиuу lIepexo дов, Выполнение данных По содержиюму rрУIIlIЫ байтов невозможно ОIIРСДСЛИТЬ, хранится ли в них КО,\Iанда IIporpa,\IlbI либо один или несколько СИ,\IВОЛОВ, число или адрес IIаIЯТИ, Проrра\I,\Iа просто деРЖI1Т различные ТИlIbI ИНфОр,\Iаuии в разных ,\Iестах IIa,\IЯТИ, Если же она IIOIIытается ВbIllOЛНИТЬ данные как КО,\Iанду, то, скорее Bcero, "зависнет", Некоторые КО,\IlIьютеры выявляют IIOIIЫТКИ ВbIllOлнения "НСВОЗ\lOжных" КО,\Iанд и останавливают IIpOl-ра,\I,\IУ, выдав сообщение об ошибке, Проrра,\I,\Iа ,\I0жет IlOlIытаться ВЫIIOЛНИТЬ данные В,\Iесто КО,\Iанды в следующих случаях, (А) Данные скопированы в область памяти, зарезервированную для кода, Вот при.меры тою, как зто мож'ет произоuти, . Указатели  это IIсременные, в К010рЫХ хранятся адреса IIaМЯТИ, Проrра,\I,\IИСТ ,\I0жет заlIисать ОlIределенные данные 110 адресу, храняще,\IУСЯ в указателе, но изза ошибки в лоrике IIporpa,\I,\IbI этот указатель ,\I0жет содержать адрес не внутри области данных, а внутри области IIporpa,\I,\IHOrO кода, . Нскоторые ЯЗbIКИ IIроrраМ,\Iирования не проверяют rраниu ,\Iac сивов, 1 IРСДlIOЛОЖ11,\I, объявлен ,\Iассив MYARRAY из трех эле 
ПРUIO,ж:е//ие: Pacпpocmpaliel/l/bIe про?раМЛ/l/ые ОЩUlJh'/1 50] жнтов  MYARRAY[l), MYARRAY[2) и МУАRRЛУI3), '11\) произойдет, ссли IIporpaMla IlOlIытается сохранить данные в 'JJIC ,\Iснте МУАМАУ[2044] , Если язык IIроrра,\Iмирования не выяв ляет таких ошибок, данные будут заlIисаны в область IIa,\IЯПI, адрес которой равен адресу Iассива IIЛЮС 2044, и все ЭТО y,\IHO женнос на :lЛИНУ Э)lе,\IСllТа Iассива в байтах, По ЭТО,\IУ адресу lOrYT раСIIО:lаrаться IIроrраI,\IНЫЙ код или данные, IIа,\IЯТЬ BHe IШIИХ устройств, Оllераuионная систе,\Iа, друrие IIporpa,\IMbI  все 'ПО уrодно, но только не ,\Iассив MYARRAY, (Б) Про?рамма переходит по адресу, nРИl/адлежащему области dal/l/bIX, а I/e кода, . Ошибочная заПI1СЬ в таблиuе адресов lIерехода, которой УlIравля ется IIporpa,\I\Ia, . Некоторые КО\lIl1,ЮТСРЫ делят IIаIЯТЬ на Ce?Mel/ПlbI, КО,\IlIьютер интеРlIретирует всс содеРЖ11,\I0е cerMeHTa кода как код 11 все co деРЖИ,\I0С CCr\ICHTa данных как данныс, Если IIporpa,\I,\Ia каКИ,\I то образо,\! ИЗlен!п адреса Cer,\IelIТOB, КЩllIьютер будет выбирать IlOследующис КОlанды нс из Toro ,\Iеста lIамяти, Переход к noAnporpaMMe, которая отсутствует в памяти ДЛЯ ЭКОНО,\IИИ lIа,\IЯПI КОlIIьютеры часто выrружают из IIa,\IЯТИ фраr \ICHTbI СЛИШКО,\1 объешых J\porpa,\I,\1 и данных, Такие фраr,\IеllТЫ назы ваются оверлеями (O\'er/ay) , а I1СIIOЛI,ЗУС,\Iая технолоrия  подкачкой или l'нопИI/<'ОМ (swappiп,r,) , КОJ'да IIpOrpa,\Ie неоБХОДИ\lа ОlIрсделенная IlOдllpor pa,\Ia или данные, КО\1fII,юТt:р выrружает на диск какойнибудь ненужный фраr,\IеllТ, а В,\Iесто Hcro заlружает в IIa,\IЯТЬ требующийся, Если IIporpa,\I,\Ia са\!а отвсчаст за IlOдка'IКУ, перед lIереХОДО,\1 110 OlIpe ,(еленноу адресу она ,1O;lжна удостовеРI1ТЬСЯ, 'ПО данный фраr,\IеllТ кода JIaХОДИТСЯ в IIашпи, HJla'IC она ВЫIIOЛНИТ lIереход не к TOy ,\Iесту кода, С IlOдка'IКОЙ свя:!аны 11 J\роб::ОIЫ IIроизводительности, На IIроверку J 1а;1И'IИЯ нужных oBep:lccB и их С'IIпывание с диска тратится КО,\IlIьютерное врея, ПОЭТО\IУ важно орrанизовать оверлейную IIporpaI,\IY таки,\! образо,\!, 'IТобы не было неоБХОДИ,\I0СТИ ВЫIIOЛНЯТЬ 1I0дкачку СЛИШКО,\1 часто, Реентерабельность Рееl/терабеЛЫIGЯ nро?рамма ,\I0жет lIараллельно ИСlIользоваться несколь КИIИ IIроuессаи, рееl/терабелы/яя nодnро?рамма ожет вызывать са,\Iа себя И:IИ быть вызвана неСКОЛЬКИ,\IИ lIараллеЛЬНЫ,\IИ IIроuесса,\IИ одновре,\Iенно, Некоторые языки IIроrра\IlИрования не IIOд:lерживают такой ВОЗ,\I0ЖНОС ти, т,е, IIOBTOpHoro входа в IIРОЦСДУРЫ, и IIрИ IlOlIbITKe ero ВЫllOлнеНI1Я 
504 Часть 111: Управление проектами и ?руппами IIpOrpaM,\Ia разрушается, Но даже ссли язык IIроrpа,\I,\I!1рования IlOзволяет IIроиедуре обслуживать несколько IIроиессов, эта ВОЗ,\I0ЖНОСТЬ СОlIряжена с uеЛЫ,\1 РЯДО,\! 11 робл е,\! , В 'JaСТlIOСТИ, как раздельно хранить данные, IIpek назна'Jенные для раЗЛИ'JIIЫХ IIроиессов, 'побы один IIроиесс не c,\Ior раз рушить данные друrоrо? Имена переменных, содержащие имена команд Некоторые языки IIрOl'раМ,\Iирования или !lX диалекты иrнорируют IIробелы, В тако,\! языке строка PRINTMYNAME ,\I0жет быть интерlIрети рована как PRINT MYNAME. ВЫIIОЛНЯЯ эту КО,\Iанду, IIporpa,\I,\Ia 1lOllbITa ется paClle'JaTaTb содерЖИ,\I0е lIере,\Iенной с И,\Iене,\1 MYNAME, Если IIроrра,\I,\IИСТ на са,\I0,\1 деле хотсл ОlIределить lIере,\IеlШУЮ с И,\Iене,\1 PRINTMYNAME, эта IIOIIblТKa IIриведет к ошибке, Как IIравило, I!одобные ошибки выявляют са,\IИ IIроrра,\I,\IИСТЫ, но некоторые из них все же coxpa няются в IIporpa,\IlaX, Неверное предположение о состоянии nporpaMMbI или данных после вызова ПреДlIолоЖИ,\I, 'ПО в IIporpa,\Ile И,\Iеется IIроцедура, IIредназна'Jенная для установки Оflределенноrо IIapa,\IeTpa внсшнеrо устройства, наlIрИ,\Iер, ero скорости lIереда'JИ ИНфОР,\Iаuии, Проrра,\I,\Iа вызывает эту IIроиедуру и пола?ает, 'ПО она УСlIешно выlIлнилаa свою работу, Она не,\Iедленно на'JИ нает lIереда'JУ данных, Однако на этот раз установка скорости не была ВЫllOлнена, В результате не удается и lIереда'ш данных, а IIporpa,\I,\Ia "за висает" в ожидании ответа устройства, ДРУПI,\1 IIрИ,\Iером ,\I0жет быть выполнение fЮДlIроrра,\I,\IЫ, ,\Iасштабиру ющей данные и возвращающей 'JИСЛО ,\1 е жду 1 и 10, При ОlIределенных обстоятельствах эта IIOДllроrра,\I,\Iа ведет себя нестандартно, возвращая ,\Iасштаб в диаlIазоне от О до 1 О, Поскольку вызывающая IIOДllporpa,\I,\Ia не ожидает IIOЛУ'JИТЬ О, она аваР!lЙНО завершается IIрИ IlOlIьпке деления на О, Обработка ошибок выполнения процедур ПреДlIO;IOЖИ,\I, 'ПО IIроцедура вычисляет квадратный корень из lIepeдaH Horo ей 'JИсла, Если ей lIередано отриuательное 'JИсло, она НИ'Jеrо не BЫ 'JИсляет и lIеред завершение,\! устанавливает флаr ошибки, В дан но,\! СЛУ'Jaе флаr ошибки ИСlIользуется для Toro, 'побы вызывающая IIроцедура са,\Iа ,\I0rла решить, 'ПО ей делать с IIробле,\I0Й, В одно,\! СЛУ'Jае ,\I0жет быть выведено сообщение об ошибке, в друrО,\1 отображена 1I0дсказка, а в Tpe тье,\1 'JИсло ,\I0жет быть lIередано ,\Iенее скоростной IIOДllpOrpa,\I,\Ie, ВЫ'JИС ляющей квадратные корни из КО,\IlIлексных 'JИсел, Процедуры, 
Приложе//ие: Распростра//е//l/ые про?рамм//ые ошибки 505 возвращающие ИНфОр,\Iаuию об ошибках в виде флаrов, ,\I0rYT вызываться в са,\IЫХ разных ситуациях, В любо,\! СЛУ'Jaе вызывающая IIOДllpOI'pa,\I,\Ia обязательно должна IIроверить, ВЫllOлнила ли IIроцедура то, 'ПО IIреДlIола rалось 11 роrpа,\I,\IИСТЩI , Однако, если ошибка o'leHb ,\Iаловероятна, IIporpaM ,\IИСТ ,\I0жет забыть о проверке результата, При тестировании, если ошибка все же IIроизоидет, она ,\I0жет 1I0казаться неВОСIlРОИЗВОДИ,\I0Й, Возврат не в ту точку кода rлаВНЫ,\1 ОТЛИ'lие,\1 ,\Iежду вызово,\! IIOДllpOrpa,\I,\IbI и lIереХОДО,\1 110 KO ,\Iанде GOTO является то, 'ПО из IIOДllporpaM,\IbI УlIравление всеrда возвра щается в TO'IKY вызова, в то вре,\IЯ как IlOсле lIерехода 110 GOTO возврат вообще не ВЫllOлняется, Однако иноrда УlIравление IlOсле вызова IIOДllpor pa\IMbI ,\I0жет быть возвращено не в то ,\Iесто IIporpaM,\IHoro кода, Испорченный стек После завершения работы IIOДllporpa,\I,\IbI УlIравление lIередается KO,\IaH де, неlIосредственно слсдующей за командой вызова, Для хранения aдpe са этой КО ,\1 анды ИСIIOЛI,зуется CTpYКl)'pa данных, называе,\Iая стеком (stack) , В верхней Я'lейке стека хранится адрес, llO,\Iещенный туда IlOследним, И,\Iенно 110 не,\IУ и возвращается управление IlOсле завершения IIOДllporpaM мы, Как IIравило, стек ИСlIользуется не только для хранения адресов воз врата, но и для Bpe,\IeHHOrO хранения некоторых данных, Если IIOДllpOrpa,\I,\Ia 1IO,\Iещает в стек некоторые данные и не удаляет их lIеред свои,\! завершение,\!, в верхней Я'lейке стека будет вовсе не адрес возврата, Однако КО,\IlIhютер этоrо не узнает и выlIлнитT lIереда'IУ YlIpaB ления, интерlIретировав то, что он найдет в стеке, как адрес, В результате УlIравление будет lIередано совершенно друrО,\IУ у'шстку lIа,\IЯТИ, Если та,\! окажутся данные, сбой IIроизоiiдет не,\Iсдленно, а если какойто код, IIpO [ра,\I,\Iа Ha'IHeT дслать ЧТОТ() нс ТО И, скорсе Bcel'o, тожс вскоре аварийно завершит работу, Переполнение и ВЫХОД за нижнюю rраницу стека Стек оБЫ'!IIО IIредназна'lен для хранения фиксированноrо КОЛИ'lества адресов  наlIрИ,\Iер, не болес 16, 32 или 128, ПреДIIОЛОЖИ,\I, 'ПО стек В,\Iещает не более двух адресов, Проrра,\I,\Iа вызывает IIроиедуру 1 и coxpa няет в стеке адрес возврата. Затем IIроцедура 1 вызывает IIроцедуру 2 и тоже сохраняет адрес возврата, Коrда IIроцедура 2 завершает свою работу, управление возвращается IIроцедуре 1, а 110 ее завершении  rлавной про [ра,\Iме, НО 'ПО будет, если IIроuедура 2 вызовет IIроцедуру 3? В стеке уже xpa нятся два адреса, и адрес возврата из IIроцедуры 3 в Hero не IlOместится, Такая ситуаuия называется перепол//е//ием стека (stack overjlow), ОБЫ'JIIО 
506 Часть Il 1: Управле//ие IIроекта,\lИ И ?РУ/1//Ц,\IИ IIpOl'pa,\I\13 или uентральный IIроиессор разрешают ее Te, что IIрОСТО yдa ляют из стека calOe старое из храняшихся в не\1 зна'Jений и 1IO,\Iсшают в Hero новое, Ilосле этою из 11O:rlIporpa,\IlbI 3 УlIравление lIередается IlOk IIроrрЮIlе 2, из IlOдilpOrpa\f,\IhI 2 IIOДJlpOrpa,\I,\Ie 1, Л далее.., куда lIepeдa вать управление IlOсле завершения IlOдilpOI'pa,\IbI 1  неизвестно, Такая ситуаuия называется выходом за //IIЖ'//ЮЮ ?ра//ицу стека (stack ипderflow) , ВЫХОД из подпроrраммы по GOTO вместо REТURN ПОДlIроrра,\Iма 1 вызывает IlOдilpol'paI\IY 2, После;шяя, В,\Iесто Toro 'JТобы HOp,\IaJIbIlO завершиться, осуществляет lIереход в IIроцедуру 1 110 КО,\Iанде GOTO, При это,\! адрес возврата из I1роцедуры 2 остается в CTe ке, После завсршения IIроцедуры 1 ВЫIIO;IНЯСТСЯ lIереход 110 храняще,\IУСЯ в стеке адресу  обратно в IIроцедуру I! Как IIравило. это не намсренное действие IIроrра,\I,\Iиста, а ошибка, Чтобы се избсжать, IIроцедура 2 долж на са,\Iа УДaJIИТЬ из стека cBoii адрес возврата и только 11 ОТО ,\1 осушествить lIерсход в IIроцедуру 1, Такая технолоrия IIроrра,\I\lИрования чревата orpoM НЫ,\1 КОЛИ'JеСТВО,\1 ошибок (выхода,\IИ за нижнюю I'раниuу стека, возвраТО\1 не в ту IIРОЦСДуру, lIутаниuей с возврашае\!ы1И даНIIЫМИ и T,II,), IIOЭТОIУ ЛУ'Jше Bcero ею не I\ользоваться, Прерывания Прерыва//ием называется СlIеUИaJIЫIЫЙ сиrнал, 110 КОТОРО,\IУ КОlIIьютер IIриостанавливает ВЫllOлнение текушсй IIporpa,\I,\IbI и псредает УlIравление IIроцедуре обработки IIрерываний, Позднее ВЫllOлнение IIроrРЮl,\IЫ ,\I0жет быть 11 родолжено , ТИIIИЧНЫ,\IИ IIрИ,\Iера,\IИ событий, вызывающих IIpepЫBa ния, являются события ввода/вывода. ВКJJЮ'Jая сиrН<lЛЫ, IIОСТУlIаюшие от системною таЙlера, Неверная таблица прерываний ПОЛУ'JИВ СИПlaJI IIрерывания. I1роиессор должен найти IIроцедуру ero обработки и lIередать ей УlIrаВilсние, Алрес этой IIроиедуры (ВОЗ,\I0ЖНО, B,\leCTe снекоторой ДОlIолнитеЛЫIOI1 ИНфОРlаuией) хранится в ОlIределен но\! ,\Iссте IIЮIЯТИ и называется Hl'KПlOpOM прерыва//ия. По НС,\IУ и осушеств ляется lIерсход, Если КО,\IIIЬЮ'Jер различает несколько ТИIIOВ IIрерываний, в ero IIa,\IЯТИ хранится СIIИСОК ,щресов IIроиедур их обработки, называС,\IЫЙ таблицей прерыва//ий, Если таблиuа IIрсрываний 110 какимто IIричнна,\1 содержит неверную ИНфОр,\Iаuию, в ответ на IIрерывания ВОЗ,\I0ЖНЫ са,\Iые разнообразные ошибки, Если, наlIрИIСр, векторы IIрерываний IIрОСТО 1IO,\Iенялись ,\IeCTa ,\IИ, I\pOl'pa,\I,\Ia ,\I0жет вести себя странно, IIытаясь, наlIрИ,\Iер, отобразить на экране ввсденный символ в ответ на СИПlaJI от систешlOЮ таймера или реаrироваТh на нажатия КiIавиш как на сиrна;IЫ таЙ,\Iаута, 
Прило:нсеllие: Распростра//е////ые про?рамм//ые ошибки 507 Ошибки, связанные с модификацией проrраммами таблицы прерываний IlporpaM,\Ia может ЮДllфиuировап, таблиuу IIрерываний, заllисав в нее новые адрсса, Ес;IИ это делается на вре,\IЯ работы Оllределснноrо ,\I0ДУЛЯ, IIсред завершение1 он ДО;Iжен восстановип, исходные векторы IIрсрываний. ВОЗ\lOжно такжс, что IIpOl'pa,\I,\Ia заlIишет в таблиuу IIрерываний неверный адрес или вообще ее заIIОрТИТ. В реЗУЛI,тате IJOсле О'lередноrо IIрерывания КО\III1,ютер lJерейдет нс к той IIOДllpOl'pa,\I,\Ie или вообще" зависнет", Ошибки, связанные с блокированием прерываний ПРOlрамма ,\I0жет б,lOкировать болыuинство IIрерываний, в реЗУЛl,тате чеrо КОЩ\l,ютер lIерсстает на них рсаrировап" НаlIрИ,\Iер, в некоторых СЛУ'JaЯХ БОЛl,шая 'Iасп, IIрсрываний блокируется lIеред на'lаЛО,\1 ЗaJIИСИ данных на диск и разБЛОКl!руется IJOсле ее ОКОН'JaНИЯ, Это IIредотвращает ,\IНОI'ие ошибки lIерсдаЧI! данных. Неудачное возобновление работы nporpaMMbJ после прерывания ВЫIJOлнеНl!е IIрОI'раI,\IЫ было IIрервано, а зате,\1 возобновлено, В HeKO торых систе,\Iах !lOсле возобновления IIpOrpaM,\Ia IIOЛУ'Jaет сообщение или иное указанис, что она была IIрервана. В сообшении оБЫ'IНО указывается ТИII IIрерываНШI (01' клавиатуры, таЙ,\Iера, м оде,\! а и T,II,). ЭТО O'ICHI, 1I0лез но, НаlJример, IIpOI'ra!\la ,\I0жет обновип, изображение на экране, IIpeДIIO лаrая, 'ПО в ходе обработки IIрерывания оно ,\I0rло бып, ИЗ,\Iенено. Однако во встроенно,\! в "pOl'paf\fY блоке обработки IIрерывания IIроrра,\IМИСТ ,\lOжет ДОIIУСТlПI, ОlJJибку, наlIрИ,\Iер, lIередап, даЛI,нейшее УlIравление не той IJOДllpOl'pa,\I\fC, С Оlllибка1И TaKoro рода IIроrра,\IМИСТЫ так же не лю бят И,\Iеп, дело, как 11 t: ошибками в блоках обработки ошибок, и так же 'lacTo их 11 РОIIУСК<I 101 , Завершение работы nporpaMMbI Некоторыс ;ПJ,JКII "рт раffl!рования останавливают Ilporpa,\I,\IY, кота в ней IIРОИСХОДНТ OJlII10KI1 Оllрс:rСJlенных ТИIIOВ, Бывает также, 'ПО ни язык IIроrраМ1ИроваIlI!И, "/1 "рОI ра,\1 \1 I!СТ не IIреДlIолаrали остановки IIporpa,\I ,\IЫ, но она всс же Оt:I'анаВ;ll!вастся, Не каждое Ilрекрашсние работы IIроrра,\I,\IЫ IIРОИСХОДИТ вследствие ошибки, СВЯЗ<lнноil с Уllравление,\1 IIOTOKO,\I, Если завершение работы IIрИ ОlIределеННО,\1 УС:IOВ11 I! ОlIределяется IIроrра,\I,\IНЫ,\1 кодом 11 IIporpaM ,\Iа завершастся НСОЖIf;ЩНIIО :(ля lJOЛhзователя, зна'IИТ, pe'lb идет об ошибке IIОЛlтЗоватеЛI,СКОJ'O I!lIlтрфейса, 
508 Часть 1/1: Управле//ие проектами и ?руппами "Зависание" компьютера "Зависнув", КО,\Ill1,ютер IIрскращает реаrировап, на клавиатурный и иной ввод, IIрекращает IIе'Jaтап" индикаторы не меняют cBoero состояния, но IIрИ это,\! ,\I0rYT и rореп" Единственны,\! СlIособо\!, IIOЗВОЛЯЮЩИ,\1 BOC становип, раБОТОСlIосоБносп, систе,\IЫ, является аlIlIаратный lIерезаlIУСК КО,\Ill1,ютера (ВЫКJlЮ'lение и ВК;IЮ'lение lIитания IЫИ нажатие КНОllКИ Reset), Как IIравило, IIРИ'JННОЙ "зависания" КО,\Ill1,ютера становятся бесконе'l ные UИК;IЫ, Если ОlIераuионная систе,\Iа IlOзволяет IIРИК;IaДНЫ,\1 IIporpa,\I ,\Iам IIOЛНОСП,Ю захватывап, УlIравление, IIporpa1.\Ia ,\I0жет, наlIрИ ,\Iер, бесконе'IНО ждап, ответа какоrолибо устройства, Если же ОlIераuионная система не IIOЗВОЛЯСТ IIpor'pa,\I,\Ia,\1 блокировап, КО,\III1,ЮТСР, у IIOЛI,зователя остается ВОЗ,\I0ЖНОСП, выrрузип, "зависшую" IIporpa,\I,\IY из lIа,\IЯТИ без lIерезаlIуска КО,\Ill1,ютера и не 1I0вредив работе остаЛЫIЫХ активных IIрИЛО жений, Синтаксические ошибки, сообщения о которых отображаются во время выполнения nporpaMMbI Если IIporpa,\I,\Ia наlIисана на интерlIретируе,\I0,\1 языке IIроrра,\I,\Iирова ния, СИlпаКСИ'lеская IIроверка ее текста ,\I0жет не ВЫIIOЛНЯТЬСЯ до тех IIОр, 1I0ка IIporpa,\IMa не будст заlIущена, ИнтеРlIретатор 110 О'lереди анализирует и ВЫllOлняет каждую ко\шнду IIporpa,\I,\IbI, НаТКНУВШИСI, на КО,\Iанду, не IlOддающуюся интерlIретаuии, он выводит на экран сообщение об ошибке и останавливает IIporpa,\I,\IY, Виновниuей ситуаuии оказывается КО,\Iанда, которая содержит СИlпаКСИ'lескую ошибку, О'lевидно, 'ПО IIроrрам\!ист ни разу не ВЫIIОЛНИЛ данныН фраl'.\Iент кода, Ожидание невозможных условий или комбинаций условий Проrрамма останавливастся ("зависает") в ожидании события, которое никоrда не наСТУIIИТ, Вот неСКОЛhКО раСlIространенных IIрИ,\Iеров, . Проблемы ввода/вывода, КОМIII,ютер 1I0сылает данные IIOЛО,\Iанному ВЫХОДНО,\IУ устройству и бесконе'IНО ждет ero ответа, Подобная си туаuия ВОЗlOжна и IIрИ об,\Iене даННЫ,\IИ ,\Iежду ДВУ,\IЯ IIроuессами, коrда один IIроиесс 1I0сылает сообщсние друrО,\IУ и ждет ero ответа, а тот 11O'lе,\Iулибо не oTBe'laeT, . Взаим//ая блокировка, Это клаССИ'lеская IIроблема ,\Iноrозада'IНЫХ систе,\I, Две IIроrраI,\IЫ работают lIараллел ЫIO, Обеи,\! нужна одна и та же lIара ресурсов (скажС,\I, IIринтер и ДОllOлнитеЛЫlая IIа,\IЯП, IIOД буфер IIС'JaТИ), Проrра,\I,\IЫ захватывают 110 одному ресурсу и ждут, 1I0ка освободится второй, 
Прилож:е//ие: Распростра//е////ые про?рамм//ые оши(i/{и 509 . Простая ло?ическая ошибка, НаlIример, IIporpa,\I,\Ia должна вводить числа от 1 до 5, отверrая любbIе ДРУI'ие данные, Однако в ней заlI роrра,\I,\Iировано следующее условие ДОIIУСТИМОСТИ числа: 11<' INPUT > 5 AND INPUT < 1, ТаКО,\IУ условию не соответствует вообще ни одно число, IIOЭТО,\IУ IIpOrpa,\I,\Ia oTBepraeT любой ввод и ждет бесконечно долrо, Подобны,\! же образо,\! в ,\Iноrозадачной систе,\Iе один IIроиесс может бесконечно долrо ждать 1I0лучения от друrоrо неВОЗ,\I0ЖНЫХ данных, Неверный приоритет пользователя или процесс а в систе,\Iах с IIриоритетной ,\Iноrозадачностью КО,\Iпьютер, lIараллельно выloлняющийй несколько IIporpa,\I,\I, lIериодически lIереК;lючается между НИ,\IИ, ОН некоторое вре,\IЯ ВbIllOлняет одну IIpOrpa,\I,\IY, зате,\1 lIереК;lюча ется к друrой, нскоторое вре,\IЯ ВbIllOлняет ее, зате,\1 lIереК;lючается к Tpe тьей и т,д, 110 КРУl)'. ПереК;lючение к ОlIределенной IIporpa,\I,\Ie ВbIllOлняется в случае, коrда наСТУIIИЛО связанное с ней собbIтие (наIIРИ,\Iер, 1I0льзова тель нажал клавишу) или она IIрОСТО ждет СЛИШКО,\1 долrо, Если две IIpO [ра,\I,\IЬ! ждут одинаково долrо, активизируется та, IIриоритет которой ВbIше, (Приоритет назначается системой либо са,\I0Й IIporpa,\I,\Ie, либо ее IIOЛЬЗО вателю,) В такой систе,\Iе задача с низки,\! IIриоритеТО,\1 ,\I0жет ожидать своей очереди ВbIllOлнения несколько часов, Иноrда так и должно бbIТЬ, НО воз ,\I0ЖНО, что IIРИОРИТСТ IIрОСТО неlIравильно назначен, Если задержки в ВЫllOлнении IIporpa,\I,\IbI не столь очеВИДНbI, ошибку, связанную с HelIpa ВИЛЫlbI,\1 назначсние,\1 IIриоритета, крайне трудно за,\Iетить, если только она не IIриведет к ситуаuии [ОIlОК, Циклы Существует несколько разновидностей IIporpa,\I,\IHbIX uиклов, но все они очень схожи, Вот IIрl1,\Iер, 1 SET LOOP CONTROL = 1 2 REPEAT 3 SET VAR = 5 4 PRINT VAR * LOOPCONTROL 5 SET LOOP CONTROL = LOOP CONTROL +1 б UNTIL LOOP CONTROL >5 7 PRINT VAR Проrра,\I,\Iа IIРl1сваивает lIере,\Iенной LOOP CONTROL значение 1, lIере,\IенноI1 VAR значение 5, lIечатает IIроизведение значений этих двух lIере,\Iенных, увеЛI1Чl1вает значение LOOP CONТROL на 1 и зате,\1 IIpOBe ряет, не IIреВЫСI1ЛО Лl1 ее значение ЧI1СЛО 5, Поскольку значение,\! 
51 О Часть 111: Управление проектами и ?руппа,"'и LOOP CONTROL IIOKa Являетсн 2, IIporpa,\I,\Ia 1I0вторяет ко;! тела uикла (КО,\Iанды 3, 4 11 5), Так IIродолжается до тех пор, IIOKa lIереlсннаЯ LOOP CONTROL не IIОЛУЧИТ значение 6, После этоrо IIporpa,\I,\Ia персхо ДI1Т к следующеЙ за uик;IO\\ КО,\Iанде (се НО,\Iер 7) и lIечатает значенис lIере,\Iенной V АК ПеРС,\Iенную LOOP CONTROL называют IIсре,\Iенной УlIравления UИ КJIO,\1 , Ее значение ОlIределяет, сколько раз ВblllOЛНИТСЯ тело UИК;Ja, Для УlIравления UИК;IO,\1 не обязательно ИСlIользуется одна lIере,\Iенная, Hcpek ко IlOсле КJIючсвоrо слова VNTIL стоит uелое выраженис, ВК;lючающее uеЛblЙ ряд lIере,\Iенных, Но в обоих случаях ВОЗ,\I0ЖНЫ одни и те жс ошиб ки, Бесконечный цикл Если условие выхода из UИКJlа никоr;Ia не наСТУlIает, IIporpaMMa ,\I0жет ВhlllOЛНЯТЬ составлЯющие ero КО,\Iанды бесконечно, Такая ситуаuия назы вается заUИК;JИвание, Если ,\I0дифиuировать вышеlIривсдеННblЙ Фраr,\Iент кода таки,\! образо,\!, чтобbl UИК;I ВblIIOЛНЯЛСЯ, IIOKa значение lIере,\Iенной LOOP CONTROL не станет ,\Iеньше О, этот UИК;I никоrда нс завершится, Неверное начальное значение переменной управления циклом ПреДIIОЛОЖИ,\I, что в вЬ!шеlIриведенной IIporpa,\I,\Ie далее стоит ОlIератор GOTO, lIередающий УlIравление КО,\Iанде в строке 2, Пере,\Iенная LOOP CONTROL ,\I0жет иметь теlIерь какое уrодно значение, Если IIpO rраМ,\IИСТ IIреДlIолаrал, что тело uИКJlа будет ВblllOлнено IIЯТЬ раз (как если бы lIереход бblЛ выlIлненH не ко второй, а к lIервой строке), он ,\I0жет бblТЬ очень удивлен IIРОИСХОДЯЩИ,\I, Случайное изменение переменной управления циклом в вышеlIриведеНI!О,\1 IIрЮlере значение lIере,\Iенной LOOP  CONТROL ИЗ,\Iеняется внутри UИК;lа, В более ;r;JИННО,\1 ЦИКJlе, особенно если из Hero ВЫЗblваются друrие ПОДlIрОI'ра,\I,\IЬ1, И,\Iеющие доступ к lIере,\Iенной LOOP CONTROL, ее значенис может изменЯться в нескольких ,\Iестах IIpOrpa,\IMbI, так что в результате тело UИКJIa выполнится больше или ,\IeHb ше раз, че,\1 заДУ,\IaJI проrра\,\IИСТ, Ошибочный критерий выхода из цикла ВОЗМОЖНО, UИК;I должен завершиться IIрИ условии LOOP CONТROL >== 5, а не LOOP  CONTROL > 5, Это очень раСlIространенная ошибка, А ссли критерий выхода из UИК;Ja достаточно сложен, в не,\! ,\I0жет бblТЬ даже несколько ошибок, 
Прuлож:е//ие: Распростра//е////ые про?рамм//ые ошибки 511 Команды, которые должны или не должны выполняться внутри цикла в вышеlIриведеННО,\1 IIрИ,\Iере КО,\Iанда SET УЛR == 5 1lO,\Iещена внутрь UИК;Ja, Но IIОСКОЛЬКУ значение IIсре,\lенной V AR в ходе ВЫllOлнен ия IIpO [раммы не меняется, IIрисвоение ей значения 5 на каждом IIроходе UИ!Сlа является IIУСТОЙ 1I0терей времени. Некоторые uиклы выполняются тысячи И миллионы раз, и тоrда ненужные IIОВТОРСНИЯ ,\ЮI)'Т серl,ез!1O отразип,ся на IIРОИЗВОДИТСЛЫIOСТИ IIроrраммы. Вот если бы значение lIеременной УЛR меНЯЛОСI, в ходе ВЫllOлнения UИК;lа и lIеред каждым 1I0вторением ero команд эта переменная должна была бы снова IIринимап, исходное значение, тоrда данная КО,\lанда при сваивания была бы неоБХОДЮlа именно внутри uикла, а не IIСрСД ним. Ошибка вложенности циклов Один uИкл южет быть вложе// в друrой, т,е, ПОЛllOсп,ю включен BHYTPI, Hero, В этом случае, если ТОЛl,КО IIроrраммист не ДОIIУСТИЛ ошибку, невоз можно, чтобы UИК;I начался внутри друrоrо UИ!Сlа, а завершился вне Hero, Условные операторы Условный ОlIератор (ОlIератор IF) имеет следуюшую форму, IF Условие истинно THEN выполнить одно действие ELSE выполнить ДРуrое действие Пример: IF VAR > 5 THEN SET VAR 2 20 ELSE SET VAR 2 1 О КО,\lаНд<I, С;IС:lующа}) 'Ja J<..IЮ'Jевым СЛОВО,\I ТIIE!'\ (SET УЛR2 == 20), ВЫlIOЛl!яется TO:IJ,KO IIrи vt:;ЮJlll1I, что УЛR > 5, В IIрОТИВНО1 случае выпол няется КО,\Ш!СШ, слсдующан за к.;IЮ'lевым СЛОВО,\I ELSE (SET УЛR2 == 10), Условный Оllератор можст и не вк.;lючап, IIред.ложсния ELSE. В ЭТО,\I слу чае IIрИ неВЫllOлнении условия, С_lедуюшеrо за !СlючеВI,IМ словом IF, YII равлсние lIерсдается команде, следуюшей за условной конструкuией, Неправильное сравнение (т.е. > вместо >=) Проверяемое условие (У AR > 5) может бып, лоrически неверным, В частности, IIроrраммисты нередко забывают о ситуаuиях, коrда значения двух lIеременных равны, 
512 Часть 111: Управление проектами и сруппами Неверные результаты сравнений ПреДlIOЛОЖИМ, что IIроrраммист хотел IIроверИп" равны ли ,\!ежду co бой значения трех lIеременных. для ЭТОI'О он наlIисал IF (УЛR + УЛR2 + УЛR3) / 3  УЛR. Если значения трех переменных равны, их среднее арифметическое будет равно первому из этих чисел, Более тOl'О, д.ля БОЛl,шинства не paB ных значений это условие не выполнится, Но не 1V1Я всех! Если значения переменных равны 2, 1 и 3, Torдa (2+ 1 + 3)/32, Однако числа 2, 1 и 3 разные, Подобные сокращения и усовершенствования, применяемые BMe сто самых естественных IIроверок «VAR  VAR2) AND (VAR2 УЛR3»), являются источниками множества ошибок, Неравенство против равенства в случае выбора из трех вариантов Третий вариант выбора часто добавляется в проrрамму в ходе ее IlOk держки и модификаuии, ПервоначалыlO lIеременная УЛR моrла IIринимап, ТОЛl,ко значения О и 1, IlOзднее добаВИЛОСI, еше значение 2, В исходной IIporpaMMe IIроверка IF УЛR  О ВЫllOлнялаСI, IIрекрасно, Второй вариант выбора обрабатывался IIред.ложением TIIEN, Входяшис в Hero ОlIераторы предназнаЧaJIИСI, для случая УЛR  1 и TelIepl" вероятно, требуют модифи каuии, Сравнение значений переменных с плавающей запятой Вычисления над данными с плаваюшей запятой всеrда чреваты ошиб ка,\IИ, прежде Bcero связанными с окруrлением и усечение,\! реЗУЛl,тата, Например, изза неБОЛI,ШОЙ ошибки ре3УЛl,тат, который должен бып, paB ны,\! О, оказывается равным 0,00000008, Расхождение неБОЛl,шое, но про верку на равенство нулю (IF V AR  О) такой результат не пройдет. Спутаны включающее и исключающее ИЛИ Во мноrих операторах IF IIроверяется истинносп, хотя бы одноrо из нескоЛl,КИХ условий (IF А OR В THEN...), Однако сушествует два вида ОlIераторов OR (ИЛИ): . включающее ИЛИ: реЗУЛl,тат выражения А OR В истинен, если исти нен хоп, один из операндов; . исключающее ИЛИ: реЗУЛlтТат выражения А OR В истинен, если истинен один из операндов. но не оба сразу; 
Прuложе//ие: Распростра//е////ые просрамм//ые ошибки 513 Неверное отрицание лоrическоrо выражения Иноrда оператор IF принимает форму IF А не истинно THEN. Иноrда IIроrраММИСТI>I применяют оператор лоrическоrо отриuания неверно или не задумываются, что означает получившееся выражение. Например, IF NOT (А OR В) THEN означает IF (А  FALSE) ЛNО (В  FALSE) THEN, Для выполнения следуюшеrо за THEN оператора необходимо, чтобы ни А ни В не бl,UIИ истинны. Присваивание вместо сравнения в языке С конструкuия if (УЛR  5) означает, что переменной VAR присваивается значение 5, а затем ВЫllOлняется проверка равенства резу_% тата нулю. Проrраммисты часто пишут так вместо if (У AR  5), что означает просто проверку равенства значения переменной пяти. Путаниuа происходит изза похожести операторов сравнения () и присваивания (), Команды, входящие в предложение THEN или ELSE Вот пример типичной ошибки, IF VAR = VAR 2 THEN SET VAR 2 = 10 SET VAR 2 = 2 О Очевидно, что команда SET УЛR2  20 должна была бы входип, в пред.ложение ELSE. Иначе в приведенном фраrменте кода оператор IF вообше ни к чему, Каким бы ни было ero условие, переменная УЛR2 все равно получит значение 20. Команды, которые не входят ни в одно из предложений Иноrда проrраммист 110 ошибке включает в пред.ложение THEN или ELSE команды, которые должны выполняп,ся при любом значении усло вия оператора IF. Если эти команды повторяются в обоих предложениях, это просто потеря времени, а если ТОЛl,ко в одном  это уже ошибка уп равления потоком. Не проверен флаr Пусп" например, проrрамма вызывает подпроrрамму, которая должна присвоип, значение определенной переменной, а та не делает этоrо, YCTa новив флаr ошибки, Проrрамма не проверяет этот флаr, а действует так, будто все нормалыlO, и IIроверяет значение переменной в операторе IF. ДaJIЫlейшие действия IIроrpаммы MorYT оказап,ся праВИЛЫIЫМИ ТОЛl,ко по 17 
514 Часть 111: Управление проектами 1I сруппами счастливой случайности, BeДl, 1I0дпроrpамма со обшила (посредством YCTa новки фЛaI'а), что Ilеременная не содсржит праВИЛЫlOrо значения, Не сброшен флаr Коrда подпроrрамма была вызвана в предыдуший раз, она установила ф;lаr ошибки. TeIlepl, она вызвана снова, и псрвым делом должна сбросип, этот флаr, Однако 110 ошибке проrраммиста подпроrрамма этоrо не дела ет, В реЗУЛl,татс проrрамма иrнорирует ее совершенно IIраВИЛЫlые резу_% таты изза Toro, что флаr ошибки так и остался установленным ешс с прошлоrо раза, Мноrочисленные варианты Оператор IF IIредполаrает ТОЛl,ко два варианта: выражение либо истин но, либо ложно. В тех же случаях, коrда возможных вариантов действий проrраIМЫ более двух, ИСIIOЛI,ЗУЮТСЯ такие операторы, как CASE, SWITCH, SELECT и оператор перехода на основе вычисляемоrо значения. Вот эквивалент типичноrо оператора данноrо вида. IF VAR 1 DO Заданиеl IF VAR = 2 DO Задание2 IF VAR = 3 DO Задание  3 IF VAR имеет любое друrое значение DO Заданиедляостальныхслучаев Задание д.ля остаЛЫIЫХ случаев не обязателыlO должно присутствовап,. Пропущен блок, выполняемый во всех остальных случаях Проrраммист может оrраничип, набор действий lIеречислением KOHK ретных условий и забып, На! IИ сап, , что же делап" если ни одно из усло вий не выполнится. Переменная УЛR \lOжет приняп, неlIредусмотренное значение либо изза ошибки в проrрамме, либо ВС.1едствие ее последуюшей модификаuии. Наличие блока обработки HecTaMapTHoro значения поможет выявип, такие ситуаuии и IIредотвратип, даЛЫlейшие ошибки. В этом блоке IIporpaMMa может, например, выводип, неожиданное значение переменной на экран. Неверно определены действия для всех остальных случаев Предположим, что IIроrраммист полаrает, что переменная УЛR может IIРI1НИIaП, ТОЛl,ко четыре значения. Он явно указывает три из них, а чет вертое обрабатывает как "ОСТaJIЫlые", Но будут ли запроrраммированные на этот случаЙ деЙствия IIраВИЛЫIЫШ, если переменная примет пятое или шестос знаЧСНI1С'! 
Прилож:ение: Распространенные просраммные ошиБJ.:И 515 Пропущенные варианты Переменная УЛR может принимап, пяп, значений, но проrраммист о IIЯТОМ забыл, Требуется подразделение oAHoro варианта на несколько Иноrда одним из условий оператора выбора MorYT охватываться вари анты, требуюшие различной обработки, НаlIример, ОlIределены действия :ия условия VAR<ЗО, но на самом деле при условии УЛR<15 проrрамма должна делап, одно, а IIрИ условии 15<==VAR<ЗО  друrое, Как правило, такие ошибки допускаются в IlOследнем блоке, предназначенном для всех осталы!ых случаев, Пересекающиеся условия Рассмотрим следуюший фраrмент кода. IF VAR > 5 DO Заданиеl IF VAR > 7 DO Задание2 Первое из указанных условий включает в себя ВТОРОС, Если lIеременная IIримет значение 9, они оба будут истинны  какое же задание должна будет ВЫIIOЛНИп, проrрамма? Это будет зависеп, от ИСПОЛlтЗованноrо опе ратора выбора и языка IIроrраммирования, но, скорее Bcero, имеет место просто ошибка проrpаммиста, Как праВи"10, условия не должны пересекап, ся, Неверные условия и невозможные случаи Проrрамма выполняет Задание16, ТОЛl,ко коrда (УЛR < 6) AND (VAR > 18), Это означает, что Задание16 не выполняется ни коrда, Подобным же образом IIpOrpa\l\l11cT \IOЖСТ определип, условие, которое на практике никоrда НС ВЫIIOЛНI1ТСЯ, даже если теоретически в нем нет НИ'lеrо невоз можноrо, ПроБЛСIЫ TaKol'o рода видны ТОЛI,КО при ана.:I11зе ИСХО;Iноrо кода, Тем не менее, подобные безобидные ошибки затрудняют чтение проrрам мы спеuиалистом, которому IIредстоит ее поддерживап, в даЛЫlейшем, уд.линяют код и создают lIутаниuу, Ошибки обработки или интерпретации данных Данные MorYT lIередавап,ся от одной части проrраммы к друrой и от одноrо проuссса к друrому. В ходе передачи данные MorYT был, искажены или неверно интсрнретированы, 
516 Часть 111: Управле//ие проектами и сруппами Проблемы при передаче данных между подпроrраммами Проrрамма вызывает ПОДlIроrрамму и передает ей данные, например, таким образом: DO suв (VARl, VAR2, VARЗ) Все три переменные, УЛR1, УЛR2 и УЛR3, передаются основной IIроrраммой подпроrрамме, Они называются параметрами подпроrраммы, Подпроrрамма может обрашап,ся к этим переменным по друrим именам, Первая строка определения подпроrраммы может бып, такой: suв (INPUTl, INPUT 2, INPUT З) Подпроrрамма получает первую переменную из списка (V ЛR1) и Ha зывает ее INPUTl, Вторую переменную (У ЛR2) она называет INPUT2, треп,ю (УЛR3)  INPUT3, Определения переменных в проrpамме и подпроrрамме должны совпа дап" Если УЛR1 определена как uелая, такой же должна бып, и INPUTl, Параметры указаны не в том порядке или пропущены В проrрамме стоит команда ОО SUB (УЛR1, УЛR2, УЛR3), а ПОk проrрамма связывает INPUTl с УЛR2 , а INPUT2 с УЛR1, Проrрам мисты часто путают порядок параметров подпроrрамм, изза чеrо возможны самые разнообразные ошибки, Пропуск параметров менее распространен, ПОСКОЛl,ку не все языки проrраммирования допускают несоответствие числа параметров и выявля ют такие ошибки еще на этапе компиляuии, Несоответствие типов данных Предположим, что переменные УЛR1 и УЛR2 определены в проrpам ме как двухбайтовые uелые, При этом в подпроrрамме параметры INPUTl и INPUT2 определены как однобайтовые uелые, Возможносп, такой ситуаuии и действия IIроrpаммы в этом случае определяются языком проrpаммирования, Вполне возможно, что в переменной INPUTl окажет ся первый байт значения УЛR1, а в переменной INPUT2  второй байт значения УЛR1, Тип данных определяет способ их хранения и обработки, Простейши ми примерами типов данных MoryT служип, uелые числа, числа с плаваю шей занятой и строки символов, Более сложными типами данных являются массивы, записи и массивы записей, Сушествует и множество друrих  стеки, дереВI,Я, связанные списки и т,д, 
Приложе//ие: Распростра//е////ые просрамм//ые ошибки 517 Иноrда несоответствие типов данных в вызывающей и вызываемой проuедурах является намеренным, Например, вызывающая проrрамма может передап, трехмерный массив, который проuедура будет интерпрети ровап, как одномерный массив с боЛl,ЩИМ количеством элементов, Анало rичным образом переданный массив символов может интерпретировап,ся как массив чисел, Некоторые языки проrраммирования не допускают по добных вещей, в друrих же это считается стандартным и очеНI, удобным приемом проrраммирования, Однако этот прием требует от проrраммиста боЛl,ЩОЙ аккуратности, и ero беспорядочное применение приводит к orpOM ному количеству ощибок, Как правило, коrда общий размер передаваемых и получаемых данных в байтах не совпадает, это уже явная ощибка с дo волыlO неприятными последствиями, Псевдонимы и различная интерпретация содержимоrо одной и той же области памяти Если два разных имени относятся к одной и той же области памяти, они называются псевдонимами, Если УЛR1 и хх являются друr д.лЯ дpy [а псевдонимами, после выполнения проrраммой команды SET ХХ == 20 значением переменной V ЛR 1 также становится 20, Некоторые псевдонимы испот,зуются еще хитрее, Пусп, переменные УЛR1 и УЛR2 являются однобайтовыми uелыми, а ХХ  двухбайтовым uелым, первый байт KOToporo совпадает с переменной УЛR1, а второй  с переменной V ЛR2, В этом случае, если присвоип, переменной ХХ зна чение 20, переменная V ЛR1 получит значение О, а переменная V ЛR2  20, О существовании псевдонима может забып, даже автор IIроrpаммы, а уж проrраммисту, которому придется ее поддерживап, в даЛЫlейщем, ничеrо не стоит ero вовсе не заметип" В реЗУЛl,тате проrpаммист может измеНИТI, значение одной переменной, не ожидая, что это повлечет за собой и изме нение значения друrой, Если же комбинаuии псевдонимов более сложные  ждите множества ощибок, Неправильная интерпретация данных Проrрамма передает подпроrрамме значение температуры по щкале ЦеЛl,СИЯ, а та интерпретирует ero как температуру по Фаренrейту, Друrой пример: подпроrрамма присваивает флаry ощибки значение 1, желая ero сбросип" Проrрамма понимает это значение как "флаr установлен", Неадекватная информация об ошибке СТОЛКНУВЩИСI, с ощибкой, подпроrpамма не устаНОВИ,,1а ее флаr, Или же она выдала СИПlaJI ощибки без сопутствующей информаuии, в реЗУЛI,тате чеrо вызывающая проrрамма не знает, как ее обрабатывап" 
518 Часть 111: Управление проектами и i!руппа,wи Перед аварийным выходом из noAnporpaMMbI не восстановлено правильное состояние данных ПОДlIроrраlма обнаруживает ошибку или нестандартную ситуаuию и завершает свою работу, Желатсл, ЫIO чтобы перед этиы она восстановила норшUlЫIOС состояние данных, которое моrла изменип" Устаревшие копии данных Два проuесса MorYT имеп, собственные копии обших данных, Так же lOжет бып, и с двумя ПОДlIроrраlмами внутри одноrо и Toro же проuесса, Коrда данные мсняются, обе копии должны бып, обновлены, Однако He редко оказывается, что один из IIроиессов rlOпреЖНСIУ работает со CTapы ми данными, поскоЛl,КУ друrой забыл сообшип, об их изменении, Связанные переменные не синхронизированы Одна переменная обычно содержит удвоенное значение второй, но в определенный юмент первая изменилаСI" а вторая  нет, Эта ошибка чаше Bcero возникает при взаЮlOдейсrвии ПОДlIроrрамм, Локальная установка rлобальных данных I'лобалыюя lIеременная ОlIределяется в IлаВllOЙ IIporpaMMe, Подпроrрам мы юrут ею IIOЛI,зовап,ся  читап, и измсняп, ее значение, Однако изме нения подпроrраммами значения rлобалыюй lIеременной часто происходят случайно, ПроrраМ\lИСТ имел в виду не rлобaJlI,НУЮ lIеременную, о суше ствовании которой он Mor вообше забып" а лока:II,НУЮ lIеременную IIpO цедуры с тем же именем, rлобальное использование локальных переменных Переменная называется локалыlOU ,J.,lЯ некоторой IIроцедуры, если ни какая друrая IIроцедура не может ес ИСПОЛI,зовап" Различие между rлобaJII, ными и локаЛЫIЫIИ переМСННЫIИ су шествует во мноrих языках IIроrраммирования, однако НС во всех, Например, в старых версиях языка BASIC все lIеременные бlтUIИ rлобaJIЫIЫМИ, ЕС1И IIроrра,\IМИСТ, IIИШУШИЙ на таком языке, не будет соблюдап, IIРСДСЛI,НУЮ аккуратносп, в наИlеновании lIеременных, он lOжет ненамеренно обратип,ся к ЛОКaJIЫIOЙ IIсрсменной из друrоrо lecTa проrраммы, Неверная маска битовоrо поля Чтобы сэкономип, нескоЛl,КО байтов И,,1И ,\!икросекунд, некоторые про цессы MorYT IIOЛI,зовап,ся битовыми IIОЛЯМИ, КаждыЙ байт TaK01"0 IIОЛЯ 
Прuло:нсе//ие: Распростра//е////ые просрамм//ые ошибки 519 хранит BOCCMI, псременных  по одной на каждый бит, Можно такжс l1СIIOЛI,зовап, lIару бl1ТОВ IIOД одну переlеIIНУЮ, еще три IIOД друrую и т,д, Маской называется битовый щаблон, IIOЗВОЛЯЮЩИЙ IIроrраIМИСТУ работап, тоЛl,КО с интересующими ero битаIИ, Если IaCKa неверна, значит проrрам мист обращается не к той переменной, Неверное значение из таблицы Данные часто орrанизованы в виде таблиu (простейщими примерами \lOrYT бып, массивы и записи), ПерееннаяуказатеЛl, ОlIределяет, какой Э:JемеlП таблиuы будет ЗaJIисывап,ся или С'lитывап,ся, Проrрамма может обратип,ся не к тому ЭЛС,\IеlПУ таблиuы, или же ее элемент может coдep жать неlIраВИЛЫlOе значение, rраницы расположения данных Проrраlма может ПОЛl,зоваться неllраВИ,,1ЫIЫМ адресом начала И,,1И KOH иа набора данн ых, Не обозначен конец нуль-терминированной строки Пусп, STRING V AR является строковой lIеременной, В ней может содержап,ся строка Привет И,,1И строка Я  строковая переменная, а MO жет бып" нечто rораздо более длинное, Если количество хранящихся в строковой lIеременной символов не фиксировано, должен бып, какойни буДl, индикатор конца строки, РаСlIространенным рещением является по мещсние в конец строки НУЛl,символа (все ero биты нулевые), Этот символ называется терми//атОрО,11 строки, В тех языках проrраммирования, в KOTO рых ИСIIОЛIтЗУЮТСЯ НУЛl,тсрминаторы, все IIроцедуры, работающие со CTpO ками, ищут этот символ, Однако 110 ощибке ero может не оказап,ся (ero забыли, 1I0верх Hero чтото заlIисали или не СКОlIирова:IИ ero из исходной lIеременной), ПОДlIроrрачча, IIсчатающая такую строку, будет печатап, все содержимое lIамяти до тех IIОр, IIOKa не найдет НУЛl,СИМВОЛ или не достиr нет конца lIамяти, Возможно, ВlIрочем, она сразу выдаст сообщение об ощибке, 11 ри КО!lировании такой IIсременной в друrое место памяти TaK же возможны неlIРИЯТНОСТI1 с затиранием нужных данных, Неожиданный конец строки 11 реДlIолаrается, 'ПО в lIеременной STRING V AR должна хранип,ся строка Я  строковая переменная, однако 1I0дпроrрамма, отображающая ее содержимое на экране, выводит ТОЛl,КО Я  стр, Это может означап" что НУЛl,СИМВОЛ случайно СКОlIирован в середину строки, Если же д.лина CTpO ки хранится в отдеЛ},IIOМ байте (байте дли//ы), возможно, что это значение неправилыlO вычислсно или испорчено, 
520 Часть 111: Управление проектами и i!руппами Запись/чтение за rраницами структуры данных или ее элемента в качестве при мера структуры данных лучше Bcero подойдет массив, Проrрамма может неправилыlO вычисляТl, длину ero элементов и изза этоrо неправилыlO прочитап, значение KOHKpeTHoro элемента, При этом она может обратип,ся по адресу памяти, лежашему далеко за пределами массива, Такое возможно и в случае, если подпроrpамма предполаrает, что в массиве БОЛl,ше элементов, чем есп, на самом деле, Подобные ошибки часто происходят при передаче массива из одноЙ подпроrраммы в друryю, коrда определения этой переменной в подпроrpаммах не совпадают, Чтение за пределами буфера сообщения Буфером называется обласп, памяти, используемая для BpeMeHHoro xpa нения данных, Буферы часто ИСПОЛl,зуются при обмене сообшениями меж ду проuессами: передаюший проuесс включает в сообщение указатеЛl, на начало буфера, из KOToporo принимаюший проuесс может прочитап, допол нитеЛl,НУЮ информаuию, ПроuессполучатеЛl, читает данные и освобождает памяп, буфера, после чеrо операuионная система может ее снова ИСПОЛl, зовап" Если проuесс получит неверный адрес буфера или ero неверный размер, он прочитает содержимое друrоrо участка памяти, Дополнение переменных до полноrо слова Слово  это единиuа, исполюуемая компилятором для операций с па мяп,ю, Оно может бып, длиной в 12 бит, 1, 2, 3 или 4 байта и т,д, Если длина переменной меНI,ше слова, некоторые компиляторы дополняют ее до полноrо слова, так что переменная, в которую записано значение 255, на самом деле может хранип, 00255, ДОIIОЛНЯп,ся MorYT как отдеЛЫlые пере менные или элементы массива, так и массив uеликом  правила зависят исключителыю от компилятора, Болсе Toro, два компилятора одноro и Toro же языка MoryT действовать rlOразному, Так что, если проrpаммист рассчи тывает длину определенной структуры данных и основывает некоторые действия проrраммы на этой информаuии, а затем меняет компилятор, проrрамма может работап, неправилыlO, Переполнение и выход за нижнюю rраницу стека данных НескоЛl,КО ранее рассмаТРИВaJIИСI, проблемы, связанные с хранением в стеке адресов возврата и параметров вызываемых подпроrрамм, Стеки ИСПОЛl,зуются проrраммистами не ТОЛl,КО для этоrо  в них MoryT хранип, ся данные. 
Приложе//ие: Распростра//е////ые просрамм//ые ошибки 521 Предположим, что размер стека  256 байтов, а проrраммист пытает ся записан в Hero 300 байтов, Стек переполняется, В нем обычно остаются последние 256 байтов данных, а первые 44 затираются, Коrда проrpамма извлекает данные из стека, она получает 256 байтов и выходит на нижнюю rраниuу стека, т,е, обнаруживает, что он пуст, Затирание кода или AaHHblX Apyroro процесса Это возможно в случае, если два проuесса имеют доступ к одной и той же области памяти, Если при записи данных в эту памяп, одним из про цессов произойдет ошибка, например, проuесс неверно рассчитает длину структуры данных и запишет БОЛl,ше информаuии, чем предполаraJIOСI" он может затереп, данные или код друrоrо проuесса, Проблемы с обменом сообщений Наиболее безопасным способом взаимодействия между проuессами считается обмен сообшениями, Если вместо этоrо проuессы будут переда вап, друr друrу данные через обшую обласп, памяти, ошибка в одном проuессе может привести к порче данных обоих, как бы аккуратно ни бl,Ш написан второй проuесс, Что касается обмена сообшениями, то здеСI, наи более распространенной ошибкой является ситуаuия rOHoK, описываемая в следуюшем разделе, Кроме Toro, возможны ошибки, связанные с отправ кой и получением включаемых в сообшение данных, Отправка сообщения не тому процессу или не в тот порт Сообшение может не попасп, в место назначения, Даже если сообше ние будет направлено нужному проuессу, он может ожидап, ero получения ТОЛl,ко из одноrо определенноrо порта (под портом в данном случае пони мается ВИРТУaJIЫШЯ обласп, памяти для получения данных), Кроме Toro, д.ля взаимодействия fJроиессы MoryT ПОЛl,зовап,ся разными протоколами И,,1И разной идентификаuионной информаuией, Ошибка распознавания полученноrо сообщения Получив сообщение, проuесс должен убедип,ся, что оно предназначе но именно для Hero, содержит праВИ,,1Ыlые идентификаторы и т,п, BeДl, полу чеНlюе сообшение моrло попасп, в данную облаcrь памяти и по ошибке, Недостающие или несинхронизированные сообщения Один проuесс может ПОСIтUIaТЬ сообшения друrому в заранее определен ном порядке, Однако иноrда получается, что СООБЩЕНИЕl приходит 
522 Часть 111: Уllрав,/С/lИе проектами и i!руппами пос:!е СООБЩЕНИЯ2, НаlIример, команда записап, файл на диск южет ПОСТУIIИП, до сообщения с ИНфОрlаuией об Иlени и Iестоположении файла, Причин подобных проблем может бып, множество, и не все они связаны с ощибками в проrра\I\lе, Ilолучающая проrраlма вполне может справип,ся с некоторыми из них, сохранив, наПРИlер, первое из получен ных сообщений и дождаВЩИСI, BToporo или же сообщив проuеССУОТJ\рави телю, что ero сообщение oTBeprHYTo изза нарущения порядка следования, Распространенным симптомом ощибок в об\lене сообщениями являет ся несоответствие информаuии о состоянии ресурсов: один проuесс счита ет, 'ПО файл открыт, принтер иниuиа:IИзирован и телефонная трубка снята, а в таблиuе состояний друrоrо записано обратное, Неважно, какой из про цессов прав, Такие несоответствия приводят к множеству недоразумений, Сообщение передано только N процессам из N+1 Возможно, 'ПО нескоЛl,КО проuессов хранят копии одних и тех же дaH ных и обновляют свои копии после получения определенноrо сообщения, Или же нескоЛl,КО ПОЛI,зователей работают за своими терминалами, и с rлавноrо комш,ютера им направляется сообщение, 'ПО через три IИНУТЫ работа системы будет прекращена, Бывает, что один ИЗ проuессов не IIO лучает сообщение, Обычно это проuесс, который либо последним активи зирован, либо последним запроrраммирован, Порча данных, хранящихся на внешнем устройстве Данные MorYT хранип,ся на дисковых накопителях различных типов, маrнитных лентах и Т,П, Один ИЗ проuессов может запортип, данные, за писав поверх них неверную информаuию, Потеря изменений Два проuесса работают с ОДНИIИ и те1И же данными, Они OДHOBpeMeH но считали их с диска, Зате1 lIервый нроиесс сохранил свои изменения, а второй, не зная об этом, сохрани:! поверх них свою измененную копию данных, В реЗУЛl,тате изменения, внесенные первым проuессом, окаЗaJIИСI, потерянными, Для предотвращения подобных неприятностей обычно ис ПОЛl,зуются блокировки отдеЛЫIЫХ элементов данных (полей, записей, файлов), коrда один проuесс не может работап, с данными, которые в это время модифиuируются друrим проuессом, Однако при реaJlизаuии этой схемы работы также часто допускаются ощибки, Не сохранены введенные данные Проrрамма запращивает у ПОЛI,зователя определенные данные и не сохраняет их, Причиной может бып" например, недоступносп, файла, в котором должна бып, сохранена информаuия, 
Прило:нсе//ие: Распростра//е////ые просрамм//ые ошиб/Си 523 Объем данных слишком велик для процесса-получателя у проuессаполучателя MoryT бып, опрсделенные оrpаничения на объем или скоросп, поступления данных, Он lOжет отверrап, лишние данные, сбоип, или выводип, сообшение об ошибке, Неудачная попытка отмены записи данных IIОЛl,зоватеЛl, вводит данные, но затем пытается предотвратип, их за ПИСI, на диск, остановив проrраМIУ, Однако проrрамма сохраняет новые (плохие) данные и ТОЛl,КО затем завершает свою работу, Ситуации rOHOK в К:lассической ситуаuии [онок возможны два события, Назовем их СОБЫТИЕl и СОБЫТИЕ2, Оба они произойдут, но важно, какое произойдет пеРВI,I\I, Предполаrается, что первым произойдет СОБЫ ТИЕl, Однако в некоторых крайне редких или неожиданных ситуаuиях СОБЫТИЕ2 может "выиrрап, rонки" и произойти первым, Если это IIриведет к сбою проrра1\IМЫ, значит, имеет место ошибка, связанная с ситуацией I'OHOK, IIроrраммист БШI уверен, что событие СОБЫТИЕ2 не ожет произойти первым, и не предусмотрел на этот счет адекватных дей ствий проrраМIЫ, Редко ТССТИРОВшики ишут подобные ошибки, а СТОЛКНУВШИСI, с якобы невоспроизво;rимой ошибкой, мало кто предполаrает, что ее причиной моrла бып, снтуашН! 1'01 IOК , Мноrие вообше находят вопросы, связанные со временными хараКТСРllстика,\IИ проuессов, трудными д.ля понимания, llo этому НИЖС \IJ,) 1I0стара:IИСI, привести как можно БОЛl,ше примеров, rонки при обновлении данных ПреДIlО,IOЖИI, 'ПО олна 1I0дпроrрамма считывает с диска остаток на банковском C'ICTe клиента, вычитает из Hero стоимОсп, последних покупок и записываст Ila диск новый остаток, Вторая считывает с диска остаток и добавляет к нсму последние 1I0ступления, А треп,я учитывает валютные операuии, Всс эти подпроrраммы MOI'YT работап, одновременно, Проuеду ры работают так быстро, а одновременносп, операuий так маловероятна, 'ПО IIроrрачмист не предусмотрел никаких блокировок, В реЗУЛlтТате Mor ло получиться следуюшее, К:lиеllТ банка ПОЛУЧИЛ $500 и потратил $ 100, до этоrо на ero счете было $ 1000, Первая проuедура считала с диска остаток в $ 1 000 и вычла из Hero $ 100, До Toro, как она записала реЗУЛl,тат на диск, вторая проuедура счи тала остаток и добаВИ,,1а к нсму $500, Затем первая проuедура записала свой реЗУЛlтТат, а вторая  свой, В реЗУЛlтТате вместо $1400 остаток получился 
524 Часть 111: Управлеliие проектами и i!руппами равным S 1500, Это клаССИ'Jеская ситуаuия [онок, коrда последователыlOСП, событий ('пение остатка одной проuедурой до ero записи друrой) ОКaзaJIaСI, такой, которой проrраммист не предусмотрел, Предположение, что одно задание завершится до начала Apyroro При меры этоrо типа проблем приведены в предыдущем и следующем разделах, Предположение, что в течение определенноrо KopoTKoro интервала времени не будет ввода данных ПОЛlтЗоватеЛl, вводит символ, Текстовый редактор, в котором он рабо тает, перемещает на экране друrие символы, чтобы освободип, место д.ля ТОЛl,КО 'ПО введенноrо, затем отображает ero в позиuии курсора, После этоrо проrpамма ждет даЛЫlейших действий ПОЛl,зователя, ПОСКОЛl,ку KOM ПI,ютер оБЫ'1I1O работает rораздо быстрее человека, он успеет проделап, все это до Toro, как ПОЛl,зоватеЛl, нажмет следующую клавишу,  по крайней мере, так думал проrраммист, Однако то ли КОМПI,ютер был переrpужен, то ли ПОЛl,зоватеЛl, попался быстрый, но ПОЛУЧИЛОСI, наоборот  ПОЛl,зоватеЛl, вводил данные быстрее, 'JeM проrрамма успевала их отобразип" В резуЛl, тате каждый второй введенный символ оказывался потерянным, Предположение, что в течение определенноrо KopoTKoro интервала времени не будет прерываний Проrрамма выполняет некоторую 'JувствитеЛЫIУЮ ко времени опера uию, например: . записывает биты в конкретное место вращающеrося диска или дви жущейся ленты; . чертит на движущемся листе бумаrи; . быстро отвечает на сообщение, Проrраммист понимает, что эти операuии выполняются очеНI, быстро, поэтому он не блокирует прерывания на время их выполнения, рассчиты вая, что накладок не будет, А зря, Однажды прерывание все же произой дет во время выполнения подобной операuии  и 'по же будет Torдa? Ресурс только что стал недоступен Двум проuессам нужен один и тот же принтер, Один получает к нему доступ, Друrой вынужден ждап" Как праВи"10, проrpаммЫ учитывают такую возможносп, и прекрасно с ней справляются, 
Прuлож:е//ие: Распростра//е//l/ые просрамм//ые ошибки 525 Однако здеСI, есп, один нюанс, Между проверкой доступности принтера и Ha'JaJIOM ero ИСПОЛl,зования проrраммой проходит некоторое время, В этот короткий период друrая, более быстрая проrрамма может захватип, принтер и на'JaП, ет ИСПОЛl,зовап" Некоторые проrраммисты скажут, что это очень маловероятно, Они правы, Однако проrрамма может выполняться пользователями миллионы раз, так что возможно все, А поскольку последствия ошибок, связанных с условиями [онок, бывают очень серьезными, такие ошибки необходимо ис правлять, какой бы маленькой ни БЬUIа вероятность их проявления, Предположение, что человек, устройство или процесс ответят быстро Проrрамма выводит на экран сообщение и несколько секунд ожидает ответа, Если пользователь не отвечает, проrpамма считает, что ero нет за компьютером, и прекращает свою работу, Подобным образом друrая про [рамма пытается инициализировать принтер и некоторое время ждет ero ответа, после чеrо выдает сообщение, что принтер недоступен, Использу ются таймауты и при ожидании ответа от друrоrо процесса, Если таймаут слишком короток, вероятно возникновение ситуации [онок, коrда процесс, человек или устройство просто не успели ответить, Если интервал времени очень короткий, не обязательно имеет место классическое условие [онок, Проrраммист, скорее Bcero, предполаrал, что ответ может быть и не получен, и корректно отработал эту ситуацию, Если же интервал лишь чуть короче, чем необходимо, риск ошибки больше, Что произойдет, если ответ на сообщение поступит через несколько миллисе кунд после окончания таймаута? Может быть, он будет интерпретирован как ответ на следующее сообщение? Это уже серьезная ошибка, Реальный набор опций в процессе перерисовки экрана Компьютер отображает меню и ждет ответа пользователя, Таймаут или друrое событие (сообщение, получение сиrнала от устройства) заставляют проrрамму отобразить друrое меню, Пока она перерисовывает экран, пользователь нажимает на клавишу, В этой ситуации возможны два вида ошибок, . Проrрамма интерпретирует нажатие клавиши как выбор команды cTaporo меню, хотя новое уже на экране, . Проrрамма интерпретирует нажатие клавиши как выбор команды HOBoro меню, хотя на экране все еще старое, Эта проблема реальной эксплуатации, Опытный пользователь знает, какое меню сейчас появится на экране, и может нажать на клавишу еще до Toro, как оно будет прорисовано до конца, 
526 Часть 111: Управление проектами и i!руппами Задание начинается ОЧО Toro, как выполнены подrотовительные деиствия Проrра,\!lа отсылает данные на принтер до ero rотовности, пытается записать данные в область памяти, которая ей еще не выделена, и т,п, Возможно, ПрОI-рам\ta должна дождаться определенноrо сообщения и толь ко после этоrо начинать выполнение заданиЯ, Но, основываясь на друrой информации (например, на друrих сообщениях), ПРOl-рамма определяет, что ожидаемое событие BOTBOT наступит, Поэтому ради повышения произво дительности проrpаммист идет на то, чтобы не дожидаться подтверждения, Иноrда ero ожидания не оправдываются, Сообщения приходят одновременно или не в том порядке, в котором они были отправлены Предположим, что на банковском счету пользователя лежит 51000 и он пытается выполнить три действия в следующем порядке: . снять со сч ета 51000; . положить на счет 5500; . снять со счета 5100, Первая операция выполняется, 5500 также принимаются, Но коrда пользователь пытается снять со счета 5100, он получает сообщение, что на ero счете нулевой остаток, По какойто причине операция внесения денеr заняла больше времени, чем ожидалось, и к моменту их снятия еще не была завершена, Проблемы TaKoro рода широко распространены в системах, функциони рование которых основано на обмене сообщениями, Сообщения MorYT передаваться по Kpyry, они MorYT проверяться дополнительными запроса ми, так что далеко не всеrда можно сказать с уверенностью, какое из OT правленных сообщений ДОСТИlнет места назначения первым, Самым неприятным проявлснием этой проблемы являются противоре чащие друr друrу сообщения, которые меняются местами, Один процесс просит друrой выполнить некоторое действие, Второй процесс отправляет сообщение, подтверждающее, что он может выполнить задачу (принять 5500), а затем обнаруживает, что не может этоrо сделать (остаток остается нулевым), и посылает второе сообщение, При этом базы данных сообще ния достиrают в ином порядке, так что ей кажется, что пользователь CHa чала запрашивает 5100, а затем КЛадет на счет 5500, У пользователя же своя картина: он сначала получил сообщение, что 5500 положены на счет, а затем попытался снять 5100 и получил сообщение о нулевом остатке, 
Прило:нсе//ие: Распростра//е//l/ые просрамм//ые ош"fiки 5 2 7 Повышенные наrрузки При переrрузках проrрамма может вести себя неожиданным образом, К таким псреrpузкам может относиться большое количество работы в тсчение IIРОДОJlжительноrо времени или высокая скорость работы, В том и друrО1 случае IIporpa!Me может не хватить Оllределенных ресурсов: например, сй южст нс хватить памяти или lIринтер не будет успевать печатаТh переда ваеIУЮ СЮ информацию, Возможности любой проrраммы оrрани'lСНЫ, Важно то, насколько вероятно, что пользователь столкнется с ЭТИIИ orpa НИ'Iениями, и какими будут их последствия, Изза использования неэффсктивных а;Irоритмов нскоторыс IIрОI'рЮI,\!Ы сами создают себе пробле,\!ы, а в мультипроrра\lIНОЙ срсдс сщс и '!aTpYk няют работу друrих IIРИ;lOжений, Требуемый ресурс недоступен ПРОI'рамме не удается воспользоваться УСТРОЙСТВОI II;[I! иным рссурсо.\! кщшьютсра, Причины MorYT быть такиIИ, . Диск полон . Дисковый каталоr полон . Область памяти заllолнена . ОчеРСДh печати заlIолнена . Очередь сообщений заполнена . Стек полон . Диск отсутствует в дисководе . Дисковод не работает . Дисковод отсутствует . Принтер в режиме 0[[ line . В принтере кончилась бумаrа . В принтере нет ленты . Принтер отсутствует . Дополнительная память отсутствует Не освобожден ресурс в системе может не быть свободных ресурсов изза Toro, что их захва тил и не освобождает один из процессов, Проrраммисты тщательно проду мывают процсдуру получения ресурсов, но они далеко не так аккуратны в вопросе их освобождения, А поскольку ничеrо особенноrо с проrраммой не 
528 Часть I/I: Управление проектами и i!руппами происходит, коrда она не освобождает ресурс в течение долrоrо времени, проблемы этоrо типа кажутся менее значительными, Разрабатывая тесты, подумайте над следующими примерами пр06лем, Нет сиrнала об освобождении устройства Процесс использует принтер, Остальные процессы ждут сиrнала о ero освобождении, Процесс завершает работу с принтером, но сиrнал не OT правляет, Старый файл не удален с накопителя Проrрамма не удалила устаревшие резервные копии или временные фай"1Ы, Как правило, количество хранящихся копий файлов cTporo опреде лено: их не должно быть ни больше ни меньше, Системе не возвращена неиспользуемая память в мноrозадачной системе существует специальный процесс, управляю щий памятью и выделяющий ее остальным процессам во временное пользование, Предполаrается, что, коrда память процессу становится не нужна, он возвращает ее системе, послав ей соответствующее сообщение, Однако не все проrpаммисты аккуратны в этом вопросе  проблемы, воз никающие изза блокированной процессами памяти, UСКJ/ючuтелы/О распро странены, Лишние затраты компьютерноrо времени Процесс псриодически проверяет флаr события, которое не может про изойти, ИЛИ выполняет друrие действия, которые были необходимы в свое время, но больше не нужны, Нет свободноrо блока памяти достаточноrо размера Менеджер памяти должен уметь перераспределять свободную память таким образом, чтобы она составляла блоки достаточноrо размера, или же в системе должен быть реализован механизм виртуальной памяти, коrда память, видимая прикладным процессом как единый блок, на самом деле состоит из расположенных на расстоянии друr от друrа фраrментов, В противном случае возможно, что через некоторое время после нача ла работы свободная память станет СИ,,1ЬНО фраrментированной и очеред ной процесс не сможет получить блок памяти нужноrо ему размера, хотя обший объем свободной памяти будет вполне достаточным, 
Приложение: Распространенные просраммные ошибки 529 Недостаточный размер буфера ввода или очереди Процесс может терять информацию о нажатиях КJIавиш, сообщения или друrие данные изза Toro, что размер буфера, в который они поступают с большой скоростью, недостаточно велик, чтобы вместить их все, Если буфер ввода процесса предназначен для хранения 1 О символов, что произойдет, коrда пользователь введет IIй символ до Toro, как процесс успеет обработать хоть один из уже введенных и освободить в буфере место для новых данных? Возможно, проrpамма выдаст звуковой сиrнал, Если же данные поступают процессу через модем, он может попросить передающий процесс приостановить передачу, Аналоrичная ситуация возможна и с очередью сообщений (очередь  это буфер определенной структуры), Если сообщение не помещается в очередь, оно может быть просто проиrнорировано, возврашено отправите лю с кодом ошибки и Т,П, В первом случае необходимо выяснить, каковы будут последствия потери сообщения, Не очищен элемент очереди, буфера или стека Предположим, что проrрамма получает сообщения и помещает их в очередь, откуда читает их, коrда появляется время, Прочитанное сообще ние должно быть удалено из очереди, чтобы освободить место для следу ющих сообщений, Однако проrраммист может об этом забьrrь, изза чеrо через некоторое время работы проrраммы очередь окажется полностью заполненной и проrpамма не сможет получить больше ни одноrо сообще ния, В более сложных случаях из очереди не удаляются только некоторые сообщения, так что ошибка проявляется далеко не сразу, Чтобы ее увидеть, проrрамму необходимо тестировать в течение длительноrо времени без перезапуска, Длительность времени определяется практическими потребно стями пользователя, для тестирования TeKcToBoro процессора обычно суток непрерывной работы более чем достаточно, в то время как телефонная система может работать без остановки месяцами, Потерянные сообщения Операционная система может терять некоторые сообщения (увы, ничеrо не поделаешь), Может это делать и процессполучатель, Korдa ему OДНOBpe менно приходит слишком MHoro сообщений, Должен ли процеССОПlрави тель знать, что ero сообщение не обработано и ero необходимо через некоторое время отослать повторно? Снижение производительности При высокой заrpузке системы (повышении объемов обрабатываемых данных, большом количестве пользователей или процессов) работа всех 
530 Часть 1/1: Управление проекта,wи и i!руппами приложсний заме;щяется, Если проrрамма должна Отвечать на события с опреде;Iенной быстротой или обрабатывать опреде;lенное количество сооб щений в секунду, выполнение этих условий оказывается под уrрозой, Друrие проrраМIbI, ориентирующиеся на ее быстрый ответ, также MorYT не выполнить свою работу, Повышение вероятности ситуаций rOHoK Со снижением производительности системы вероятность возникновения ситуаuий [онок значительно повышается, В КJJaССИ'Jеском условии [онок MorYT ПрОИЗОЙТII два события, причем первое из них практически Bcerдa предшествует второму, Лишь в очень редких случаях второе событие чуть чуть обrоняет lIервое, Однако, коrда работа системы замедляется, на [eHe рирование или реrистрацию lIepBOrO события уходит больше времени, При этом замедление может и не коснуться BToporo события (например, на клавиатурный ввод система может реаrировать llOпрежнему быстро), В результате второс событие будст опережать первое rораздо чаще, чем оБЬi'I но, При повышенной наrрузке 06ъем нео6язательных данных не сокращается Некоторыс проrраммы rенерируют orpOMHoe количество выходных дaH ных, На форматирование всей этой информаuии и вывод ее на экран или принтер уходит УЙ,\Iа времени, Если компьютер и так псреrpужен, подоб ные проrраммы должны сокращать объем выходной информаuии, Они MorYT выдавать свои сообщсния в сокращенноЙ форме и не печатать их немед.ленно, а сохранять в файле журна;Ja, Только самыс срочные сообще ния должны немеЛ;Iенно выводиться на экран или lIечать, Предложения по сокращснию вывода проrраМIЫ следует тщательно продумать, Например, если IIроl'ра!мспланировщику необходимо распеча тать план совещания, которое состоится через три минуты, она должна сделать это немед.ленно и в IЮ;IНОI объеме, Не распознается сокращеный вывод Apyroro процесса при повышеннои заrрузке Представьте себе мноrопользовательскую систему, в которой все про [раммы передают информацию о своих сбоях и друrих интересных собы тиях на консоль системноrо администратора, Обычно сообщение ВК,1ючает числовой код и текстовое Оllисание, При повышенной заrрузке системы lIередаются только коды, причем в сокращеННО1 виде, так что админист ратору приходится искать каждый код в справочнике, Неудобно, конечно, но зато трафик системы хоть HeMHoI'o снижается, 
Приложеliие: Распростраliею/ые просрамм//ые ошибки 531 Теперь предположим, что сообщения сохраняются на диске, В концс дня (недели, месяца) служебная IIpol'paM1a читает их и, ВОЗ\lОЖНО, пре;! ПРИНИ\lает в ответ на некоторые из них определенные дсйствия, Эта про l'paM,\!a должна уметь распознавать сокращенные коды, записанные проrраммами при повышенной З3l'рузке системы, ина'lе она не сможет выполнить свою работу, Не приостанавливаются задания с низким приоритетом При повышенной З3l'рузке системы всс задания, в которых нет срочной необходимости, должны быть приостановлены, В МНОl'озадачных системах процессам и пользователям обычно назначаются приоритеТbl, Те, у Koro приоритет выше, имеют больше прав на использованис ресурсов компью тера, Задания с низким приоритетом вообще не выполняются Замену масла в автомобилс можно ненадолrо отложить, но все же за менить ero нужно, Аналоrичным образом можно приостановить выполне ние нскоторых низкоприоритетных заданий, но рано или поздно ОНИ должны быть выполнены, Для таких заданий не разрешастся подолrу ис пользовать компьютерное время, коrда система заrружена, однако понем Hory их все же следует выполнять, Аппаратное обеспечение ПРОl'раммы MorYT отсылать устройствам невсрные данные, иrнориро вать возвращаемые ими коды ошибок, пытаться использовать неподклю ченные или отсутствующие устройства и т,д, Даже если причиной проблемы является аппаратный сбой, проrраммная ошибка также может присутствовать  она выражается в том, что ПрОl'рамма не распознала неработоспособность устройства и не приняла соотвстствующих мер, Неверное устройство Например, проrрамма выводит данные на экран вместо принтера, Неверный адрес устройства Во мноrих системах, д.ля Toro чтобы передать данные устройству, про [рамма должна просто записать их по определенному адресу памяти, За физическую передачу устройству данных из этой области отвечает аппарат ное обеспечение, ПРОl'рамма может записать данные не по тому адресу, 
532 Часть 1/1: Управление проектами и i!руппами Устройство недоступно См, вышеприведенный раздел "Требуемый ресурс недоступен", Устройство возвращено не в тот пул Например, в мноrозадачной системе может быть MHoro лазерных и матричных принтеров, Проrрамма использует матричный принтер, а затем сообщает, что он свободен, Однако, возвращая ero в пул доступных YCT ройств, она по ошибке указывает не пул матричных принтеров, а пул ла зерных, ДaHHMY пользователю или проrрамме использование устроиства запрещено Например, рядовым сотрудникам компании может быть запрещено использование дороrостоящих, сложных или хрупких устройств, Проrрам мы, работающие с такими пользователями (пользовательскими ID), долж ны уметь обрабатывать данный отказ, Данный уровень привилеrий не позволяет получить доступ к устройству Эта проблема похожа на предыдущую, только запрет использования устройства определяется не идентификатором пользователя, а ero уровнем привилеrий, который проrрамма должна сообщить системе, Шумы Проrрамма начинает работу с устройством, например, принтером или модемом, Компьютер связан с этим устройством через коммуникационный канал, Однако электрические наводки, временные IIроблемы и друrие при чины MoryT вызвать искажение передаваемых по каналу сиrналов (компь ют ер отправляет 3, а устройство 1I0лучает 1), Как проrрамма выявляет ошибки обмена данными и как она о них сообщает? Что она делает д.ля их исправления? Прерывание связи Один компьютер отправляет данные друrому через телефонную линию (и модемы с двух сторон), На середине передачи один из модемов ОТКJ\Ю чается, Как каждый из компьютеров узнает, что связь прервана, сколько времени это занимает и что предпринимается далее? Аналоrичным образом как компьютер узнает, что принтер, к которому он подключен, перестал печатать? 
Приложе//ие: Распростра//ею/ые пpOcpGМM//ыe ошибки 533 Проблемы таймаута Проrраlма посылает устройству сиrнал и некоторое время ждет OTBe та, Не получив ero, она решает, что устройство сломано или отключено, Но что, если она просто ждала недостаточно долrо? Неверный накопителЬ Проrрамма ищет данные, записанные на накопитель  дискету, CMeH ный жесткий диск или маrнитную ленту, Не найдя необходимых файлов, она может сообщить об этом пользователю и попросить вставить друrой наКОlIитель ИЛИ же сначала поискать данные на друrом устройстве, OДHa ко возможен и просто проrраммный сбой, А в одной особенно свирепой ОlIерационной системе проrpаммы моrли разрушить каталоr дискеты, пы таясь найти файл, KOToporo там нет, Не проверяется содержимое текущеrо диска Вставьте один диск, 1I0работайте с ним, затем вытащите ero и вставьте в тот же дисковод друrой диск, Некоторые операционные системы не за мечают замены, Они копируют каталоr диска в память и не считывают ero IIОВТОРНО до тех пор, пока пользователь об этом явно не ПОlIрОСИТ, Пыта ясь записать данные на диск или считать их с диска, такие операционные системы пользуются старой информацией каталоrа и иноrда даже IIОрТЯТ файлы или читают неизвестно что, Не закрыт файл Завершив работу с файлом, проrрамма должна ero закрыть, В против ном случае внесенные ею в файл изменения не будут записаны на диск, При выключении компьютера открытый файл может 6ьпь запорчен, Поэто !y завершая свою работу, проrраммы обязательно должны закрывать все свои открытые файлы, Неожиданный конец файла Читая файл, проrpамма достиrает маркера ero конца, Предположим, что проrpамма ожидала найти необходимые данные далее, Как она поступит: возможно, проиrнорирует маркер конца файла и продолжит чтение даль ше? А может быть, произойдет сбой? Ошибки, связанные с длиной файлов и дисковыми секторами Информация хранится на дисках небольшими фраrментами фиксиро BaHHoro размера, называемыми секторами, Их размер обычно составляет несколько килобайтов, Некоторые проrpаммы сбоят при попытке coxpaHe 
534 Часть III: Управ..lе//ие проеКIIlUМИ и i!руппал/U ния ИЛИ 'пения файла, раЗIСр которою кратсн размеру сектора, Напрю!ср, если раз!ер ссктора равсн 1 Кб, IIpOI'pa!\!e не удастся IIраВИЛhНО сохранить фаЙ;IЫ размеРО,\1 в 1, 2, 3 Кб и T,;I, ПОСIСДНI1Й СЮlВол каЖДОl'О сектора или IlOслеНIIЙ символ файла можст быть СКОllирован Hel1paBII;IIoHO, СКОllирован дважды или 1I0терян, ИНОlда IIporpaIMa даже IIОрТИТ Becl, ЗaJшсывае!ыii фаЙл и фаЙ;I, слеДУЮЩИII за ним на ;шскс, Неверный КОД операции или команды IIporpaM\!a 1I0сылает термина;IУ ко\!аНду сдвинуть курсор на экране, а он вместо ЭТОI'О Iеняет видеорежи!, IIpOI'paM!a 1I0сылает IIринтеру KOMaH ду IIроюНа страницы, а он ВЫllOлняет lIepeBO;! строки, Устройства не стан;taРПlЗированы, Для выlo:lненияя ОДНОI'О и TOI'O же действия два принтера MOIYT ИСIЮЛhЗовать разные комаНдЫ, То жс касается и любых ДРУI'ИХ устройств, IIоэтому lIpOl'paIMa ДОJlжна знать, с каки\! ИIСННО устройством она работает, и lIередавать eIY llраВИЛhные команды, Неверно интерпретирован код состояния или возврата ПРОl'рамма IIOCbI;laeT IIрИНТl'рУ КОlанду ВК;IЮ'lИТh курсив, Принтер может ответить, сообщив, возможно или нет выlIлненllеe этой комаНдЫ, Он также lOжет сообщить о IIричине неудачи (отсутствует бумаrа, лента, He известная комаНда, нс установлен дополнИтсльный модуль), \1ноrие про [раммы иrнорируют коды ошибок или ишут их В устарсвшем или неверно\\ СIIИске, Ошибка протокола обмена с устройством Ко\\муникационный lIРОТОКОЛ, ИСllОЛIтЗУС\lЫЙ ;L:IЯ взаимодсйствия KOM lIьютера и внешнеrо устроЙства и:!и lIaphI кошьютеров ОlIределяет, коrда КОМIII,ютер ОТlIравляет данныс, с какой скоростью и каковы их характери стики (четность, стоповые биты 11 T,II,), Кромс Toro, протокол определяст, как устройство сообщает о 11O;IУ'IСНИИ данных и I-ОТОВНОСТИ IIринимать слсдующие и;ш о необходимости IIриостановки lIере,tачи, Устройства MorYT ОТlIраВ;IЯlЬ данные и orne'IaTb HeBllOlli1Д, или же фор мат данных может быть неверны\!, Неполное использование возможностей устройства Если IIринтер может lIечатать IIОЛУЖИРНЫМ шрифтом, зачем IIыттьсяя имитировать этот шрифт, lIечатая каждую строку 110 нескольку раз? Про l'paM\la может быть разработана для старых устройств и не изменена с расширенис! их возможностей, 
IIри,lOж:еllие: Распростраllеllllые пp0i!pa,I/Mllble ошибки 535 Устройство \lOжет И\lеть собственныс встроснные шрифты, набор кодов ошибок и т,д" но ПрОI'ра\!Щl нс раСlIознает el'o сообщсний и не ИСIIОЛЬЗУ ст расширенных ВОЗ\lOжностсй, IIроблема lOжст быть I! В ДРУI'О\I, IIрOl'ра\lМИСТ знает о возможностях устройС1В, НО все они УlIравляются разны1И КО\lандами, и реализация IlOлноцеННОl'О УlIраВ:lения ими все1И обходится С;\иШКО\l ДОрОl'О, Иrнорируется или неправильно используется механизм страничноrо управления памятью IIа\lЯТЬ КО\lпьютера \lOжст быть ЛОl'ически разделена на участки, назы ваемые страница\IИ, Однако IIpOI'paM\la может неверно lIерсключаться lеЖJtу страницами или неlIравильно с нюlИ обрашаться, Страницы часто ИСIIОЛЬЗУЮТСЯ лля ОРl'анизации виртуа;IЬНОЙ lIамяти, IIpol'pa\l\l:1 обращается к даННЫ\l по Оllределенному адресу, нс зная, Haxo ;tятся ли они в ОlIеративной IJa\IЯТИ или выrpужены на диск, Если IIpOl'paM \Ia обращается к отсутствующсй страницс, IIРОИСХОДИТ ошибка, в ответ на которую страница считывастся в lIамять, ВlIрочем, операционные системы обычно скрывают от IIpOI'pa!1 !ехаНИЗ\l Орl'аЮlЗации виртуа;IЬНОЙ IIамя ти, хотя некоторые IIpOI'paM\lbl Ilьпаются реализовывать ею самостоятель но, В этом случае IIpOI'pa!la может С:IУ'Iайно затсреТh содсржимое страницы в lIамяти, не сохранив el'o на дискс, Иrнорирование оrраничений канала IIримеры: . ПрОI раМ\lа IIьпается IIсрссылать данные со скоростью 100 символов в секунду, в то время как через соединение может передаваться только 10 символов в секунду, . IIpOl'paMMa можст lIерссылать данныс с большой скоростью, пока входной буфер устройства нс заlIОЛНИТСЯ, Затем она должна IIpeKpa ТИТI, lIерсдачу до тех IIОр, IIOKa устройство не освободит буфер, Некоторые IIpOI'paMlbI не раСlIознают СИl'Налов устройств и IIРОДОЛ жают lIереда'IУ, Предположения о наличии или отсутствии устройства или ero инициализации IIcред отправкой текста на IIечать текстовый IIроцессор 1I0сылает IIрИН теру инициализирующес сообщение, в KOTOpO1 I'ОВОрИТСЯ, что данные должны печататься с такимто разРСШСНИС\l и такимто шрифтом, Необхо :1I!\IO ли это сообщение? Возможно, что принтер уже инициализирован, 
536 Часть I/I: Управление проектами и i!руппами Проrраммируемые функциональные клавиши Проrpаммируемь!е функциональные клавиши MOI'YT I'енерировать при нажатии любую заданную 1I0следовательность кодов, Эта последователь ность должна быть правильно зarlрОl'раммирована и соответствовать TeKY щему режиму ПрОl'раммы, Например, если на экране наlIисано: "Для печати нажмите <PFI>",  I'енерируемая IIрИ нажатии этой клавиши последовательность кодов должна инициировать печать, а не выход из проrpаммы, Если ПрОl'рамма IlOлш'ается на ПРОl'раммируемые клавиши, при ее за пуске необходимо убедиться, что с ними связаны IIравильные последова тельности кодов, Контроль версий и идентификаторов Если предполш'ается, что ваша версия ПрОI'ра\IМЫ имеет номер 2.43, и при этом одни ее составляющие относятся к версии 2.42, а друrие  к версии 2.44, то у вас, скорее Bcero, проблемы, Тестировщик должен знать, что у Hero за версия, и это должно быть возможно определить на OCHOBa нии проrраммноrо кода, Если это не так, документируйте ошибку, Некоторые люди называют подобные ошибки бюрократическими, Ведь только бюрократы станут беспокоиться о таких вещах, как версии файлов, Однако беспокоиться об этом надо, иначе пользователи MoryT получить не то, что ожидали, Таинственным образом появляются старые ошибки Старые проблемы \lOryT появиться по той простой причине, что про rpаммист скомпоновал старую версию одной подпроrраммы с новыми Bep сиями остальных, Мноrие IIporpaMMbl состоят из десятков и сотен файлов  не мудрено запутаться в их версиях, Проrраммисты, которые сохраня ют старые версии файлов, часто КОМIIОНУЮТ их с новыми, Обновление не всех копий данных или проrраммных файлов Некоторые проrраммисты включают один и тот же код во множество проrpаммных модулей, Изменив этот код, они должны обновить несколь ко десятков ero копий, Не удивительно, если в некоторые из них они за будут внести изменения, В результате ошибка может быть исправлена в двадцати местах и Остаться еще в пяти, Отсутствие заrоловка Запустив проrрамму, пользователь должен видеть, с чем он работает, В ее верхней строке должно быть наlIИСано, что на экране электронная таб лица Серrея Петрова, а не база данных Василия Иванова, 
Приложе//ие: Распростра//е////ые просрамм//ые ошибки 537 Отсутствие номера версии Проrрамма должна предоставить IlOльзователю возможность узнать номер ее версии, Обычно номер версии отображается в заставке в IIроцессе заlIуска проrраммы, а также по СlIециальной команде пользователя, Необ ходимо, чтобы эту команду можно было леrко найти, TOrдa пользователь или тестировщик сможет сообщить проrраммисту об обнаруженной ошиб ке, Если проrраммный продукт состоит из нескольких достаточно незави симых компонентов, желательно, чтобы у каждоrо из них был свой номер версии, который также леrко было бы определить, Однако если у вас нет твердой поддержки руководства, не настаивайте, чтобы проrраммисты Ha значали компонентам продукта отдельные номера версий, Неверный номер версии в заrоловке экрана Обычно номер версии проrраммы отображается в ее заrоловке или в диалоrовом окне "О проrpамме", Меняя код, проrpаммист иноrда забывает менять отображаемые номера версий, Отсутствующая или неверная информация 06 авторских правах Информация об авторских правах на проrрамму обычно отображается при ее первом запуске, а также в диалоrовом окне "О проrрамме", Она должна быть достоверной, Проrрамма, скомпилированная из архивной копии, не соответствует проданному варианту Перед выпуском продукта ero исходный код архивируется, Если пользо ватель находит ошибку, проrраммисты исправляют ее в исходном коде и повторно компилируют проrрамму, Однако для начала исходный код KOM пилируется как есть, и проверяется совпадение результата с имеющейся у пользователя проrраммой, Если проrраммы не одинаковы, как вносить изменения? Все это кажется очевидным, но вы не поверите, как мною компаний не MoryT воссоздать проданные ими продукты, Архивные копии исходноrо кода у них есть, но не той версии проrpаммы, Это очень серьезная проблема, Составляя отчет о несовпадении архивной копии кода с той, которая предназначена для продажи, назначьте ему наивысший приоритет, rOToBbIe диски содержат неверный код или данные После MaCCOBoro производства дисков, коrда продукт будет практичес ки [отов к выпуску, проверьте несколько из них, Если на дисках имеются ошибки, их поиск входит в обязанности rруппы тестирования, 
538 Часть 111: Управлеliие проеюпа.\1U и ?руппами Дупликаторы MorYT ВЫIlускать чистые ДИСКИ . такое случается, И слу чается даже, что :ЛИ Чl1стые ДI1СКИ vходят в 11 родажу , За IIOС;Iедние три [ода я трижды 11O:lуча:1 как IIO;IьзоватсЛl, чистые ДИСКИ (от раз:1ИЧНЫХ КО\!Шl ний), Производственный отдсл lOжет разIНОЖИп, не ту версию IIporpa\! мы или даже вообще не ту IIporpa,\I\IY, Ошибки тестирования в ЭТО\1 разделе рассказывается о технических и проuедурных ошибках и ошибках в ДОКУlеllТаuии, :LOllускас1ЫХ сотрудника,\!!! rрУIIlIЫ тестирова ния, Хотя это И нс ошибки IIроrра\!IЫ, Ba1 нс раз IIридется столкнуп,ся с НИ,\lИ В xO"te работы, Пропущены ошибки в nporpaMMe Вы BcerAa будсте IIРОlIускап, ошибки, ПОСКОЛl,КУ все ВОЗ\lOжные тесты ВЫIIOЛНИП, невозможно, Однако IIРОlIущенных ОШllбок будет БОЛl,ше, че\! ожидается, Поэтому, обнаружив ошибку, которая "taBHo \!оrла бып, выяв лена, особенно на IIOЗДНИХ стадиях тестирования, ищитс IIYTII усовершен ствования IIроцедуры тсстирования, Не замечена проблема Выявленную тесто\! ошибку южно нам, . нс увиден 110 С:lе;tУЮЩИ1 IIрИЧИ . Тестировщик //е з//ает, каким долже// быть правиль//ый результат, 110 возможности включайте в ОllllсаНIIЯ тестов и IIреДlIO:lаrаемые реЗУ;!I, таты, Если тест аНТО!атизирован, лучше Bcero рядо! с ero реЗУЛl,та TOI вывести образеu IIраВИЛЫIЫХ данных, Ошибка затерялась в (iu/ЫIlО,\/ ()(j{.C,\/(! выход//ых дGl/l/ЫХ, 1 IостарайтеСI" чтобы ВЫХО;\IIые даННЫСlсстн бl,I;ll! как южно БОJIСС КОрОТКИIИ, Если это неВОЗIOЖIIO, на"равьте их в фаЙ:1 11 IIOAroToBI,TC IIporpa! \!у, которая IIроверяст l!Х авТОlатичсски, Тестировщик //е ожида./ 1/1(//,:О?о резу./ьтата теста, Бывает, что тсст, IIредназначенный ;L'IЯ о;uюii 1аJlСНI,КОЙ части !Iроrрашы, выявляет ошибку COBCC! в Apyтii Ct: 'Iасти, Будне к ЭТОIУ [отовы, Тестировщик устал и /ЮIllИ.\/ШllеАе//, ему скуч//о, СтарайтеСI, ОРJ-анизо вап, работу так, чтобы никто не ныrЮЛilя;r O:tl1II и тот же тест БОЛl,ше трех раз, Псрсдавайте тесты lеЖJ.У сотрудник,щи 110 Kpyry, . . . Л;{еха//изм выпол//е//ия теста //астолько сложе//, что тестировlЦИК yдe ,/яет ему бо,/ьше в//ИМGI/UЯ, чем результатам, Пропуск ошибок на экране Нс :IcrKO за,\lетип, таКl1е вещи, как ошибки IIраВОfJl1сания, IIРОlIущен ные элс\!снты меню и невыровненный текст, ссли вы сосреДОТО'lенны 
IIрuлож'еliие: Распростраliеliliые про?раМ,Нliые ошибки 539 1.lавным обраЗОI на IIранилыlOСТИ ВЫВОДИМЫХ IIроrра!,\IOЙ данных и сс ,lействий, ПО'ЛО!У выдсляйтс врсмя СllеUl1ал (,110 ;щя ВНИIi1ТеЛЫlOrо изуче "l1я Bccro содсржи,\юrо экрана, Не документирована проблема OPICT О найдснной IIроблс!е \южст бып, не составлен 110 слсдующи! "РИЧl1на,\j, . ТестироВl[(ИК нсаккуратно ВСДСТ заlIИСИ, . Тt:стироВl[(ИК не уверен н ТО\!, 'ПО данные действия I!роrрам!ы являются ошибочныlИ, и боится ныr;lядеп, rлУIIЫ!, . Ошибка 1I0казалаСI, тестироВl[(ИКУ СЛI1ШКО! незначителыlOЙ, или он считает, что она не будст ИСlIраВ;lена, . ТССТИРОВl[(ика IIрОСИЛИ не ДОКУlентироваТh БОЛl,ше IlOдобныс ошиб ки, Все эти IIрИЧИНЫ не"рие\lле\!ы, ЕСЛI1 вы не уверены, что видите ошиб ку, НaIll1шите об это\! в отчете, ОбраП1ТеСI, к руководству за разрешение! СIIОрОВ о незнаЧI1Телы!ых или IIO;rитически неУIОДНЫХ ошибках, Вы OTBe 'JaCTC ш то, чтобы о каждой найдснной в IIpOrpaM\le ошибке БЫ,1 составлсн отчст, HalepCHHOC же сокрытис ошибок IIРИВОДИТ к нсдоразу!сния\!, IIOp пп моралЫlЫй К;lимат в КО.'J;lекпше, а в конечно\! счсте ведет к снижению качества IIродукта, Kpo!e Toro. вы не!едлеНlIO вовлекаетеСI, в IIOЛИПl'l cc Кl1е дрязrи и интриrи, от которых всста :Iучше держаТI,СЯ IlOдаЛI,ШС, Не выполнен запланированный тест 3аlIланированный тест lOжст бып, нс ВЫllOлнен 110 СЛСДУЮЩИ1 IIрИЧИ нам, . Тестовые матери{L'/Ы и записи п.шхо орсаliизоваliЫ, Последователыюсп, действий нарушена, и тесты lIереlIутаны, . Тестиров//(ику СКУЧIiО, Серии тестов IIОВТОРЯЮТСЯ 110 IIIOI)' раз, изза чеrо ТССТИРОВl[(ИК ВЫJIO:JIlяет некоторые из них в сокращенном виде или IIРОlIускаст те, которыс кажутся e\IY IIOХОЖИ\1И на IIредыдущие, IlостараЙТ<:СI, сократип, КОJll1чество 1I0вторений, комбl1НИРУЯ IIриме ры, сокращая ICHce важные тесты или ВЫIIOЛНЯЯ ИХ ТОЛl,КО на каж дом BTOpO1 или треп,ем UИК;lе, . В odliOM тесте обьедИliеliО слишком м//осо действий, Если один ТССТ включсн В ДР.'I'ой И один из них нс удастся, второй тоже, скорсс Bcero, не будст НЫIIOЛНСН, IlocTapaiiTecl, избс!'ап, сложных комбина uий Tt:CTOB, ведущих к IIpOIIYCKa1 некоторых из них, 
542 Часть I/I: Управление проекта,\IИ и "руппами Не описаны временные зависимости ТеСТИРОВlI\ИК можст не заlетип" что для ВОСlIроизведения ошибки необходи1O нажимап, клавиши с интервала1И в 1И;IЛисекунды, или наобо рот, ЖJЩП, как IИНИМУ,\j IIЯП, IИНУТ IIсред нажатие1 следующей клавиши, ИНОl-да он лажс не IIOНЮIaет, что ИIССТ дело с ситуаuией [онок или дpy rой ошибкой, связанной со BpCMeHe1. 3аlетив зависиIOСП, работы IIpO rpaMII>! от вреlени, обязатеЛЫIО наlIИШИТС об ЭТОI в отчсте, А СТОЛКНУВШИСI, с НСВОСIIРОИЗВОДИIOЙ ошибкой, 1I0думайте, не вызвана ли она ситуаuией [онок, Сложные условия ТеСТИРОВlI\ИКИ часто ВЫIIOЛНЯЮТ сложные КОlбинированные тесты ради ЭКОНОIИИ вреlени, Однако, выявив ошибку, следует найти как можно более IIРОСТОЙ СlIособ се ВОСlIроизведения и именно ero и ОIIИ сап, в отчете, Преувеличения Не делайте из ЩUIСНI,коrо недостатка боЛl,ШУЮ IIроблеIУ, СтарайтеСI, сохраня п, объективносп, и здравый смысл, иначе вы заслужите реlIутаuию HYAHoro и IIридирчивоrо человека, Личные выпады Не отзывайтеСI, IIЛОХО о работе IIроrраIlИста, Не жалуйтеСI" что он не исправляст ошибки, даже если они достаточно сеРI,езны, СтарайтеСI, coxpa няп, с сотрудниками мирные 11 деловыс отношения и искап, конструктив ные IIУТИ решения Ilроблем, Ошибка выявлена и забыта Найдя ошибку, недостаточно "РОСТО составип, о ней отчет, Необходи мо проследип, за далЫlейшей СУДhбой этоrо отчета и rарантировать, что об ошибке узнают все заинтересованные сотрудники и она не останется в IIporpaIMe IIрОСТО IIОТОМУ, что О нсй забыли, Не составлен итоrовый отчет Нс думайте, что, если вы lIередали IIроrраммисту отчет об ошибке, он ero IIрочел и IIрИНЯЛ необходимые меры, Некоторые IIроrраммисты теря ют отчеты. Друrие делают из них саlOлетики или заворачивают в них рыбу, А KoeKTO даже IIрячет отчсты от руководителя, Каждую неделю или две обязателыlO составляйтс и IIсредавайте руководству сводные отчеты с Ile речне,\j вссх нерсшенных IIробле,\j и неИСlIравленных ошибок, Эта IIpoцe 
Прuложснис: Распространснные про?раммныс ошибки 543 дура должна бып, стандартной, Отчст должсн охватывап, абсолютно всс ошибки и бып, составлсн в бсзличностной нскритичсской формс, Серьезная проблема не документирована повторно Если ошибка ССРI,сзна, нс УДОВЛСТВОРЯЙТССI, рсзолюцисй Отложсно или Соотвстствуст спсцификации. Подумайтс, как ОlIисап, СС в такой формс, 'lТобы РУКОВОДИТСЛI, IIроскта IIОНЯЛ СС важносп" и cocTaBI,TC новый отчст, Если это нс сработаст, IIсрсдайтс отчст ВЫШССТОЯЩСIУ руководству, Не проверено исправление IIроrраммист сообщаст, что ошибка ИСlIравлсна, Нс BCPI,TC сму на сло во, До трсти вссх ИСlIравлсний либо НСlIравилыlЫ, либо рсшают ЛИШI, часп, IIроблсмы, KpoIC Toro, IIроrраммист можст ИСlIравип, нс то, что нужно, Инота BICCTO истинной IIРИЧI1НЫ ошибки ИСlIрав;rяются СС !lOс;rсдствия, 11 тота ошибка можст IIРОЯВИП,СЯ rдснибущ, сщс, Если нс IIРОВССТИ тща ТСЛЫlOrо рсrрсссионноrо тсстирования, НСЛI,зя rарантировап" что ошибка ИСlIравлсна и боЛl,ШС ничсrо нс нарушсно, Перед выпуском не проанализирован список нерешенных проблем НСIIОСРСДСТВСННО IIСрСД ВЫIIУСКОМ IIродукта сщс раз IIроанализируйтс список вссх НСИСlIравлснных ошибок и отложснных IIроблсм, Мы настоя тслыlO рскомсндусм ВЗЯП, это за твсрдос IIравило и убсдип,ся, что 110 вссм оrчстам о IIроблемах, 110 крайней мсрс, IIрИНЯТЫ ОIIРСДСЛСННЫС рсшсния, Это ваш IIOСЛСДНИЙ шанс НaJIOМНИП, людям о ССРI,СЗНЫХ ошибках, 
TESTING COMPUTER SOFTW ARE Second Edition СЕМ КANER JACK FALK HUNG QUOC NGUYEN INTEr{NATIONAC TIIOMSON COMPlJTER Pf{ESS 1 Up'M Ап Il1tсrП<ltiОП<l1 Т1НJlПSОП РllЫisl1il1 СОП1р<lI1У IЛl1dОl1 . 1301111 . Hostul1 . .JО!Ii1l1l1еS[НJI'Ц . MiI<!I'i<! . Меl1)(lllП1t' . Mexku City Ne\\' У Ul'k . Рш'is . Sil1царOJ'е . Tokyo . TOI'Ol1to . АI1)Ш1у,NУ lk!1110I1t,CA. Cillcil1l1ati,OIl . IktJ'Oit,!\'!1