Разработку программы с циклом

Традиционные и гибкие подходы: разбираем с примерами, формулируем особенности

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

Этапы жизненного цикла ПО

У любого программного обеспечения есть жизненный цикл — этапы, через которые оно проходит с начала создания до конца разработки и внедрения. Чаще всего это подготовка, проектирование, создание и поддержка. Этапы могут называться по-разному и дробиться на более мелкие стадии.

Рассмотрим эти этапы на примере жизненного цикла интернет-магазина.

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

Проектирование. Иван выбрал компанию-подрядчика и обсудил с её специалистами архитектуру и дизайн будущего интернет-магазина.

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

Поддержка. Иван подписал акт сдачи-приёмки, и подрядчик разместил интернет-магазин на «боевых» серверах. Пользователи начали его посещать и сообщать о замеченных ошибках в поддержку, а программисты — оперативно всё исправлять.

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

А методология включает в себя набор методов по управлению разработкой: это правила, техники и принципы, которые делают её более эффективной.

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

Основные модели разработки ПО

  • Code and fix — модель кодирования и устранения ошибок;
  • Waterfall Model — каскадная модель, или «водопад»;
  • V-model — V-образная модель, разработка через тестирование;
  • Incremental Model — инкрементная модель;
  • Iterative Model — итеративная (или итерационная) модель;
  • Spiral Model — спиральная модель;
  • Chaos model — модель хаоса;
  • Prototype Model — прототипная модель.

Из этих моделей наиболее популярны пять основных: каскадная, V-образная, инкрементная, итерационная и спиральная. Разберём их подробнее.

Waterfall (каскадная модель, или «водопад»)

В этой модели разработка осуществляется поэтапно: каждая следующая стадия начинается только после того, как заканчивается предыдущая. Если всё делать правильно, «водопад» будет наиболее быстрой и простой моделью. Применяется уже почти полвека, с 1970-х.

Преимущества «водопада»

  • Разработку просто контролировать. Заказчик всегда знает, чем сейчас заняты программисты, может управлять сроками и стоимостью.
  • Стоимость проекта определяется на начальном этапе. Все шаги запланированы уже на этапе согласования договора, ПО пишется непрерывно «от и до».
  • Не нужно нанимать тестировщиков с серьёзной технической подготовкой. Тестировщики смогут опираться на подробную техническую документацию.

Недостатки каскадной модели

  • Тестирование начинается на последних этапах разработки. Если в требованиях к продукту была допущена ошибка, то исправить её будет стоить дорого. Тестировщики обнаружат её, когда разработчик уже написал код, а технические писатели — документацию.
  • Заказчик видит готовый продукт в конце разработки и только тогда может дать обратную связь. Велика вероятность, что результат его не устроит.
  • Разработчики пишут много технической документации, что задерживает работы. Чем обширнее документация у проекта, тем больше изменений нужно вносить и дольше их согласовывать.

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

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

V-образная модель (разработка через тестирование)

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

Преимущества V-образной модели

  • Количество ошибок в архитектуре ПО сводится к минимуму.

Недостатки V-образной модели

  • Если при разработке архитектуры была допущена ошибка, то вернуться и исправить её будет стоить дорого, как и в «водопаде».

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

Incremental Model (инкрементная модель)

Это модель разработки по частям (increment в переводе с англ. — приращение) уходит корнями в 1930-е. Рассмотрим её на примере создания социальной сети.

  • Заказчик решил, что хочет запустить соцсеть, и написал подробное техническое задание. Программисты предложили реализовать основные функции — страницу с личной информацией и чат. А затем протестировать на пользователях, «взлетит или нет».
  • Команда разработки показывает продукт заказчику и выпускает его на рынок. Если и заказчику, и пользователям социальная сеть нравится, работа над ней продолжается, но уже по частям.
  • Программисты параллельно создают функциональность для загрузки фотографий, обмена документами, прослушивания музыки и других действий, согласованных с заказчиком. Инкремент за инкрементом они совершенствуют продукт, приближаясь к описанному в техническом задании.

