Главная страница

Тестирование-книга. Ю. Н. Артеменко Научный редактор


Скачать 6.27 Mb.
НазваниеЮ. Н. Артеменко Научный редактор
Дата09.10.2019
Размер6.27 Mb.
Формат файлаpdf
Имя файлаТестирование-книга.pdf
ТипКнига
#89291
страница18 из 49
1   ...   14   15   16   17   18   19   20   21   ...   49
Глава 7: Разработка тестов 2 0 3
Применение технологии эквивалентности
Тестирование математических функций — не единственная область применения эталонных программ. Путем сравнения с готовым и проверен­
ным продуктом можно тестировать самые разные аспекты поведения про­
граммы. Вот несколько примеров.
• Если разрабатывается программа проверки правописания и в ее основе лежит тот же алгоритм, который используется в одной из уже существующих программ, можно предложить им проверить один и тот же набор слов.
• Если разрабатывается программа автоматического переноса слов и особенно если отрабатывается модификация ее алгоритма для дру­
гого языка, возьмите для сверки проверенную программу, продава­
емую на том же рынке. Подготовьте узкий столбик текста и предложите его обеим программам.
i
• Для программы, выполняющей выравнивание текста по ширине строки, необходимо проверить, насколько равномерно она разделяет слова пробелами. Для образца можно взять обычный текстовый процессор и обеим программам предложить один и тот же текст, набранный одинаковыми шрифтами.
• Для отладки посылаемых на принтер управляющих последователь­
ностей можно перенаправить вывод в файл и то же самое сделать в эталонной программе, распечатав в ней точно такой же документ.
Затем оба файла можно сравнить — они должны быть идентичны.
Во всех случаях, когда необходимо протестировать выходные данные, которые легко можно направить в файл, и используется еще одна програм­
ма, умеющая генерировать те же данные. Их результаты легко можно срав­
нить. Разумеется, в каждом конкретном случае могут быть собственные аргументы "за" и "против" этой технологии. Например, на ее реализацию может потребоваться слишком много времени, средств или усилий. Кроме того, эталонная программа тоже вполне может содержать ошибки. Но в любом случае методику тестирования эквивалентности следует иметь в виду
— во многих случаях ее применение значительно ускоряет работу и во много раз повышает ее эффективность.
Не забывайте включать в отчеты об ошибках выходные данные, получен­
ные от обеих программ. Они очень важны для поиска причины ошибки.

2 0 4 Часть II: Приемы и технологии тестирования
Регрессионное тестирование: успешно
ли исправлена ошибка
Получив отчет об ошибке, программист тщательно анализирует исход­
ный код, находит причину ошибки, исправляет ее и тестирует результат.
Однако это идеальный вариант — на практике же так бывает далеко не всегда. Некоторые программисты исправляют только описанные в отчете симптомы. В результате исправления настоящие причины ошибки не уст­
раняются — одно из проявлений ошибки исчезает, но другие остаются.
Бывает и так, что программист неправильно поймет отчет и исправит не то, что надо. Некоторые недобросовестные сотрудники вообще не тестируют свою работу: они не глядя вносят исправления и немедленно возвращают программу тестировщикам, не исправив прежнюю ошибку и наделав новых.
Этот перечень можно продолжать бесконечно. Главное же — не растерять­
ся, столкнувшись с подобными ситуациями. Опытный тестировщик должен быть готов к ним заранее.
Считается, что около трети вносимых в программу исправлений или не срабатывают, или даже "ломают" то, что уже работало. Мартин и Мак-Клер
(Martin & mcClure, 1983) приводят статистику, показывающую, что с пер­
вого раза срабатывает менее половины вносимых программистами исправ­
лений.
Вот три задачи, которые ставит перед собой тестировщик, проверяющий внесенные программистом исправления.
Проверьте, что ошибка исправлена. Выполните тот же тест, в кото­
ром она проявилась и который был описан в отчете. Если программа его не пройдет, дальнейшее тестирование ни к чему. Если же про­
грамма пройдет тест, не торопитесь. Подумайте еще секунду, в са­
мом ли деле вы провели именно нужный тест. Уверены ли вы, что знаете, как воспроизвести ошибку? И при малейших сомнениях загрузите старую версию программы, выполните описанные в отчете действия и убедитесь, что ошибка налицо.
Поищите связанные ошибки. Предположим, что программист устра­
нил описанные в отчете симптомы ошибки, но саму ее не исправил.
Можно попробовать воспроизвести ошибку каким-нибудь иным способом. Может быть, в программе есть другие подобные ситуа­
ции? Не жалейте времени, если вам кажется, что ошибка могла остаться — потестируйте программу еще час, может быть несколь­
ко часов. Проведите как можно больше тестов.
Глава 7: Разработка тестов 2 0 5
Протестируйте оставшуюся часть программы. Возможно, неожи­
данные последствия исправления проявятся где-нибудь еще. Их поиск проводится неформально — без заранее подготовленного плана. Просто подумайте, какие части программы могут быть затро­
нуты внесенными исправлениями, и проверьте их.
Регрессионное тестирование:
стандартная серия тестов
Некоторое время спустя после начала тестирования программного про­
дукта формируется библиотека регрессионных тестов. Это полный набор тестов, охватывающий всю программу и выполняющийся каждый раз, когда программисты сдают ее очередную рабочую версию.
Лучше всего, если тесты полностью автоматизированы. В этом случае все равно придется затратить некоторое время, но вся процедура тестиро­
вания гораздо менее трудоемка.
Когда для тестирования предоставляется очередная версия программы и наступает время повторить все тесты библиотеки сначала, возникает ряд вопросов. Насколько велика библиотека, и как вообще попадали в нее тесты? Действительно ли необходимо выполнять их все снова и снова?
Не всегда легко заранее определить, какие тесты следует включать в регрессионную библиотеку. Поэтому первоначально в ней может оказать­
ся больше тестов, чем это действительно необходимо. Разумеется, в нее как минимум войдут примеры для проверки граничных условий и временных характеристик. Но стоит ли выполнять их все каждый раз?
Проводить регрессионные тесты обычно не хочется, поскольку вероят­
ность выявления ими ошибок не особенно велика. При первом выполне­
нии некоторые из этих тестов могут выявить ошибки, но после их окончательного исправления проводить их снова и снова кажется пустой потерей времени. Если ошибки больше нет, какова вероятность, что она появится снова? А как быть с тестами, которые проводились уже по не­
скольку раз и ни разу не выявили ошибок? В некоторых компаниях такие тесты исключают из библиотеки, оставляя только те, в которых проявля­
лись ошибки.
Вместо того чтобы мучительно обдумывать каждый тест, лучше пойти более простым путем. Включите в регрессионную библиотеку все тесты, которые покажутся вам полезными. Периодически, примерно через каждые три цикла, пересматривайте эту библиотеку и удаляйте те тесты, отсутствие которых не снизит качества работы. Вот несколько полезных тактических приемов.

