Спиральная модель жизненного цикла интеллектуальной системы

Рассмотрение особенностей спиральной модели жизненного цикла интеллектуальной системы. Характеристика её преимуществ и недостатков. Жизненный цикл программного обеспечения по методологии RAD. Исследование основных аспектов языка программирования Python.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 23.04.2015
Размер файла 215,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

1. Спиральная модель жизненного цикла ИС

Спиральная модель, предложенная Барри Боэмом в 1986 году, стала существенным прорывом в понимании природы разработки ПО. Она представляет собой процесс разработки программного обеспечения, сочетающий в себе как проектирование, так и постадийное прототипирование с целью сочетания преимуществ восходящей и нисходящей концепции, делающая упор на начальные этапы жизненного цикла: анализ и проектирование. Отличительной особенностью этой модели является специальное внимание рискам, влияющим на организацию жизненного цикла.

Каждый виток спирали соответствует созданию фрагмента или версии программного обеспечения, на нем уточняются цели и характеристики проекта, определяется его качество и планируются работы следующего витка спирали. Таким образом углубляются и последовательно конкретизируются детали проекта и в результате выбирается обоснованный вариант, который доводится до реализации. Каждый виток разбит на 4 сектора:

оценка и разрешение рисков,

определение целей,

разработка и тестирование,

планирование.

На каждом витке спирали могут применяться разные модели процесса разработки ПО. В конечном итоге на выходе получается готовый продукт. Модель сочетает в себе возможности модели прототипирования и водопадной модели. Разработка итерациями отражает объективно существующий спиральный цикл создания системы. Неполное завершение работ на каждом этапе позволяет переходить на следующий этап, не дожидаясь полного завершения работы на текущем. При итеративном способе разработки недостающую работу можно будет выполнить на следующей итерации. Главная задача -- как можно быстрее показать пользователям системы работоспособный продукт, тем самым активизируя процесс уточнения и дополнения требований. Основная проблема спирального цикла -- определение момента перехода на следующий этап. Для ее решения необходимо ввести временные ограничения на каждый из этапов жизненного цикла. Переход осуществляется в соответствии с планом, даже если не вся запланированная работа закончена. План составляется на основе статистических данных, полученных в предыдущих проектах, и личного опыта разработчиков. Одним из возможных подходов к разработке программного обеспечения в рамках спиральной модели жизненного цикла является получившая в последнее время широкое распространение методология быстрой разработки приложений RAD (Rapid Application Development).

Жизненный цикл программного обеспечения по методологии RAD состоит из четырёх фаз:

фаза определения требований и анализа;

фаза проектирования;

фаза реализации;

фаза внедрения.

Достоинства модели:

позволяет быстрее показать пользователям системы работоспособный продукт;

допускает изменение требований при разработке информационной системы;

обеспечивает большую гибкость в управлении проектом;

позволяет получить более надежную и устойчивую систему. По мере развития системы ошибки и слабые места обнаруживаются и исправляются на каждой итерации;

позволяет совершенствовать процесс разработки - анализ, проводимый в каждой итерации, позволяет проводить оценку того, что должно быть изменено в организации разработки, и улучшить ее на следующей итерации;

уменьшаются риски заказчика. Заказчик может с минимальными для себя финансовыми потерями завершить развитие неперспективного проекта.

Недостатки модели:

увеличивается неопределенность у разработчика в перспективах развития проекта. Этот недостаток вытекает из предыдущего достоинства модели;

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

интеллектуальный программный программирование

2. Определение требований

Место действия игры - вселенная - размеченная на клетки поверхность или плоскость - безграничная, ограниченная, или замкнутая (в пределе - бесконечная плоскость). Каждая клетка на этой поверхности может находиться в двух состояниях: быть живой или быть мёртвой (пустой). Клетка имеет восемь соседей (окружающих клеток). Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:

в мёртвой клетке, рядом с которой ровно три живые клетки, зарождается жизнь;

если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить;

если соседей меньше двух или больше трёх, клетка умирает «от одиночества» или «от перенаселённости».

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

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