Преимущества инкрементной модели

  • Не нужно вкладывать много денег на начальном этапе. Заказчик оплачивает создание основных функций, получает продукт, «выкатывает» его на рынок — и по итогам обратной связи решает, продолжать ли разработку.
  • Можно быстро получить фидбэк от пользователей и оперативно обновить техническое задание. Так снижается риск создать продукт, который никому не нужен.
  • Ошибка обходится дешевле. Если при разработке архитектуры была допущена ошибка, то исправить её будет стоить не так дорого, как в «водопаде» или V-образной модели.

Недостатки инкрементной модели

  • Каждая команда программистов разрабатывает свою функциональность и может реализовать интерфейс продукта по-своему. Чтобы этого не произошло, важно на этапе обсуждения техзадания объяснить, каким он будет, чтобы у всех участников проекта сложилось единое понимание. 
  • Разработчики будут оттягивать доработку основной функциональности и «пилить мелочёвку». Чтобы этого не случилось, менеджер проекта должен контролировать, чем занимается каждая команда.
Читайте также:  Смена картинок в цикле

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

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

Iterative Model (итеративная модель)

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

Рассмотрим на примере создания мессенджера, как эта модель работает.

  • Заказчик решил, что хочет создать мессенджер. Разработчики сделали приложение, в котором можно добавить друга и запустить чат на двоих.
  • Мессенджер «выкатили» в магазин приложений, пользователи начали его скачивать и активно использовать. Заказчик понял, что продукт пользуется популярностью, и решил его доработать.
  • Программисты добавили в мессенджер возможность просмотра видео, загрузки фотографий, записи аудиосообщений. Они постепенно улучшают функциональность приложения, адаптируют его к требованиям рынка.

Преимущества итеративной модели

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

Недостатки итеративной модели

  • Использование на начальном этапе баз данных или серверов — первые сложно масштабировать, а вторые не выдерживают нагрузку. Возможно, придётся переписывать большую часть приложения.
  • Отсутствие фиксированного бюджета и сроков. Заказчик не знает, как выглядит конечная цель и когда закончится разработка.

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

Spiral Model (спиральная модель)

Используя эту модель, заказчик и команда разработчиков серьёзно анализируют риски проекта и выполняют его итерациями. Последующая стадия основывается на предыдущей, а в конце каждого витка — цикла итераций — принимается решение, продолжать ли проект. Эту модель начали использовать в 1988 году.

Рассмотрим, как функционирует эта модель, на примере разработки системы «Умный дом». 

  • Заказчик решил, что хочет сделать такую систему, и заказал программистам реализовать управление чайником с телефона. Они начали действовать по модели «водопад»: выслушали идею, провели анализ предложений на рынке, обсудили с заказчиком архитектуру системы, решили, как будут её реализовывать, разработали, протестировали и «выкатили» конечный продукт.
  • Заказчик оценил результат и риски: насколько нужна пользователям следующая версия продукта — уже с управлением телевизором. Рассчитал сроки, бюджет и заказал разработку. Программисты действовали по каскадной модели и представили заказчику более сложный продукт, разработанный на базе первого.
  • Заказчик подумал, что пора создать функциональность для управления холодильником с телефона. Но, анализируя риски, понял, что в холодильник сложно встроить Wi-Fi-модуль, да и производители не заинтересованы в сотрудничестве по этому вопросу. Следовательно, риски превышают потенциальную выгоду. На основе полученных данных заказчик решил прекратить разработку и совершенствовать имеющуюся функциональность, чтобы со временем понять, как развивать систему «Умный дом».

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

Преимущества спиральной модели

  • Большое внимание уделяется проработке рисков.

Недостатки спиральной модели

  • Есть риск застрять на начальном этапе — бесконечно совершенствовать первую версию продукта и не продвинуться к следующим.
  • Разработка длится долго и стоит дорого.

На основе итеративной модели была создана Agile — не модель и не методология, а скорее подход к разработке.