2 0 6 Часть II: Приемы и технологии тестирования
Удалите тесты, которые эквивалентны другим тестам библиоте­
ки. В идеале такие тесты вообще не должны попадать в библиотеку.
Но когда она создается несколькими сотрудниками, подобные на­
кладки вполне возможны.
Уменьшите количество тестов, объектом которых является уже
исправленная ошибка. Если ошибка или некоторые ее разновидно­
сти проявляются в течение целого ряда циклов тестирования, в биб­
лиотеку стоит добавить достаточное количество тестов для их выявления. Это вполне нормально и уместно. Соответствующую часть программы необходимо тщательнейшим образом тестировать до тех пор, пока в ней не останется и следа ошибки. Однако после этого большую часть тестов, направленных на поиск исправленной ошибки, можно удалить из библиотеки.
Комбинируйте тесты. Если 15 тестов, которые программа, скорее всего, пройдет, можно объединить в один — сделайте это. В начале тестирования так поступать не стоит, но в дальнейшем объединение тестов позволит значительно ускорить работу.
По возможности автоматизируйте тестирование. Если вы увере­
ны, что определенная группа тестов будет выполняться в течение пяти или десяти последующих циклов тестирования, стоит потратить время на их автоматизацию. (В главе 11 этот вопрос будет обсуж­
даться подробнее.)
Выделите часть тестов для периодического выполнения. Вместо того чтобы проводить все тесты регрессионной библиотеки после каждого изменения программы, можно выполнять их реже — на каждом втором или третьем цикле. На последней стадии тестирова­
ния лучше выполнить максимально возможное количество тестов, чтобы убедиться, что программа готова к выпуску. Но до этого в каждом цикле можно выполнять треть или половину всех тестов.
Регрессионная библиотека должна включать все лучшие тесты из тех, что уже разработаны, но, если она будет слишком велика, у вас не останет­
ся времени на разработку новых тестов. А ведь именно новейшие тесты с наибольшей вероятностью выявляют еще не найденные ошибки. Поэтому планируйте работу так, чтобы регрессионная библиотека служила средством повышения эффективности тестирования, а не его тормозом.
Выполнение тестов
Придумать хороший тест — это только половина дела, ведь его еще нужно правильно выполнить. Вот несколько примеров.
Глава 7: Разработка тестов 2 0 7
• Если вы хотите, чтобы при установке программы на компьютер у пользователя была возможность выбора конфигурации, недостаточно просто запустить программу установки и посмотреть, предоставля­
ет ли она необходимые опции. Выполните каждый вариант установ­
ки, каждый раз запуская саму программу и проверяя, действительно ли установлена выбранная конфигурация. Убедитесь, что програм­
ма при этом полностью работоспособна.
• Если программа посылает на принтер конфигурационную информа­
цию, не забудьте распечатать документ, в котором используются соответствующие опции форматирования. То же самое касается и любых других внешних устройств.
• Если программа позволяет указать размер печатаемой страницы, отступы и другую подобную информацию, недостаточно удовлетво­
ренно улыбнуться, увидев, что документ правильно выглядит на экране. Его необходимо распечатать.
• Если в программе используются символы из расширенного набора
ASCII, недостаточно увидеть их на экране. Они должны правильно печататься, пересылаться через модем и т.д. Необходимо учесть все программное обеспечение, через которое будут проходить выходные данные: драйверы устройств, алгоритмы импорта.
Основное правило, вытекающее из приведенных примеров можно сфор­
мулировать так: тестовая процедура должна заставить программу использо­
вать введенные данные и подтвердить, что они используются правильно.