Основные требования к игре:

Реализовать простейший алгоритм, выполняющий правила игры «Жизнь» - клеточного автомата, изобретенного английским математиком Джоном Конвеем.

Создать поле, которое будет ограниченно параметрами (x и y) задающимися игроком.

Разработать программу, выполняющую действия по созданному алгоритму. Игроку должна предоставляться возможность самостоятельно определить первое поколение. Также должна присутствовать возможность автоматической генерации первого поколения.

3. Проектирование

Разработка модели велась на языке программирования Python.

Python - интерпретируемый объектно-ориентированный язык программирования высокого уровня с динамической типизацией, автоматическим управлением памятью и удобными высокоуровневыми структурами данных, такими как словари (хэш-таблицы), списки, кортежи. Поддерживает классы, модули (которые могут быть объединены в пакеты), обработку исключений, а также многопоточные вычисления. Питон обладает простым и выразительным синтаксисом. Язык поддерживает несколько парадигм программирования: структурное, объектно-ориентированное, функциональное и аспектно-ориентированное.

Объектно-ориентированное программирование на Python.

Дизайн языка Python построен вокруг объектно-ориентированной модели программирования. Реализация ООП в Python является элегантной, мощной и хорошо продуманной, но вместе с тем достаточно специфической по сравнению с другими объектно-ориентированными языками.

Возможности и особенности:

Классы являются одновременно объектами со всеми ниже приведёнными возможностями.

Наследование, в том числе множественное.

Инкапсуляция (два уровня -- общедоступные и скрытые методы и поля).

Специальные методы, управляющие жизненным циклом объекта: конструкторы, деструкторы, распределители памяти.

Перегрузка операторов (всех, кроме is, '.', '=' и символьных логических).

Свойства (имитация поля с помощью функций).

Управление доступом к полям (эмуляция полей и методов, частичный доступ, и т. п.).

Методы для управления наиболее распространёнными операциями (истинностное значение, len(), глубокое копирование, сериализация, итерация по объекту, …)

Классовые и статические методы, классовые поля.

Классы, вложенные в функции и классы.

4. Реализация

Глобальные переменные и константы:

field_width, field_height - Размеры поля при запуске игры

cell_size - Размер ячейки в пикселях

timer_interval - Скорость обновления поля

Основные функции:

draw_a(e) - Функция, позволяющая пользователю задать первое поколение нажатиями левой кнопки мыши

draw_b(e) - Функция, удаляющая живую клетку с поля нажатием правой кнопки мыши

refresh() - В этой функции расчитывается количество соседей и формируются тэги для нового состояния клеток

repaint() - Актуализируется новое состояние клеток и производится проверка на завершение работы

resize() - Создание, инициализация и соответствующее изменение размеров поля

planer() - Создание фигуры "Planer" на поле

spaceship() - Создание фигуры "Spaceship" на поле

weekend() - Создание фигуры "Weekend" на поле

randomize() - В этой функции происходит автоматическая генерация первого поколения с использованием ГПСЧ

warning(ttl, msg) - В этой процедуре создается и выводится псевдомодальное окно с сообщением

В ходе разработки модели «Жизнь» было разработано 4 версии игры:

Версия 1.0

На этом витке жизненного цикла мы разработали основной функционал программы, которая должна выполнять алгоритм игры «Жизнь». В этой версии вселенная - ограниченное поле x y, x и y задаются игроком в командной строке программы во время начала.

После этого пользователю открывается окно программы, на котором изображена вселенная, разбитая на клетки. У пользователя есть возможность самому создать первое поколение: при клике на клетку поля, эта клетка становится «живой».

Обновление поля происходит при нажатии на кнопку «Evolution!», которая вызывает функцию, реализующую правила игры.

Также пользователь может очистить поле от фигур нажатием на кнопку «Clear».

Запуск программы

Главное окно программы. Количество клеток задается пользователем при запуске программы. «Evolution!» - обновляет поле на один шаг, «Clear» - очищает поле.

Версия 2.0

Оценка и разрешение рисков.

