Искусство программирования на Си (984073), страница 65
Текст из файла (страница 65)
Однако если требуется получить данные автома(НехгбврегВуее + 1)), ТТ(мевсар(агдт[1), "-с', 2) == О) сможем автоматизировать, по крайней мере, некоторые тически, но в то же время с некоторыми улучшениями задачи, связанные с тестированием, то можно сохранить (гаожно добавить несколько специальных тестов, котоНехгсврегвусе, Р11еваведгд = 2; много времени и работа будет не так скучна. рые не производит наш генератор, отрслактировать сгдовоьагв = (в1хе Е)всгсои1(агфа[1) + 2, Один из аспектов тестирования, который относит- шествующие тесты и т. п.), то нужно просто загрузить По вполне очевидным причинам мы не хотим вывоВвацРо1всег, 10); ся к автоматизации, — это генерирование тестовых файл в крупноформатную таблицу, на месте отредакти- лить непечатаемые символы.
Общее соглашение состо- (контрольных) данных. Подумайте, насколько ввод тс- ровать его и заново сохранить. Если же под рукой нет ит в отображении на их местах некоторых других сим- При преобразовании из строкового в цифровой фор- стовых данных может быть раздражающе долгим и уто- полхолящей крупноформатной таблицы, то для быст- волов, вроде точки ',', поэтому сделайте это тоже. мат всегда используйте семейство функций в(г(ох: мительным. Можно ли сэкономить немного времени на рой очистки данных можно использовать текстовый рсвцчод(), з(г(о!О, в(гоп[() и т.д.. Они дают намного боль- наборс данных на клавиатуре? Если мы сможем нани- дактор (хотя это нс так просто, поскольку текстовый регт (! 1арггое (Техемоввег [Твхадуее) ) ) ( шс информации о преобразовании, чем а(о[О или агог().
сать программу, которая продумывает вместо нас тес- лактор вряд ли расположит данные в форме таблицы). ТахеВи(уег[ТЬТвВусе[ 8 частности, они сообщают, каким был первый символ, товые ланныс, то можно значительно сэкономить вре- Друтос прсик~ушсство считывания файлов тестовых который нельзя преобразовать.
мя, которое тратится на рутинные процессы, данных в формате крупноформатной таблицы заключа) гг (еоцвохвьег а*да [1] + 2 [ ( момсьаге < 1) ется в том, что дчя проверки результатов леожно испольНаПИСаНИЕ ВСПОМОГатЕЛЬНЫХ ПРИЛОжЕНИй зоватьвозможностилюбойсовременнойпрограммытабТехЕВсгуег[ТЫвВусе) ' 10'; д[)я урпИРО[)йКИ[[ личных вычислений. Мы создаем файлы в формате СаЧ Доналнитееьиые тематинеские раэдоьы Соьданненусараимныкннструментиььныксаедсть Я(ПГ$ Часть )й Глава 20 ИМВЙИ грамму, она, конечно, поможет при тестировании.
Если говоря, не так. Случайныс числа дают действительно ких букв). Если ваша система использует АБС!1, то мож- ясгасс Еа ьрд) жс нет, то нужно разработать программу для поиска нс случайные данные. Это конечно хорошо, но тоже сая- но получить случайную букву алфавита с использован)ае Е ГИяаес) более чем одной проблемы за один сс тестовый прогон. зано с проблемами. Что, если позже потребуется пере- нием простого выражения, такого как ВавьПаг(26)+'А'.
строить файл с теми жс ланными, что и в прошлый раз? В ПРОТИВНОМ СЛУЧаЕ РабОтайтЕ На СнетеМЕ, КОтОРаЯ ИС- дае е щ е е. (двьь). Разработка тестовых данных В языке С значения, которые дает фунлция галс)О, пользует другис (например, ЕВСТ))С). Указанная здесь основываются на начальной величине, которая запуска- технология применяется для всех коловых таблиц (но рд = 1оса1есае(ьдаее е)ае е); При написании генераторов тестовых данных требуег- 11(рд )м дВЬЬ) ся выяснить вес полезные критерии для таких данных.
ез внутреннюю реализацию какого-нибудь алгоритма нс во всех языках; для простоты используйтс обычный - и дь ). В основном треб>стоя проверить их на ошибки заниже- генерирования псевдослучайных чисел. Начальную вс2б-буквенный английский алфавит). аепсру(власе, рд, а)аеоГ с)асе)) ния, переполнения, деления на нуль и т.п. В то жс врс- личину можно выбрать самостоятельно и просто пере- Чтобы ввод исходных данных сделать нагляднее и ) мя выполнение заурядного теста, на данных которого дать ее ф>нкции згапйн.
Есяи передается постоянное пРошс, можно залать паРУ массивов длЯ хРансниЯ лвУх азам элементов типичного названия компании. Реальная рспрограмма работает нормально, говорит о том, что вы з ачснис, т вы всегда пол>чите от этой ф>нкции тот Чего действительно нужно избегать — так это гснеализация программы, возможно, будет считывать лан-не против свилан, я, но,нить..
нс хотите Вес,аки жс самый Рсз>льтат. Е'и вместо этого пеРеДаетсЯ . У- рирования непреднамеренно плохих тестовых данных. ные из файла, и они будут иметь сравнительно более стоит потратить немного времени на то, чтобы сделать При обрашснии к ф>нкции )осавппе() нет никаких ганыс сзультаты. (Как можно пол чить сл чайное зна- широкий диапазон. Технология при этом остается той тестовые ланные более полными, и удостовериться.
что рантий, что мы получим правильную дату. Следует нкции вгавь)сгь Очень п сто. жс — мы комбинируем лва этих элемента наугал лля учесть это и установить альтернативную дату. Выберем згапб 1)пю()ь)Н.Е)).) пол>чения нормального разброса названий компаний. Автоматические генераторы тестов лучше использо- 1 января 2000 гола как основн>ю дату для пспользовавать для ординарных случаев, но сели вам повезет, то Основнои механизм длЯ пРимеРа генеРатоРа тсстоьпе пепахаеапаеа(гзье ьер, инхп е иахааса) ния в экстренной ситуации. Но в обычных случаях бувых данных передаст дем использовать телушую дату. Линден~ ~еннниетенитичесннеринл ~и Создание нриграммнч инструмтенаеннч» средств Часть и! Глава 20 (ргрзс(((р, Как видите, процесс создания инструмента авзоча- данные; он не использует какие-нибуль входные лан- В обоих описанных случаях автоматизация програм- ' $ . 2 Г 'л з ', тичсского генерирования тестовых данных очень про- ные лля определения своих лсйствий.
Но вель нам трс- мирования позволила значительно сэкономить время и (1 (Нзздвпз ! * 5000.0) — 2250.0); сто, несмотря на возникающие иногда препятствия (та- буется генерировать полезный код. Если результат все- усилия. Кроме того, в обоих этих случаях генератор (Г(язпд1вс(2) =-. О) кис, как проблеча с данныл!и). А теперь обратич гда один и тот же, то генератор кода не потребуется; кода считывал исходный код так, что он выполнял свою внимание на кое-что более серьезное! проше будет самому написать необходимую программу. работу. Такая операция называется сиеазаксаческам раз- Нерсдко генераторы кода используются для написа- бором, и поскольку она уже подробно рассматривалась Периодически пату нужно изл!снять.
Выберем увсГенераторы кода ния готовых програл!ч. Они решают одну из самых по- в главе )9, здесь мы нс будем повторяться. личение латы на ! на основе результата подбрасыванпл вторяющихся проблем либо в самой программе, лиГю в В связи с тем, что требуется написать синтаксичесчоне™ (Капп)п((2) — О), но, если лотитс, можете на- Если автоматизировать производство, по краиней чсрс, большой коллекции программ. Позвольте привести при- кий анализатор кзк часть приложения генерирования мер. Несколько лет назад я работал над большим меж- кода, мы хотели бы, насколько это возможно, сохрзвп'!ьностн ~~п"Ро~па~~ ~ соРг!"Розки сто'!Нть тзк' то ь! номнть л!но!о времени. Кроче того, написание зснера- платформенным проектом, который разрабатывался лля нить свою работу по синтаксическому разбору для буторов кола — зто один из наиболее увлекательных ас- использования в средах М(сгозой %(пболчз (версия 3.), дущего.
Поэтому давайте разработаем синтаксический если вы еше помните) и МлеБ (майнфреймовская опе- анализатор лля программы, которая будет произволить довольно иьпсресна, поточу что она позволяет исполь- рационная система). Программа должна была иметь прогрзмму синтаксического разбора. Надеюсь, это не зовзть функ!!инз п!Н()псе(), которая рзссл!атривж!ась в КВ(4Нц возможность разделения на два мопуля: мопуль досту- звучит стишком запутанно! Позвольте объяснить.
главе 4 Эта функция конвертирует мп!с! (гп в перечсн- па к базе данных и расчетный модуль. Мы написали и Когда я начинаю писать программу, то первый шаг Прошс всего объяснить, п.о такое генераторы кода, ную (нпе (, которая имеет очсвнлный сл!ысл. Интерес- р отладили расчетный код (но не модуль базы данных) на делаю почти автоматически. Мои пальцы, как говорит- но то, что при конвертировании функция ш)с((пзс() уноможно с использованием понятия квин (но это нс озна- РС, но его нужно было проверить на мэйнфреймовской ся, сами набирают нужные символы: рндочнноет пзнныс, сзеловательно, нач это делать нс ' ' Р ' ' .
Р- част, что квин проще всего написать). Квин — это про- машине, на которой отлалочные возможности были грамма, которая генерирует собственный исхолный коп $1псзпав <вс61о.ь> ЕИ Дола ааалеььнме те натннесннер >дель Со>дание лраграммнмг инструмент ш ьнмг средств ь Часть Гй Глава <О но интснсивныи процесс. И в-третьнх, страница лять Так как переключатели довольно полезны, доба- телсй является несколько ограниченной, но, в кон- Листинг 20.6, Простая программа, производящая шапрайс (из локуыентзции (ЛЧ)Х) для функции Ве)орц) вим также возможность работы с просп<ми (включить/ це концов.
мы жс хотим все упростить. синтаксический разбор. на моеи Ешпх-системс во входе Впав сообшает: "Эта выключить) переключателями ° Ьвг Е означает, что параметр Ьаг имеет тип !опе ш( 41а<1аде <а101о.а> шзпраес-страница перепутана". Ну вот, пожалуй, и вес. Вот пример грамматики в приближенной Форме Вэи он обязателен. (Только переключатели нс обязаНст, то, что дсиствитсльно требуется — это програм- кусз — Наура (Васйоз-)чанг Еогш): 11вс1аае <вггьа9.Ь> тельны.) ма, которая сама будет писать биты командной строки Ф(ас1аде <аааеге.а> 1а111в; мое)1 программы ьь позволит лег«о р~б~тать со всеми ° Ьвг П означает, что Ьаг — это тип бонйс. врес1 гег $1ае1аде 0111ве.в' у«аззнными пользователем данными.