Слайд 1Движение за открытую проектную документацию
Анатолий Шалыто
shalyto@mail.ifmo.ru
Кафедра “Компьютерные технологии”
Санкт-Петербургский государственный университет информационных
технологий, механики и оптики
Слайд 2Foundation for Open Project Documentation
Проектная документация (1)
Слайд 3Foundation for Open Project Documentation
Проектная документация (2)
Управление ответственными объектами
Основная — по
стандартам
Дополнительная — по требованию заказчика
Коммерческие проекты
По требованию заказчика
Проекты с открытым исходным кодом
По желанию разработчика
Слайд 4Foundation for Open Project Documentation
Документация на аппаратуру и документация на ПО
Документация
на аппаратуру
Проектная документация
Основные проектные решения
Результаты приемки
Руководство пользователя
Документация на программное обеспечение
Руководство пользователя (и разработчика)
Исходный код (для проектов с открытым исходным кодом)
Слайд 5Foundation for Open Project Documentation
Открытая и свободная проектная документация
Предлагаемый подход применим
для
Свободного ПО
Коммерческого ПО с открытыми исходными кодами
Что бы быть полезной, проектная документация должна быть открытой (поставляться с продуктом, аналогично open source)
Наилучшим вариантом является свободная открытая документация
Слайд 6Foundation for Open Project Documentation
Открытая проектная документация
Зачем проектная документация?
Улучшение качества продукта
Повышение
качества тестирования
Упрощение модификации
Почему открытая проектная документация?
Понимание проекта
Использование проектных решений из других проектов
Для обучения
Слайд 7Foundation for Open Project Documentation
Документация ПО
Проекты должны быть хорошо документированы, как
в инженерной практике
Код должен основываться на проектной документации, а не наоборот
Документация должна описывать не только конечный продукт, но и процесс его создания
Трудность понятия кода без проектной документации, или по меньшей мере описания основных идей
Слайд 8Foundation for Open Project Documentation
SWITCH-технология – Автоматное программирование
Предложено в 1991г.
Основано на
явном выделении состояний
Проектирование, управляемое моделями
Область использования – сложные системы:
Системное ПО
Прикладное ПО
Реактивные системы
Компиляторы
...
Используется в:
Программируемых логических контроллерах
Микроконтроллерах
Микропроцессорах
Слайд 9Foundation for Open Project Documentation
Разновидности
SWITCH-технологии
Логическое управление
Процедурное программирование с явным выделением состояний
Объектно-ориентированное
программирование с явным выделением состояний
Классические вычислительные алгоритмы
Слайд 10Foundation for Open Project Documentation
Основные понятия SWITCH-технологии
Состояние
Входные переменные + События =
Входные воздействия
Состояния + Входные воздействия = Автоматы без выхода
Автоматы без выхода + Выходные воздействия = Автоматы
Многозначное кодирование состояний
Наблюдаемость по состояниям
Система взаимосвязанных автоматов
Протоколирование
Проектная документация
Слайд 11Foundation for Open Project Documentation
Автоматы в автоматном программировании
Средства спецификации алгоритмов
Изоморфное отображение
на исходный код
Программа работает в терминах автоматов
Слайд 12Foundation for Open Project Documentation
Образовательный эксперимент (1)
Кафедра компьютерных технологий СПбГУ ИТМО
Избранные
студенты со всей России
Медалисты международных олимпиад по информатике
Медалисты чемпионата мира по программированию
Слайд 13Foundation for Open Project Documentation
Образовательный эксперимент (2)
1998-2001 Обычное образование 1
Лекции и
экзамены
2001-2002 Обычное образование 2
Лекции, курсовые работы и экзамены
2002-2003 Экспериментальное обучение
Лекции и проекты
Создание подробной проектной документации
Более 40 полностью выполненных проектов
Эксперимент продолжается
Слайд 14Foundation for Open Project Documentation
Образовательный эксперимент (3)
Состав проекта
Проектная документация (не менее
40 часов)
Описание задачи
Описание интерфейса пользователя
Принятые проектные решения
Описания автоматов и классов
Схемы автоматов и классов
Протоколы проверки
Список литературы
Исходный код (не менее 10 часов)
Преподаватель тратит около 10-15 часов на проект
Слайд 15Foundation for Open Project Documentation
Примеры проектов
Игры
Скелетная анимация
Управляющие системы
Графические интерфейсы пользователя
Параллельные задачи
Транслитерация
Многое
другое
Слайд 16Foundation for Open Project Documentation
Три примера
Моделирование дизель-генератора
Процедурное программирование
Программа для игры RoboCode
Объектно-ориентированное
программирование
Технология разработки визуализаторов
Объектно-ориентированная визуализация вычислительных алгоритмов
Слайд 17Foundation for Open Project Documentation
Дизель-генератор
План выполнения проекта
Анализ
Структурирование (выделение автоматов)
Схема взаимодействия
автоматов
Словесное описание автоматов
Схема связей автомата (интерфейс)
Графы переходов
Изоморфное построение исходного кода
Проверочные протоколы
Слайд 18Foundation for Open Project Documentation
Дизель-генератор
Схема взаимодействия автоматов
Слайд 19Foundation for Open Project Documentation
Дизель-генератор
Схема связей автомата
Слайд 20Foundation for Open Project Documentation
Дизель-генератор
Граф переходов автомата
Слайд 21Foundation for Open Project Documentation
Дизель-генератор
Изоморфный исходный код
void A0(int e, dg_t *dg)
{
int y_old = dg->y0;
switch(dg->y0) {
case 0:
A8(e, dg);
if (x220(dg)) dg->y0 = 4;
else if (dg->y7 == 2) dg->y0 = 7;
else if (dg->y8 == 2) dg->y0 = 1;
break;
case 1:
A4(e, dg); A3(e, dg); A1(e, dg);
if (dg->y4 != 0) dg->y0 = 6;
else if (dg->y7 == 2 || dg->y7 == 4) dg->y0 = 8;
else if (dg->y3 != 0) dg->y0 = 5;
else if (dg->y1 == 0) dg->y0 = 0;
else if (dg->y1 == 3) dg->y0 = 7;
…
Слайд 22Foundation for Open Project Documentation
Дизель-генератор
Проверочные протоколы
Слайд 23Foundation for Open Project Documentation
Программа для игры RoboCode
http://robocode.alphaworks.ibm.com
Лучшие результаты
GlowBlowMelee 1.1
Cigaret 1.20
Cynical
GlowBlow
Cynical_3
Слайд 24Foundation for Open Project Documentation
Программа для игры RoboCode План выполнения проекта
Анализ
Структурирование
(выделение классов)
Диаграмма классов
Автоматная декомпозиция классов
+ все этапы из плана реализации проекта дизель-генератора
Слайд 25Foundation for Open Project Documentation
Программа для игры RoboCode
Диаграмма классов
Слайд 26Foundation for Open Project Documentation
Программа для игры RoboCode
Схема структуры класса
Слайд 27Foundation for Open Project Documentation
RoboCode Agent
Интерфейс автомата
Слайд 28Foundation for Open Project Documentation
RoboCode Agent
Граф переходов
Слайд 29Foundation for Open Project Documentation
Отладка по протоколам
Слайд 30Foundation for Open Project Documentation
Технология разработки визуализаторов
Алгоритм
Малхотры,
Кумара-
Махешвари
поиска
максимального
потока
Слайд 31Foundation for Open Project Documentation
Технология разработки визуализаторов
Структура визуализатора
Модель
Система взаимосвязанных автоматов, сгенерированная
по XML-описанию
Вид
Интерфейс пользователя, основанный на библиотеке Vizi
Контроллер
Библиотека Vizi
Слайд 32Foundation for Open Project Documentation
Технология разработки визуализаторов
Проектная документация (1)
Аннотация
Введение
Глава1. Анализ
литературы
Глава 2. Описание алгоритма
Глава 3. Реализация алгоритма
Глава 4. Описание модели данных
Глава 5. Преобразование реализации
Глава 6. Описание интерфейса
Слайд 33Foundation for Open Project Documentation
Технология разработки визуализаторов
Проектная документация (2)
Глава 7.
Описание конфигурации
Заключение
Список литературы
Приложения
Реализация алгоритма
Преобразованная реализация
XML-описание визуализатора
Сгенерированные исходные коды
Код интерфейса пользователя
Слайд 34Foundation for Open Project Documentation
Визуализированные алгоритмы
Алгоритм Малхотры — Кумара-Махишвари
Алгоритм Диница
Алгоритм Хопкрофта-Крапа
Минимальное
дерево путей
Алгоритмы на 2-3 деревьев
Битоническая задача коммивояжера
Алгоритм Укконена
Алгоритм Прима
Алгоритм построения простых строк и циклов де Брюина
Слайд 35Foundation for Open Project Documentation
Ссылки
Примеры проектов
http://is.ifmo.ru/?i0=projects – Проектная документация
http://is.ifmo.ru/?i0=works – Статьи
http://unimod.sourceforge.net/
– Проект UniMod
(на английском)