Глава
Тестирование
принтеров и
других
устройств
Назначение этой главы
В этой главе рассказывается о тестировании программного обеспечения
на предмет совместимости с программно-аппаратным о к р у ж е н и е м .
После общего обзора стратегии, применяемой в этой области, весь ход
тестирования рассматривается на одном из самых распространенных и
понятных примеров — печати данных.
Почти все прикладные программы что-нибудь печатают, поэтому неиз­
бежно возникает вопрос о совместимости (разве что в программе ис­
пользуются только базовые функции принтера, т.е. печать английского
текста стандартным шрифтом).
Н а м приходилось работать во многих тестировочных лабораториях, и
каждый раз мы обучали сотрудников планированию, разработке и выпол­
нению тестов печати. Этот наш опыт и лег в основу данной главы.
• Одной из причин того, что тестирование печати так подробно рас­
сматривается в этой книге, является абсолютная необходимость
обучения тестировщиков технологии этой работы. Иначе неизбеж­
ны пропущенные ошибки и ненужные потери времени.
• К р о м е того, подробный рассказ о работе с принтером показыва­
ет, как много нужно знать специалисту, планирующему тестирова­
ние на аппаратную совместимость. Например, если вы собираетесь
тестировать модемы, придется разобраться в классификации этих
8
Глава 8: Тестирование принтеров и других устройств 2 0 9
устройств и их драйверов, узнать об их управляющих кодах и ти­
пичных проблемах совместимости — точно так ж е , как это необ­
ходимо сделать при тестировании принтеров.
Обзор
В этой главе рассматриваются следующие вопросы:
• Общий обзор тестирования на аппаратную совместимость.
• Как работают принтеры и как ими управляет программа.
• Стратегия тестирования принтеров и многих других устройств.
1. П р е ж д е всего выполнятся поиск аппаратно-независимых ошибок
программы.
2. Затем осуществляется поиск ошибок, специфических для тести­
руемого класса устройств.
3. Затем наступает черед ошибок, связанных с драйвером.
4. Только после этого выявляются ошибки, возникающие исключи­
тельно при работе с конкретной моделью устройства.
• Организация тестирования одних и тех же функций печати с разны­
ми типами устройств.
• Как и зачем протоколировать результаты тестирования.
• Как автоматизировать большую часть работы по тестированию печа­
ти.
• Организация и оборудование лаборатории тестирования печати.
Примечание
В многопользовательской и многозадачной среде тестирование на аппа­
ратную совместимость — работа куда более сложная. И хотя к ней
применимо большинство описываемых в этой главе принципов, для пол­
ноценного проведения такого тестирования вам потребуются и дополни­
тельные знания. Обратитесь за советами к сотрудникам, у ж е имеющим
подобный опыт.
Общие вопросы конфигурационного
тестирования
Большинство программ предназначены для работы с очень широким диапазоном конфигураций аппаратуры и операционного окружения. Поэто­
му при их тестировании правомочно задать следующие вопросы:
• С какими принтерами совместима тестируемая программа?
• Какие видеоплаты и наборы микросхем, какие видеорежимы и ка­
кие типы мониторов отвечают ее потребностям?
• С какими позиционирующими устройствами она будет работать и с какими их драйверами?
• Каковы характеристики основных необходимых программе аппарат­
ных ресурсов, например, каков минимальный и максимальный

