Разное

Итеративный подход: Итеративный подход к решению инженерных задач / Habr

Содержание

Итеративный подход к решению инженерных задач / Habr

Ну вот, дожил и я до того дня, когда меня потянуло написать в этот блог.
Доброго времени суток, хабрачеловек!

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

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

Представим себе стандартную для инженера ситуацию — в нашем мозгу появилась идея. Родилась сама, была подкинута сочувствующими товарищами или инъецирована заказчиком очередного бредового проекта — механизм ее появления в мозгу не важен. Предположим, что идея звучит так: «Счастья всем, даром! И пусть никто не уйдет обиженным!» (с). Обычно, из формулировки идеи очевидно, ЧТО мы хотим получить в итоге. Зато не очевидно КАК мы хотим этого добиться. Вот тут-то перед нами и появляется задача. Задача реализации идеи.

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

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

Отправным пунктом будем считать формулировку задачи («раздобыть где-нибудь счастья на всех»). Будем считать, что мы работаем над проектом по его добыче. Что же нужно первым делом сделать для его выполнения? Для начала необходимо сформулировать то, как проект на выходе для себя представляет заказчик (в данном конкретном примере — все человечество, в общем же случае это может быть работодатель или даже мы сами). То есть выявить внешние требования к проекту. В нашем случае все просто — каждый житель земного шара должен стать счастливым. В общем же случае результатом данного шага может быть пара страниц текста, содержащая самые общие сведения о конечной цели. В случае, когда результат трудно описать общими фразами, можно прибегнуть к описанию желаемого через способ его употребления конечными пользователями (пользователи должны видеть две кнопки «еще счастья» и «поделиться счастьем с соседями». При нажатии на кнопку 1… и т.д.).

Так, уже лучше, так как половина дела сделана — мы приступили к работе! Что дальше? Далее необходимо изучить предметную область, в которой придется работать. Цель данного этапа — познакомиться или обновить в памяти способы работы с сущностями данной предметной области, научиться разговаривать и думать в терминах решаемой задачи. Конечным результатом второго этапа является преобразование общих требований, полученных на шаге 1, в четкие подзадачи по достижению этих требований. В нашем случае это может выглядеть примерно так: «Счастье… Что же это такое и с чем его едят? Счастье — это состояние души, достигаемое при благоприятной совокупности внешних и внутренних факторов, влияющих на конкретного индивида. Детей счастливыми делает мороженое, влюбленных — поцелуи, политиков — власть, сисадминов — резервное копирование. Следовательно, необходимо следующее: построить заводы по производству власти, наделить детей мороженным…»

Отлично, теперь мы точно знаем, что нужно сделать для выполнения проекта. Но что, если проект рискует затянуться на длительное время? Или если мы работаем над ним целой командой? Третьим шагом необходимо навести порядок в том ворохе информации, что мы насобирали на предыдущем этапе и специфицировать (да-да, записать!) сформулированные подзадачи. Итак, производим максимальную декомпозицию подзадач и выделяем последовательности действий по решению минимальных задач, которые уже не возможно разбить на составляющие (что-то вроде: «… нам нужны заводы по производству счастья. Для этого на нужны рабочие. Рабочих нужно обучить. Значит поступаем так: берем 20 перспективных учащихся старших классов и …»). Специфицирование подзадач — работа серьезная, трудная и отчасти нудная. Но она имеет в себе сразу несколько плюсов — во-первых, это неявное проектирование. Часто бывает так, что когда пишешь, что ты собираешься сделать (а не сразу бросаешься в код с клавиатурой наперевес), вскрываются некоторые тонкости, которые были упущены в первом приближении, принимаются полезные архитектурные решения и вносятся упрощающие дальнейшую разработку корректировки. А от некоторых задач вообще приходится отказаться. =) Во-вторых, она позволяет точнее оценить трудозатраты на реализацию задуманного, потому что чем меньший объем работы оценивается, тем больше вероятность в дальнейшем назвать правильные сроки на его реализацию. И в-третьих, когда есть утвержденные спецификации, проще избежать соблазна бесконечно улучшать существующие фичи и дописывать новые, оттягивая и оттягивая момент запуска проекта. На самом деле трудно заранее определить, что именно будет нужно пользователям и какая возможность в дальнейшем определит популярность продукта. Сначала нужно стартануть с некоторым минимальным набором, обеспечивающим жизнеспособность, а уже потом дописывать новые функции, исходя из реальных потребностей пользователей. Результатом данного шага является документ, содержащий описание подзадач и способы их решения.

