Этапы разработки ПО
1.Описание потребностей и их анализ
2.Дизайн программного продукта
3.Разработка
4.Проверка
5.Выпуск и внедрение продукта
6.Обслуживание продукта
Модели жизненного цикла ПО
1.Waterfall (каскадная модель) – модель процесса разработки программного обеспечения, в которой процесс разработки выглядит как поток, последовательно проходящий фазы анализа требований, проектирования, реализации, тестирования, интеграции и поддержки.

плюсы:
- Устойчива к обновлению кадров. Благодаря очень подробному документированию каждого этапа, участники могут приходить и уходить, но на сроки работы это никак не повлияет.
- Дисциплинирует, благодаря плану и чёткой последовательности этапов и строгому менеджменту.
- Гибкая на ранних этапах. До этапа разработки можно вполне легко вносить изменения в предыдущие этапы.
- Прозрачна. Заранее понятно, на каком этапе что будет происходить, поэтому становится проще прогнозировать бюджеты и набирать команду.
минусы:
- Очень много документов, который нужно постоянно актуализировать. Из-за этого работа над проектом часто превращается в сущую бюрократию — пока всё со всеми не согласуешь, в документах всё не пропишешь, с места ничто не сдвинется.
- Подробнейший план может создать не только иллюзию безопасности, но и ложные впечатления о работе над проектом. За фразами типа «60% проекта выполнено» может не быть никакого полезного результата. Это всего лишь манипуляция. Всё-таки «делать» — не значит «сделать».
- Пользователя и заказчика полностью изолируют от процесса разработки. В итоге первый не может постепенно привыкать к продукту, а второй — вносить корректировки, если что-то идёт не так. Поэтому продукты, сделанные по каскадной методологии, оказываются не ориентированы на массового пользователя.
- Все требования должны быть сразу известны. Сделать это очень сложно, потому что заказчик часто и сам не знает, чего он хочет. В таких ситуациях гибкие методологии сподручнее.
- Из-за того, что в Waterfall тестирование происходит только в самом конце, проектом могут заниматься некомпетентные специалисты, и этого никто не заметит, пока не станет поздно. А когда на этапе тестирования находят вагон и маленькую тележку проблем, их начинают просто закрывать заплатками, ведь иного выбора нет. На первых этапах модель может быть более-менее гибкой, но масса проблем на этапе тестирования влечёт плачевные последствия.
2. Итерационная модель – предполагает разбиение проекта на части (этапы, итерации) и прохождение этапов жизненного цикла на каждом их них. Каждый этап является законченным сам по себе, совокупность этапов формирует конечный результат.

плюсы:
- В жизненном цикле разработки программного обеспечения можно заранее создать несколько возможностей.
- Он эффективно универсален для постоянно меняющихся требований проекта, а также клиента.
- Это лучшее, что подходит для проворных компаний.
- Кроме того, по разумной цене можно изменить диапазон спецификаций в Итерационной модели.
- Совместное развитие может быть организовано.
- Изучение и устранение неполадок, в то время как меньше итераций просто.
- Опасности распознаются и исправляются путем итерации, и каждая итерация может быть просто обработана.
- В модели итерации сжатое время расходуется на запись, а расширенное время предоставляется для обрисовки.
минусы:
- Могут потребоваться расширенные ресурсы.
- Несмотря на то, что цена изменения ниже, она не всегда соответствует спецификациям изменения.
- Требуется дополнительное признание администрации.
- Это не подходит для более коротких проектов.
- Для экспертизы способностей требуются чрезвычайно опытные ресурсы.
- Продвижение проекта в значительной степени зависит от этапов оценки рисков.
3. Спиральная модель – Все этапы жизненного цикла при спиральной модели идут витками, на каждом из которых происходят проектирование, кодирование, дизайн, тестирование и т. д. Такой процесс отображает суть названия: поднимаясь, проходится один виток (цикл) спирали для достижения конечного результата. Причем не обязательно, что один и тот же набор процессов будет повторятся от витка к витку. Но результаты каждого из витков ведут к главной цели.