2 1 0 Часть II: Приемы и технологии тестирования
объем необходимой ей памяти, с какими ее типами программа бу­
дет работать?
• Для какой аппаратной платформы предназначена программа (напри­
мер, Macintosh или IBM), с какими моделями совместимых компь­
ютеров она будет работать?
• Для какой программной платформы предназначена программа (ка­
кой операционной системы и каких ее версий, какое ей необходи­
мо дополнительное системное программное обеспечение — например, программная оболочка, программы управления памятью, базовые функции из ROM BIOS).
Все перечисленные компоненты составляют конфигурацию системы — стоит изменить один из них, и получится новая конфигурация. Термин
конфигурационное тестирование означает проверку совместимости програм­
мы с теми конфигурациями оборудования и системного программного обеспечения, с которыми она должна работать.
Как ни важна обстоятельность проведения этого вида тестирования, но даже самые элементарные подсчеты показывают, что проверить работу программы со всеми возможными конфигурациями среды абсолютно не­
возможно. Даже если выбрать только один из аспектов, например тестиро­
вание графической программы на совместимость с видеооборудованием, то, исследовав его рынок, вы обнаружите помимо целого ряда стандартов еще и сотни моделей видеоплат и мониторов. А что будет, если проверять еще и совместимость с позиционирующими устройствами? Если отобрать 10 наиболее популярных видеоплат и еще пять наиболее популярных моделей мыши, то получится 50 тестов. Добавьте на каждую мышь по три драйве­
ра — получится 150 тестов. Мониторы также отличаются между собой, и прежде всего следует проверить два их основных типа — монохромные и цветные. Видеоплаты работают с ними по-разному. Поэтому если тестиро­
вать еще и два основных типа мониторов, то получится уже 300 тестов.
Как видите, с добавлением каждого нового объекта тестирования общее количество тестов растет в геометрической прогрессии. Даже если выделить только несколько наиболее популярных моделей основных внешних уст­
ройств, как быть с бесконечным разнообразием остальных?
Чтобы правильно спланировать и провести конфигурационное тестиро­
вание, необходимо очень много знаний. Прежде всего нужно выяснить, какие функции каждого из устройств используются в программе, и как узнать, что программа использует их правильно. Важно знать, в чем может заключаться совместимость или несовместимость подобных устройств и как их различия могут повлиять на тестируемую вами программу. Если выяс­
нить, какие из устройств хорошо эмулируют друг друга, можно сэкономить и время, и деньги, взяв для тестирования по одному представителю каж-
Глава 8: Тестирование принтеров и других устройств 2 1 1
дой группы совместимых между собой устройств. При этом совместимость не обязательно должна быть полной — достаточно, чтобы одинаково рабо­
тали функции, используемые вашей программой. Однако, классифицируя устройства по степени их совместимости, следует быть осторожным: не стоит доверять утверждениям их изготовителей. Поищите источники неза­
висимой информации, иначе вы рискуете, что на одном из видов непроте- стированного оборудования у пользователей произойдет сбой.
Профессиональная пресса весьма охотно рассказывает о программах, которые не работают с популярным аппаратным обеспечением. Лучше не попадать в их черные списки, иначе подобная статья может лишить про­
граммный продукт части рынка, а вас — работы.
На рис. 8.1 приведено общее описание подхода к конфигурационному тестированию. В оставшейся части главы рассказывается, как он применя­
ется к тестированию наиболее распространенного устройства — принтера.
Именно о принтерах тестировщики думают прежде всего, и именно с ними чаще всего возникают проблемы у пользователей.
Тестирование печати
На рынке устройств для персональных компьютеров имеется более тысячи различных принтеров. Этот рынок разделен на несколько частей, представляющих устройства для различных платформ. Самая значительная его доля принадлежит платформе Microsoft.
Не все программы используют функции принтера в полном объеме: некоторые из них не печатают графики, не пользуются различными начер­
таниями шрифтов (полужирный, подчеркнутый и т.п.), не пользуются про­
порциональными или иными специфическими типами шрифтов, не печатают в цвете. Проще говоря, они не печатают ничего, кроме стандар­
тного ASCII-текста по 79 символов в строке. Такие программы совмести­
мы практически со всеми русифицированными принтерами, и для них практически нет нужды в конфигурационном тестировании.
Что касается программ, полноценно использующих преимущества со­
временных печатающих устройств, то они и не пытаются поддерживать все без исключения принтеры. Постарайтесь протестировать все те принтеры, совместимость с которыми указана в документации программы, а также полностью совместимые с ними модели. Проверьте и наиболее "каприз­
ные" и плохо зарекомендовавшие себя принтеры, чаще других вызывающие проблемы программного обеспечения или являющиеся причиной наиболь­
шего количества жалоб пользователей.
Если вам повезет, руководитель проекта даст вам список наиболее по­
пулярных или наиболее важных с маркетинговой точки зрения устройств
(например, обладающих специальными функциями или обещающих стать популярными в недалеком будущем).