Наконец-то мы как никогда близки к самому любимому — к собственно реализации. Но не спешим — сначала необходимо оценить время, которое потребуется на выполнение каждой подзадачи в отдельности. К этому моменту мы уже максимально упростили себе жизнь, написав спецификации, осталось лишь проставить цифры («Сделать счастливыми жителей Австралии — 48 часов, Албании — 32 часа, Америки — 72 часа…»). Основная цель данного этапа — постараться загнать каждую из подзадач в некоторые временные рамки. На самом деле, несмотря на существование огромного числа методик планирования и оценки трудозатрат, данный этап является весьма абстрагированным от действительности и рядом с цифрами правильнее было бы проставлять не часы, а попугаев, но некоторая аппроксимация все же будет получена. И это приближение будет все точнее при каждой последующей итерации (о которых мы пока ни слова не сказали). Результатграфики работ над проектом.

Ну вот и настал сладостный момент, когда нужно поработать руками. Смело хватаемся за клавиатуры, молотки, паяльники и прочие орудия труда и претворяем задуманное и описанное в жизнь. Мы на этапе реализации. Результатом будет являться код, микросхема, девайс, что угодно, но — лишь пробная версия. Вот тут появляется развилка — удовлетворяет ли наше детище тому, о чем мы так давно говорили на этапе 1? Если да — смело подводим итоги и отправляем его во взрослую жизнь. Но с первой попытки ответить «да» на этот вопрос удается очень редко. Скорее всего по прошествии всех вышеописанных этапов мы лишь осознаем, что теперь лучше понимаем, чего же мы хотели добиться в результате, что нужно делать, чтобы реализовать идею и добиться цели. Что же мы имеем в качестве настоящего результата этапа реализации? Более четкие, осознанные, опробованные на практике, родившиеся в боях требования! Ну что, уже догадались? Смело на этап 1! Первая итерация прошла успешно, поздравляю, коллега!

Заключение

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

UPD: Пользователь iasonov предложил смотреть в направлении ТРИЗ:: АРИЗ, в котором имеется вот такая интересная схема. Все дружно топаем и изучаем.

Итерационный метод — Iterative method

Численный метод, в котором n-е приближение решения получается на основе (n-1) предыдущих приближений.

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

Напротив, прямые методы пытаются решить проблему с помощью конечной последовательности операций. При отсутствии ошибок округления прямые методы дадут точное решение (например, решение линейной системы уравнений методом исключения Гаусса ). Итерационные методы часто являются единственным выбором для нелинейных уравнений . Однако итерационные методы часто полезны даже для линейных задач, включающих множество переменных (иногда порядка миллионов), где прямые методы были бы чрезмерно дорогими (а в некоторых случаях невозможными) даже при наилучшей доступной вычислительной мощности.
АИксзнак равноб{\ Displaystyle А \ mathbf {x} = \ mathbf {b}}

Привлекательные фиксированные точки

