Glareone
17-06-2010, 16:22
Доброго времени суток.
Задача:
Написать набор классов для генерации тестовых данных.
Структура представляется в виде совокупности объектов различного класса.
Д.б. классы для выбора, циклов и других элементов.
У всех классов д.б. метод generate, выводящий в файл результат генерации.
Класс последовательность Seq(), в которую можно добавлять (.add())
следующие элементы:
целое число, ссылку на переменную или строку,
указанное значение выводится при генерации
Объекты классов:
Any(строка)
при генерации выводится случайный символ из строки
Per(строка)
при генерации выводится случайная перестановка символов строки
Format(число или переменная, строка)
при генерации выводится значение по указанному формату
Rep(целое число или переменная, элемент)
действие повторяется заданное число раз
While(переменная, элемент)
действие повторяется пока значение переменной не нулевое
другие последовательность или
Select().add(элемент [,целое число=1]).add(...
группа выбора, элемент из группы выбирается с вероятностью
прямо пропорциональной числу
Assign(переменная, выражение)
при генерации переменной присваивается выражение
выражение строится из объектов
Random(целое число или переменная,целое число или переменная)
случайное значение в указанном диапазоне
целых чисел и переменных,
соединяемых знаками операций +, -, *, /, %
Пример работы:
Var N;
Seq s1;
s1.add(Assign(N,Random(1,100))).add(N).add("\n");
// присвоить N случайное число от 1 до 100, вывести N, вывести "\n"
s1.add(Rep(N,Seq().add(Rep(10,Any("ABC"))).add("\n"));
// выполнить N раз вывод строки из 10 случайных символов A,B или C
s1.generate();
// сгенерировать тест, результат выводится в cout
Пример сгенерированного теста:
3
ABBACCAAAB
ACBBBACAAC
BBACCCCAAA
Вопрос:
Подскажите, какова структура должна быть классов,чтобы решить подобную задачу.
Что я должен почитать,где посмотреть примеры реализации подобного?
Какие паттерны мне надо использовать? (пока догадался только о "Composite",тк без него тут не сделать вовсе,утону или в шаблонах или в виртуальных методах)
Задача:
Написать набор классов для генерации тестовых данных.
Структура представляется в виде совокупности объектов различного класса.
Д.б. классы для выбора, циклов и других элементов.
У всех классов д.б. метод generate, выводящий в файл результат генерации.
Класс последовательность Seq(), в которую можно добавлять (.add())
следующие элементы:
целое число, ссылку на переменную или строку,
указанное значение выводится при генерации
Объекты классов:
Any(строка)
при генерации выводится случайный символ из строки
Per(строка)
при генерации выводится случайная перестановка символов строки
Format(число или переменная, строка)
при генерации выводится значение по указанному формату
Rep(целое число или переменная, элемент)
действие повторяется заданное число раз
While(переменная, элемент)
действие повторяется пока значение переменной не нулевое
другие последовательность или
Select().add(элемент [,целое число=1]).add(...
группа выбора, элемент из группы выбирается с вероятностью
прямо пропорциональной числу
Assign(переменная, выражение)
при генерации переменной присваивается выражение
выражение строится из объектов
Random(целое число или переменная,целое число или переменная)
случайное значение в указанном диапазоне
целых чисел и переменных,
соединяемых знаками операций +, -, *, /, %
Пример работы:
Var N;
Seq s1;
s1.add(Assign(N,Random(1,100))).add(N).add("\n");
// присвоить N случайное число от 1 до 100, вывести N, вывести "\n"
s1.add(Rep(N,Seq().add(Rep(10,Any("ABC"))).add("\n"));
// выполнить N раз вывод строки из 10 случайных символов A,B или C
s1.generate();
// сгенерировать тест, результат выводится в cout
Пример сгенерированного теста:
3
ABBACCAAAB
ACBBBACAAC
BBACCCCAAA
Вопрос:
Подскажите, какова структура должна быть классов,чтобы решить подобную задачу.
Что я должен почитать,где посмотреть примеры реализации подобного?
Какие паттерны мне надо использовать? (пока догадался только о "Composite",тк без него тут не сделать вовсе,утону или в шаблонах или в виртуальных методах)