2 1 2 Часть II: Приемы и технологии тестирования
Глава 8: Тестирование принтеров и других устройств 2 1 3
Однако не стоит удивляться, если окажется, что вам придется самосто­
ятельно провести маркетинговые исследования. В этом случае можно об­
ратиться к таким популярным источникам актуальной информации, как
Computer Reseller News, PC Magazine (особенно ежегодный выпуск о прин­
терах) и Mac World.
Обзор принтеров
Вот каковы основные современные технологии печати.
Матричные принтеры печатают с помощью металлических иголок, расположенных в несколько рядов на печатающей головке. Когда иголка выдвигается из головки и через красящую ленту ударяет по бумаге, получается точка. Если все иголки выдвигаются одновремен­
но, получается вертикальная черточка около трех миллиметров дли­
ной. Принтер печатает букву по частям: головка подводится к ее левому краю, выдвигаются нужные иголки, печатая первую часть буквы, затем головка сдвигается вправо, точно так же печатается следующая часть буквы и т.д. Обычно у матричных принтеров 9 или
24 иголки, но бывают и другие варианты. Есть и такие принтеры, у которых головка, усеянная иголками, имеет ширину полной строки, так что она не перемещается вправо и влево, а печатает всю строку одним ударом иголок. Буква, напечатанная матричными принтером, выглядит зернистой, в ней отчетливо видны отдельные точки. Осо­
бенно это заметно у 9-игольчатых принтеров при черновом режиме печати (на самой высокой скорости). С развитием технологии мат­
ричной печати производители научились выпускать более совершен­
ные устройства, головки которых перемещаются достаточно быстро, и при этом точки располагаются так близко друг к другу, что прак­
тически сливаются. В результате на них можно печатать графику более высокого разрешения, а текст получается гораздо лучшего качества.
Струйные принтеры выпрыскивают на бумагу чернила, образуя маленькие точки. Их главными преимуществами являются бесшум­
ность и высокое качество печати.
Страничные принтеры оперируют не символами и строками, а це­
лыми страницами. По технологии печати они подразделяются на лазерные, светодиодные (LED) и термальные.
Управляющие коды и языки
Хотя механизм печати сам по себе и интересен, с точки зрения про­
граммного обеспечения более важным является набор команд, позволяю­
щий управлять работой принтера. И здесь также существуют значительные различия.

2 1 4 Часть II: Приемы и технологии тестирования
Большинство матричных принтеров управляется сравнительно просты­
ми кодами. Например, чтобы установить полужирное начертание шрифта, достаточно послать принтеру код (ASCII-код 27) и один определен- ный символ. Для смены шрифта потребуется кодовая последовательность, состоящая из кода и четырех или пяти символов. Существует ряд стандартных наборов управляющих кодов принтеров, из которых наиболее распространены наборы кодов, предложенные фирмами Epson и IBM (у каждого из них существует множество вариантов).
Страничные и некоторые струйные принтеры управляются более слож­
ными (и длинными) командами. Набор таких команд называют языком
управления принтером. В настоящее время наиболее распространены языки
PostScript и HP PCL (Printer Control Language — язык управления принте­
ром фирмы Hewlett Packard). \
Цветная печать
Возможностями печати в цвете обладают все три типа принтеров, но у матричных качество печати хуже, чем у струйных и страничных. Дело в том, что у матричных принтеров цветные красители наносятся полосами на одну и ту же ленту, и со временем цвета несколько смазываются. У струй­
ных же принтеров цветные чернила хранятся в отдельных емкостях, из которых они выпрыскиваются на бумагу.
Типы интерфейса
Принтер может подключаться к компьютеру либо через стандартный параллельный или последовательный порт, либо через специфическое со­
единение, разработанное производителем для конкретного вида техники, либо через сеть. Сетевое подключение является источником особых про­
блем, о которых будет рассказано далее.
В мире Microsoft и Amiga более распространены параллельные принте­
ры. При параллельном подключении передача информации принтеру вы­
полняется гораздо быстрее, поскольку за один раз передается 8 битов информации — по восьми параллельным проводникам. При последователь­
ном подключении принтера биты информации передаются по одному. Этот вид подключения несколько сложнее, поскольку для его работы необходи­
мы более сложные протоколы, определяющие, в частности, как выяснить готовность устройства и как обозначить начало и конец последовательно­
сти битов. Тестирование последовательных принтеров, основанное на их специфических особенностях, в этой книге не рассматривается.
Главное же, что необходимо знать для тестирования программы, под­
держивающей и параллельные и последовательные принтеры, — это то, что придется отдельно протестировать оба эти типа устройств.
Глава 8: Тестирование принтеров и других устройств 2 1 5
Управление принтером
Для начала представьте себе, что вы имеете дело с программой, осуще­
ствляющей взаимодействие с принтером абсолютно самостоятельно. Было время, когда программист мог написать программу, привязанную к одно­
му конкретному типу принтеров. Если пользователь подключал еще один принтер, программисту приходилось модифицировать программу, включая в нее команды управления новым принтером. Хотя эта работа и не была особенно сложной, необходимость сопровождать программу в течение дол­
гого времени и обеспечивать ее совместимость со все расширяющимся набором устройств могла превратиться в настоящее мучение.
К счастью, эта проблема давно решена. Спасением программистов стала концепция виртуальных принтеров — абстрактных устройств с фиксирован­
ным набором возможностей и команд. Именно эти команды управления виртуальным принтером и включаются в прикладную программу, а за их перевод на язык конкретного устройства отвечает промежуточная програм­
ма, называемая драйвером,
В современных операционных системах имя принтера указывается при их настройке. Драйверы устройств являются частью операционной систе­
мы и поставляются вместе с ней. Если же драйвера конкретного устройства в системе нет, его можно установить отдельно, и он тоже будет рассматри­
ваться как часть системы. Как правило, производители аппаратного обес­
печения включают драйверы своих устройств в комплект их поставки.
Преимущество описанного подхода состоит в том, что прикладная про­
грамма ничего не знает об установленном в системе принтере. Она направ­
ляет управляющие команды и данные виртуальному принтеру, не заботясь о том, каким образом они будут переданы конкретному устройству и ка­
кие преобразования для этого потребуются.
Перед включением в систему все драйверы устройств тщательно тести­
руются с самым разным программным обеспечением. Поэтому, если про­
грамма передает виртуальному принтеру правильную информацию, ее команды будут корректно переведены на язык конкретного устройства и выполнены.
По крайней мере, предполагается, что все должно проходить именно так. И в общем случае эта технология прекрасно работает. Однако в отдель­
ных случаях программисты отступают от описанной технологии и управля­
ют принтером самостоятельно или же выполняют одну часть работы через драйвер, а другую непосредственно.
Иногда это делается для повышения качества печати или для ее уско­
рения. Или же программист хочет использовать специфические функции устройства, не поддерживаемые стандартным драйвером. В таких случаях код, управляющий работой конкретных типов устройств обычно отделяется от основного кода программы. При ее установке пользователь указывает

