BA> 1. Как содержатся тесты в проекте? Где содержатся физически (отдельная BA> директория tests или вперемешку с сырцами)? у нас как правило в каждом каталоге с исходниками должен быть подкаталог UnitTest, в котором лежат тесты для сорцов из каталога. Естественно пока таких каталогов не много. В проект тесты включаются только в дебаг версию, в релизе они помечены как "exclude from build". BA> 2. Интерфейс тестов. Тут даже интересует скорее не код, а BA> предъявляемые к интерфейсу требования. интерфейс у тестов непростой. они все наследуются от базового теста. плюс могут наследоваться друг от друга, создавая параллельную классам иерархию тестов для них. В письме подробнее описать будет сложно, ну что-нибудь придумаем. BA> 3. Что тестирует конкретный тест - метод, класс, группу классов? Или BA> для каждого случая выбирается индивидуально? тесты должны быть небольшими. Например по одному на каждый метод класса. Можно и несколько методов протестировать за раз, если они не сложные. По одному тесту также на каждый баг, который нужно исправить. BA> 4. Вывод и обработка статистики по тестам. статистика по прохождению тестов выводится в окошке. В нем же можно выбирать те группы тестов, которые нужно запускать. В статистике видно количество сбоев, каждый сбой в отдельности с указанием файла, номера строки, где он произошел и суть сбоя (как правило исключение или выражение давшее false). BA> 5. Удобное включение и конфигурирование. Допустим в случае, если мы BA> хотим прогнать только пару тестов из огромной их кучи. Можно ли это BA> сделать с помощью нескольких кликов мышкой. да можно. Все тесты сведены в структуру в виде иерархического дерева. можно выбрать как все тесты, так и группу, начиная с определенного узла и вниз. BA> 6. Документирование тестов. у нас - только комментарии в тексте теста BA> 7. Как оценить качество теста. Вопрос глупый, но все-таки. Тест на метод класса должен быть написан так, чтобы по возможности проверить все способы вызова этого метода с различными параметрами. Чаще так конечно не получится, тогда - крайние и средние значения параметров, интересные случаи и т.п. Чтобы выловить максимальное возможное количество ошибок. Тест на баг должен воспроизводить баг. после исправления бага, он это подтвердит и в последствии будет помогать при "неожиданном" повторении бага. BA> 8. Тесты и другие отладочные средства. Например ассерты или BA> exception. Как они взаимодействуют между собой. Т.е. если в результате BA> обращения теста к классу возникает исключительная ситуация, то как она BA> обрабатывается? В тестах проверяется поведение методов класса, в том числе и при неправильных данных. Если метод должен при этом выбрасывать исключения, то в тестах это нужно проверять. Обычно делается так, ставится флаг WasException = false, затем в блоке try делается что-то плохое, а в catch флаг WasException = true. затем, после блока catch тест просто проверяет флаг. Также среда тестов отлавливает все необработанные исключения и они являются одним из видов сбоев. BA> 9. Тестируются только интерфейсы или также промежуточные результаты BA> работы сложных алгоритмов? мы тестируем только открытые методы классов. По нескольким причинам. Интерфейсы редко меняются, их проще тестировать. Доступ к закрытым функциям не так то просто обеспечить - ведь тесты полностью развязаны с кодом. Код вообще о них ничего не знает. А файл с тестами включает только заголовочный файл класса и создает объекты класса как и "обычные пользователи". Также подразумевается, что действуют принципы программирования "по контракту". То есть состояние класса до и после вызова интерфейсного метода всегда правильное и целостностное. В середине вызова оно может быть "недоделанным". Вызов защищенных и закрытых методов может подразумевать, что произведены какие-то подготовительные действия. А тест их не делает. BA> 10. Как тестируются компоненты требующие взаимодействия с пользователем BA> (это вообще юнит тесты? ). Всякие там кейлоггеры и проч. у нас взаимодействием с пользователем занимаются макротесты, и другие специальные тесты. Юнит тесты выполняются исключительно в автономном и автоматическом режиме. Там где нужен ввод пользователя они не применяются. BA> 11. Как запускаются тесты (это отдельный проект или еще что-то)? Как BA> часто прогоняются? Запускаются тесты из диалогового окна, которое появляется на экране при выборе меню unit tests. Естественно в релизе этого меню нет. Запускаются они сразу после внесения любых изменений. Не все сразу, как правило запускают ту группу, которая тестирует ту часть кода, куда изменения вносились. Вот когда уже изменения выглядят законченными, тогда пускают все. У нас сейчас все тесты пробегают за несколько десятков секунд, тогда как автоматический макротест всего приложения идет где-то около 45-50 минут на 2Гигагерцовом Атлоне. Вобщем юнит тестов наверное еще просто маловато. BA> Интересуют вообще, любые детали и особенности работы. BA> Вопросы конечно вразнобой, но тем не менее. Если бы мог все вопросы BA> качественно сформулировать, скорее всего сам смог бы дать на них BA> ответы :) А вообще юнит тестами мы только начали заниматься. А вот остальное тестирование у нас построено очень мощно. Уж не знаю сколько времени и сил потрачено на создание всей этой системы, но мне до сих пор кажется, что я и 5% от нее не использую. Багов от пользователей я вообще еще не видел. От них только предложения об дальнейшем улучшении приходят. У меня тут к последнему багу даже маленький фильм в avi был прикреплен - типа как я (тестер) добился такого эффекта. А еще один баг воспроизводится так: открыть файл. далее жмутся кнопки: Ctrl+A (выбрать все) BackSpace (unroute соответственно всего что там выделено), Ctrl+Z отменить анроутинг. Причем нужно выполнять последовательность ШЕСТЬ раз. После шестого раза почему-то дизайн не перерисовывается до тех пор, пока не тронешь мышь или клавиатуру. Вот блин как этот тестер этот баг обнаружил спрашивается? Теперь вот я буду сидеть и разбираться что там к чему :( Вобщем тестеры у нас просто звери. Мой начальник как-то добавил новую фичу и никому ничего не сказал :) Так ведь на следующий день ему уже по ней багу прислали :( ) Нашли ведь фичу, протестировали и багу выслали. Одним словом звери.