Версия программы 1.0 имела ряд недостатков: ввод размеров поля производился с командной строки, обновление поле происходило пошагово при многократном нажатии на кнопку; можно самому создавать «живые» клетки, но нельзя их выборочно стирать с поля. И самым главным недостатком было отсутствие уведомления о завершении игры, если на поле не осталось ни одной живой клетки, если при очередном шаге ни одна из клеток не меняет своего состояния (складывается стабильная конфигурация) или если конфигурация на очередном шаге в точности (без сдвигов и поворотов) повторит себя же на одном из более ранних шагов (складывается периодическая конфигурация).

Определение целей.

Реализовать следующие функции: ввод размеров поля непосредственно на рабочем окне программы, обновление поля сделать циклическим, отслеживать завершение.

Реализация.

Вторая версия программы представляет собой исправленную и дополненную версию первой программы. В ней мы реализовали следующие функции: ввод размеров поля непосредственно на рабочем окне программы; теперь вселенная замкнута в тор, а не ограничена; помимо пошагового обновления поля, добавили кнопку циклического обновления, которое останавливается нажатием кнопки «Stop». Также мы дополнили некоторые детали реализации, например правая кнопка мыши теперь стирает «живую» клетку с поля. Для отслеживания завершения в общих чертах сделано следующее:

1) Состояния клетки отслеживаются числовыми тегами 1 и 0. Само состояние клетки хранится в младшем бите (tag & 1), а остальные биты представляют собой ранее существовавшие состояния данной клетки на 31 шаг назад, полученные сдвигом этого бита.

2) На этапе перехода от старого состояния поля к новому формируется маска, из 31 разряда нулей или единиц, соответственно новому состоянию клетки. Эта маска накладывается на старый тег при помощи операции xor (^) и получается 31 бит, каждый из которых установлен в 1 при отличии нового состояния данной клетки от предыдущего на одном из 31 предыдущих шагов.

3) Одновременно формируется и записывается новый тег путём сдвига на 1 влево и прибавлением бита нового состояния. Перед сдвигом старое состояние обрезается до 30 разрядов, чтобы не произошло переполнения типа int.

4) Биты различия суммируются по всему полю при помощи операции or (|). В результате получается 31 бит, которые описывают повторяемость позиции. Наличие нуля в каком-либо из этих бит свидетельствует о повторении позиции на каком-либо шаге.

5) Для удобства отслеживания инвертируем суммарные биты (^ 0x7fffffff), теперь о повторе говорит ненулевое состояние бит.

6) Если повтор обнаружен, то последовательным циклическим сдвигом определяем номер первого ненулевого бита, чтобы определить длину цикла. Цикл длины 1 определяется как статическое состояние.

7) Отдельно отслеживается пустота поля - простым взводом флажка на любую живую клетку.

Рабочее окно второй версии программы. При запуске формируется поле размером 15*15 клеток. Далее количество клеток можно изменить на форме «Field size». One step - обновление поля на 1 шаг, Start - циклическое обновление поля, Stop (заменяет Start во время цикла) останавливает цикл обновления поля.

Версия 2.1

Оценка и разрешение рисков.

В предыдущей версии игра имела маленькую скорость прохождения цикла и большой размер клетки.

Определение целей.

Добавления Функционала, а именно возможность создавать на поле готовые объекты: «планер», «космический корабль», «рак». Улучшить интерфейс игры.

Реализация.

Увеличили скорость прохождения цикла и уменьшили размер клетки.

При запуске формируется поле размером 30*30, вследствие уменьшения размера клеток.

Объект «Planer»

Объект «Spaceship»

Объект «Weekend»

Версия 2.2

Оценка и разрешение рисков.

Версия 2.1 не удовлетворяла основным требованиям игры, а именно автоматической генерации первого поколения.

Определение целей.

Программное обеспечение должно соответствовать всем установленным требованиям и быть удобным в использовании

Реализация.

Создали кнопку генерации первого поколения.

Код автоматической генерации первого поколения с использованием ГПСЧ

#------------------------------------------------------------------------------

def randomize():

clear()