Что такое Agile?

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

  • экстремальное программирование (Extreme Programming, XP);
  • бережливую разработку программного обеспечения (Lean);
  • фреймворк для управления проектами Scrum;
  • разработку, управляемую функциональностью (Feature-driven development, FDD);
  • разработку через тестирование (Test-driven development, TDD);
  • методологию «чистой комнаты» (Cleanroom Software Engineering);
  • итеративно-инкрементальный метод разработки (OpenUP);
  • методологию разработки Microsoft Solutions Framework (MSF);
  • метод разработки динамических систем (Dynamic Systems Development Method, DSDM);
  • метод управления разработкой Kanban.

Различия между Agile и традиционным подходом к разработке мы свели в таблице:

Не всё перечисленное в списке — методологии. Например, Scrum чаще называют не методологией, а фреймворком. В чём разница? Фреймворк — это более сформированная методология со строгими правилами. В скраме все роли и процессы чётко прописаны. Помимо Scrum, часто используют Kanban. 

Kanban

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

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

Если понравилась статья, ставьте лайк и подписывайтесь на канал.

Почитайте похожие материалы:

27 книг для программиста

7 способов улучшить память

10 историй о переходе в IT

Что программисты ценят больше денег. 9 пунктов

7 стадий становления крутого программиста

Источник

Тема: “Составление программ с использованием циклов”(решение задач).

Читайте также:  Транексам при менструационного цикла

Цель:

1.Образовательная:

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

– актуализация и контроль знаний, умений и навыков;

– формирование умения решать задачи с использованием циклов;

2. Развивающая:

– развитие логического мышления, памяти, внимания;

– развитие самостоятельности при работе,

– развитие познавательного интереса;

3. Воспитательная:

– воспитание информационной культуры учащихся, внимательности, аккуратности, дисциплинированности, усидчивости.

Тип урока: урок – практикум

Вид деятельности: умственная, самостоятельная.

Обрудование: флипчарт, доска ActivBoard, программа MyTestX, приложение 1, инструктивная карта.

План урока:

  1. Организационный момент. 1 мин

  2. Актуализация и систематизация знаний. 5 мин

  3. Практическая часть (решение задач) 28 мин

  4. Физминутка 2 мин

  5. Практическая часть (решение задач)

  6. Закрепляющее тестирование 7 мин

  7. Итог урока. 2 мин

  8. Домашнее задание: повторить структуру программы, написание операторов.

Ход урока

Этапы урока

Деятельность учителя

Средства

Деятельность учеников

I Организационный момент

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

Начнём с заданий, в следствие, которого мы повторим теоретический материал.

Затем вы должны будете составить, ввести и отладить программы с применением операторов цикла. В конце урока вам предстоит выполнить тестовое задание. После чего мы подведём итоги нашей работы и выставим оценки

Речь учителя

Внешняя и внутренняя (психологическая) готовность

II Актуализация и систематизация знаний

Задание:

Расставить в соответствующей последовательности структуру программы.

Фронтальный опрос:

1.Что такое цикл?

2. Сколько всего циклов в Паскале?

3. Перечислите виды циклов?

4. Допишите циклы.

5. Работа по таблице.

Условие: Зарисовать блок- схему в таблице.

Флипчарт 3

Флипчарт 4

Флипчарт 5

Приложение 1

Работают у доски

Предполагаемые ответы:

1.Цикл – это многократное повторение команд.

В Паскале 3 вида цикла.

Цикл с параметром (цикл со счетчиком) for – известно количество повторений.

Цикл с предусловием while– неизвестно количество повторений

Цикл с постусловием repeat– неизвестно количество повторений.

Работают с флипчартом

Выполняют работа по карточкам

III Практическая часть (решение задач)

Решение задач на ПК.

Условие задачи:

Написать программу, выводящая на экран таблицу умножения на 9.

Program Um;

var n:integer;

a: real;//объявляем переменные

begin

for n:=1 to 10 do

begin

a:=n*9;

writeln(‘9*’,n,’=’,

a);

end;

end.

IV Физминутка

Упражнения для снятия зрительного напряжения.

Применений упражнений для глаз

V Практическая часть (решение задач).

Решение задач на ПК.

Условие задачи:

Посчитать сумму S = 1 + 2 + 3 + 4 + … + N. (N – любое натуральное число, задается пользователем). Реализовать программу тремя способами, с использованием циклов while.

Условие задачи:

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

Условие задачи:

Вычислить сумму S = ++ ++…+. Выполнить программу с использованием циклов while.

Условие задачи:

Составить программу суммирования произвольного количества целых чисел. Суммирование прекратится при вводе числа 0. (используется цикл repeat).

а – числа, которые будем складывать;

s – сумма этих чисел;

обязательные условия решения задачи: s=s+a (сумма увеличивается на а); проверяем равно ли а 0;

Program summa;

Uses crt;

var S,N,i:integer;

begin

clrscr;

write(‘N=’);

read(N);

S:=0;

while i>=N do

begin

S:=S+i;

end;

writeln(‘S=’,S);

end.

Program Chisla;

var p,a: real; n,i: integer; //объявляем переменные

begin

writeln(‘Введите a,n: ‘);

read(a,n);

p:=1; //задаем начальное значение отличное от 0

for i:=1 to n do //организуем цикл

p := p * a; // Вычисляем степень числа

writeln(a,’ В степени ‘,n,’ = ‘,p);// выводим результат

end.

Program summa;

Uses crt;

var S,x,y:integer;

begin

clrscr;

S:=0; x:=2;

while x<=100 do

begin

y:=1/x;

S:=S+y;

X:=x+2;

end;

writeln(‘S=’,S);

end.

Program summa1;

Var a,s: integer;

begin

s:=0; {начальное значение суммы}

         Repeat

 write (‘Значение a=’);

readln (a);

s:=s+a;

         Until a=0;

 writeln (‘сумма введённых чисел равна ’, s);

End.

VI Закрепляющее тестирование

Выполнение теста в программе MyTestX.

Выполняют тест в Excel

VII Итог урока.

Вопросы:

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

2. С какими трудностями вы столкнулись при решении задач?

Работают устно

VIII Домашнее задание

Повторить структуру программы, написание операторов.

Записывают домашнее задание

Источник

Жизненный цикл разработки ПО (англ. SDLC – Software development lifecycle) – это серия из шести фаз, через которые проходит любая программная система.

Абсолютно любое ПО проходит через 6 основных шагов, начиная от простой идеи и заканчивая использованием её конечным пользователем.

Но как это выглядит изнутри? С какими сложностями сталкивается команда разработчиков и как их решает на каждой фазе Жизненного Цикла ПО? Об этом расскажет Павел Гапонов, Project Manager компании-разработчика SolveIt.

Типичный жизненный цикл разработки состоит из следующих фаз:

1. Сбор и анализ требований (Planning and Requirement Analysis)

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

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

Проблема: Не соответствующие ожидания и часто изменяющиеся требования: заказчик и команда не понимают, какую реально пользу принесёт продукт.

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

2. Документирование требований (Defining Requirements)

Читайте также:  Цикл программ о живописи

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

Важно четко определить и прописать, что требуется выполнить, это делается с помощью SRS (Software Requirement Specification). Документ содержит все требования к продукту, которые должны быть спроектированы и разработаны в течение жизненного цикла проекта.

Проблема: Большой многостраничный список требований

Решение: Выяснить высокоуровневые требования и, в ходе разработки и коммуникации с заказчиком, дописывать ТЗ. То есть разработка идет параллельно с Техническим заданием, а в процессе корректируется план.

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

Павел Гапонов

Project Manager, SolveIt

3. Дизайн (Design the Product Architecture)

SRS это ориентир для разработчиков, чтобы предложить лучшую архитектуру для продукта. Обычно предлагается несколько подходов к проектированию архитектуры продукта. Все предложенные подходы документируются в спецификации DDS (Design Document Specification) и выбирается наилучший подход к проектированию. Данный подход очень четко определяет все архитектурные модули продукта, а также его связь с внешними и сторонними модулями.

Проблема: Выбрали неправильную архитектуру.

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

4. Разработка ПО (Building or Developing the Product)

Здесь начинается разработка и сборка продукта. Весь программный код, новые модули и фичи разрабатываются на основании DDS. Чем лучше написана эта документация, тем быстрее будет идти имплементация. На этом этапе подключается команда разработчиков. Написанный код должен покрываться Unit-тестами, а взаимодействие новых фич с другими модулями тестироваться с помощью интеграционных тестов. Эти активности выполняются именно командой разработчиков, а не QA специалистами.

Проблема №1: Слабая коммуникация между командой

Разработчик не интересуется прогрессом проекта, проблемами коллег.

Решение: Daily meetings, 100% вовлеченность, Скрам доска (интерактивность).

Проблема №2: Невыполнимые сроки

Заказчик хочет, чтобы его продукт был готов в ближайшее время. Менеджер проекта пытается объяснить клиенту к чему приведет такая спешка, но этого не достаточно. Клиент ставит невыполнимые дедлайны и не слушает возражения менеджера проекта. В результате, команда разработчиков сдается и пробует закрыть задачи в слишком короткие сроки. Как следствие – критические баги из-за спешки: команда не успевает, качество продукта снижается, клиент не доволен и решает, что виновата команда.

Решение: Менеджер проекта должен стоять на своём и аргументировать дедлайны. Клиент должен понять, что если команда разработчиков будет торопиться, то не реализует часть функционала. Если всё же такой срок реализации критичен для клиента, мы стараемся выявить какие задачи находятся у заказчика в приоритете.

Проблема №3: Добавление не оговоренных фич

99% заказчиков ошибаются именно в этом месте. В ходе разработки клиент отклоняется от оговоренного тз и хочет добавить ещё фич в продукт. В результате вместе с ростом скопа фич, увеличиваются сроки и бюджет на разработку, деньги заканчиваются, а готово только 50% продукта.

Решение: Менеджер проекта должен объяснить клиенту, к чему приведет добавление новых фич в проект, отстаивать свою позицию и держаться SRS. Поэтому так важна вторая фаза Жизненного цикла разработки ПО.

5. Тестирование (Testing the Product)

Именно тестирование, в основном, затрагивает все этапы жизненного цикла. Дефекты продукта регистрируются, отслеживаются, исправляются и повторно тестируются. Это происходит до тех пор, пока продукт не достигнет стандартов качества, которые прописаны в SRS. На данном этапе в процесс разработки подключается команда мануальных тестировщиков или автоматизаторы.

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

Решение: Проводить тестирование параллельно задачам, сразу же по их завершению.

6. Внедрение и поддержка продукта (Deployment in the Market and Maintenance)

Как только продукт протестирован, он выходит в релиз. Иногда внедрение происходит поэтапно, в соответствии с бизнес-стратегией. Продукт сначала может быть выпущен в ограниченном сегменте и протестирован в реальной бизнес-среде, это UAT-тестирование (User Acceptance Testing). Затем, основываясь на отзывах, продукт может быть выпущен как есть, или с предлагаемыми улучшениями. После того, как продукт выпущен на рынок его обслуживание выполняется для существующей клиентской базы, и на этом этапе подключаются Support-команды.

Проблема №1: Отсутствие обратной связи, реальных отзывов потенциальных пользователей продукта.

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

Проблема №2: Слабая инфраструктура проекта на стороне клиента.

Часть заказчиков предпочитают размещать сервера приложений не на Azure, AWS, Google и т.д, а в своей внутренней сети. Команда не может гарантировать стабильную работу, из-за сбоев, которые происходят на стороне клиента.

Решение: Предупредить клиента, о возможных проблемах, предложить решения для их устранения.

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

Если вам нужен качественный продукт, свяжитесь с нами и мы сделаем оценку вашего проекта!

Источник