Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужен совет по оптимизации структуры классов / 9 сообщений из 9, страница 1 из 1
16.02.2012, 12:29
    #37664885
Жентос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
В общем, есть приложение и код, тестирующий его.

Структура кода имеет 3 уровня:
-уровень теста, там даются инструкции типа "ввести название объекта", "создать в графике выходной с параметрами ХУZ" и т.п. Это самый верхний уровень
-уровень сущности, там уже действия, описанные на уровне теста, раскладываются на более мелкие, но еще не атомарные (т.е., например, там даются команды "Нажать на кнопку Create Schedule", передать графику параметра X, нажать ОК)
-уровень UI, там прописаны элементы управления и действия над ними. Этот уровень самый нижний из рассматриваемых.

Тест ориентирован на процесс. Т.е. описан так: сначала я делаю то-то, затем нажимаю сюда, потом проверяю еще что-то.

А теперь, собственно, проблема: на уровне сущности все действия доступны в один и тот же момент времени. А сама сущность имеет несколько состояний, в некоторых из них часть действий не имеет смысла (например, открыто модальное окно графика, и мы в этом режиме с параметрами исходной сущности работать не можем). Соответственно, наш тест становится зависимым от знаний специалиста, программирующего тест-кейс. От этого хочется уйти, но пока не представляю как:
- на мой взгляд, структура теста и так уже достаточно сложна, ее расширение, хотя и возможно, но при добавлении 2-3 уровней "вглубь", структура станет черезчур сложна
- можно ввести что-то вроде семафора состояний, тогда тест уже не закрешится, но все равно, хочется, чтобы в зависимости от состояния приложения были доступны только методы, не нарушающие логику работы приложения.
...
Рейтинг: 0 / 0
16.02.2012, 13:06
    #37665004
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
Жентосно все равно, хочется, чтобы в зависимости от состояния приложения были доступны только методы, не нарушающие логику работы приложения.
Зачем? Попробуйте сформулировать хоть одно преимущество, достигаемое таким образом.

Фактически Вы хотите повторно закодировать в тесте бизнес-логику, реализованную в тестируемом объекте, сделать тест и сущность связанными сильнее, чем сейчас, как результат - уменьшить ценность теста и увеличить трудоёмкость разработки за счёт количества случаев, когда изменения в компоненте приводят к необходимости изменений в тесте. Просто представьте себе, что у Вас есть код, есть набор тестов. Теперь вы меняете бизнес-логику: окно графика стало немодальным. Что будет в исходном случае? А всё хорошо, правильные тесты правильно работают, надо только добавить тест немодальности (или изменить тест модальности, если он был). Что будет в Вашей схеме? Правильно, надо будет бегать по уйме методов и переписывать условия "когда он доступен".

Правильный (с моей точки зрения) подход достигается следующим образом: если операция не может быть выполнена (скажем, пытаемся выполнить Click на недоступной кнопке) это приводит к генерации соответствующего исключения. Это автоматом реализует "недоступность" (точнее, правильный результат теста) для всех методов, прямо или косвенно вызывающих этот Click. Это автоматом отрабатывает ситуации типа "окно, которое должно было закрыться, не закрылось" и прочие возможные неприятности. Зачем это дублировать и портить?
...
Рейтинг: 0 / 0
16.02.2012, 16:00
    #37665475
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
softwarerПравильный (с моей точки зрения) подход достигается следующим образом: если операция не может быть выполнена (скажем, пытаемся выполнить Click на недоступной кнопке) это приводит к генерации соответствующего исключения.

вот не факт, что исключение - лучший варант.
может просто метод должен просто ничего не делать, в случае не активности окна...
...
Рейтинг: 0 / 0
16.02.2012, 16:42
    #37665599
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
ZyK_BotaNможет просто метод должен просто ничего не делать,
Какой именно метод? "Нажми на кнопку"? "Введи значение в ячейку"? Нее, такой метод должен работать совершенно однозначно. У него есть постусловие (кнопка нажата, значение введено в ячейку). Такой метод должен ничего не делать, если значение уже в ячейке. Но если окно недоступно - он должен кидать исключение. Без вариантов.
...
Рейтинг: 0 / 0
16.02.2012, 16:42
    #37665607
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
softwarerZyK_BotaNможет просто метод должен просто ничего не делать,
Какой именно метод? "Нажми на кнопку"? "Введи значение в ячейку"? Нее, такой метод должен работать совершенно однозначно. У него есть постусловие (кнопка нажата, значение введено в ячейку). Такой метод должен ничего не делать, если значение уже в ячейке. Но если окно недоступно - он должен кидать исключение. Без вариантов.значит нужна прокся, которая может отфильтровать левые мессаги.
...
Рейтинг: 0 / 0
16.02.2012, 16:45
    #37665618
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
ZyK_BotaNзначит нужна прокся, которая может отфильтровать левые мессаги.
Зачем? Если цель - получить в результате тестирования красивую зелёную галочку, не надо писать никакой прокси, можно просто не писать тестов :)
...
Рейтинг: 0 / 0
16.02.2012, 19:09
    #37665988
