Система проведения конференций АГЗ МЧС России

Веб-сервис для автоматизации регистрации участников конференций и круглых столов, проходящих на базе Академии гражданской защиты МЧС России, а также приема и проверки докладов и статей пользователей.

Платформы и технологии

Web (перейти на сайт)

Client Side

HTML, CSS, JavaScript

Server Side

C#, ASP.NET, MS SQL

〈 Предыдущий проект Следующий проект 〉

Как это было?

Когда разработка проекта только начиналась, в бизнес-логике будущей системы можно было определить не многое. Поэтому спроектировать систему на "бумажке", спланировать этапы работы было крайне сложно. Мы пошли популярным путем — делай, пока не получится постепенная разработка (накрутка) функционала и выпуск прототипов. Кажется, это называется итерационная модель разработки. Мы набросали схему "Как есть" и начали отталкиваться от нее.

Постепенно бизнес-логика стала вырисовываться и вскоре мы стали понимать "заказчика", а он стал одобрять наши идеи. После этого мы подготовили минимальную проектную документацию - описали основные моменты бизнес-логики и нарисовали схемку "Как должно быть".

Что мы использовали при разработке?

Важно было работать такими инструментами, которые бы позволили реализовывать новые фичи максимально быстро, писать меньше кода, быть абстрагированными от работы с базой данных и т.д.

Мы воспользовались EntityFramework'ом. Это ORM фреймворк, который позволил нам не написать ни одного SQL-запроса в приложении и полностью абстрагироваться от базы данных (кстати, мы использовали MS SQL). Так, мы, не тратя время на написание, дебаггинг и обработку SQL-запросов, писали строго типизированные LINQ-запросы к базе данных, оперируя чисто C#овскими объектами — это очень удобно, очень!

Строгая типизация в C# и мощь Visual Studio позволили нам сосредоточиться на проектировании и реализации логики системы, писать отлаживаемый код и не искать ошибки, допущенные по невнимательности.

Во избежание проблем с отображением и работой сайта на мобильных устройствах мы решили использовать Twitter Bootstrap.

Особенности разработки

Самым неприятным было то, что на написание автотестов просто не отводилось время. Автотесты это не функционал системы, а если функционал не наращивается, значит разработка не двигается! :( Новые фичи тестировались по мере возможности, баги всплывали при показе прототипа "заказчику". В итоге, помучавшись несколько месяцев, мы наладили компиляцию кода всех веб-страниц приложения вместе со всем остальным кодом приложения и адаптировали весь код для работы с фреймворком T4MVC. Это незаменимый фреймворк, предоставляющий строгую типизацию,того, что не строго типизировано. Это названия методов контроллеров, названия аргументов методов, названия представлений, т.е. все "хрупкие" штуки, которые используются при рендеринге представлений (например, ссылки) или на клиентской стороне (например, ajax-запросы).

После этого сломать, что-то на страничках было крайне сложно — компилятор сразу сообщал об этом. Крайне сложно — не значит нельзя.

Как мы написали автотесты?

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

Мы решили не мелочиться и написать функциональные тесты. Для этого мы использовали Selenium. С его помощью, мы написали несколько сценариев — последовательностей действий, которые выполняет пользователь системы — регистрация в системе, в том числе подтверждение учетной записи по почте (да, даже это мы тестируем автоматически), принятие участия в мероприятии в качестве докладчика, загрузка новой версии доклада и прочее. Для этого мы развернули локальный почтовый сервер hMailServer и, используя его API, наладили автоматическое создание почтовых ящиков для регистрации тестовых пользователей.

Теперь, если программист не уверен, что ничего не "отвалилось" после его вмешательства, запускает тесты и наблюдает, как они выполняются прямо в веб-браузере.