Началось все с простого — один мой друг захотел писать проги на яве. Естественно, что просто выучив синтаксис языка, никакого опыта в программировании не наберешся, и потому нужно просто писать уже хоть что-нибудь. Вот я и обдумывал вопрос, что же лучше всего подойдет для этого. Я пришел к выводу, что самое лучше в начале пути, на мой взгляд, это создать простенький класс который бы описывал абстрактную «сущность», но при этом был прост в понимании. В итоге было решено выдать тренировочное задание по написанию самопального класса комплексного числа.
Конечно можно было бы просто написать на листочке все требования к этому классу, описать интерфейс всех его методов и тому подобное, однако потом это пришлось бы проверять, и при этом очень даже вероятно что проверять по нескольку раз, так как товарищ только обучается.
Но тут меня потянуло в сторону экспериментов, а так как я нетак давно заинтересовался TDD, то и эксперименты пошли в ту же степь.


И так, подумалось мне, почему бы не взять, и оформить задание в виде набора тестов, который бы во-первых, ускорил процесс разработки, так как в случае ошибки причина тут же выдается на экран, и все что нужно, это проявить фантазию и отредактировать код, чтобы причина возникшей ошибки была исправлена, а во-вторых позволит пошагово усложнять программу, при этом контроллируя каждый шаг и результат.
Плюс ко всему, таким образом можно прививать правила хорошего тона, по типу использовать методы getValue/setValue вместо использования публичных полей просто контроллируя тестами существование и правильность работы этих методов.

И вот пришло время кодить. Первое что я решил, это проводить все тесты внутри функции main посредством обычных вызовов методов. Какова причина этого? Все просто — главная задача это пошаговое создание класса, с плавным увеличением его сложности, что очень легко устроить посредством указания последовательности вызовов тестирующих методов и выходом из программы в случае провала одного из них. Также для того чтобы узнать, каковы результаты тестов достаточно просто нажать F6 (я делал это в нетбинсе), узнать из окна вывода что именно работает не так, и продолжить редактировать код.

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

Итогом всего этого стало приложение, «тренерующее» новичка в создании небольших классов. Сразу оговорюсь, что подразумевается знание синтаксиса языка хотя бы на уровне написания валидных констр��кций.
Конечно одним таким приложением программера не вырастишь, однако для новичков такой способ обучения может быть вполне хорошим указателем, куда держать путь дальше.

Для всех желающих опробывать на себе, что же в итоге получилось, предлагаю скачать архив с проектом (для нетбинса). Правила пользования просты:
-Открываете проект
-Открываете файл doxygen/html/index.html (в нем находятся пояснения к требованиям и некоторая полезная информация, а также описания всего что под капотом)
-Выполняете приложение и следуете указаниям в выводе до тех пор, пока все тесты не будут выполнены.
Поидее все это должно занять около часа.
Буду рад конструктивной критике.

На последок вопрос — имеет ли смысл такое обучение и будет ли от него эффект?