w = random.randint(2,6)

h = random.randint(3,5)

xc = random.randint(1,30)

xc2 = random.randint(1,20)

xc3 = random.randint(1,10)

l = random.randint(1,4)

for i in xrange(w):

for j in xrange(h):

canvas.itemconfig(cell_matrix[addr(xc+i, xc+j)], state=NORMAL, tags=(1, '0'))

for q in xrange(w):

for z in xrange(h):

canvas.itemconfig(cell_matrix[addr(xc2+q, xc2+z)], state=NORMAL, tags=(1, '0'))

for t in xrange(w):

for g in xrange(h):

canvas.itemconfig(cell_matrix[addr(xc3+t, xc3+g)], state=NORMAL, tags=(1, '0'))

5. Внедрение

В ходе данной практической работы нами было разработано программное обеспечение, реализующее алгоритм игры «Жизнь». Была использована спиральная модель жизненного цикла, а также подход методологии RAD, вследствие чего были реализованы 3 прототипа и финальная версия программы, которая является законченным изделием и готова к передаче пользователю.

Размещено на Allbest.ru


Подобные документы

  • Требования к технологии проектирования программного обеспечения (ПО). Состав и описание стадий полного жизненного цикла ПО. Классификация моделей жизненного цикла ПО, их особенности. Методологии разработки ПО, приёмы экстремальный программирование.

    презентация [874,4 K], добавлен 19.09.2016

  • Общая характеристика основных моделей жизненного цикла: каскадная, инкрементная, спиральная. Стадия как часть процесса создания программного обеспечения, ограниченная определенными временными рамками и заканчивающаяся выпуском конкретного продукта.

    презентация [159,1 K], добавлен 27.12.2013

  • Особенности основных, вспомогательных и организационных процессов жизненного цикла автоматизированных информационных систем. Основные методологии проектирования АИС на основе CASE-технологий. Определение модели жизненного цикла программного продукта.

    курсовая работа [1,8 M], добавлен 20.11.2010

  • Стадии жизненного цикла ИС и его стандарты. Методологии, поддерживающие спиральную модель. Каскадная и инкрементная модели, их достоинства и недостатки. Основные, вспомогательные и организационные процессы жизненного цикла. Сравнительный анализ моделей.

    курсовая работа [186,4 K], добавлен 21.05.2015

  • Процессы Oracle CDM. Стадии и этапы выполнения работ по созданию автоматизированной системы (АС). Основные модели жизненного цикла ПО. Требования к содержанию документов. Основная проблема спирального цикла. Работы, выполняемые при разработке проекта.

    презентация [194,1 K], добавлен 14.10.2013

  • Понятие технологии разработки программы. Основа проектирования программного обеспечения. Модели жизненного цикла, возникшие исторически в ходе развития теории проектирования программного обеспечения. Спиральная (spiral), каскадная и итерационная модели.

    презентация [1,0 M], добавлен 11.05.2015

  • Понятие и этапы жизненного цикла программного обеспечения как некоторых событий, которые происходят с системой компьютера в процессе ее создания, внедрения и сопровождения. Модели данного процесса: каскадная, спиральная, их отличительные особенности.

    доклад [33,5 K], добавлен 06.04.2015

  • Исследование основных стадий жизненного цикла информационной системы. Планирование, анализ требований и проектирование информационной системы. Стандарты и типы моделей жизненного цикла. Верификация и модернизация системы, полное изъятие из эксплуатации.

    презентация [1,6 M], добавлен 12.02.2017

  • Жизненный цикл автоматизированных информационных систем. Основы методологии проектирования автоматизированных систем на основе CASE-технологий. Фаза анализа и планирования, построения и внедрения автоматизированной системы. Каскадная и спиральная модель.

    курсовая работа [1,1 M], добавлен 20.11.2010

  • Основы методологии проектирования информационных систем, понятие их жизненного цикла. Основные модели жизненного цикла. Методология функционального моделирования SADT. Состав функциональной модели. Моделирование данных, характеристика case-средств.

    реферат [327,5 K], добавлен 28.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.