Если уравнение может быть введено в виде F ( х ) = х , а решение х является привлекательной неподвижной точкой функции F , то можно начать с точкой х 1 в бассейне притяжения от х , и пусть х n +1 = f ( x n ) для n  ≥ 1, и последовательность { x n } n  ≥ 1 сходится к решению x . Здесь x n — это n- е приближение или итерация x, а x n +1 — следующая или n + 1 итерация x . В качестве альтернативы, верхние индексы в круглых скобках часто используются в числовых методах, чтобы не мешать нижним индексам с другими значениями. (Например, х ( п + 1) = F ( х ( п ) ).) Если функция F является непрерывно дифференцируемой , достаточным условием сходимости является то , что спектральный радиус производной строго ограничена одной в окрестности фиксированная точка. Если это условие выполняется в неподвижной точке, то должна существовать достаточно малая окрестность (область притяжения).

Линейные системы

В случае системы линейных уравнений два основных класса итерационных методов — это стационарные итерационные методы и более общие методы подпространства Крылова .

Стационарные итерационные методы

Введение

Стационарные итерационные методы решают линейную систему с оператором, аппроксимирующим исходную; и на основе измерения ошибки в результате ( остатка ) формируют «уравнение коррекции», для которого этот процесс повторяется. {- 1} N \ ,.}

Примеры

Базовые примеры стационарных итерационных методов используют разбиение матрицы, например
А{\ displaystyle A}

Азнак равноD+L+U,Dзнак равнодиагональ((аяя)я){\ Displaystyle A = D + L + U \ ,, \ quad D: = {\ text {diag}} ((a_ {ii}) _ {i})}

где только диагональная часть , и это строго нижняя треугольная часть из . Соответственно, является строгая верхняя треугольная часть .
D{\ displaystyle D}А{\ displaystyle A}L{\ displaystyle L}А{\ displaystyle A}U{\ displaystyle U}А{\ displaystyle A}

Линейные стационарные итерационные методы также называют методами релаксации .

Методы подпространства Крылова

Методы подпространства Крылова работают, образуя основу из последовательности последовательных степеней матрицы, умноженных на начальную невязку ( последовательность Крылова ). Затем формируются приближения к решению путем минимизации невязки по сформированному подпространству. Прототипом метода в этом классе является метод сопряженных градиентов (CG), который предполагает, что матрица системы является симметричной положительно определенной . Для симметричных (и, возможно, неопределенных) работает метод минимальной невязки (MINRES). В случае даже несимметричных матриц были выведены методы, такие как обобщенный метод минимальной невязки (GMRES) и метод двусопряженных градиентов (BiCG).
А{\ displaystyle A} А{\ displaystyle A}

Сходимость методов подпространства Крылова

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

Прекондиционеры

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

История

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

Теория стационарных итерационных методов была прочно обоснована работами Д.М. Юнга, начиная с 1950-х годов. Метод сопряженного градиента также был изобретен в 1950-х годах независимыми разработками Корнелиуса Ланцоса , Магнуса Хестенеса и Эдуарда Штифеля , но его природа и применимость были неправильно поняты в то время. Только в 1970-х годах стало понятно, что методы, основанные на сопряженности, очень хорошо работают для уравнений в частных производных , особенно для эллиптических уравнений .

Смотрите также

Ссылки

внешние ссылки

Итеративная модель — BYTEX BLOG

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

Итеративная модель жизненного цикла ПО состоит из повторения следующих четырех фаз:

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

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

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

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

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

В чем разница между Инкрементальной моделью и Итеративной?

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

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

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

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

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

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

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

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

 

По материалам Testing Excellence

стадии, достоинства, недостатки — Студопедия

Выполнение работ параллельно с непрерывным анализом полученных результатов и корректировкой предыдущих этапов работы. Проект при этом подходе в каждой фазе развития проходит повторяющийся цикл: Планирование — Реализация — Проверка — Оценка

Преимущества итеративного подхода:

• снижение воздействия серьёзных рисков на ранних стадиях проекта, что ведет к минимизации затрат на их устранение;

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

• акцент усилий на наиболее важные и критичные направления проекта;

• непрерывное итеративное тестирование, позволяющее оценить успешность всего проекта в целом;