2 1 6 Часть II: Приемы и технологии тестирования
тип своего принтера. Разумеется, подобные программы и тестировать, и сопровождать гораздо сложнее, но в этом подходе нет ничего предосуди­
тельного, если он обусловлен объективной необходимостью и ведет к по­
вышению качества и производительности программы — ведь конечного пользователя интересует именно это.
Общая стратегия тестирования принтеров
Каждая программа по-своему организует печать. Как правило, можно выделить несколько основных уровней ее работы и соответственно разде­
лить и возможные ошибки. Предположим, что тестируется текстовый про­
цессор и в качестве тестового, примера он должен распечатать несколько слов курсивом.
Ошибка, не зависящая от устройства. Если программа не посылает виртуальному принтеру команду включения курсива, не передает текст или вместо принтера отсылает его модему, то устройство здесь не причем. Это чисто логическая ошибка, и ее необходимо выявить до того, как вы приступите к тестированию различных принтеров.
Ошибка, специфическая для класса принтеров. Если программа орга­
низована так, что с каждым классом принтеров работает отдельный блок кода, возможно, что с одним классом принтеров программа ра­
ботает правильно, а с другим — нет. Например, она правильно уп­
равляет матричными принтерами и принтерами, использующими язык PostScript, но отказывается работать с принтерами LaserJet.
Рис. 8.2 иллюстрирует различие между классами принтеров, драйве­
рами и конкретными моделями устройств.
Глава 8: Тестирование принтеров и других устройств 2 1 7
QMS 810
Хотя такая организация достаточно широко распространена, это еще не означает, что и ваша программа непременно будет организована по той же схеме.
Ошибка, специфическая для драйвера. В программе может быть часть кода или таблица перекодировки команд, применяющаяся для рабо­
ты с конкретной группой принтеров, проще говоря, встроенный драйвер. Один и тот же драйвер может использоваться для целого ряда однотипных принтеров, например, драйвер Epson FX может работать с принтерами FX-80, FX-85, FX-100 и др. И если в этом драйвере содержится ошибка, она будет проявляться при работе со всеми принтерами данной группы.
Ошибка, специфическая для принтера. Такие ошибки случаются, если данному принтеру не подходит выбранный драйвер или же принтер не вполне совместим со своими собратьями. Нередко ком­
пания-производитель анонсирует свой принтер как 100%-но совме­
стимый с принтером X одной из известных компаний, но на деле это оказывается не совсем так, и отдельные команды или управля­
ющие коды для этого принтера не срабатывают.
Итак, тестирование должно выполняться по принципу "от общего к частному". Сначала подключите один принтер и постарайтесь выявить ошибки, не зависящие от устройства. После того как они будут исправле­
ны, возьмите еще несколько принтеров, относящихся к разным классам, и поищите ошибки, специфические для этих классов. Затем протестируйте по одному принтеру на каждый драйвер, чтобы выявить ошибки, связанные с драйверами. И только после этого приступайте к тестированию всех прин­
теров, совместимых с вашей программой.
Главное преимущество данной стратегии в том, что она позволяет из­
бежать избыточности — нет никакого смысла смотреть, как полсотни принтеров демонстрируют одну и ту же логическую ошибку программы или ошибку драйвера. Для выявления и исправления подобных ошибок достаточ­
но поработать с одним принтером, а когда в программе все будет чисто, можно будет посмотреть, нет ли отклонений в работе конкретных устройств.

