суббота, 4 апреля 2009 г.

Тестирование форума огурцом и о тестах вообще!

Кросспост из личного блога

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

Студенты обычно тестируют так: написали функцию суммирования, проверили, что работает "2+2" - все! А потом оказывается, что на "3+0" она падает, а через некоторое время (когда что-то в коде менялось) вообще перестает даже "2+2" складывать. Человек не может после каждой модификации кода проверить все предельные и стандартные поведения программы - это просто очень трудоемко.

Но есть решение! Мы создаем тесты, которые будут проверять работу каждой функции в отдельности - в нашем примере это проверка, что "2+2=4" и "3+0=3". И каждый раз, мы запускаем тесты и убеждаемся, что все по прежнему работает.
Так же возможно мы придумаем, как улучшить алгоритм работы нашей функции, и тогда мы просто перепишем функцию и запустим тесты - если все OK, то мы молодцы, иначе откатываемся к предыдущей версии и думаем над улучшением работоспособности нового, более хорошего алгоритма.

Теперь поговорим о реализации этих тестов.. Ведь mix'овый калькулятор я бы рад протестировать, но абсолютно нет средств и инструментов для этого. С современными языками и фреймворками дела обстоят гораздо лучше: есть очень много этих самых средств и инструментов. Приведу пример лучших для Ruby (субъективное мнение):
  • rspec - BDD фреймворк, весьма удобен, вот пример
    Как можно увидеть, код вполне читаем на родном english'е, мы тестируем наш список в разных ситуациях и ожидаем определенного поведения.
    Этот фреймворк мне нравится больше всего именно для тестирования разных функции, моделей
  • cucumber - и опять фреймворк, девиз которого "BDD with elegance and joy". Это просто супер - вот вам нравится идея написания тестов на русском языке. Мне - очень!
    Это пример комплексного тестирования форума. Вы подумаете, что тут где-то обман (!), как система догадывается, что я имею ввиду? Ведь ИИ еще не доведен до юзабельного состояния :( Да, есть дополнительные расходы, которые заключаются в объявлении пары правил для обработки выражений специфичных для форумов, но это всего 10 строчек с регулярными выражениями, зато что мы получаем взамен!
    Тест пишется за несколько минут, даже меньше, и он очень удобен для демонстрации людям, не знакомым с программированием, например, дизайнерам и заказчикам!
Тесты писать надо, главное выбрать правильный инструмент, чтобы это доставляло удовольствие - иначе вам это надоест!

P.S. в данный момент я как раз тестирую форум проекта students с помощью "огурца" :)

четверг, 2 апреля 2009 г.

Сайт группы: начало

Как и обещал, подробнее расскажу о нашем главном проекте на сегодня - students, сайте студентов кафедры АФТИ, главным образом ориентированном на нашу группу.

Этот проект является естественным продолжением нашего прошлогоднего проекта - сайта группы 737 НГУ. Тот сайт мы писали отчасти для обучения языку PHP, поэтому не сильно заботились о том, насколько "правильно" мы его пишем. В итоге, через год после начала работы над этим сайтом мы имеем кучу плохо связанных и структурированных исходников, плохо оформленный код, с перемешанными бизнес-логикой и представлением, и полное отсутствие концептуальной целостности. Мы уже плохо помним, где находится код, отвечающий за то или иное действие. Теперь мы понимаем, что тогда были неправы. Сайт требует развития, пользователи просят хлеба и зрелищ (удобства сервисов и красоты дизайна), а желания работать с сайтом нет, тем более, что помимо нежелания копаться в корявом коде, не хочется писать на PHP, единожды вкусив Ruby и Ruby On Rails.

Поэтому было принято радикальное решение - переписать сайт с нуля. Заодно решили немного сменить тематику. Мало того, что название "сайт группы 737" плохо тем, что наша группа уже скоро будет иметь другой номер, так к тому же зачем так сужать? Портал, на котором смогут общаться и помогать друг другу студенты АФТИ разных поколений весьма востребован!

Сейчас разработка идет полным ходом. Мы использовали base_russian_app_with_auth, проект cypok'а, чтобы без лишних движений получить аутенификацию, авторизацию и поддержку русского языка. Затем мы приступили к самостоятельной реализации первого сервиса - форума. И уже весьма преуспели: основа уже есть, остались практически только некоторые тонкости интерфейса. Поддерживается древовидная иерархия форумов, в которых можно создавать темы, а в темы добавлять сообщения. Все эти штуки можно редактировать и удалять. Отслеживаются последние прочитанные пользователем сообщения. Вскоре предстоит решать, каким сервисом мы займемся после окончания форума. Пожелания приветствуются :)

Внизу этого сообщения вы видите ссылку "Соответствующий коммит на GitHub'е". Мы используем систему контроля версий Git, а GitHub - это удобный и популярный сервис для размещения публичного Git-репозитория (и не только). Я буду стараться всегда добавлять такую ссылку, когда буду писать о каком-то нововведении, чтобы, если вам будет интересно, как я это сделал, вы могли посмотреть. Ссылка в конце этого сообщения - просто на последний коммит на данный момент.

Соответствующий коммит на GitHub'е

среда, 1 апреля 2009 г.

Работа закипает

Как и обещал Парф в предыдущем сообщении, в наш коллектив влился наш сосед по комнате Слава, в чём можно убедиться, посмотрев список авторов этого блога. Произошло это так. Придумав название Moonlighters, мы рассказали о нём Славе, а он взял и нарисовал за вечер нам такую классную эмблемку, что мы первым делом неслабо так удивились, а потом сказали, что Слава - тот, кого нам явно не хватает в команде :)

Я же в этом сообщении хочу рассказать, над чем мы работаем в настоящее время и чего уже достигли.

Итак, первый проект о котором я расскажу - сайт студентов АФТИ.
Это сайт, на котором смогут общаться и помогать друг другу студенты АФТИ разных поколений. О предпосылках его появления и о его развитии я напишу отдельно, здесь дам лишь ссылку на репозиторий этого проекта - students - на GitHub'е. Разработка сайта в самом разгаре, так что тем, для кого мы его пишем, ждать осталось не так долго.

Как не упомянуть о нашем учебном проекте - для нашего преподавателя по курсу ООП мы пишем игру OOPacMan. В прошлом семестре мы написали консольную версию этой игры, в этом - занимаемся портированием её под WinAPI, здесь её репозиторий. На данный момент подготовили библиотеки и продумали архитектуру, теперь предстоит непосредственно портирование. А пока по экрану бегает одинокий пакман-битмап :)

Ну, вот и все наши текущие проекты. Немного, но при том, что у каждого есть и свои проекты, да ещё и учимся мы, это довольно неплохо, на мой взгляд :)