Программная инженерия
Задание на курсовой проект
1 Система оценки курсового проекта
Задание на курсовой проект делится на 2 части: базовую, выполнение которой необходимо
для получения удовлетворительной оценки и дополнительную. Задания из дополнительной части оцениваются в баллах в зависимости от сложности. Для получения оценки ”хорошо” нужно
набрать 3 балла, для оценки ”отлично” - 5 баллов.
Все отклонения от требований, оговоренных в задании, необходимо заранее согласовать с преподавателем.
2 Базовая часть Цель курсового проекта - создание интернет-дневника (блога). Блог представляет собой вебсайт, основным содержимым которого являются записи (посты), добавляемые автором дневника.
2.1 Веб-интерфейс В рамках курсовой работы нужно создать как минимум два шаблона веб-интерфейса: шаблон списка записей блога и шаблон просмотра конкретного поста с комментариями. При вёрстке необходимо использовать таблицы стилей (CSS). Оформление шаблонов произвольное.
Динамические элементы в шаблоны необходимо интегрировать с помощью одного из трёх (на выбор) шаблонизаторов: HTML::Template, Template::Toolkit, HTML::Mason.
Интерфейс должен корректно отображаться в современных браузерах: IE (версия 8 и выше), Firefox, Chrome, Safari.
2.2 База данных В качестве системы управления базами данных нужно использовать СУБД MySQL, а для доступа к СУБД из приложения - perl-модуль DBI.
Базовая схема таблиц должна быть ориентирована на хранение следующей информации:
1. Записей дневника. Запись должна иметь как минимум следующие атрибуты: заголовок поста, содержимое поста, дата добавления поста.
2. Комментариев к записям. Комментарий должен иметь как минимум следующие атрибуты:
автор комментария, содержимое комментария, дата добавления комментария.
Каждый комментарий должен быть привязан к определенной записи (одной).
2.3 Логика Логика веб-приложения должна быть реализована на языке Perl 5 и корректно работать на последней стабильной версии интерпретатора.
Требования к функциональности пользовательской части 1. Записи блога должны выводиться отсортированными в обратном хронологическом порядке.
Т.е. первыми идут самые новые записи.
2. На одной странице должно выводиться определенное количество записей (на усмотрение студента), но не более 20.
3. Должна быть реализована навигация по страницам, либо ссылки ”Предыдущие xx записей” и ”Следующие xx записей”, где xx - количество постов, выводимых на странице.
4. Посетители сайта должны иметь возможность добавлять комментарии к записям (без регистрации). Требования к обработке данных, введенных пользователями, описаны ниже.
Добавление комментариев Комментарии должны добавляться посредством отправки на сервер HTML-формы. Для отправки нужно использовать HTTP-метод POST. Форма должна содержать как минимум 2 поля: имя автора и содержимое комментария. Содержимое комментария является обязательным для заполнения. В случае, если пользователь попытается отправить форму, не заполнив обязательные поля, необходимо перенаправить пользователя на ту же страницу и отобразить ошибку. В случае успеха - просто перенаправить пользователя на ту же страницу.
Если введенные пользователем данные содержат html-теги, необходимо вырезать их при сохранении, либо применить HTML-эскейпинг.
Требования к функциональности административной части Административная часть сайта предназначена для автора блога и должна быть доступна только после авторизации по логину и паролю. В административной части должно быть реализовано добавление записей в блог, редактирование записей и удаление комментариев.
3 Дополнительная часть 3.1 Двухступенчатая публикация записей (1 балл) Необходимо сделать так, чтобы посетителям блога были видны только те записи, которые были явно опубликованы администратором. При добавлении записи через административную часть или при редактировании должна быть возможность опубликовать или скрыть запись.
3.2 Тегирование записей (3 балла) Необходимо реализовать возможность добавлять теги к записям. Каждый тег соответствует какой-либо тематике, которую затрагивает запись. Каждая запись может иметь множество тегов.
Каждый тег может быть присвоен множеству записей. Теги должны выводиться под каждой записью и представлять собой гиперссылки. При нажатии на гиперссылку тега должны выводиться только записи, которым присвоен в числе прочих этот тег.
Все теги должны выводиться справа или слева от списка постов. В административной части нужно реализовать добавление новых тегов и удаление, а также возможность присвоения тегов записям. При удалении тега он удаляется из всех записей с этим тегом. Сами записи не удаляются.
3.3 RSS-лента (4 балла) Выводить список записей блога в виде RSS-ленты. На главной странице блога должна быть ссылка, ведущая на RSS-ленту. Реализовать экспорт записей блога в RSS необходимо без использования сторонних модулей (можно использовать только встроенные средства Perl и шаблонизатор).
3.4 Защита от флуда (5 баллов) Реализовать механизм, который бы препятствовал добавлению множества комментариев одним и тем же пользователем за короткий промежуток времени. Необходимо установить лимит комментариев одного и того же пользователя за определенный период времени. Лимит и период должны настраиваться с помощью конфигурационного файла. Нужно помнить, что на сайте могут оставлять комментарии пользователи без регистрации.
3.5 Премодерация комментариев (2 балла) Все комментарии, которые содержат гиперссылки, не должны быть сразу после добавления видны посетителям. Такие комментарии должны отображаться в административной части и публиковаться только после одобрения администратором.
3.6 Последние комментарии (1 балл) Выводить сбоку от списка записей блок "Последние комментарии". Количество отображаемых комментариев должно настраиваться с помощью конфигурационного файла.
3.7 Самые популярные записи (3 балла) Выводить сбоку от списка записей блок "Самые популярные записи". Популярность измерять количеством просмотров записи и количеством комментариев к ней. Формула расчета популярности по этим двум критериям задаётся студентом.
3.8 Интеграция с социальными сетями (2 балла) Поместить кнопки "Нравится"как минимум 2-х (любых) соцсетей под каждой записью.
4 Размещение веб-приложения Веб-приложение должно быть развёрнуто и корректно работать на сервере mai-webdev.ru.
Если вы разрабатываете курсовой проект на своём компьютере, то итоговый результат всё равно должен быть развёрнут на mai-webdev.ru. Поэтому, если вы планируете использовать при написании кода какие-то сторонние модули Perl, не упомянутые в задании на курсовой проект, необходимо проверять их наличие на mai-webdev.ru.
5 Оформление и содержание пояснительной записки Пояснительная записка представляет собой описание того, что вы реализовали в своём курсовом проекте. В пояснительной записке должны содержаться сведения о файловой структуре вашего проекта, структуре базы данных и описание основных проектных решений, которые вы применяли, трудностей, с которыми столкнулись при выполнении курсового проекта и другие сведения, относящиеся к выполнению курсового проекта (на ваше усмотрение).
Структура и объем записки не регламентируются. Записка сдаётся в электронном виде как минимум за неделю до защиты.
Требования к оформлению ФОРМАТ. Пояснительная записка может быть представлена в форматах pdf, odt, doc или docx.
ШРИФТ. Основной текст записки должен быть набран шрифтом Times New Roman или любым подобным шрифтом с засечками. Цитаты из кода должны быть набраны любым моноширинным шрифтом. Размер шрифта: 12 и выше.