Эквивалентные компоненты графического интерфейса Swing - PullRequest
1 голос
/ 10 апреля 2011

У меня следующий вопрос: учитывая приложение Swing GUI (включая исходный код), как я могу убедиться, что два компонента (например, JButtons, JList и т. Д.) Эквивалентны (в том смысле, что для пользователя выполняется один и тот же кододно и то же событие, сгенерированное на них).

Мое мнение таково, что в первую очередь им нужно было бы иметь одинаковые прослушиватели в одном и том же порядке для всех доступных событий (я говорю только о слушателях, добавленных самим приложением), а затем о тех слушателяхкод не должен зависеть от источника сгенерированного события (поэтому в их коде не следует вызывать «Action Command» или e.getSource ()).

Это для исследовательского проекта, касающегося приложений с графическим интерфейсом.Продолжая работать, я пытаюсь изучить, как можно уменьшить количество тестовых случаев GUI, обнаруживая эквивалентные компоненты.Если у вас есть какие-либо мысли по этому поводу (возможно, я чего-то не принимаю во внимание), пожалуйста, поделитесь ими.

Спасибо.

1 Ответ

2 голосов
/ 10 апреля 2011

Лично я чувствую, что это зависит от вашего определения «эквивалент». По вашему определению это означает, что «то же самое происходит в приложении, когда они генерируют свои события». Но под «тем же» относится ли это к перспективе пользователей или программистов?

Если это первое, то вопрос является излишним, поскольку пользователю просто нужно проверить, приводят ли различные действия к одному и тому же визуальному результату, чтобы определить, являются ли они эквивалентными. Тем не менее, это требует дополнительной мысли - возможно, что немедленный визуальный результат будет одинаковым для обоих виджетов, но в долгосрочной перспективе действия могут быть не «эквивалентными» для пользователя. например нажимаешь кнопку А, наблюдаешь за А; но если вы сделаете выбор из списка B, вы снова увидите A, но также может произойти какое-то незаметное событие B, которое не будет обнаружено пользователем. В долгосрочной перспективе это может повлиять на вещи. Таким образом, эквивалентность с точки зрения пользователей может быть сложной задачей.

Последний случай сложнее проанализировать. Одним из способов, как вы упомянули, может быть использование одного и того же слушателя, т. Е. Один и тот же метод используется для обработки обоих виджетов. В качестве альтернативы они могут использовать разных слушателей и, возможно, даже разные методы, но если оба метода по существу следуют сходной логике или назначению, они могут быть «эквивалентными». Тем не менее, это может быть связано с конкретным случаем и может быть довольно тонкой темой (для сравнения методов).

Другая идея: вы также можете провести эксперименты над различными тестами и входами в виджете и получить статистическое значение, чтобы назначить меру достоверности для сравнения (например, эти виджеты эквивалентны для более чем 80 процентов предоставленных входных данных). ). Это может применяться при сравнении ввода текста, например, для JTextArea и JTextField.

Ваши предположения могут также иметь отношение к вашему определению эквивалентности. например при условии, что эти входы, A и B эквивалентны.

Это лишь некоторые из моих мыслей и мнений. В конце концов, это исследовательская работа. Надеюсь, я дал пищу для размышлений.

EDIT

Я считаю, что обнаружение самого события является тривиальной деталью. Важно то, как обрабатывается событие. По сути, ваш вопрос сводится к следующему: есть ли способ сравнить обработчик события для конкретного события. Честно говоря, я не уверен, как это можно сделать (возможно, сравнить стеки, проверить избыточность кода, проверить отношения is-a). Честно говоря, я не знаю, как можно проводить такие сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...