Обучение программированию на Java с помощью автоматических тестов

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


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

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

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

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

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

    На последок вопрос — имеет ли смысл такое обучение и будет ли от него эффект?
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 10
    • 0
      Koans.
      • 0
        Скачал, поигрался. В принципе да, у меня задумка такая же, разница в том, чему именно таким способом обучают — в моем случае пошаговое создание класса, в koans'е по сути обзор всех возможностей явы. К тому же в koans'е нужно редактировать уже существующий код, в моем случае файл с классом и его наполнение происходит с нуля самим обучаемым.
      • +1
        www.codehunt.com/ — на заметку.
        • +1
          Да, я раньше играл :) И да, идея у меня похожа. Однако в кодханте сделано в виде, который скорее можно назвать игрой — уровни, оценки. В моем варианте проверяется не умение угадать, какой оператор используется в данном примере, а заставить человека самого придумать способ как это сделать, при этом ограничивая лишь итоговый результат, а не способ, которым это можно сделать.
          • 0
            В CodeHunt отстойная постановка задачи и огромная масса ошибок.
            К середине из-за ошибок отпадает желание проходить дальше.

            P.S. У меня везде кроме одного задания максимальная оценка.
            Чтобы не создавалось впечатление, что это хныканье лузера.
            • 0
              Там макс. оценку на яве получить в разы проще. Когда не получалось выбить 3 звезды на шарпе, переключался на яву, делал решение «в лоб» и их таки получал.
          • 0
            Код может быть валидным и работающим, но мягко говоря, «не комильфо».
            • 0
              В принципе да, ничто не убережет человека от написания такого «не комильфо», однако что помешает показать результат знающему человеку? В таком случае работоспособность кода уже будет проверена, и нужно будет лишь указать на архитектурные ошибки и на явные костыли, выдать за такое лещей и отправить переделывать. Но в общем, согласен с тем что без помощи со стороны не обойтись :)
              • +1
                При наличии тестов вторая фаза эксперимента — рефакторинг. :-)
              • 0
                del

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.