| Балл | |
| Л.р.1. Бизнес-анализ предметной области, разработка видения. Моделирование предметной области. Системная аналитика | 15 |
| Л.р.2. Разработка модели прецедентов | 5 |
| Л.р.3. Разработка требований | 10 |
| Л.р.4. Разработка прототипа графического интерфейса | 10 |
| РГР. Шаблоны проектирования | 20 |
Цикл лабораторных работ по обзорному курсу «Программная инженерия» включает в себя моделирование различных дисциплин и деятельностей в процессе проектирования программной системы по заданному варианту. Для результатов очередной лабораторной работы должна быть проведена валидация (тестирование) на предмет соответствия результатам предыдущих.
Варианты заданий
Лабораторная работа 1. Бизнес-анализ предметной области, разработка видения. Моделирование предметной области. Системная аналитика. Для выбранного варианта разработать документы фазы исследования проекта. Содержание документа «Видение проекта»:
· глоссарий для значимых элементов предметной области;
· бизнес-требования;
· границы проекта;
· перечень заинтересованных лиц, пользователей проекта и приложений;
· словесное описание бизнес-процессов предметной области;
· формальное описание отдельного бизнес-процесса в виде диаграммы потоков данных, диаграммы деятельности или средствами ;
· диаграмма классов предметной области
· диаграммы состояний для сущностей, имеющих «историю» в системе
Лабораторная работа 2. Разработка модели прецедентов. Разработать полную модель прецедентов, кратко описать роли и содержание прецедентов, расписать сценарии 2-3 наиболее значимых прецедентов, основываясь на модели предметной области.
Лабораторная работа 3. Разработка требований. Определить полный перечень функциональных и нефункциональных требований к системе. На его основе разработать документ «Спецификация требований к ПО».
Лабораторная работа 4. Разработка прототипа графического интерфейса. Для всех приложений с учетом их функционала и имеющихся прецедентов разработать систему окон графического интерфейса пользователя (GUI), диаграмму оконных классов или граф связей. Обосновать принятые решения требованиями из «Спецификации требований к ПО». Дополнить спецификацию с учетом выполненного проектирования.
Для выбранного варианта разработать следующие документы фазы исследования проекта (тех. процессы моделирования предметной области, разработки требований, проектирования):
РГР выполняется индивидуально в виде разработки одного из шаблонов проектирования. Пояснительная записка должна содержать:
Все сторонние материалы должны быть снабжены корректно оформленными библиографическими ссылками.
Варианты заданий
Разработка классов, использующих внутренние потоки для промежуточной буферизации данных. Для моделирования прикладных процессов использовать потоки, которые засыпают на случайный момент времени, после чего читают/записывают очередную порцию данных постоянного или случайного размера. Предусмотреть сбор статистики в классах буферизации – средний объем данных в буфере.
13.Класс буферизованного ввода в реальном времени. При конструировании получает параметр – физический поток данных с интерфейсом InputStream. Использует внутренний циклический буфер или односвязный список блоков, содержащих массив байтов фиксированной размерности (буферный пул). Создает поток, который читает байты из входного потока и записывает в циклический буфер. При заполнении циклического буфера засыпает. Метод чтения извлекает из циклического буфера очередной байт, возвращает -1 при окончании данных в потоке-источнике, блокируется при отсутствии данных в циклическом буфере.
14. Класс – PipedStream с циклическим буфером данных. Класс PipedOutputStream имеет циклический буфер, в который пишет поток байтов, блокируя текущий поток при заполнении буфера. Класс PipeInputStream получает ссылку на PipedOutputStream и при чтении данных либо блокируется при их отсутствии, либо извлекает данные, деблокируя поток записи. Смоделировать в потоках последовательности записи/чтения со случайным интервалом (заданный закон распределения, среднее/дисперсия) и провести сравнительную оценку доли времени блокировки в зависимости от размера циклического буфера и параметров входного и выходного потоков случайных последовательностей данных.
15. Класс отложенной записи. При открытии файла классом с присоединенным интерфейсом OutputStream создается ByteOutputStream, в который пишутся данные потока. При закрытии объект, содержащий имя файл и байтный массив ставится в очередь, из которой фоновый поток их извлекает и пишет файлы. Сравнить среднее время записи в обычный и отложенный файл.
16. Класс отложенной записи с двойной буферизацией. При открытии файла классом с присоединенным интерфейсом OutputStream создается объект с двумя байтными массивами, в первый пишутся данные потока, содержимого второго выводится в файл одной операцией. При заполнении первого массива и завершении вывода второго они меняются местами. Сравнить среднее время записи в обычный и буферизованный файл.
17. Шаблон Two-phase Termination. Класс-поток при запуске выполняет цикл с рандомной задержкой 2-10 сек. При старте получает CallBack для для уведомления о собственном завершении. Имеется метод shutDown инициализации процесса завершения. Основной поток запускает N указанных потоков, ждет 20 сек и вызывает для всех метод shutDown. Через CallBack дожидается, когда все завершатся. Устанавливает таймер, если по истечении тайм-аута потоки не уведомляют о завершении, «убивает» их.
18. Шаблон Scheduler с блокировкой потоков до окончания запланированного действия. Имеет собственный поток и ArrayList запросов (объектов с присоединенным Runnable). Метод runMeInQueue получает этот объект, пробуждает поток планировщика, помещает объект в ArrayList и блокирует поток, (wait на объекте выполнения). Цикл потока планировщика удаляет объект из ArrayList, выполняет в нем run и пробуждает спящий на нем поток. При пустом ArrayList засыпает. Создать 10 потоков с обращением к планировщику и засыпанием на 2 сек в передаваемом коде. Убедиться в том, что запланированные действия выполняются последовательно, а потоки ожидают их окончания.
19. Шаблон Read/Write Lock. Объект блокировки имеет 4 метода: readLock, readUnlock, writeLock и writeUnlock. Имеет два ArrayList объектов блокировки, которые создает для потоков, выполняющих указанные методы (ожидающих разрешения для чтения и для записи, а также счетчик количества потоков, выполняющих чтение и индикатор выполнения записи. Логика выполнения writeLock (для примера):
20. Шаблон State. Получает строку и выделяет в ней идентификаторы, константы и остальные символы, пропускает пробелы (пример: AAA78+666/fff). Необходимо «возвращать в поток» один символ по окончании распознавания идентификатора или константы.
Приведенный перечень документов отражает разнообразие форм и подходов в разработке документов проектирования. В первую очередь следует обращать внимание на его назначение в конкретной структуре процесса разработки ПО:
Проведение коллективной разработки простого проекта до реально действующего прототипа. Основное требование к тематике: проект должен разбиваться на достаточно автономные модули примерно по числу бригад, иначе при нулевом опыте коллективной разработки он завязнет в согласованиях. Желательно также, чтобы было ограничено число вариантов взаимодействия таких частей, например, по линейной схеме. Выполняется бригадами по два человека (парное программирование). Бригада выполняет функциональную единицу разработки. Ведется метрика проекта: содержание работ, трудозатраты, результат. Проект размещается в системе контроля версий.