2 1 8 Часть II: Приемы и технологии тестирования
Поиск функциональных ошибок
Выберите для этого вида тестирования один-единственный принтер. Это должно быть хорошее и проверенное устройство известного производите­
ля, достаточно современное, чтобы в нем были реализованы все использу­
ющиеся программой функции печати.
Составьте полный список функций печати. В нем должны быть учтены выбор шрифта, изменение его начертания, установка параметров страни­
цы и т.п. Лучше всего составить по отдельному списку функций для каж­
дого независимого фрагмента программы, а затем сравнить получившиеся списки.
Проводя тестирование, проверьте работу каждой из функций по отдель­
ности, например, напечатайте фрагмент текста обычным шрифтом, затем курсивом, затем смените шрифт. Убедившись,что по отдельности функции работают, протестируйте их комбинации, например, распечатайте фрагмент текста полужирным курсивом.
В ходе продуманного и обстоятельного тестирования обнаружится ряд ошибок. Некоторые из них будут логическими ошибками программы и проявятся, какой бы принтер вы ни подключили, другие будут ошибками класса, третьи — ошибками драйвера.
Возможно, будут и такие, которые отразят особенности работы един­
ственного принтера. Если вам повезет, то еще до перехода к следующим стадиям тестирования все эти ошибки будут устранены.
Выявление ошибок, общих для класса
устройств
Выберите три или четыре принтера, как можно сильнее отличающихся друг от друга. Если с каждым классом принтеров в программе работает отдельная часть кода, эти принтеры должны относиться к разным классам.
В этом случае вам необходима будет точная информация о классифи­
кации принтера, которую сможет предоставить только программист.
Однако данный этап тестирования полезен и не только в том случае, когда в программе определены четко разграниченные классы устройств.
Если на первом этапе выявлены ошибки печати, очень полезно повторить соответствующие тесты на разных принтерах.
Тестирование класса устройств проводится не менее обстоятельно, чем поиск функциональных ошибок. Необходимо протестировать все функции печати и все их комбинации на каждом из принтеров (разумеется, в пре­
делах своих физических возможностей).
Глава 8: Тестирование принтеров и других устройств 2 1 9
Поиск ошибок, специфических для драйвера
Предположим, что пользователь может попросить программу распеча­
тать слово курсивом. Чтобы убедиться, что данная команда будет выпол­
нена, тестировщик должен ответить на два вопроса. Во-первых, попытается ли программа распечатать слово курсивом, получив от пользователя соот­
ветствующую команду? И во-вторых, знает ли программа, как именно устанавливается курсивное начертание на конкретном принтере?
К тому времени, как вы приступите к поиску ошибок, специфических для драйвера, ответ на первый вопрос будет уже известен, и, более того, он будет положительным. На этом этапе уже не нужно проверять, работает ли, например, курсивный шрифт в каждой области документа (основной его части, верхнем и нижнем колонтитулах и т.п.) Если программе известна правильная команда включения курсива, она сработает везде.
Пройдитесь по составленному вами списку функций печати, включите, выключите и включите снова каждую опцию, проверьте их комбинации.
Вполне может оказаться, что у одного из принтеров имеется дефект, про­
являющийся только в определенной ситуации — например, при попытке напечатать подчеркнутый символ у самого края страницы печатающая го­
ловка идет вразнос. Возможны и иные недостатки устройств, менее драма­
тического характера.
Напоследок поэкспериментируйте с переключателями, расположенны­
ми на передней панели принтера, или с его перемычками. Как драйвер определяет, какой шрифт используется принтером по умолчанию? И что получается, когда программа печатает каким-нибудь другим шрифтом?
Обязательно проверьте и печать в графическом режиме. Для тестирования возьмите документ с большими участками белого пространства, особенно у краев изображения. Проверьте различные установки количества строк на дюйм. Посмотрите в документации, какие еще параметры печати можно изменить.
Поиск ошибок, специфических для
конкретного принтера
На этом этапе тестирования выполняются те же тесты, что и на преды­
дущем. Однако сама по себе необходимость его выполнения является спор­
ной. Если вы протестировали принтер А и известно, что принтер Б с ним полностью совместим, зачем его тестировать? Как правило, вы и в самом деле не будете этого делать, однако следующий ряд обстоятельств заслужи­
вает отдельного рассмотрения.
• Если при установке программы в ее меню перечислен ряд принте­
ров, необходимо протестировать каждый из них. Разумеется, если в

