Программирование

  1. Описание потребностей и их анализ
  2. Дизайн программного продукта
  3. Разработка
  4. Проверка
  5. Выпуск и внедрение продукта
  6. Обслуживание продукта
  • Основная суть модели 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.

Алгоритм — это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.

СВОЙСТВА АЛГОРИТМОВ

  • Дискретность.
  • Понятность (определенность).
  • Однозначность (детерминированность).
  • Массовость
  • Результативность (конечность).
  • Правильность.

ВИДЫ АЛГОРИТМОВ

  • Линейный – все действия выполняются в строгой последовательности(приготовление пирога)
  • Разветвляющийся – действия выполняются в зависимости от выполнения или не выполнения условия(переход улицы по светофору)
  • Циклический – содержит повторяющиеся действия(колоть дрова)

Условные графические обозначения символов