- Описание потребностей и их анализ
- Дизайн программного продукта
- Разработка
- Проверка
- Выпуск и внедрение продукта
- Обслуживание продукта
- Основная суть модели Waterfall в том, что этапы зависят друг от друга и следующий начинается, когда закончен предыдущий, образуя таким образом поступательное (каскадное) движение вперед.

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

- Все этапы жизненного цикла при спиральной модели идут витками, на каждом из которых происходят проектирование, кодирование, дизайн, тестирование и т. д. Такой процесс отображает суть названия: поднимаясь, проходится один виток (цикл) спирали для достижения конечного результата. Причем не обязательно, что один и тот же набор процессов будет повторятся от витка к витку. Но результаты каждого из витков ведут к главной цели.

набор принципов гибкой разработки (всего их 12) и идей. Основные идеи Agile:
- люди и взаимодействие важнее процессов и инструментов;
- работающий продукт важнее исчерпывающей документации;
- сотрудничество с заказчиком важнее согласования условий контракта;
- готовность к изменениям важнее следования первоначальному плану.

Плюсы и минусы Моделей жизненного циклов ПО
Минусы Waterfall
- Продукт реализуется не гибким, потому что все требования были зафиксированы на старте работ.
- Заказчик не может вклиниться в какой-либо этап работ и, например, дать правки по дизайну.
- Пощупать продукт можно только после релиза, которого приходится ждать месяцами. А промежуточного варианта нет.
- Команда тестирования приступает к работе только на последнем этапе, а здесь может всплыть много багов и критических ошибок. А из-за правок релиз может сдвинуться.
Плюсы Waterfall
- Работа ограничена сроками и команда всегда знает про четкий дедлайн.
- Команда понимает, что в процессе разработки требования меняться не будут.
- Команда может планировать работу на длительный период сразу на старте проекта.
- У команды есть детальная документация, по которой двигается весь проект.
- Главная задача команды — реализовать проект, уложившись в сроки и бюджет.
Минусы итерационной модели
- целостное понимание возможностей и ограничений проекта очень долгое время отсутствует.
- при итерациях приходится отбрасывать часть сделанной ранее работы.
- добросовестность специалистов при выполнении работ всё же снижается, что психологически объяснимо, ведь над ними постоянно довлеет ощущение, что «всё равно всё можно будет переделать и улучшить позже»
Плюсы итерационной модели
- снижение воздействия серьёзных рисков на ранних стадиях проекта, что ведет к минимизации затрат на их устранение;
- организация эффективной обратной связи проектной команды с потребителем, а также заказчиками, и создание продукта, реально отвечающего его потребностям;
- акцент усилий на наиболее важные и критичные направления проекта;
- непрерывное итеративное тестирование, позволяющее оценить успешность всего проекта в целом;
- раннее обнаружение конфликтов между требованиями, моделями и реализацией проекта;
Минусы спиральной модели
- высокая стоимость модели за счет стоимости и дополнительных временных затрат на планирование, определение целей, выполнение анализа рисков и прототипирование при прохождении каждого цикла спирали;
- неоправданно высокая стоимость модели для проектов, имеющих низкую степень риска или небольшие размеры;
- усложненность структуры модели, что приводит к сложности ее использования разработчиками, менеджерами и заказчиками;
- необходимость в высокопрофессиональных знаниях для оценки рисков;
- возможность отдаления окончания работы над проектом в связи с желанием заказчика улучшать каждую созданную версию;
Плюсы спиральной модели
- наличие действий по анализу рисков, что обеспечивает их сокращение и заблаговременное определение непреодолимых рисков;
- обеспечение разбиения большого потенциального объема работ по выполнению проекта на небольшие части;
- первоочередность реализации решающих функций с высокой степенью риска, что позволяет при необходимости остановить работы над проектом на ранних циклах модели и уменьшить расходы;
- возможность гибкого проектирования, основанная на преимуществах каскадной модели при одновременном разрешении итераций;
- реализация преимуществ инкрементной модели (выпуск инкрементов, сокращение графика работ, неизменяемость ресурсов при постепенном росте системы);
Минусы инкрментной модели
- Прогресс не очень хорошо прослеживаемый — менеджеры должны постоянно измерять прогресс процесса. В случае быстрой разработки не стоит создавать документы для каждого маленького изменения версии.
- Структура системы имеет тенденцию к ухудшению при добавлении новых компонентов (частей) — постоянные изменения нарушают структуру системы. Чтобы избежать этого и повысить качество программного обеспечения требуется дополнительное время и деньги на рефакторинг. Плохая структура делает программное обеспечение сложным и дорогостоящим для последующих изменений.
Плюсы инкрементной модели
- Затраты, которые получаются в связи с изменением требований пользователей, уменьшаются, повторный анализ и совокупность документации значительно сокращаются по сравнению с водопадной (каскадной) моделью.
- Легче получить отзывы от клиента о проделанной работе — клиенты могут озвучить свои комментарии в отношении готовых частей и тоже могут видеть, как много сделано. Таким образом, первые части системы являются как бы прототипом всей системы в целом.
- У клиента имеется возможность быстро получить и освоить созданное программное обеспечение — клиенты могут получить реальные преимущества от системы раньше, чем это было бы возможно с водопадной моделью.
Минусы Agile
- Команда понимает, что нужно ежедневно работать над проектом в связке с заказчиком — на каждом этапе будут новые согласования и обсуждения.
- Команда готова к тому, что вводные или требования могут измениться на любом этапе проекта.
- Команда осознает, что каждый новый релиз не должен негативно влиять на предыдущий, а функционал будет постоянно работать.
- Команда постоянно совершенствует проект: его кодовую базу, дизайн-систему, саму методологию.
- Команда самоорганизована и каждый может принимать решения по продукту.
Плюсы Agile
- Решения обычно принимают самые активные участники команды — большинство людей по складу исполнители и не готовы нести ответственность.
- Команда постоянно думает о двух- или трехнедельных итерациях и спешит. Не всегда есть время, чтобы хорошо проработать решение и реализовать.
- Из-за работы в формате спринтов иногда страдает качество: кодовая база неидеальна, то же касается дизайн-работ и некоторых креативных решений. Менеджеру нужно закладывать время на доделывание.
- При запуске проекта практически невозможно рассчитать, сколько денег в итоге будет потрачено — требования могут постоянно меняться.
- Постоянные правки могут влиять и на конечное качество продукта. Разработка может не закончиться никогда и продукт всегда будет недоделанным.
(здесь перечислены не все плюсы и минусы)
Императивное программирование
это парадигма, основанная на составлении алгоритма действий (инструкций/команд), которые изменяют состояние (информацию/данные/память) программы. Первыми языками программирования, основанными на таком подходе, были машинные коды и ассемблеры.
Фактически, программа на этих языках — это код, который выполняется компьютером сразу, без предварительной компиляции.
Декларативное программирование
это парадигма программирования, в которой задаётся спецификация решения задачи: описывается, что представляет собой проблема и ожидаемый результат, но без описания способа достижения этого результата
При создании HTML мы с помощью тегов описываем, какую хотим получить страничку в браузере, а не то, как нарисовать на экране заголовок статьи, оглавление и текст.
В SQL, если нам нужно посчитать количество сотрудников с фамилией «Сидоров», мы напишем SELECT count(*) FROM employee WHERE last_name = ‘Сидоров’;.
Структурное программирование
делает текст программы более понятным – алгоритм решения ясно
виден из исходного текста.
Согласно принципу модульности программа разбивается на отдельные смысловые части (модули).
Модуль – это функционально законченная часть программы. Например, модуль вычисления
определителя матрицы; модуль нахождения суммы элементов ряда.
Каждый модуль программируется отдельно, а затем модули объединяются в единую программу.
Модуль на языке программирования – это функция или процедура.
Использование при разработке модуля композиции трех базовых структур
- Линейной
- Ветвления
- Циклической
Структурное программирование называют программированием без GOTO.
Функциональное программирование
Смысл в том, что мы задаём не последовательность нужных нам команд, а описываем взаимодействие между ними и подпрограммами.
В нём весь код — это правила работы с данными. Вы просто задаёте нужные правила, а код сам разбирается, как их применять.
Команды можно собирать в подпрограммы, но их последовательность не имеет значения. Нет разницы, в каком порядке вы напишете подпрограммы — это же просто правила, а правила применяются тогда, когда нужно, а не когда про них сказали.
Логическое программирование
- парадигма программирования, а также раздел дискретной математики изучающий методы и возможности этой парадигмы, основанная на выводе новых фактов из данных фактов согласно заданным логическим правилам.
- Логическое программирование возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки.
Объектно-ориентированное программирование
Суть ООП заключается в том, чтобы представить программу в виде объектов, которые каким-то образом взаимодействуют друг с другом.
Объект — это экземпляр какого-то класса.
Класс — это шаблон, в котором описаны все свойства будущего объекта и его методы.
При этом если класс воздушного шарика определяет свойство цвет, то сам класс никакого значения цвета не имеет. Но экземпляры этого класса, которых, к слову, можно создавать сколько угодно, уже будут раскрашены в любые цвета.
Прототипное программирование
стиль объектно—ориентированного программирования, при котором отсутствует понятие класса, а наследование производится путём клонирования существующего экземпляра объекта — прототипа. Каноническим примером прототип-ориентированного языка является язык Self.
Самые популярные языки
- JavaScript, а также его библиотеки и фреймворки (React, Angular JS, Vue JS, Node JS, JQuery) — прототипно-ориентированное программирование, применяемое для разработки клиентской части вэб-сайтов;
- Java — объектно-ориентированное программирование (ООП), применяется для разработки десктопных и мобильных приложений под Андроид;
- Python — процедурное программирование и ООП. Применяется как в вэб, так и десктопной разработке;
- PHP (для серверной веб разработки) — процедурное и ООП;
- С# — ООП, для программирования игр, софта и вэб-приложений;
- Swift — программирование для IOS;
- Obective-C — программирование для IOS и MAC OS.
Алгоритм — это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.
СВОЙСТВА АЛГОРИТМОВ
- Дискретность.
- Понятность (определенность).
- Однозначность (детерминированность).
- Массовость
- Результативность (конечность).
- Правильность.
ВИДЫ АЛГОРИТМОВ
- Линейный – все действия выполняются в строгой последовательности(приготовление пирога)
- Разветвляющийся – действия выполняются в зависимости от выполнения или не выполнения условия(переход улицы по светофору)
- Циклический – содержит повторяющиеся действия(колоть дрова)
Условные графические обозначения символов