220 Часть II: Приемы и технологии тестирования
меню перечислены сотни принтеров, протестировать каждый из них невозможно. Однако некоторый минимальный набор тестов прове­
сти все же стоит. Например, если известно, что принтер Б совмес­
тим с принтером А, и принтера Б у вас нет, все равно выберите его из меню и распечатайте документ на принтере А. Вы как минимум выясните, что при выборе принтера Б устанавливается правильный драйвер и с программой не происходит ничего плохого.
В меню программы необходимо включить дополнительные принте­
ры. Во сколько в среднем обходится вашей компании каждый зво­
нок пользователей? Предположим, что принтеры А и Б совместимы и в меню программы имеется принтер А, но отсутствует Б. Пользо­
ватели, у которых есть принтер Б, будут звонить и спрашивать, можно ли с ним работать. Или наоборот, кто-то из пользователей подумает, что его принтер совместим с принтером А, и подключит его, а тот откажется работать. Стоимость технической поддержки можно значительно уменьшить, если сразу расширить список уст­
ройств (разумеется, при условии, что затраты на приобретение и те­
стирование этих устройств не окажутся слишком высокими).
Популярные модели принтеров могут оказаться несовместимыми.
Когда появились принтеры HP DeskJet, многие разработчики реши­
ли, что они совместимы с принтерами HP LaserJet. Однако это ока­
залось не так — многие их ключевые функции управлялись различными командами. В результате новый принтер, который за­
воевал огромную популярность, не поддерживался многими про­
граммами только потому, что их разработчики не удосужились протестировать с ним свои продукты. Это очень показательный, но далеко не единственный пример того, насколько важно протестиро­
вать разрабатываемое программное обеспечение с каждым устрой­
ством, которое либо уже очень популярно у пользователей, либо обещает стать популярным в недалеком будущем. И хотя, как пра­
вило, никаких проблем не будет, каждый подобный тест — это все равно, что страховой взнос. Однажды ваша предусмотрительность позволит избежать очень неприятных ошибок.
Неудачный представитель популярного класса. Такое случается: например, все принтеры Epson LQ работают с драйвером, и только один отказывается. Если пользователю попадется этот злосчастный принтер, он окажется в полном недоумении. К счастью, такие си­
туации встречаются редко, хотя за последние 13 лет работы мы стол­
кнулись с десятком подобных примеров.
В заключение можно добавить, что обстоятельность тестирования зави­
сит еще и от конкретной программы: если ее вывод сравнительно простой
Глава 8: Тестирование принтеров и других устройств 2 2 1
и стандартный, на тестирование можно потратить меньше времени, а вот если она использует специфические особенности принтера и выводит слож­
ные и разнообразные данные, стоит потестировать ее подольше.
Таблица тестирования принтера
Тестирование принтера — работа очень кропотливая. Приходится про­
верять столько мелких деталей, что ничего не упустить можно только при очень жесткой организации работ. Если при тестировании любого другого аспекта работы программы ничего не стоит вернуться к уже выполненным тестам или провести важный тест, который случайно был пропущен, то с печатью это совсем не так просто. Придется снова найти нужный принтер или, еще хуже, снова просить его у того, у кого вы его одолжили, прове­
рить установку перемычек и переключателей, подключить принтер к ком­
пьютеру, провести тест, а затем вернуть принтер на место или хозяину.
Подготовительная работа занимает львиную долю времени тестирования.
Если предстоит тестирование большого количества принтеров, необхо­
димо позаботиться о подготовке тестовых файлов, а также постараться скомбинировать тестируемые функции, чтобы по возможности ускорить процесс.
Форма тестовой таблицы
Для подготовки схемы тестирования проще всего воспользоваться элект­
ронной таблицей. Результат должен выглядеть примерно так, как на рис. 8.4.
При использовании заранее подготовленных тестовых файлов таблица будет проще — вместо отдельных команд в ней будут перечислены имена файлов, которые следует распечатать. На деле вам понадобятся две табли­
цы. Первая, такая как на рис. 8.4, будет служить для первых двух этапов тестирования — функциональных ошибок и ошибок класса. Когда же вы перейдете к тестированию драйверов и отдельных принтеров, проверять каждую область программы будет не нужно, поэтому таблица станет гораз­
до короче.
В верхней строке таблицы перечисляются принтеры и их драйверы.
Кроме того, можно добавить и другую важную информацию — установки переключателей, объем установленной в принтере памяти и т.п. Для неко­
торых программ конфигурационная информация может оказаться не менее важной, чем тип принтера.
Несколько полезных замечаний о
тестировании печати
Перечень функций принтера можно найти в прилагаемом к нему руко­
водстве. Хотя обо всех рассказывать в данной книге нет смысла, с некото­
рыми из них связаны важные для тестирования вопросы.

2 2 2 Часть II: Приемы и технологии тестирования
1   ...   14   15   16   17   18   19   20   21   ...   49


написать администратору сайта