суббота, 27 июня 2009 г.

Exams are over

Вот и кончилась сессия, я и Ваня сдали все на отлично! Слава еще досдает, мы за него болеем!

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

суббота, 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'е