• раннее обнаружение конфликтов между требованиями, моделями и реализацией проекта;

• более равномерная загрузка участников проекта;

• эффективное использование накопленного опыта;

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



• затраты распределяются по всему проекту, а не группируются в его конце.

Недостатки:

· целостное понимание возможностей и ограничений проекта очень долгое время отсутствует.

· при итерациях приходится отбрасывать часть сделанной ранее работы.

· добросовестность специалистов при выполнении работ всё же снижается, что психологически объяснимо, ведь над ними постоянно довлеет ощущение, что «всё равно всё можно будет переделать и улучшить позже»

Rational Unified Process (RUP) — методология разработки программного обеспечения, созданная компанией Rational Software

В основе RUP лежат следующие принципы:

· Ранняя идентификация и непрерывное (до окончания проекта) устранение основных рисков.

· Концентрация на выполнении требований заказчиков к исполняемой программе (анализ и построение модели прецедентов (вариантов использования)).

· Ожидание изменений в требованиях, проектных решениях и реализации в процессе разработки.

· Компонентная архитектура, реализуемая и тестируемая на ранних стадиях проекта.

· Постоянное обеспечение качества на всех этапах разработки проекта (продукта).

· Работа над проектом в сплочённой команде, ключевая роль в которой принадлежит архитекторам.


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

Microsoft Solutions Framework (MSF) — методология разработки программного обеспечения, предложенная корпорацией Microsoft. MSF опирается на практический опыт Microsoft и описывает управление людьми и рабочими процессами в процессе разработки решения.

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

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

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

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

Экстрема?льное программи?рование (англ. Extreme Programming, XP) — одна из гибких методологий разработки программного обеспечения. Авторы методологии — Кент Бек, Уорд Каннингем, Мартин Фаулер и другие.

Двенадцать основных приёмов экстремального программирования (по первому изданию книги Extreme programming explained) могут быть объединены в четыре группы:

· Короткий цикл обратной связи (Fine scale feedback)

· Разработка через тестирование (Test driven development)

· Игра в планирование (Planning game)

· Заказчик всегда рядом (Whole team, Onsite customer)

· Парное программирование (Pair programming)

· Непрерывный, а не пакетный процесс

· Непрерывная интеграция (Continuous Integration)

· Рефакторинг (Design Improvement, Refactor)

· Частые небольшие релизы (Small Releases)

· Понимание, разделяемое всеми

· Простота (Simple design)

· Метафора системы (System metaphor)

· Коллективное владение кодом (Collective code ownership) или выбранными шаблонами проектирования (Collective patterns ownership)

· Стандарт кодирования (Coding standard or Coding conventions)

· Социальная защищенность программиста (Programmer welfare):

· 40-часовая рабочая неделя (Sustainable pace, Forty hour week)

Метод итерации — Википедия

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

Описание метода

Пусть дана СЛАУ вида: AX=B{\displaystyle AX=B}, где:
A=[a11⋯a1n⋮⋱⋮an1⋯ann];X=[x1⋮xn];B=[b1⋮bn]{\displaystyle \mathrm {A} ={\begin{bmatrix}a_{11}&\cdots &a_{1n}\\\vdots &\ddots &\vdots \\a_{n1}&\cdots &a_{nn}\end{bmatrix}};\qquad \mathrm {X} ={\begin{bmatrix}x_{1}\\\vdots \\x_{n}\end{bmatrix}};\qquad \mathrm {B} ={\begin{bmatrix}b_{1}\\\vdots \\b_{n}\end{bmatrix}}}