Жентос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
softwarer, в принципе, с выбросом исключения согласен, можно будет такое сделать.

Самая главная причина, по которой я бы хотел сделать сабж -- уровень сущности напоминает свалку, в которой есть абсолютно все методы обработки этой сущности во всех состояниях. Некоторые сущности имеют по пару тысяч строк кода, названия методов пересекаются и приходится перепроверять: тот ли метод вызван. В общем, тяжело будет поддерживать, если будем продолжать в том же духе
...
Рейтинг: 0 / 0
16.02.2012, 22:38
    #37666196
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
Жентосуровень сущности напоминает свалку, в которой есть абсолютно все методы обработки этой сущности во всех состояниях.
Вот этого я пока не понимаю. Вернее, могу проинтерпретировать разными способами, и при этом не соотношу с чем-то из своего опыта. Попробую рассказать как у меня.

На базовом уровне - api работы с интерфейсом, те самые методы "найди объект", "нажми кнопку", "выбери значение в комбобоксе" итп. В текущем проекте это обёртка над Selenium, до того была обёртка над SendInput, в целом не суть. На этом же уровне реализуются всякие фенечки, повышающие достоверность работы: значения в поля вводятся с небольшой паузой после каждого символа, метод "нажми кнопку" некоторое время ждёт её появления и/или становления доступной итп. Главное, что этот уровень позволяет формулировать тесты в виде наглядной, читаемой записи "действий пользователя", его задача - максимально отсечь прочий код от технической специфики. Он же отвечает за формирование хороших сообщений об ошибках.

Следующий уровень можно назвать настройкой на контекст. Для форм, фреймов и подобных конструктивных элементов описываются в виде функций составляющие их части. Например, у формы есть кнопка OK - значит, будет метод btnOk(), возвращающий эту кнопку в том виде, в котором её можно подать параметром в функцию click(). Если эта кнопка будет нажиматься часто, может быть реализован и метод clickOk(). Может появиться и более сложный типовой метод, скажем saveRecord(). Этим уровнем незачем слишком увлекаться, редкие вещи описывать не обязательно, его главная задача - дополнительно улучшить язык описания теста.

Следующий уровень предназначен для создания сложных тестов, вероятно, он и соответствует Вашему "уровню сущности". Это описание сложных, составных операций. Например, если нам нужно ввести десять записей, будет довольно скучно расписывать их в виде "введи значение в поле а .. введи значение в поле б .. нажми ок .. нажми инсерт .. введи значение в поле а .." На этом уровне делается метод, например, "опиши бизнес-объект", который создаёт запись, вводит в неё указанные параметры, создаёт какие-нибудь дочерние записи итп. Здесь часто встречаются ветвления, иногда циклы.

Наконец, собственно тесты - в простых случаях формулируются непосредственными вызовами первого-второго, в сложных - третьего уровня.

В том, что касается собственно проверок - почти всю работу в итоге выполняют методы первого уровня. В методах четвёртого мы формулируем результаты, которых собственно должен достичь правильно отработавший тест - но когда тест работает неправильно, чаще всего об этом свидетельствует диагностика вида "кнопка ОК недоступна" или, например, "в результате нажатия кнопки ОК выдано сообщение об ошибке" с первого уровня.
...
Рейтинг: 0 / 0
05.03.2012, 15:41
    #37691763
Жентос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет по оптимизации структуры классов
Ну вот, подниму немного топик....
есть кнопки, которые опичываются вот так:
Код: java
1.
private var createButton:TestActions = new ControlElement("ButtonAdd", "name");



действие "нажать" на копку описывается так:
Код: java
1.
2.
3.
4.
5.
6.
public function clickCreateButton():TestActions {
	var theCommand:TestActions = 
		new TestActions(ActionsEnum.CLICK, [null], createButton);
			
	return theCommand;
}


Вот думаю, может, сделать сам класс "кнопки" с методом нажатия на него, ведь банально выполняется одно и тоже действие. Проверку создания кнопки пока опустим (по FlexMonkey инфы даже на офф. форуме мало)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нужен совет по оптимизации структуры классов / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]