плюсы:
+ улучшенный анализ рисков;
+ хорошая документация процесса разработки;
+ гибкость – возможность внесения изменений и добавления новой функциональности даже на относительно поздних этапах;
+ раннее создание рабочих прототипов.
минусы:
— может быть достаточно дорогой в использовании;
— управление рисками требует привлечения высококлассных специалистов;
— успех процесса в большой степени зависит от стадии анализа рисков;
— не подходит для небольших проектов.
4. Agile – набор принципов гибкой разработки (всего их 12) и идей.
плюсы:
- тестирование на ранних стадиях;
- возможность оценки добавленного функционала “в действии”;
- исследование пользовательского опыта на всех этапах;
- возможность быстрой презентации на рынке “сырой”, но работающей версии
минусы:
- отсутствие четкого плана развития проекта;
- постоянная угроза переделывания большой части работы;
- снижение качества продукта в угоду скорости и упрощения
Проверка/тестирование
Белый ящик – кодер видет
Черный ящик – тестер видет
Серый ящик – видят оба
Типы ошибок при тестировании
Логические – ошибка в логике
Синтаксические – ошибка в орфографии
Семантические – Причина возникновения ошибок данного
типа связана с нарушением семантических
правил написания программ (примером
являются ситуации попытки открыть
несуществующий файл или выполнить
деление на ноль
Основные модели программирования
Императивное программирование
Декларативное программирование
Структурное программирование
Функциональное программирование
Логическое программирование
Объектно-ориентированное программирование
Компонентно-ориентированное программирование
Прототипно-ориентированное программирование
Императивное программирование
это парадигма, основанная на составлении алгоритма действий (инструкций/команд), которые изменяют состояние (информацию/данные/память) программы. Первыми языками программирования, основанными на таком подходе, были машинные коды и ассемблеры.
Фактически, программа на этих языках — это код, который выполняется компьютером сразу, без предварительной компиляции.
Декларативное программирование
это парадигма программирования, в которой задаётся спецификация решения задачи: описывается, что представляет собой проблема и ожидаемый результат, но без описания способа достижения этого результата.
При создании HTML мы с помощью тегов описываем, какую хотим получить страничку в браузере, а не то, как нарисовать на экране заголовок статьи, оглавление и текст.
В SQL, если нам нужно посчитать количество сотрудников с фамилией «Сидоров», мы напишем SELECT count(*) FROM employee WHERE last_name = ‘Сидоров’;.
Структурное программирование
делает текст программы более понятным – алгоритм решения ясно
виден из исходного текста.
Согласно принципу модульности программа разбивается на отдельные смысловые части (модули).
Модуль – это функционально законченная часть программы. Например, модуль вычисления
определителя матрицы; модуль нахождения суммы элементов ряда.
Каждый модуль программируется отдельно, а затем модули объединяются в единую программу.
Модуль на языке программирования – это функция или процедура.
Использование при разработке модуля композиции трех базовых структур
Линейной
Ветвления
Циклической Структурное программирование называют программированием без GOTO.
Функциональное программирование
Смысл в том, что мы задаём не последовательность нужных нам команд, а описываем взаимодействие между ними и подпрограммами.
В нём весь код — это правила работы с данными. Вы просто задаёте нужные правила, а код сам разбирается, как их применять.
Команды можно собирать в подпрограммы, но их последовательность не имеет значения. Нет разницы, в каком порядке вы напишете подпрограммы — это же просто правила, а правила применяются тогда, когда нужно, а не когда про них сказали.
Логическое программирование
парадигма программирования, а также раздел дискретной математики изучающий методы и возможности этой парадигмы, основанная на выводе новых фактов из данных фактов согласно заданным логическим правилам.
Логическое программирование возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки.
Объектно-ориентированное программирование
Суть ООП заключается в том, чтобы представить программу в виде объектов, которые каким-то образом взаимодействуют друг с другом.
Объект — это экземпляр какого-то класса.
Класс — это шаблон, в котором описаны все свойства будущего объекта и его методы.
При этом если класс воздушного шарика определяет свойство цвет, то сам класс никакого значения цвета не имеет. Но экземпляры этого класса, которых, к слову, можно создавать сколько угодно, уже будут раскрашены в любые цвета.
Прототипное программирование
стиль объектно-ориентированного программирования, при котором отсутствует понятие класса, а наследование производится путём клонирования существующего экземпляра объекта — прототипа. Каноническим примером прототип-ориентированного языка является язык Self.
Алгоритм
это точное и понятное предписание (указание) исполнителю совершить определенную последовательность действий, направленных на достижение указанной цели или решение поставленной задачи.
СВОЙСТВА АЛГОРИТМОВ
1. Дискретность.
2. Понятность (определенность).
3. Однозначность (детерминированность).
4. Массовость
5. Результативность (конечность).
6. Правильность.
Виды алгоритмов
Линейный – все действия выполняются в строгой последовательности(приготовление пирога)
Разветвляющийся – действия выполняются в зависимости от выполнения или не выполнения условия(переход улицы по светофору)
Циклический – содержит повторяющиеся действия(колоть дрова)
Условные графические обозначения символов



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