Предполагая, что aii{\displaystyle a_{ii}} не равно 0, i=1,n¯{\displaystyle i={\overline {1,n}}}. Выразим x1{\displaystyle x_{1}} через первое уравнение, x2{\displaystyle x_{2}} — через второе и т.  д.
{x1=b1a11−a12a11x2−⋯−a1na11xn⋮xn=bnann−an1annx1−an2annx2−⋯−an,n−1annxn−1{\displaystyle \left\{{\begin{array}{c}x_{1}={\frac {b_{1}}{a_{11}}}-{\frac {a_{12}}{a_{11}}}x_{2}-\cdots -{\frac {a_{1n}}{a_{11}}}x_{n}\\\vdots \\x_{n}={\frac {b_{n}}{a_{nn}}}-{\frac {a_{n1}}{a_{nn}}}x_{1}-{\frac {a_{n2}}{a_{nn}}}x_{2}-\cdots -{\frac {a_{n,n-1}}{a_{nn}}}x_{n-1}\end{array}}\right.}
Обозначим:

biaii=βi;−aijaii=αij{\displaystyle {\frac {b_{i}}{a_{ii}}}=\beta _{i};-{\frac {a_{ij}}{a_{ii}}}=\alpha _{ij}} при i≠j{\displaystyle i\neq j}; αij=0{\displaystyle \alpha _{ij}=0} при i=j{\displaystyle i=j}
α=[α11⋯α1n⋮⋱⋮αn1⋯αnn];β=[β1⋮βn]{\displaystyle \alpha ={\begin{bmatrix}\alpha _{11}&\cdots &\alpha _{1n}\\\vdots &\ddots &\vdots \\\alpha _{n1}&\cdots &\alpha _{nn}\end{bmatrix}};\qquad \beta ={\begin{bmatrix}\beta _{1}\\\vdots \\\beta _{n}\end{bmatrix}}}

ПОДХОДЫ К ЖИЗНЕННОМУ ЦИКЛУ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

SDLC (Жизненный цикл разработки программного обеспечения) — это пошаговый подход к разработке программного обеспечения. Для подробного понимания шагов посетите мою статью по этой ссылке (https://www.h3kinfosys.com/blog/software-development-life-cycle/). Стандарт ISO / IEC / IEEE 12207: 2017 также предоставляет четко определенный набор процессов жизненного цикла программного обеспечения для разработки программного обеспечения [Прочтите введение по ссылке: https://www.iso.org/standard/63712.html].

Подходы к разработке программного обеспечения можно в целом разделить на последовательный подход и итеративный / инкрементный подходы. Классификация моделей SDLC в разработке программного обеспечения обусловлена ​​различиями в сценариях проекта. Различные среды разработки программного обеспечения, технологии, требования клиентов, бюджетные ограничения и т. Д. Составляют сценарии проекта. Менеджер ИТ-проекта или структура ИТ-компании выбирают наиболее подходящую модель SDLC для разработки программного обеспечения.

Популярными моделями SDLC, которые следуют последовательным процессам, являются модель водопада, модель V и т. Д. Модель водопада также известна как традиционная модель, классическая модель, прогнозная модель. При разработке программного обеспечения используется нисходящий подход, отсюда и название «водопадная модель». Новые требования или изменения в требованиях в середине проекта неприемлемы. ИТ-команда начинает процессы разработки программного обеспечения с четких и полных требований со стороны клиента. Эта модель применима только для простых и малобюджетных проектов.

Еще одним популярным последовательным подходом к разработке программного обеспечения является V-модель. Модель V имеет четыре уровня тестирования программного обеспечения — уровни компонентного (модульного) тестирования, интеграционного тестирования, системного тестирования и приемочного тестирования. На каждом уровне разработки программного обеспечения в качестве основы для тестирования используются разные документы. При тестировании компонентов каждый программный компонент тестируется разработчиками независимо друг от друга. Утверждения, решения, стандарты программирования тестируются на программном уровне.Среда разработки поддерживает тестирование компонентов с помощью встроенных средств отладки. Следующим уровнем тестирования является интеграционное тестирование, при котором тестируются интерфейсы между программами или модулями, часто выполняемые в среде разработки. Системное тестирование проводится независимой командой тестирования программного обеспечения. Как функциональные, так и нефункциональные требования программного обеспечения тестируются для выявления дефектов и проверки поведения программного обеспечения. Программное обеспечение может быть передано клиенту только после одобрения команды QA.Для тестирования программного обеспечения используются различные инструменты и процедуры тестирования программного обеспечения. За системным тестированием следует приемочное тестирование пользователя (UAT). UAT выполняется конечными пользователями либо в ИТ-среде, либо в реальной среде для принятия программного обеспечения. Бизнес-аналитики координируют свои действия, а тестировщикам программного обеспечения, возможно, придется оказывать пользователям помощь в тестировании. Тестирование, проводимое конечными пользователями в ИТ-среде, называется альфа-тестированием, а в реальной среде — бета-тестированием.Правая часть V-модели называется Проверка — «Правильно ли вы строите», а левая сторона — Проверка — «Правильно ли вы строите?».

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

Проверьте свое понимание:

  1. Определите различные типы моделей SDLC.
  2. Что такое проверка и подтверждение?
  3. Какие существуют уровни тестирования в модели V?

Эта статья написана Прией, старшим преподавателем h3K Infosys.

Планирование итераций — масштабируемая гибкая структура

Оставайтесь верными своим решениям, но оставайтесь гибкими в своем подходе.

—Том Роббинс

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

Команды

планируют, выбирая Истории из невыполненной работы команды и принимая решение выполнить их набор в предстоящей итерации. Бэклог команды был посеян и частично спланирован во время Планирования приращения программы (PI). Кроме того, у команд есть отзывы — не только от их предыдущих итераций, но также от System Demo и других команд, с которыми они работают. Это, а также естественный ход изменения шаблонов фактов обеспечивает более широкий контекст для планирования итераций.Результат планирования итераций:

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

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

Входные данные для планирования итераций

В SAFe планирование итераций — это уточнение уровня детализации и корректировка начальных планов итераций, созданных во время планирования PI. Команды подходят к планированию итераций с заранее разработанным командным бэклогом. (Обычно они проводили событие уточнения невыполненных работ во время предыдущей итерации.) Есть несколько входов для события планирования итерации:

  • Цели PI для группы и программы, созданные во время PI-планирования
  • PI-план команды, состоящий из историй, которые были определены во время PI-планирования и предварительно назначены итерациям.
  • Дополнительные истории, которые возникли из местного контекста, включая такие элементы, как дефекты и рефакторы, а также новые истории, появившиеся после сеанса планирования для поддержки доставки функций
  • Отзывы о предыдущей итерации, включая любые истории, которые не были успешно завершены (например,g., не соответствовали определению «готово») в этой итерации. Дополнительную информацию об определении готового см. В параграфе «Масштабированное определение готового» в статье «Встроенное качество».
  • Отзыв о демонстрации системы

Планирование итерации

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

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

Установленная мощность

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

Анализ историй и оценка

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

Рассказы о задачах

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

Хотя разбиение историй на задачи довольно распространено, это необязательно и не требуется в SAFe.Он в основном используется новыми командами, чтобы лучше понять свои возможности и возможности, и со временем становится ненужным, поскольку команда планирует только на уровне истории.

Разработка итерационных целей

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

Достижение целей итераций

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

Участники

Участники мероприятия по планированию итераций:

  • Владелец продукта
  • Скрам-мастер, который выступает в качестве фасилитатора этого мероприятия
  • Все члены команды
  • Любые другие заинтересованные стороны, если это необходимо, включая представителей различных Agile-команд или ART, а также профильных экспертов

Повестка дня

Ниже приведен пример плана итераций:

  1. Рассчитайте доступную вместимость команды для итерации.
  2. Обсудите каждую историю, разработайте критерии приемки и дайте оценки с использованием сюжетных точек.
  3. Планирование прекращается, когда у команды заканчиваются возможности.
  4. Определите и согласуйте цели итерации.
  5. Каждый стремится к цели.

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

Руководящие принципы

Ниже приведены несколько советов по проведению мероприятия по планированию итераций:

  • Установить по времени событие до 4 часов или меньше
  • Планирование итераций организовано командой и предназначено для команды
  • Команде следует избегать выполнения работы, превышающей ее историческую скорость

Относительная оценка, оценка скорости, емкости и нормализации точки истории

Agile-команды используют точки истории для сравнительной оценки историй [2, 3]. При относительной оценке размер (ожидаемые усилия) каждой истории сравнивается с другими историями. Например, рассказ из восьми пунктов в четыре раза больше, чем рассказ из двух пунктов. Скорость команды равна историческому среднему значению всех историй, завершенных за итерацию. Скорость — это отправная точка для расчета возможностей команды для будущей итерации. Знание возможностей команды помогает при планировании и ограничении незавершенной работы (WIP) — команды не берут на себя больше историй, чем предполагалось по их предыдущей скорости.Скорость также используется для оценки времени, необходимого для доставки функций или эпиков, которые также прогнозируются в сюжетных точках.

Нормализация оценки сюжетной точки

В Scrum оценка каждой команды в очках истории — и итоговая скорость — обычно является локальным и независимым вопросом. Тот факт, что небольшая команда может рассчитывать таким образом, что их скорость равна 50, в то время как другая большая команда оценивает их скорость равной 13, обычно не вызывает беспокойства.

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

  • Найдите небольшую историю, на разработку которой уйдет около полдня, и полдня на тестирование и валидацию, и назовите ее «одним»
  • Оцените каждую вторую историю относительно этой «единственной».

Установить скорость до появления исторических данных

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

  • За каждого штатного разработчика и тестировщика в команде дайте команде 8 баллов (с поправкой на сотрудников, работающих неполный рабочий день)
  • Вычтите по одному баллу за каждый выходной и праздничный день члена команды в итерации
  • .

Пример : Предположим, что команда из шести человек, состоящая из трех разработчиков, двух тестировщиков и одного PO, без отпусков, тогда расчетная начальная скорость равна 5 × 8 баллов или 40 баллов за итерацию.(Примечание. Команде может потребоваться корректировка немного ниже, если один из разработчиков и тестировщиков также является Scrum Master .)

Примечание. Нет необходимости повторно калибровать нормализованные оценки или начальные скорости. Это просто обычная отправная точка.

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

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


Узнать больше

[1] Леффингуэлл, декан. Требования к гибкому программному обеспечению: методы бережливого производства требований для команд, программ и предприятия. Аддисон-Уэсли, 2011.
[2] Леффингуэлл, декан. Масштабирование гибкости программного обеспечения: передовой опыт для крупных предприятий. Аддисон-Уэсли, 2007.
[3] Кон, Майк. Гибкое оценивание и планирование. Роберт С.Мартин Серии. Прентис Холл, 2005.

Последнее обновление: 20 января 2020 г.

Информация на этой странице принадлежит © 2010-2020 Scaled Agile, Inc. и защищена американскими и международными законами об авторских правах. Ни изображения, ни текст не могут быть скопированы с этого сайта без письменного разрешения правообладателя. Scaled Agile Framework и SAFe являются зарегистрированными товарными знаками Scaled Agile, Inc. Посетите раздел часто задаваемых вопросов о разрешениях и свяжитесь с нами для получения разрешений.

Параллельное и итеративное проектирование + Конкурентное тестирование = высокая юзабилити

Пропустить навигацию

  • Войдите в UX Certification

Поиск

Nielsen Norman Group

Мировые лидеры в области пользовательского опыта, основанного на исследованиях
  • Дом

  • Статьи

  • Обучение и мероприятия

  • Консультации

  • Отчеты и книги

  • О NN / г

    Меню

    • Дом

    • Статьи

    • Обучение и мероприятия

      • Обзор
      • UX конференция
      • Сертификат UX
      • Внутреннее обучение
      • 1-часовые онлайн-семинары
    • Консультации

      • Обзор
      • Пользовательское тестирование
      • Индивидуальные исследования пользователей
      • Обзор экспертов
      • Внутреннее обучение UX
      • Интенсивно-прикладные мастерские
      • Основной доклад
    • Отчеты и книги

    • О NN / г

      • Обзор
      • Люди
      • История
      • Клиенты
      • Новости
      • Свяжитесь с нами
    • Войти

    Поиск

    • Проворный
    • Процесс проектирования
    • Электронная торговля
    • Интранет
    • Навигация
    • Психология и UX
    • Методы исследования
    • Пользовательское тестирование
    • Веб-удобство использования
    • Написание для Интернета
    • Просмотреть все темы
    • Показать меньше тем
    • Доступность
    • Проворный
    • Аналитика и показатели
    • Дизайн приложений
    • Сайты B2B
    • Паттерны поведения
    • Брендинг
    • Контентная стратегия
    • Корпоративные сайты
    • Путешествия с клиентами
    • Паттерны проектирования
    • Процесс проектирования
    • Электронная торговля
    • Электронная почта
    • Eyetracking
    • Эвристическая оценка
    • Взаимодействие человека с компьютером
    • Идея
    • Информационная архитектура
    • Дизайн взаимодействия
    • Международные пользователи
    • Интранет
    • Менеджмент
    • Мобильный и планшет
    • Навигация
    • Некоммерческие веб-сайты
    • Персоны
    • Убедительный дизайн
    • Прототип
    • Психология и UX
    • Удаленная работа UX
    • Методы исследования
    • Искать
    • Социальные сети
    • Стратегия
    • Пользовательское тестирование
    • UX Юмор
    • UX-команды
    • Визуальный дизайн
    • Веб-удобство использования
    • Написание для Интернета
    • Молодых пользователей
    • 10 Эвристика юзабилити для проектирования пользовательского интерфейса
    • Когда использовать какие методы исследования пользовательского опыта
    • Отображение эмпатии: первый шаг в дизайнерском мышлении
    • Чертежи услуг

    • : определение
    • Между субъектами vs. Дизайн внутрипредметного исследования
    • Юзабилити 101: Введение в юзабилити
    • Памятка по исследованиям UX
    • Сравнение методов сопоставления UX

    • : шпаргалка
    • Карта путешествия 101
    • Почему вам нужно тестировать только 5 пользователей
    • Контроль и свобода пользователей (эвристика удобства использования № 3)
    • Шесть шагов к созданию дорожных карт
    • Изображения помогают международным покупателям перемещаться по сайтам электронной торговли
    • Гибкость и эффективность использования: объяснение седьмой эвристики удобства использования
    • 3 шага для начала работы с DesignOps
    • Информационный аромат
    • Кто вдохновил Якоба Нильсена?
    • Конструктивные неровности и функциональная устойчивость
    • Обработка ошибок на мобильных устройствах: отображение предупреждений
    • Отказ от лучших практик в UX
    • Брюс Тоньяццини
    • Дон Норман
    • Якоб Нильсен
    • Посмотреть всех авторов
    • Посмотреть меньше авторов
    • Raluca Budiu
    • Патти Кайя
    • Тереза ​​Фессенден
    • Сара Гиббонс
    • Келли Гордон
    • Аврора Харлей
    • Алита Джойс
    • Анна Кейли
    • Лекси Кейн
    • Кейт Каплан
    • Рэйчел Краузе
    • Page Laubheimer
    • Feifei Liu
    • Hoa Loranger
    • Кейт Моран
    • Якоб Нильсен
    • Дон Норман
    • Кара Пернице
    • Кристиан Рорер
    • Мария Розала
    • Ким Салазар
    • Кэти Шервин
    • Брюс Тоньяццини
    • Кэтрин Уитентон

    .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *