С чего начинается процесс разработки программ: Этапы разработки программы – как создаются и проектируются программы? | Info-Comp.ru
Этапы разработки программного обеспечения — Azoft
В этой статье мы расскажем, как у нас построена работа над проектами и какой результат ждёт вас после каждого этапа разработки ПО. Когда обе стороны понимают, как происходит разработка, это помогает заказчику получить то, что он ожидал, а нам — выполнить свои обязательства качественно и в срок.
Работу над проектом мы в Azoft делим на шесть этапов:
- оценка;
- аналитика;
- дизайн;
- разработка;
- тестирование;
- поставка и поддержка.
Не все этапы обязательны в полном объёме. Например, заказчик может обратиться к нам с проработанными требованиями и готовым дизайном. Тогда мы можем не участвовать на этапе аналитики и дизайна.
Далее расскажем, в чём заключается суть каждого из этапов.
Оценка и планирование
Всё начинается с того, что клиент обращается к нам с идеей своего продукта. Это может быть документ в несколько страниц с детальным описанием проекта или в пару абзацев, описывающих общую концепцию.
Сначала с клиентом связывается аккаунт-менеджер. Он задаёт вопросы лично, на созвонах или по почте, чтобы понять суть проекта. Ключевая задача здесь — разобраться, насколько полны и чётко сформулированы требования к проекту.
Зачем нужны требования и почему они важны? При заказе услуги, работы или товара требования помогают получить то, что мы ожидаем, то есть те свойства и функциональность, которые делают их полезными для нас. В повседневной жизни мы постоянно формулируем требования. Представьте, что вам нужно купить ноутбук. Чтобы продавец подобрал наиболее подходящее устройство, вам нужно определить, как вы будете им пользоваться (для поиска информации в интернете, работы с фото и видеоредакторами, для игр), выбрать удобный размер и т. д. Конечно, в этом случае документирование требований излишне — достаточно их помнить. Однако при создании компьютерной программы, которая должна выполнять множество действий, без разработки документа, описывающего требования, не обойтись. Если разработчики не получат полного и ясного описания того, что должна делать программа, то результат скорее всего не обрадует заказчика.
На основе исходных требований мы готовим предварительную оценку на разработку. Если она устраивает заказчика, то мы договариваемся о том, что нужно детализировать требования, и дальше начинается этап аналитики.
Также на данном этапе аккаунт-менеджер уточняет пункты договора, утверждает порядок оплаты и все важные детали совместной работы. В зависимости от целей проекта Azoft предлагает клиентам один из двух принципов работы с проектами:
Fixed price. Подходит для проектов с понятными и детальными требованиями, которые закреплены в техническом задании. В этом случае бюджет и временные рамки на разработку проекта утверждается после аналитики и повторной оценки. Аналитика и переоценка проводятся для более глубокого понимания задач.
Time and material. Модель расчета подходит для проектов, где требуется регулярно менять задачи в поисках нужного решения. Клиент платит за фактически отработанные командой часы.
Когда обе стороны полностью определились с тем, как пойдет работа, аккаунт-менеджер высылает подписанный с нашей стороны договор. К проекту подключается проджект-менеджер. Он управляет командой, следит за качеством и сроками.
Таким образом на данном этапе мы вместе с клиентом определяем:
- предварительную оценку проекта и скоуп задач;
- предварительный бюджет проекта.
Аналитика
Чтобы мы вместе с заказчиком имели одинаковое представление о результате, цели и функциях продукта, в проект включается аналитик.
Цель этапа в том, чтобы собрать требования клиента к проекту и перевести их на язык разработки. Перечень задач аналитика варьируется в зависимости от масштаба проекта и степени проработанности исходных требований, но в целом сводится к следующим задачам:
- определить бизнес-задачи клиента;
- прояснить, формализовать и согласовать требования;
- определить и согласовать приоритеты на основе требований и ограничений.
Существует мнение, что работа аналитика заканчивается после подготовки документов и старта разработки приложения. Это могло бы быть верно при отсутствии изменений в процессе разработки. Поэтому в действительности аналитика после старта разработки не заканчивается, а продолжается. Аналитики — связующее звено между командой разработки и заказчиком. Они помогают отвечать на возникающие вопросы с обеих сторон.
Обычно каждый уверен в том, что понимает, какие функции нужны. Однако когда аналитик начинает описывать зачем нужны эти функции, выясняется, что разные стейкхолдеры (заинтересованные лица) видят задачу по-разному. Более того, чем конкретнее становится описание приложения и его поведения, тем становится понятнее, что стейкхолдеры и эту часть видят по-разному. Поскольку в реальности приложение будет работать определённым образом, то значительно дешевле сначала разобраться и проработать на этапе аналитики, как именно тот или иной функционал будет работать. На этапе разработки вновь выявленные требования могут значительно увеличить сроки проекта.
Если на проекте выделенного аналитика нет, то это зачастую приводит к многократным правкам проекта из-за недопонимания между заказчиком и разработчиками. Это не является чьим-либо злым умыслом. Проблема кроется в восприятии, терминах и понятийном аппарате в целом. Тем не менее недопонимание может привести к нарушению сроков, «раздутому» бюджету проекта и несоответствию результата целям бизнеса. Когда же на проекте есть аналитик, то заказчик может управлять тем, как доносятся требования по задачам бизнеса до разработки.
В процессе работы аналитика, как правило, возникают следующие артефакты:
1) Vision (Видение проекта). Определяет границы проекта. На его основе определяется набор необходимых артефактов.
2) Скоуп задач. Входит в Vision. Позволяет определить, кто и какие задачи будет выполнять.
3) Описание сущностей. Описывает логические связи между сущностями.
4) Диаграммы. Используются для наглядного описания процессов, алгоритмов, взаимосвязей между сущностями и т.д.
5) Прототипы. Представляют вариант реализации интерфейса. Нужны для того, чтобы понять основной функционал, определить путь пользователя и избежать грубых ошибок в юзабилити.
6) Описание поведения интерфейса. Нужно для более чёткого понимания, как работает интерфейс, какие существуют правила и как обрабатываются альтернативные сценарии.
7) Нефункциональные требования. Касаются производительности, безопасности и т.д.
8) Пользовательская документация. Объясняет, как пользователю использовать программу.
Пример прототипа, который мы создали в процессе работы над информационной системой iFarm
Результат работы аналитика — это предсказуемый финал проекта, который соответствует поставленным задачам.
Дизайн
Цель этапа дизайна — сделать продукт приятным, понятым и удобным для использования.
На этом этапе дизайнер активно взаимодействует с аналитиком. Они вместе проектируют дизайн на основе подготовленного набора артефактов.
Бывает, что клиенты обращаются к нам с готовым дизайном. Если дизайна у заказчика нет, мы создаём UI/UX с нуля. После того как аналитик продумал логику и передал дизайнеру основу графического интерфейса, дизайнер приступает к работе над визуальной частью. Дизайнер отвечает за то, как интерфейс будет выглядеть и реагировать на действия пользователя. Для этого создаётся карта экранов, графические элементы, детализированный прототип с учётом различных сценариев использования.
Сначала мы вместе с клиентом утверждаем дизайн-концепцию. Суть в том, чтобы примерить фирменный стиль на нескольких “голых” прототипах. Показываем наш вариант клиенту, получаем от него обратную связь и с учётом неё дорабатываем экраны. Дальше работаем с оставшейся частью прототипов в выбранном направлении.
По запросу клиента мы создаём интерактивные прототипы. С помощью них клиент может увидеть, как будет выглядеть продукт и как он будет реагировать на действия пользователей с учётом запланированных функций.
Пример дизайна, который мы создали в процессе работы над информационной системой iFarm. Познакомьтесь с другими нашими работами на Behance.
Результатом этапа становятся утверждённые с клиентом дизайн-макеты, которые мы передаем в разработку.
Разработка
Дальше с макетом работает фронтенд-разработчик. Его задача — “оживить” макеты дизайнеров так, чтобы получить интерфейс, с которым может взаимодействовать пользователь. Он верстает элементы интерфейса, логически и функционально связывая экраны между собой с помощью HTML-разметки, таблицы стилей CSS, языков программирования, фреймворков и библиотек.
Результат работы — статичные страницы будущего сайта, сверстанные точно по макетам. Мы придерживаемся подхода pixel perfect. Одновременно с работой над клиентской стороной пользовательского интерфейса фронтенд- команда готовит требования для бэкенд-разработчиков.
Бэкенд — это набор аппаратно-программных средств, с помощью которых реализована логика работы приложения. Иными словами, это то, что происходит вне браузера и компьютера пользователя. К бэкенду относится панель администрирования, управление данными, логика их передачи по запросам фронтенда.
Задача бэкенд-разработки — сделать так, чтобы ответ от сервера доходил до клиента и спроектированные блоки функционировали нужным образом. А также создать для заказчика удобную и безопасную среду для наполнения и обновления контента на сайте.
По мере написания кода наши разработчики следят за его качеством. Качественный код ускоряет разработку: сокращается время на отладку и исправление ошибок. Основные практики, которые мы применяем — это линтеры для поиска ошибок и некорректного оформления при разработке, и CodeReview, чтобы обеспечить качество кода и обмениваться знаниями внутри команды. В зависимости от специфики проекта или предпочтений заказчика мы можем придерживаться различных стандартов оформления — CodeStyle. Такие стандарты помогают оформлять код единообразно, что упрощает его восприятие.
Наши Senior разработчики имеют коммерческий опыт на всех наиболее популярных фреймворках: Angular, React, Vue. Backend Senior разработчики — на Yii2, Laravel и Symfony соответственно.
Результатом этапа является ПО, готовое к тестированию.
Тестирование
Чтобы убедиться, что все части программного обеспечения работают так, как ожидается, необходимо тестирование.
QA инженеры проверяют в первую очередь соответствие дизайну, техническому заданию, готовят тестовую документацию, проводят ручное и автоматизированное тестирование. Всё это помогает проверить работу разных программных частей проекта и минимизировать баги.
QA инженеры приступают к работе, когда клиент присылает требования к проекту или его части, за которую мы отвечаем. Перед тем как тестировать проект, тестировщики анализируют документацию, уточняют требования и участвуют в обсуждениях по ходу разработки. Подробнее о том, как мы тестируем, мы рассказали в статье про тестирование.
Благодаря работе тестировщиков заказчики:
- экономят бюджет. Баги, обнаруженные после запуска продукта, обойдутся дороже, чем на более ранних этапах.
- обеспечивают безопасность бизнеса. Например, если ПО включает в себя платёжную систему, важно проверить все возможные случаи, чтобы при переводе денег они поступили на нужный счёт.
- защищают репутацию бизнеса. Если выпустить продукт с багами и пользователи не будут довольны работой с ним, в дальнейшем их будет сложно убедить, что проблема решена и они могут снова им пользоваться.
В итоге получается продукт, готовый к выпуску на рынке.
Поставка и поддержка
Когда продукт протестирован, мы передаём готовый проект клиенту, например, разворачиваем проект на сервере клиенту. Также мы помогаем выбрать сервер и его конфигурирование.
После релиза Azoft не заканчивает участвовать в жизни проекта. Мы предоставляем бесплатную гарантийную поддержку проекта на год с момента запуска. Если вдруг потребуется что-то исправить, мы сделаем это бесплатно и в приоритетном режиме.
Если в течение первых месяцев жизни программы становится ясно, где и что нужно допилить или переделать, то мы предлагаем следующие варианты: заключить договор на сопровождение или запустить новую фазу разработки с учётом новых данных.
Заключение
Разработка программ — многоэтапный и сложный процесс. Этапы могут пересекаться друг с другом и быть параллельны. Подходы к разработке могут совмещаться друг с другом. Многое зависит от конкретных целей и задач проекта. Расскажите нам об идее своего проекта, и мы поможем вам выбрать наиболее подходящее техническое решение и организовать работу так, чтобы получить качественный результат в срок.
Этапы разработки программного обеспечения — Информатика, информационные технологии
Существует государственный стандарт, который устанавливает стадии разработки программ и программной документации для вычислительных машин, комплексов и систем независимо от их назначения и области применения.
Процесс разработки программного обеспечения можно разбить на этапы (фазы), показанные на рис. 15.
Рис. 15. Этапы разработки программного обеспечения
Работа над программным обеспечением начинается с составления документа, называемого “Задание на разработку программного обеспечения (техническое задание)”.
Только при решении простейших задач указанные на рис. 15 этапы выполняются друг за другом в той последовательности, в которой они изображены. В общем же случае процесс разработки программного обеспечения требует постоянного возврата к предыдущим этапам и внесения изменений. В связи с этим на рис. 15 прямоугольники с названиями этапов соединены не только вертикальными линиями, но и линиями, обеспечивающими возврат с любого этапа на этап, находящийся выше него. Это значит, что каждый этап может быть выполнен заново.
Техническое задание
Техническое задание включает в себя три этапа: 1) обоснование необходимости разработки программы; 2) проведение научно-исследовательских работ; 3) разработка и утверждение технического задания.
Прежде чем приступить к разработке технического задания, заказчик должен правильно поставить задачу. Постановка задачи заключается в создании математической или логической модели исследуемого процесса или явления. Здесь же необходимо определить, правильным ли будет программное решение. Может быть лучше воспользоваться известным прикладным программным обеспечением (системами управления базами данных, табличными процессорами и т.д.) или просто решить задачу с помощью нескольких листков бумаги и карандаша. Если делается выбор в пользу разработки новой программы, то необходимо выбрать и обосновать критерии эффективности и качества разрабатываемой программы. В случае разработки крупного программного комплекса обосновывается необходимость проведения научно-исследовательских работ.
В результате проведения научно-исследовательской работы определяются структуры входных и выходных данных, осуществляется предварительный выбор методов решения задачи и обосновывается принципиальная возможность решения поставленной задачи.
Разработка и утверждение технического задания включает в себя:
— определение требований к программе;
— разработку технико-экономического обоснования разработки программы;
— определение стадий, этапов и сроков разработки программы и документации на нее;
— выбор языков программирования;
— определение необходимости проведения научно-исследовательских работ на последующих стадиях;
— согласование и утверждение технического задания.
В серьезных фирмах результатом данной фазы является общее описание системы, включающее в себя требования к программе и требования к надежности программы. Требования к программе или программному изделию дают ответы на следующие вопросы:
— Какими должны быть входные данные?
— Какие данные являются корректными и какие ошибочными?
— Кто будет использовать программное обеспечение, и каким должен быть интерфейс (средство общения с пользователем)?
— Какие упрощения, предположения и допущения можно сделать по отношению к программам?
— Какими должны быть выходные данные?
Требования к надежности определяют обеспечение надежного функционирования программы. Определяются ошибки, которые необходимо выявлять, и сообщения, которые желательно выдавать пользователю при наличии ошибок. Перечисляются все особые ситуации, требующие дополнительного учета и специального рассмотрения.
Техническое задание определяет условия эксплуатации (температура окружающего воздуха, относительная влажность и т.п. для выбранных типов носителей данных), при которых должны обеспечиваться заданные характеристики, а также вид обслуживания, необходимое количество и квалификацию персонала.
Проектирование
Проектирование включает в себя два этапа: эскизный проект и технический проект. Эскизныйпроект заключается в предварительной разработке структуры входных и выходных данных и общего описания алгоритма решения задачи. При разработке технического проекта структуры входных и выходных данных уточняются и определяются их формы представления. Уточняется алгоритм решения задачи, определяется семантика и синтаксис языка программирования и разрабатывается структура программы. Оба этапа сопровождаются пояснительной запиской и технико-экономическим обоснованием.
Процесс проектирования является важнейшей частью любой программной разработки. В соответствии с технологией нисходящего структурного программирования программный комплекс разбивается на небольшие части – программные модули. Каждая отдельная подзадача должна быть относительно независимой и представлять собой некоторый законченный модуль программы. Модульность программы является ее важным свойством. В процессе проектирования важно детально описать не только цель каждого модуля, но и потоки данных между модулями. Каждый модуль характеризуется двумя важными свойствами:
1) он имеет средства взаимодействия с внешней средой;
2) он является самостоятельной программной единицей, выполняющей определенные функции.
Частью интерфейса являются потоки данных. При описании их для каждого модуля необходимо дать ответы на следующие вопросы:
— Какие данные можно передать в модуль до начала его выполнения?
— Какие упрощения, предположения и допущения сделаны по отношению к модулю?
— Что будет с данными после того, как модуль завершит свою работу?
На рис. 16 приведен пример описания модуля, используемого для сортировки целых чисел.
Рис. 16. Пример спецификации модуля
После разработки общей структуры программы необходимо установить, какие библиотечные средства можно использовать и какие новые процедуры необходимо разработать. Далее разрабатываются алгоритмы вновь создаваемых модулей.
Определяется схема взаимодействия программных модулей, называемая схемой потоков данных программного комплекса. Разрабатывается план и исходные данные для тестирования программных модулей и программного комплекса целиком.
Рабочий проект
Рабочий проект включает в себя разработку программы и программной документации, а также испытание программы.
Этап кодирования алгоритмов заключается в переводе алгоритмов, разработанных для каждого программного модуля, в программы на конкретном языке программирования. Этот этап не является главным в программировании, хотя и продолжается на протяжении остатка жизненного цикла продукта. Если этап проектирования выполнен добросовестно, интерфейсы модулей определены верно, то кодирование осуществляется достаточно быстро.
Кодирование должно быть простым. Должен соблюдаться так называемый KISS–принцип: Keep It Simple, Stupid (делай проще, глупец!). Изощренное программирование может обойтись слишком дорого при отладке и модификации программы. Необычное кодирование (например, использование скрытых возможностей машины) часто препятствует отладке программы и, конечно, затрудняет ее использование другими программистами.
Опытные программисты создают универсальные программы. Универсальностью называют независимость программы от конкретного набора данных. Например, универсальная программа использует в качестве параметров переменные, а не константы, обрабатывает вырожденные случаи и т.д. Универсальность программы экономит время по дальнейшей работе над ней и обеспечивает широкие возможности по использованию. Разрабатывая такие программы можно предвидеть будущие изменения в спецификациях этой программы.
Входные форматы должны быть разработаны с учетом максимального удобства для пользователя и минимальной возможности ошибок. Порядок переменных и форматы данных, привычные для пользователя, помогут избежать ошибок и облегчат использование программ. Форматы выходных данных могут сильно различаться. Иногда даются четкие инструкции и выходные данные подгоняются под определенный стандарт. Результаты расчета должны быть удобочитаемыми и понятными для непрограммиста.
После того, как модули или программа закодированы, наступает момент ее запуска на выполнение. Наиболее вероятным результатом этого будет сообщение об ошибке. Ошибка отыскивается, исправляется, и все повторяется сначала. Данный процесс называется отладкой. Отладка заключается в определении мест возникновения ошибок, выяснении причины их возникновения и устранении этих причин.
Тестирование обычно производится в два этапа. Первый – это тестирование модулей. Проверяется поведение и надежность каждого модуля. Второй этап – тестирование интеграции. Модули компонуются в общую программу, и разработчик убеждается в правильности взаимодействия модулей. Программа, управляющая работой модулей, тестируется отдельно от модулей. Сами модули в ней заменяются так называемыми “заглушками”. В “модуле–заглушке” имеется вход, выход и необходимое сообщение. Сообщение может содержать перечень переданных модулю данных.
Тестирование – это проверка программы на работоспособность. Отладка имеет место тогда, когда программа со всей очевидностью работает неправильно. Отладка начинается всегда в предвидении отказа программы. Если же оказывается, что программа работает верно, то она тестируется. Часто случается так, что после прогона тестов программа вновь должна быть подвергнута отладке. Таким образом, тестирование устанавливает факт наличия ошибки, а отладка выявляет ее причину.
Для несложного приложения тестирование может оказаться простым. Большие программы поддаются тестированию с трудом. Возможны устранения ошибок на этапе эксплуатации.
Можно привести примеры ошибок в программных комплексах, допущенных при разработке и не обнаруженных при тестировании.
В “Справочнике Microsoft Works” в интерактивной помощи пакета интегрированной обработки информации Works 2.0 функция ЕСЛИ описана как
ЕСЛИ (Условие, ЗначениеЛожь, ЗначениеИстина).
Однако, в действительности, работа данной функции должна иметь следующий вид: ЕСЛИ (Условие, ЗначениеИстина, ЗначениеЛожь). В “Руководстве пользователя Microsoft Works для Windows” пакета Works 3.0 эта ошибка исправлена.
Неудача при запуске первого американского спутника к Венере случилась, вероятнее всего, из–за ошибки в программе – вместо требуемой в операторе точки программист поставил запятую. Оператор на языке Фортран был записан
Do 50 i = 12,525
На самом же деле он должен был выглядеть следующим образом:
Do 50 i = 12.525
Причиной осложнений, возникших при возвращении на Землю советско–афганского и советско–французского экипажей, явились ошибки, допущенные в программном обеспечении бортовых компьютеров.
В 1983 году произошло наводнение в юго–западной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо.
Для того чтобы пользователи не попали в ситуацию, когда программа работает, но делает не то, что должна делать, проводится тестирование для выявления “скрытых” ошибок. При тестировании используются планы и данные, разрабатываемые уже на этапе проектирования. О тестировании необходимо думать на протяжении всего периода разработки программы (табл. 2).
Таблица 2
Виды и причины ошибок
Вид ошибки | Причина ошибки |
Неправильнаяпостановка задачи | Неверно сформулированная задача |
Неверный алгоритм | Выбран алгоритм, приводящий к неточному или неэффективному решению задачи |
Семантическая ошибка | Смысловая ошибка в программе, не связанная с нарушением синтаксиса. Например, неверно определены переменные, входные данные не согласованы с граничными значениями, предусмотренными в алгоритме, неверно используется правильно записанный оператор языка программирования и др. Ошибки этого типа обнаруживаются на этапе тестирования и отладки |
Синтаксические ошибки (ошибки времени компиляции) | Ошибки программирования, заключающиеся в нарушении грамматических конструкций языка. Ошибки этого типа обнаруживаются транслятором |
Ошибки времени выполнения | Ошибки, возникающие при выполнении программы. Различаются ошибки ввода–вывода (например, не найден файл, недостаточно памяти для работы программы и др.) и фатальные ошибки, приводящие к немедленному прекращению работы программы (например, деление на ноль, ошибки при проверке границ, переполнение при выполнении операций с плавающей запятой и др.) |
Ошибки в данных | Неудачное определение возможного диапазона изменения входных данных |
Ошибки в документах | Документация пользователя не соответствует действующему варианту программы |
В процессе выполнения всех вышеописанных этапов накапливается определенный опыт, который даст основание для усовершенствования программы.
Стадия “Рабочий проект” заканчивается проведением предварительных государственных, межведомственных, приемо-сдаточных и других видов испытаний. Программная документация корректируется в соответствии с результатами испытаний.
Внедрение
Внедрение – это этап жизненного цикла программы, в котором осуществляется передача программы и программной документации заказчику. В процессе эксплуатации может возникнуть необходимость добавления в программный комплекс новых функций, устранение ошибок, обнаруженных в процессе эксплуатации, и т.д. Данный тип работ называется сопровождением.
Примером добавления новых функций в программный комплекс является текстовый редактор Лексикон 1.3. Данная версия получена из текстового процессора 1. 2 путем включения в него функций – импортирование графических файлов в формате PCX в текстовые файлы.
Документация
На рис. 15 прямоугольник, отражающий каждый этап разработки программы, соединен с прямоугольником “Документ”. При этом стрелки направлены в обе стороны. Идеи и решения, используемые на каждом этапе, влияют на документацию, сопровождающую этап, так же, как и документация влияет на идеи и решения.
Разработка документации начинается сразу же с момента начала разработки программного обеспечения. Документация классифицируется по своему назначению и может быть разбита на несколько групп, по крайней мере, на две группы. Первая группа документов предназначена для разработчиков программного обеспечения и специалистов, которые будут его сопровождать, а вторая – для пользователей программного обеспечения.
Первая группа в качестве основных документов включает задание на разработку программного обеспечения (техническое задание), спецификацию и описание программы.
Техническое задание должно содержать следующие разделы:
— введение;
— основания для разработки;
— назначение разработки;
— требования к программе и программному изделию;
— требования к программной документации;
— технико-экономические показатели;
— стадии и этапы разработки;
— порядок контроля и приемки.
В техническое задание допускается включать приложения, где при необходимости приводят перечень научно-исследовательских и других работ, обосновывающих разработку, схемы алгоритмов и другие документы, которые могут быть использованы при разработке.
Спецификация является основным программным документом и составляется в соответствии с ГОСТ. Спецификация представляет собой таблицу, состоящую из граф: “Обозначение”, “Наименование”, “Примечание”. В графе “Обозначение” записывают обозначения перечисляемых документов и программ. В графе “Документация” указывают наименования и вид документа или программы. В графе “Примечание” – дополнительные сведения, относящиеся к записанным в спецификации программам.
Описание программы содержит:
– прокомментированные исходные тексты (листинги) модулей программы и управляющего модуля;
– схему разбиения программного комплекса на программные модули;
– схему потоков данных программного комплекса;
– схему взаимодействия программных модулей;
– планы и данные для тестирования программного комплекса;
– другие материалы, иллюстрирующие проект, например, схемы алгоритмов.
Второй вид документов содержит информацию, необходимую для работы с программным комплексом. Эти документы могут оформляться в печатном виде и (или) “встраиваться” в программный комплекс.
Что дальше?
Дисциплина программирования – это важный фактор успеха разработки программных продуктов. Принципы разработки программ, приведенные в последней главе, справедливы для процедурных языков программирования и для объектно-ориентированных языков.
Версия 6.0 Турбо Паскаля, выпущенная в 1990 году, наглядно продемонстрировала преимущества объектно–ориентированной технологии программирования. В комплект поставки новой версии вошла библиотека Turbo Vision, на которой многие тысячи программистов осваивали принципы ООП. За короткий срок появилось множество коммерческих программ, построенных на базе Turbo Vision. Эта библиотека поистине революционизирует процесс разработки интерактивных программ, сокращая до минимума сроки и обеспечивая высочайшее качество программ.
Эволюция технических средств персональных компьютеров привела к повсеместному вытеснению старой “доброй” ОС MS–DOS значительно более мощными системами Windows, программирование для которых существенно сложнее, чем программирование для MS–DOS. С выпуском системы Borland Pascal with Objects корпорация Borland предоставила в распоряжение программистов весьма эффективные средства разработки и отладки программ, рассчитанные на работу под управлением операционной оболочки Windows. Но все же несколько лет назад о создании своих собственных программ под Windows рядовому программисту оставалось только мечтать.
Дальнейшим развитием языка Паскаль является объектно-ориентированный язык Object Pascal, который лежит в основе новой системы программирования Delphi. Delphi – это система скоростной разработки приложений (Rapid Application Development). В этом новом мире RAD программисты используют инструменты, которые более наглядны и интуитивно понятны. Модульность, локализация, абстракция и сокрытие данных – свойства усовершенствованной объектной модели Object Pascal, которые позволяют создавать удобные, надежные и эффективные приложения для Windows при минимальной затрате времени.
Статьи к прочтению:
Заключеные Что такое ЭТАП Как проходит тюремный этап и прибытие в зону!!!
Похожие статьи:
Жизненный цикл программного обеспечения
Во времена возникновения процедурных языков программирования, если программист получал задачу, то он сразу садился за компьютер и начинал писать код….
Этапы разработки сложных программ
Отдельный человек не в состоянии полностью осмыслить и построить программное обеспечение большой системы. В данном контексте под построением программного…
1.2. Технологии разработки программного обеспечения
Технология разработки программного обеспечения – это совокупность процессов и методов создания программного продукта. Согласно другому определению, технология разработки программного обеспечения – это система инженерных принципов для создания экономичного ПО с заданными характеристиками качества.
Любая технология разработки ПО базируется на некоторой методологии или совокупности методологий. Под методологией понимается система принципов и способов организации процесса разработки программных средств.
Сейчас используется два базовых принципа разработки ПС: модульный и объектно-ориентированный.
Разработка модульных ПС основывается на использовании структурных методов проектирования, целью которых является разбиение по некоторым правилам проектируемого программного средства на структурные компоненты. К структурным методам проектирования относятся такие классические методы, как структурное программирование, нисходящее проектирование, расширение ядра, восходящее проектирование и их комбинации, а также ряд современных методов и методологий разработки ПО.
Структурное программирование – методология и технология разработки программных комплексов, основанная на принципах программирования «сверху-вниз» и модульного программирования. При этом логика алгоритма и программы используют три основные структуры: последовательное выполнение, ветвление, повторение.
Нисходящее программирование – методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой.
Метод расширения ядра – метод восходящего программирования, при котором основное внимание уделяется выявлению множества вспомогательных модулей, а не определению функции всей программы в целом.
Восходящее программирование – методика разработки программ, при которой крупные блоки собираются из ранее созданных мелких блоков. Восходящее программирование начинается с разработки ключевых процедур и подпрограмм, которые затем постоянно модифицируются.
Объектно-ориентированная разработка базируется на применении объектных методов, к которым относятся методологии объектно-ориентированного анализа, проектирования и программирования.
Объектно-ориентированное программирование – технология программирования, при которой программа рассматривается как набор дискретных объектов, содержащих, в свою очередь, наборы структур данных и процедур, взаимодействующих с другими объектами.
Жизненный цикл ПО
Под жизненным циклом программного средства или системы подразумевается совокупность процессов, работ и задач, включающая в себя разработку, эксплуатацию и сопровождение программного средства или системы и охватывающая их жизнь от формулирования концепции до прекращения использования. Каждый процесс жизненного цикла разделен на набор работ, а работа – на набор задач.
Основные процессы жизненного цикла – это заказ; поставка; разработка; эксплуатация; сопровождение.
Процесс разработки содержит тринадцать работ:
1) подготовка процесса разработки;
2) анализ требований к системе;
3) проектирование системной архитектуры;
4) анализ требований к программным средствам;
5) проектирование программной архитектуры;
6) техническое проектирование программных средств;
7) программирование и тестирование программных средств;
8) сборка программных средств;
9) квалификационные испытания программных средств;
10) сборка системы;
11) квалификационные испытания системы;
12) ввод в действие программных средств;
13) обеспечение приемки программных средств.
Стандарты в области разработки ПО
В настоящее время разрабатываются и постоянно обновляются международные и национальные стандартs, посвященныt различным аспектам жизненного цикла ПО.
В 2008 г. Международной организацией по стандартизации ИСО принята вторая редакция основного в данном направлении международного стандарта ISO/IEC 12207:2008 «Системная и программная инженерия – Процессы жизненного цикла программных средств» (System and software engineering – Software life cycle processes).
Российский аналог этого стандарта – ГОСТ Р ИСО/МЭК 12207-2010 «Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств». Данный стандарт, используя устоявшуюся терминологию, устанавливает общую структуру процессов жизненного цикла программных средств, на которую можно ориентироваться в программной индустрии. Стандарт определяет процессы, виды деятельности и задачи, которые используются при приобретении программного продукта или услуги, а также при поставке, разработке, применении по назначению, сопровождении и прекращении применения программных продуктов.
Основными международными стандартами, регламентирующими вопросы качества ПС и их оценки, являются следующие серии стандартов:
- ISO/IEC 9126–1–4:2001–2004 «Программная инженерия – Качество продукта».
- ISO/IEC 14598–1–6:1998–2001 «Информационная (программная) инженерия – Оценка программного продукта».
Единая система программной документации (ЕСПД) – комплекс государственных стандартов Российской Федерации, устанавливающих взаимосвязанные правила разработки, оформления и обращения программ и программной документации.
В стандартах ЕСПД устанавливают требования, регламентирующие разработку, сопровождение, изготовление и эксплуатацию программ, что обеспечивает возможность:
- унификации программных изделий для взаимного обмена программами и применения ранее разработанных программ в новых разработках;
- снижения трудоемкости и повышения эффективности разработки, сопровождения, изготовления и эксплуатации программных изделий;
- автоматизации изготовления и хранения программной документации.
В настоящее время применение ЕСПД на территории РФ носит только рекомендательный характер.
Жизненный цикл разработки программного обеспечения
Жизненный цикл разработки программного обеспечения, для краткости SDLC, представляет собой четко определенную, структурированную последовательность этапов разработки программного обеспечения для разработки предполагаемого программного продукта.
Деятельность SDLC
SDLC предлагает ряд шагов, которые необходимо выполнить для эффективной разработки и разработки программного продукта. Каркас SDLC включает в себя следующие этапы:
связь
Это первый шаг, когда пользователь инициирует запрос на желаемый программный продукт. Он связывается с поставщиком услуг и пытается договориться об условиях. Он подает свой запрос в организацию, предоставляющую услуги, в письменном виде.
Сбор требований
Этот шаг вперед команда разработчиков программного обеспечения работает над продолжением проекта. Команда проводит дискуссии с различными заинтересованными сторонами из проблемной области и старается предоставить как можно больше информации об их требованиях. Требования рассматриваются и разделяются на пользовательские требования, системные требования и функциональные требования. Требования собраны с использованием ряда методов, как указано —
- изучение существующей или устаревшей системы и программного обеспечения,
- проведение опросов пользователей и разработчиков,
- ссылаясь на базу данных или
- Сбор ответов из анкет.
Технико-экономическое обоснование
После сбора требований команда разрабатывает примерный план процесса разработки программного обеспечения. На этом этапе команда анализирует, можно ли создать программное обеспечение для удовлетворения всех требований пользователя и существует ли вероятность того, что программное обеспечение больше не будет полезным. Выясняется, является ли проект финансово, практически и технологически осуществимым для организации. Существует множество доступных алгоритмов, которые помогают разработчикам сделать вывод о целесообразности программного проекта.
Системный анализ
На этом этапе разработчики решают план своего плана и стараются найти лучшую модель программного обеспечения, подходящую для проекта. Системный анализ включает в себя понимание ограничений программного продукта, проблем, связанных с системой обучения, или изменений, которые необходимо сделать в существующих системах, заранее, выявление и учет воздействия проекта на организацию и персонал и т. Д. Команда проекта анализирует масштаб проекта и планирует график и ресурсы соответственно.
Разработка программного обеспечения
Следующим шагом является полное знание требований и анализа на столе и разработка программного продукта. Входные данные от пользователей и информация, собранная на этапе сбора требований, являются входными данными этого этапа. Результат этого шага представлен в виде двух проектов; логический дизайн и физический дизайн. Инженеры производят метаданные и словари данных, логические диаграммы, диаграммы потоков данных и в некоторых случаях псевдокоды.
кодирование
Этот шаг также известен как этап программирования. Реализация разработки программного обеспечения начинается с написания программного кода на подходящем языке программирования и эффективной разработки безошибочных исполняемых программ.
тестирование
По оценкам, 50% всего процесса разработки программного обеспечения должно быть проверено. Ошибки могут испортить программное обеспечение с критического уровня до его удаления. Тестирование программного обеспечения выполняется разработчиками во время кодирования, а тщательное тестирование проводится экспертами на разных уровнях кода, таких как тестирование модулей, тестирование программ, тестирование продукта, внутреннее тестирование и тестирование продукта на стороне пользователя. Раннее обнаружение ошибок и их устранение — ключ к надежному программному обеспечению.
интеграция
Может потребоваться интеграция программного обеспечения с библиотеками, базами данных и другими программами. Этот этап SDLC связан с интеграцией программного обеспечения с объектами внешнего мира.
Реализация
Это означает установку программного обеспечения на компьютерах пользователей. Иногда программное обеспечение нуждается в настройках после установки на стороне пользователя. Программное обеспечение тестируется на мобильность и адаптивность, а проблемы, связанные с интеграцией, решаются в ходе реализации.
Эксплуатация и техническое обслуживание
Этот этап подтверждает работу программного обеспечения с точки зрения большей эффективности и меньшего количества ошибок. При необходимости пользователи проходят обучение или получают помощь по документации о том, как работать с программным обеспечением и как его поддерживать. Программное обеспечение поддерживается своевременно путем обновления кода в соответствии с изменениями, происходящими в пользовательской среде или технологии. Эта фаза может столкнуться с проблемами из-за скрытых ошибок и реальных неопознанных проблем.
диспозиция
С течением времени программное обеспечение может ухудшиться в плане производительности. Это может полностью устареть или может потребовать интенсивного обновления. Следовательно возникает насущная необходимость устранить основную часть системы. Этот этап включает в себя архивирование данных и необходимых программных компонентов, закрытие системы, планирование действий по утилизации и завершение работы системы в соответствующее время окончания системы.
Парадигма разработки программного обеспечения
Парадигма разработки программного обеспечения помогает разработчику выбрать стратегию разработки программного обеспечения. Парадигма разработки программного обеспечения имеет свой собственный набор инструментов, методов и процедур, которые четко выражены и определяют жизненный цикл разработки программного обеспечения. Несколько парадигм разработки программного обеспечения или моделей процессов определены следующим образом:
Модель водопада
Модель «Водопад» — самая простая модель парадигмы разработки программного обеспечения. В нем говорится, что все фазы SDLC будут функционировать один за другим линейно. То есть, когда первая фаза закончена, тогда только вторая фаза начнется и так далее.
Эта модель предполагает, что все выполнено и выполнено идеально, как и планировалось на предыдущем этапе, и нет необходимости думать о прошлых проблемах, которые могут возникнуть на следующем этапе. Эта модель не работает гладко, если на предыдущем шаге остались некоторые проблемы. Последовательный характер модели не позволяет нам вернуться назад и отменить или повторить наши действия.
Эта модель лучше всего подходит, когда разработчики уже проектировали и разрабатывали подобное программное обеспечение в прошлом и знают все его области.
Итерационная модель
Эта модель ведет процесс разработки программного обеспечения в итерациях. Он проектирует процесс разработки циклически, повторяя каждый шаг после каждого цикла процесса SDLC.
Программное обеспечение сначала разрабатывается в очень небольших масштабах, и выполняются все этапы, которые принимаются во внимание. Затем на каждой следующей итерации все больше функций и модулей разрабатываются, кодируются, тестируются и добавляются в программное обеспечение. Каждый цикл производит программное обеспечение, которое само по себе полно и имеет больше возможностей и возможностей, чем в предыдущем.
После каждой итерации управленческая команда может выполнить работу по управлению рисками и подготовиться к следующей итерации. Поскольку цикл включает в себя небольшую часть всего процесса разработки программного обеспечения, легче управлять процессом разработки, но он потребляет больше ресурсов.
Спиральная модель
Спиральная модель представляет собой комбинацию итерационной модели и модели SDLC. Это может выглядеть так, как будто вы выбираете одну модель SDLC и комбинируете ее с циклическим процессом (итерационная модель).
Эта модель учитывает риск, который часто остается незамеченным большинством других моделей. Модель начинается с определения целей и ограничений программного обеспечения в начале одной итерации. Следующим этапом является создание прототипа программного обеспечения. Это включает в себя анализ рисков. Затем для построения программного обеспечения используется одна стандартная модель SDLC. На четвертом этапе готовится план следующей итерации.
V — модель
Основным недостатком модели водопада является то, что мы переходим к следующему этапу только тогда, когда предыдущий завершен, и не было возможности вернуться назад, если что-то будет найдено неправильно на более поздних этапах. V-модель предоставляет средства тестирования программного обеспечения на каждом этапе в обратном порядке.
На каждом этапе создаются планы тестирования и тестовые наборы для проверки и валидации продукта в соответствии с требованиями этого этапа. Например, на этапе сбора требований группа тестирования подготавливает все контрольные примеры в соответствии с требованиями. Позже, когда продукт будет разработан и готов к тестированию, контрольные примеры этого этапа проверяют программное обеспечение на соответствие требованиям на данном этапе.
Это позволяет и проверке, и проверке идти параллельно. Эта модель также известна как модель верификации и валидации.
Модель большого взрыва
Эта модель является самой простой моделью по форме. Это требует мало планирования, много программирования и много средств. Эта модель концептуализирована вокруг большого взрыва вселенной. Как говорят ученые, после большого взрыва множество галактик, планет и звезд эволюционировали как событие. Аналогично, если мы соберем много программ и средств, вы сможете получить лучший программный продукт.
Для этой модели требуется очень небольшое количество планирования. Это не следует ни за каким процессом, или время от времени клиент не уверен в требованиях и будущих потребностях. Таким образом, входные требования являются произвольными.
Эта модель не подходит для больших программных проектов, но хороша для обучения и экспериментов.
Для подробного изучения SDLC и его различных моделей, нажмите здесь.
Этапы разработки программного обеспечения
Разработка любой программы, будь то небольшая процедура по обработке поступающей на консоль информации или комплексный программный продукт, состоит из нескольких этапов, грамотная реализация которых является обязательным условием для получения хорошего результата. Четкое следование выверенным временем этапам разработки программного обеспечения становится основополагающим критерием для занимающихся созданием ПО компаний и их заказчиков, заинтересованных в получении превосходно выполняющей свои функции программы. Подробно рассмотрим каждую стадию общепризнанной методологии разработки ПО, чтобы оценить их высокую значимость для достижения поставленной перед исполнителями цели.
Анализ требований
Самым первым этапом разработки программного обеспечения по праву называется процедура проведения всестороннего анализа выдвинутых заказчиком требований к создаваемому ПО, чтобы определить ключевые цели и задачи конечного продукта. В рамках этой стадии происходит максимально эффективное взаимодействие нуждающегося в программном решении клиента и сотрудников компании-разработчика, в ходе обсуждения деталей проекта помогающих более четко сформулировать предъявляемые к ПО требования. Результатом проведенного анализа становится формирование основного регламента, на который будет опираться исполнитель в своей работе — технического задания на разработку программного обеспечения. ТЗ должно полностью описывать поставленные перед разработчиком задачи и охарактеризовать конечную цель проекта в понимании заказчика.
Проектирование
Следующий ключевой этап в разработке программного обеспечения — стадия проектирования, то есть моделирования теоретической основы будущего продукта. Самые современные средства программирования позволяют частично объединить этапы проектирования и кодирования, то есть технической реализации проекта, будучи основанными на объектно-ориентированном подходе, но полноценное планирование требует более тщательного и скрупулезного моделирования. Качественный анализ перспектив и возможностей создаваемого продукта станет основой для его полноценного функционирования и выполнения всего комплекса возлагаемых на ПО задач. Одной из составных частей этапа проектирования, к примеру, является выбор инструментальных средств и операционной системы, которых сегодня на рынке присутствует очень большое количество.
В рамках данного этапа стороны должны осуществить:
- оценку результатов проведенного первоначально анализа и выявленных ограничений;
- поиск критических участков проекта;
- формирование окончательной архитектуры создаваемой системы;
- анализ необходимости использования программных модулей или готовых решений сторонних разработчиков;
- проектирование основных элементов продукта — модели базы данных, процессов и кода;
- выбор среды программирование и инструментов разработки, утверждение интерфейса программы, включая элементы графического отображения данных;
- определение основных требований к безопасности разрабатываемого ПО.
Кодирование
Следующим шагом становится непосредственная работа с кодом, опираясь на выбранный в процессе подготовки язык программирования. Описывать особенности и тонкости самого трудоемкого и сложного этапа вряд ли стоит, достаточно указать, что успех реализации любого проекта напрямую зависит от качества предварительного анализа и оценки конкурирующих решений, с которыми создаваемой программе предстоит «бороться» за право называться лучшей в своей нише. Если речь идет о написании кода для выполнения узкоспециализированных задач в рамках конкретного предприятия, то от грамотного подхода к этапу кодирования зависит эффективность работы компании, заказавшей разработку. Кодирование может происходить параллельно со следующим этапом разработки — тестированием программного обеспечения, что помогает вносить изменения непосредственно по ходу написания кода. Уровень и эффективность взаимодействия всех элементов, задействованных для выполнения сформулированных задач компанией-разработчиком, на текущем этапе является самым важным — от слаженности действий программистов, тестировщиков и проектировщиков зависит качество реализации проекта.
Тестирование и отладка
После достижения задуманного программистами в написанном коде следуют не менее важные этапы разработки программного обеспечения, зачастую объединяемые в одну фазу — тестирование продукта и последующая отладка, позволяющая ликвидировать огрехи программирования и добиться конечной цели — полнофункциональной работы разработанной программы. Процесс тестирования позволяет смоделировать ситуации, при которых программный продукт перестает функционировать. Отдел отладки затем локализует и исправляет обнаруженные ошибки кода, «вылизывая» его до практически идеального состояния. Эти два этапа занимают не меньше 30% затрачиваемого на весь проект времени, так как от их качественного исполнения зависит судьба созданного силами программистов программного обеспечения. Нередко функции тестировщика и отладчика исполняет один отдел, однако самым оптимальным будет распределить эти обязанности между разными исполнителями, что позволит увеличить эффективность поиска имеющихся в программном коде ошибок.
Внедрение
Процедура внедрения программного обеспечения в эксплуатацию является завершающей стадией разработки и нередко происходит совместно с отладкой системы. Как правило, ввод в эксплуатацию ПО осуществляется в три этапа:
- первоначальная загрузка данных;
- постепенное накопление информации;
- вывод созданного ПО на проектную мощность.
Ключевой целью поэтапного внедрения разработанной программы становится постепенное выявление не обнаруженных ранее ошибок и недочетов кода. В рамках этого этапа разработки программного обеспечения и заказчик, и исполнитель могут столкнуться с рядом достаточно узкого спектра ошибок, связанных с частичной рассогласованностью данных при их загрузке в БД, а также срывов выполнения программных процедур в связи с применением многопользовательского доступа. Именно на этой стадии выкристаллизовывается окончательная картина взаимодействия пользователя с программой, а также определяется степень лояльности последнего к разработанному интерфейсу. Если выход системы на проектную мощность после ряда проведенных доработок и улучшений произошел без особых осложнений, значит предварительная работа над проектом и реализация предыдущих стадий разработки осуществлялась правильно.
Заключение
Создание даже небольшого и технически простого ПО зависит от четкого выполнения каждой фазы, то есть деятельности всех отделов, задействованных в процессе разработки. Четкий план выполнения необходимых мероприятий с указанием конечных целей становится неотъемлемой частью работы разработчиков, планирующих оставаться широко востребованными на рынке труда специалистами. Только правильно составленное техническое задание позволит добиться нужного результата и осуществить разработку по-настоящему качественного и конкурентного ПО для любой платформы — серверной, стационарной или мобильной.
Неотъемлемой частью завершающего этапа разработки программного обеспечения также является последующая техническая поддержка созданного продукта в процессе его эксплуатации на предприятии заказчика. Грамотно организованная служба техподдержки зачастую становится ключевым фактором при выборе исполнителя в рамках достижения поставленной цели.
Процессы разработки безопасного программного обеспечения | Открытые системы. СУБД
31.08.2004
Нупур Дэвис, Уоттс Хамфри, Сэмюэл Редвайн, Герлинда Цибульски, Гэри Макгроу
Реферат отчета участников форума National Cybersecurity Summit
В декабре 2003 года в Санта-Кларе состоялся форум National Cybersecurity Summit. Участники форума — представители компаний отрасли, академических институтов и министерства национальной безопасности США — сформировали пять рабочих групп. Каждой из них было поручено заниматься определенной темой. В статье отражены ключевые рекомендации, сформулированные коллективом Software Process, который входил в состав рабочей группы Security Across the Software Development Lifecycle («Безопасность в жизненном цикле разработки программного обеспечения»).
При создании безопасного программного обеспечения необходимо учитывать множество факторов, связанных с процессами его проектирования, обеспечением защиты и с организацией управления. Разработка начинается с определения наилучших методов проектирования, дополняется хорошо зарекомендовавшими себя техническими подходами и подкрепляется управленческой практикой, способствующей удачному завершению процесса создания безопасного программного обеспечения. Группа Security Across the Software Development Lifecycle не рассматривает проблемы физической защиты, безопасного ведения операций, организации связей и взаимодействия, контроля за оборудованием и вопросы защиты, связанные с персоналом, однако охватывает огромное количество уязвимых мест современного программного обеспечения. Ознакомиться с данной тематикой подробнее можно, изучив полный вариант отчета [1].
Постановка задачи
По данным Computer Emergency Readiness Team Coordination Center (CERT/CC), с 1998-го по 2002 годы число инцидентов, связанных с вопросами безопасности, увеличилось на 2099%. Их ежегодный прирост составил в среднем 116%. Только на протяжении 2003 года зарегистрировано 137529 таких случаев, тогда как годом ранее их было 82 094 (см. рисунок). Большинство инцидентов возникло из-за наличия в программах уязвимых мест, которые стали причинами нарушения целостности критически важной инфраструктуры, систем ведения бизнеса и обеспечения безопасности.
Рис. Динамика изменения числа уязвимых мест, отраженная в отчете координационного центра CERT. На графике прослеживается явная тенденция к быстрому увеличению числа уязвимых мест |
В процессе разработки программного обеспечения, которое должно отвечать требованиям к конфиденциальности, целостности и готовности, выявились серьезные проблемы. Для их решения необходим персонал с соответствующим уровнем образования, подготовкой и опытом. При создании высоконадежных программных комплексов важное значение имеет и правильная организация управления проектами. На практике проблемы управления гораздо чаще становятся причинами крушения проектов, чем неудачные технические решения.
Процессы, используемые при разработке, влияют на результат. На описании таких процессов, а также знаний и опыта, необходимых для их реализации, и базируется наш отчет. Совершенствование проектирования программного обеспечения и связанных с ним процессов должно вести к созданию безопасного программного обеспечения. Речь идет о программах, которые придают нам уверенности (хотя и не гарантируют абсолютной защиты и полной достоверности), включают в себя функции, необходимые для поддержания безопасности на должном уровне, и обладают свойствами, гарантирующие правильность и корректность их использования. Кроме того, совершенствование процессов проектирования способствует оптимизации стоимости разработки и появлению программ с крайне малым количеством дефектов, требующих низких затрат на техническую поддержку, что влечет за собой общее повышение репутации программных продуктов.
Процесс проектирования начинается с определения спецификаций, влияющих на поведение программ и отражающих актуальные требования к безопасности. Необходимо, чтобы все компоненты системы соответствовали этим условиям. Спецификации должны обеспечивать нужную функциональность и не иметь уязвимых мест. Независимо от того, приобретается ли система на стороне или разрабатывается внутри компании, все ее компоненты обязаны отвечать требованиям к безопасности.
Еще один момент, касающийся обеспечения безопасности, связан с правильностью проектирования и реализации. Программное обеспечение работает правильно только в том случае, когда все выполняемые операции точно соответствуют определенным спецификациям и не допускается ничего лишнего. Сегодня же зачастую программы выполняют действия, о которых не знают даже разработчики и тестировщики.
Ужесточение требований к устойчивости и безопасности привело к тому, что появился ряд подходов к построению высоконадежных программных систем.
Но почему организации не применяют на постоянной основе успевшие хорошо себя зарекомендовать методы построения безопасного программного обеспечения? Во-первых, это порождает определенные сложности на всех уровнях — индивидуальном, коллективном, проектном и организационном, — а использование аутсорсинга и приобретение других компаний создают дополнительные трудности. Во-вторых, многие полагают, что развитая функциональность важнее качества или безопасности. В-третьих, руководители организаций зачастую считают разработку высококачественного программного обеспечения слишком дорогим удовольствием. Хотя при использовании процедур создания качественного и безопасного программного обеспечения требуются меньшие затраты времени и сил, сопутствующее изменение бизнес-процессов влечет за собой дополнительные расходы. Из-за высокой стоимости и необходимости проведения организационных преобразований организации редко задействуют подобные технологии разработки.
В Microsoft обнаружили, что около половины всех проблем, связанных с безопасностью программ, обусловлены недостатками проектирования [2]. А чтобы устранить последние, необходим высококвалифицированный персонал, обладающий большим опытом работы в области проектирования и обеспечения безопасности. Для использования рассмотренных в отчете подходов многим организациям недостает сотрудников с хорошими математической подготовкой, навыками проектирования программного обеспечения, средств защиты и написания сложных программ. Прежде чем приступить к созданию чего-то нового, нужно тщательно проработать процедуры проектирования и решить вопросы, связанные с квалификацией персонала.
Большинству организаций нелегко проводить серьезные преобразования, которые требуются для проектирования безопасного программного обеспечения. Кроме того, методы разработки, позитивно сказывающиеся на обеспечении его защиты, пока несовершенны. Однако рассматриваемый отчет может предоставить дополнительную информацию и предложить действенные стимулы тем, кто отважится пуститься в это непростое плавание.
Методы разработки
Многие уязвимые места появляются вследствие ошибок, которые непреднамеренно возникают при проектировании и разработке программного обеспечения. Согласно анализу, выполненному специалистами CERT/CC, появление большинства уязвимых мест обусловлено общими причинами (10 таких причин порождают около 75% всех «брешей»), причем источниками более 90% уязвимых мест являются известные типы дефектов. Мы трактуем понятие «дефект» шире, относя к ним все то, что обуславливает необходимость каких-либо изменений продукта (вне зависимости от того, связано ли это с несоответствием требованиям, неудачными конструкторскими решениями, недостаточным уровнем безопасности и удобства использования или с ошибками кодирования).
При использовании сегодняшних технологий разработки на каждую тысячу строк нового или измененного кода приходится, как правило, от 1 до 7 дефектов. В типичных современных системах, содержащих миллионы строк кода, имеются тысячи дефектов [3]. Естественно, такое программное обеспечение редко гарантирует безопасность. Для создания действительно безопасного программного обеспечения организациям необходимо сократить на один-два порядка число дефектов в спецификациях, ошибок при проектировании и реализации.
Для совершенствования технологии проектирования разработан целый ряд процессов и процессных моделей. Особое внимание мы уделяем тем из них, которые позволяют существенно уменьшить количество ошибок при разработке спецификаций программного обеспечения, его проектировании и внедрении, минимизировать число уязвимых мест.
Коллективное проектирование
Процесс коллективного проектирования программного обеспечения (Team Software Process, TSP) был определен специалистами института Software Engineering Institute (SEI), созданного при университете Карнеги-Меллона. Данный процесс представляет собой использование при коллективной разработке определенного набора операций. В настоящее время процесс TSP задействуется достаточно широко. Проведенное недавно исследование 20 проектов в 13 организациях показало, что применяющие его команды выпускают программное обеспечение, в котором имеются около 0,06 дефектов проектирования и реализации на каждую тысячу строк нового и измененного кода. Сроки выпуска этих продуктов по сравнению с намеченными увеличиваются в среднем на 6%. Такой результат весьма неплох, если учесть, что более половины программных проектов завершаются неудачей, либо на их реализацию уходит минимум вдвое больше времени, чем планировалось [3].
Процесс коллективного проектирования безопасного программного обеспечения (TSP-Secure) дополняется различными процедурами обеспечения безопасности на протяжении всего жизненного цикла разработки. Разработчики проходят дополнительную подготовку в области защиты, изучая общие причины возникновения уязвимых мест, ориентированные на безопасность методы проектирования (в частности, проектирование устойчивых машин и анализ их надежности), соответствующие методы реализации (такие как контрольные ведомости безопасного кода) и тестирования. Процесс TSP-Secure относительно нов, но ведущие производители уже активно используют его для создания практически свободного от дефектов программного обеспечения; по крайней мере, многомесячный аудит одной из эксплуатируемых систем не выявил в ней дефектов, влияющих на безопасность [1].
Структурная корректность
Формальные методы представляют собой математически обоснованные подходы к созданию программного обеспечения. При этом математические модели и формальная логика используются для поддержки строгих программных спецификаций, корректного проектирования, кодирования и контроля качеством. Один из таких способов — обеспечения структурной корректности (Correctness-by-Construction) — был предложен компанией Praxis Critical Systems [4]. Он позволяет с помощью формальных методов проверять программное обеспечение и своевременно устранять в нем дефекты на протяжении его жизненного цикла.
Данный способ включает в себя определение формальных нотаций для спецификаций систем и компонентов архитектуры с учетом их согласованности и корректности. Для безопасных систем выделяются категории состояний системы и операций, которые определяются с учетом их влияния на общую безопасность. Конечной целью является создание архитектуры, которая позволяет свести к минимуму число функций, критически важных для обеспечения защиты, и изолировать их. Это способствует дальнейшему снижению стоимости и сокращению объема работы (возможно, значительно более трудоемкой), связанной с проверкой правильности данных элементов.
Использование метода структурной корректности позволило с 1992-го по 2003 годы завершить пять проектов почти без дефектов: на 1 тыс. строк кода пришлось 0,04-0,75 ошибок. Надо сказать, в двух из этих проектов к системе безопасности предъявлялись весьма серьезные требования.
«Стерильная комната»
Проектирование программного обеспечения методом «стерильной комнаты» (он назван по аналогии с высокоточным проектированием стерильных комнат, предназначенных для производства аппаратуры) представляет собой теоретически обоснованный, ориентированный на командную разработку процесс создания и сертификации корректных программных систем со статистическим контролем качества [5-7]. Данный процесс охватывает весь жизненный цикл разработки, включая управление проектом в ходе итерационного проектирования, определение спецификаций функций и архитектуры, проверку правильности функционала, а также статистическое тестирование при сертификации программ на пригодность к использованию. Роли сотрудников, которые выполняют соответствующие проекты, распределяются так: отдельные коллективы занимаются определением спецификаций, непосредственно разработкой и сертификацией. Проектирование методом «стерильной комнаты» предусматривает статистический контроль качества в ходе разработки, который осуществляется путем последовательного отделения процедуры проектирования от процедуры статистического тестирования.
Многие проекты, основанные на методе «стерильной комнаты», связаны с секретными сведениями и не фигурируют в общедоступных отчетах. Однако опыт показывает, что общее число ошибок в данных случаях — примерно 0,1 дефекта на 1 тыс. строк для приложения, полностью соответствующего принципам «стерильной комнаты», и 0,4 ошибки для приложения с частичным соответствием. Большинство дефектов в программном обеспечении, построенном с использованием метода «стерильной комнаты», относится к ошибкам кодирования. Проблемы, связанные со спецификациями и архитектурой, встречаются гораздо реже.
Процессные модели
Процессные модели содержат определения целей и ключевые атрибуты конкретных процессов (например, построения системы безопасности), но не включают в себя практических руководств по определению и реализации процессов. Среди наиболее известных моделей совершенствования процессов можно выделить модель Capability Maturity Model (CMM), отражающую зависимость возможностей системы от ее зрелости. Хотя об отказе от оценки продукта или сертификации системы речь не идет, методы CMM можно использовать для общей оценки эффективности работы организации (в зависимости от определенных в модели критериев) и поиска путей ее повышения. Практика свидетельствует, что применение процессных моделей для улучшения качества программного обеспечения позволяет существенно сократить количество дефектов архитектуры и реализации в конечных продуктах [8, 9].
Для повышения уровня безопасности используются три разновидности CMM.
- CMM Integration (CMMI) помогает организациям совершенствовать процессы, связанные с проектированием систем, разработкой программного обеспечения, созданием интегрированных продуктов и процессов, организацией взаимодействия с поставщиками, управления процессами и проектами (www.sei.cmu.edu).
- Integrated CMM (iCMM) представляет собой единую модель, обобщающую передовой опыт совершенствования процессов в масштабе всего предприятия, включая управление аутсорсингом и взаимоотношениями с поставщиками. Широко применяется Федеральным управлением гражданской авиации США (www.faa.gov/ipg).
- Systems Security Engineering CMM (SSE-CMM) предназначена для определения требований к реализации компонентов защиты в программных системах, которые разрабатываются в интересах ИТ-отрасли (www.sse-cmm.org). Модель SSE-CMM является стандартом ISO (ISO/IEC 21827:2002).
На сегодняшний день уже около 2 тыс. организаций воспользовались преимуществами модели CMMI и ее предшественницы, программной модели CMM, при определении путей совершенствования процессов и оценки возможностей программного обеспечения.
Технические решения
Некоторые уязвимые места в системе безопасности возникают просто по недосмотру. Это приводит к появлению дефектов, которые вполне можно устранить, если придерживаться хорошо зарекомендовавших себя методов проектирования. Появление ряда других брешей обусловлено конкретными особенностями моделирования, архитектуры и проектирования системы безопасности, в том числе ошибками при определении угроз, неадекватной аутентификацией, неверной авторизацией, неправильным применением шифрования, ошибками при организации защиты данных и недостаточно тщательным планированием разделения приложений. Для решения всех этих проблем организациям необходимо использовать эффективные методы, позволяющие решать вопросы обеспечения безопасности напрямую.
Приведенный перечень испытанных на практике принципов и хорошо известных методов нельзя назвать исчерпывающим, однако он получился достаточно представительным. Большая часть технических методов требует опыта работы с системами обеспечения безопасности, особенно при определении спецификаций и проектировании. У многих из применяемых для разработки безопасного программного обеспечения технических методов очень мало практических подтверждений эффективности, но насколько это возможно, мы постарались привести примеры из реальной жизни. В полной версии отчета содержатся также рекомендации по совершенствованию методов поддержания жизненного цикла.
Принципы проектирования безопасного программного обеспечения
Конечно, для создания безопасного программного обеспечения недостаточно лишь соблюдения принципов, но они способны помочь определиться с методами разработки. Восемь принципов разработки, сформулированные еще в 1974 году [10], сегодня отнюдь не менее актуальны:
- экономия механизмов — архитектура должна быть как можно более простой и компактной;
- действия по умолчанию, обеспечивающие защиту от сбоев, — решения о предоставлении доступа необходимо принимать на основе назначения прав, а не их исключения;
- полный контроль — предоставление доступа к любому объекту должно осуществляться только после проверки наличия соответствующих прав;
- открытая архитектура — ее не следует держать в тайне;
- разделение привилегий — механизм защиты, требующий двух ключей, более гибок и устойчив по сравнению с применяющим для получения доступа один ключ. Поэтому там, где возможно, лучше использовать механизм с двумя ключами;
- минимизация привилегий — любая программа и любой пользователь системы должны иметь минимально необходимый для выполнения стоящих перед ними задач набор привилегий;
- максимальное сокращение количества общих механизмов — механизмов, доступных или зависимых более чем от одного пользователя;
- приемлемость с психологической точки зрения — необходимо продумать особенности человеко-машинного интерфейса, которые обеспечат простоту использования программного обеспечения, чтобы потребители, не задумываясь, корректно применяли механизмы защиты при выполнении своих повседневных задач.
Более поздние работы [11, 12], а также документы Open Web Application Security Project (www.owasp.org) базируются на тех же основных принципах, успешно выдержавших испытание временем.
Руководства разработчиков и контрольные ведомости
Выстраивая свою деятельность на основе указанных основных принципов, разные организации (от Microsoft до SAP) взяли на вооружение несколько универсальных руководств, в подготовке которых принимала участие и группа OWASP. В процессе создания безопасного программного обеспечения разработчики должны:
- проверить правильность входной и выходной информации;
- обеспечить защиту от сбоев системы безопасности;
- избегать усложнения системы;
- применять и повторно использовать надежные компоненты;
- организовать глубоко эшелонированную защиту;
- избегать так называемой «безопасности за счет запутанности»;
- предоставлять только абсолютно необходимые привилегии;
- использовать обособление для разделения прав доступа;
- не применять алгоритмы шифрования собственной разработки;
- использовать шифрование при организации всех видов связи;
- никогда не пересылать пароли в открытом виде;
- обеспечить безопасность конфигурации, настраиваемой по умолчанию;
- гарантировать безопасность доставки и установки программного обеспечения;
- не создавать «потайных ходов».
Все эти правила обязательно должны соблюдаться при разработке спецификаций программного обеспечения, в процессах проектирования, внедрения, тестирования, доставки и установки.
Моделирование угроз
Моделирование угроз представляет собой методологию анализа защиты, которую можно использовать при определении рисков и принятии решений при построении архитектуры, кодировании и тестировании. Данная методология применяется преимущественно на начальных стадиях реализации проекта (к которым относятся разработка спецификаций, архитектурных представлений, диаграмм потоков данных, функциональных диаграмм и т.д.), но ее можно использовать и при написании детально проработанного технического задания, а также кода. Конечная цель заключается в устранении потенциальных угроз приложению, способных нанести наибольший ущерб.
В целом моделирование угроз предполагает декомпозицию приложения и определение его основных свойств с последующим выявлением и классификацией угроз, направленных против каждого свойства или компонента. Угрозы классифицируются в зависимости от степени риска. В результате формируются стратегии ликвидации угроз на этапах проектирования, кодирования и тестирования.
Шаблоны атак
В [13] выделено 49 шаблонов атак. Эти сведения могут оказаться весьма полезными в ходе проектирования, реализации и тестирования программного обеспечения. Имеет смысл использовать данные шаблоны для выявления потенциальных дефектов в системах безопасности организаций.
Языки программирования
Выбор языка программирования также может оказать существенное влияние на безопасность конечного продукта. Лучшими языками являются те, в которых все действия определены и обоснованы, поддерживаются функции, уменьшающие число ошибок (например, требуется строгое определение типов), осуществляется контроль за распределением памяти и использованием указателей. Еще лучше задействовать языки, прошедшие официальную проверку (например, язык SPARK, являющийся подмножеством Ada, и соответствующие инструментальные средства проверки [14]). Языки C и С++ имеют ряд унаследованных свойств, которые могут оказаться источниками появления уязвимых мест в системе безопасности. Для разработки безопасного программного обеспечения больше подойдут языки типа Java и C#, хотя можно найти вариант и получше.
Инструментарий
Для поддержки разработки безопасного программного обеспечения создано несколько типов инструментов — от статических анализаторов до автоматических средств анализа и проверки формальных спецификаций и конструкций.
Инструментальные средства типа Prefast (анализ исходного кода внутри процедур), Prefix (масштабируемый, учитывающий порядок выполнения инструкций анализа исходного кода) [15], а также Software, Languages, Analysis and Modelchecking (SLAM) помогают Microsoft уменьшить число дефектов в программных продуктах. По словам представителей корпорации, применение Prefix и Prefast позволило выявить около 17% всех ошибок, обнаруженных в Microsoft SQL Server 2003 [16]. Обнадеживающие результаты дал проект Fluid. Еще одним инструментальным средством, которое может быть использовано при разработке, является инструментарий Jackpot корпорации Sun Microsystems. В 2004 году ожидается появление еще нескольких средств, созданных на базе технологий компилятора.
Тестирование
Проблемы обеспечения безопасности не всегда удается обнаружить даже в ходе испытаний системы. Хотя гарантии качества исключительно важны, все моменты, способные отрицательно повлиять на безопасность, выявить просто невозможно. Хороший план тестирования защиты (предусматривающий возможность возврата к определению требований) включает в себя две стратегии: стандартное тестирование функций безопасности и тестирование с учетом рисков, в котором используются шаблоны атак и модели угроз.
Определенную пользу приносит и тестирование проникновения, особенно когда тесты выполняются на основе анализа архитектурных рисков. Однако тестирование проникновения по принципу «черного ящика» (архитектура программы не рассматривается), вероятно, не позволит дать ответ на многие важные вопросы, связанные с программными рисками. Когда программное обеспечение становится жертвой недостатков закрытого тестирования по принципу «черного ящика», обусловленных присутствием на сегодняшнем рынке только упрощенных средств тестирования безопасности, — это действительно плохо. Испытания должны предусматривать проведение серьезных атак, попытки вскрытия системы безопасности, поиск общих уязвимых мест.
Процедуры тестирования систем и принятия их пользователями становятся источниками бесценных сведений, помогающих усовершенствовать процессы разработки программного обеспечения. Выявление дефектов системы безопасности в ходе испытаний позволяет не только эффективно исправлять текущие ошибки, но и предотвращать их появление в будущих системах и проектах. Кроме того, аналогичные дефекты можно исключить из других программных продуктов.
Управление рисками
Наиболее безопасным компьютером следует считать отсоединенную от сети и размещенную в запертой комнате машину с отключенной клавиатурой. Очевидно, что такая машина бесполезна. При использовании существующих технологий разработка совершенной системы защиты невозможна; поэтому проектирование безопасного программного обеспечения тесно связано с вопросами управления рисками. Разработчикам необходимо выявлять, классифицировать и минимизировать риски, относящиеся к системе безопасности, эффективно управлять ими на протяжении всего жизненного цикла программного обеспечения.
При определении требований к программе и проектировании ее архитектуры нужно проанализировать компромиссные решения с точки зрения перспектив управления рисками. Одним из методов анализа рисков является моделирование угроз. После выявления и классификации рисков можно приступать к выработке решений, связанных с управлением рисками в ходе проектирования, написания и тестирования программ. Риски минимизируются за счет усиления контроля (выработка предписаний, осуществление проверок, применение определенных конструкций и принятие мер, препятствующих возникновению рисков) или переводятся в другую форму (получение неких гарантий от возникновения конкретных рисков). При управлении рисками, как правило, используется сочетание этих методов.
Методы управления
Разработка безопасного программного обеспечения требует проведения ряда организационных мероприятий. Организационные политики необходимо определить для классификации требований к проектированию безопасного программного обеспечения.
Прежде всего, управление предполагает установку конкретных, измеримых целей — например, уменьшить число уязвимых мест в программных продуктах на 50% (это можно оценить путем подсчета количества выпущенных «заплаток» или отчетов об уязвимых местах). Управление должно ориентироваться на приоритет вопросов обеспечения безопасности, причем не только на организационном уровне, но и на уровне проекта. Некоторые организации уже добились определенных успехов в определении ролей инженера по безопасности, аналитика в области безопасности и архитектора систем безопасности. Модель TSP-Secure, к примеру, предусматривает определение роли менеджера проекта по безопасности. На разных этапах жизненного цикла программного обеспечения ответственность будет перераспределяться, но менеджер по безопасности всегда сосредоточен на вопросах защиты — даже если на протяжении этого цикла исполнители соответствующих обязанностей меняются.
Управление должно обеспечивать выделение ресурсов, необходимых для обучения специалистов. Наконец, функции контроля определяются на основе требований к качеству и безопасности всех проектов. Весьма приветствуется участие внешних экспертов по безопасности.
Другие факторы
К другим общим факторам большинства проектов, связанным с разработкой безопасного программного обеспечения, относятся вопросы аутентификации, авторизации, управления сеансами, шифрования, учета, управления версиями и обновлениями, использования программного обеспечения независимых производителей.
Рекомендации
В процессе рассмотрения, казалось бы, не связанных друг с другом факторов, касающихся требований к процессам разработки безопасного программного обеспечения и их возможностей, члены группы Software Process выработали рекомендации по проектированию. Члены группы уверены, что соблюдение этих рекомендаций поможет создавать более безопасное и устойчивое программное обеспечение. В зависимости от ожидаемого времени реализации проекта мы разделили все рекомендованные мероприятия на группы.
Рекомендации на ближайшую перспективу
Сначала необходимо определить основные процессы разработки программного обеспечения с малым числом дефектов. Понятно, что они должны серьезно отличаться от используемых сегодня общепринятых методов. Чтобы начать двигаться в этом направлении, любая организация, по той или иной причине намеренная заняться разработкой безопасного программного обеспечения, должна использовать процесс, который вполне предсказуемо позволит получать программное обеспечение с менее чем 0,1 дефекта в спецификациях, архитектуре и реализации на каждую тысячу строк нового и измененного кода.
Имея в своем распоряжении такой процесс, необходимо сформировать центр управления рисками для принятия решений. Это потребует опыта работы со средствами обеспечения безопасности и знаний, охватывающих все аспекты создаваемой системы. А поскольку в данном случае нужны действительно обширные и глубокие знания, может понадобиться помощь экспертов в выявлении и управлении рисками.
Следующий шаг заключается в разработке спецификаций и архитектуры продукта, причем вопросам защиты здесь тоже отводится немаловажная роль. При планировании возможных расширений, определении свойств безопасности, рассмотрении и анализе спецификаций, проектировании системы безопасности рекомендуется применять формальные методы. Заставить все это работать можно лишь при условии, что при проектировании критически важные для защиты аспекты будут сконцентрированы в ограниченной части программного обеспечения. Архитектура должна быть как можно более простой — возможно, даже в ущерб эффективности. Следует ограничиться применением «безопасных» структур и функций, предпочтительно из числа поддающихся анализу. Архитектура строится исходя из того, что программа может подвергнуться разрушению и должна обеспечивать эшелонированную защиту и допускать устойчивость. Уделите этому и другим принципам защиты особенно пристальное внимание.
Применяйте язык программирования, который во всех отношениях оставляет гораздо меньше шансов для возникновения ошибок, чем Cи или C++. Как уже говорилось, язык должен быть полностью определенным, предусматривать обработку всех возможных исключений и обладать другими возможностями уменьшения ошибок, в частности обеспечивать поддержку строгих (и, желательно, безопасных) типов.
Используйте для обнаружения известных дефектов кода средства статического анализа. Со временем проведение такого анализа должно стать обязательным. Жизненно важно также, чтобы тестирование защиты включало в себя проведение серьезных атак и использовало преимущества формальных спецификаций и архитектуры.
Для выявления и ликвидации основных причин появления дефектов нужен постоянный контроль за разрабатываемыми продуктами и используемыми процессами. Проанализировав в процессе разработки и тестирования, а также после завершения реализации проекта характеристики и причины возникновения уязвимых мест, разработчики программного обеспечения должны извлечь из этого необходимые уроки. Организации могут добиться хороших результатов на основании как собственного опыта (положительного или отрицательного), так и чужого.
Чтобы получить реальные шансы на успех, на всех уровнях управления во главу угла следует поставить задачу создания безопасного программного обеспечения. Это означает, что разработчикам должны быть доступны все требуемые ресурсы, а в случае нужды они могут прибегнуть к услугам внешних специалистов. Необходимо, чтобы корпоративная культура обеспечивала обученному, мотивированному, настойчивому, дисциплинированному, обладающему необходимым уровнем квалификации и заслуживающему доверия персоналу выполнение согласованного плана и оценку результатов.
При организации технической поддержки, исправлении ошибок и выпуске обновлений использование оптимальных методов и процессов играет не менее важную роль, чем при разработке нового программного обеспечения. Особое внимание следует уделять процессам управления конфигурацией: изменения в уже существующие программы следует вносить только после определения четкой процедуры таких изменений и настройки конфигурации.
Программные продукты сторонних разработчиков. Необходимо рассмотреть и вопрос использования готовых коммерческих продуктов или программ с открытым кодом. Ни одно из серьезных исследований еще не доказало, что в каком-то из этих видов программного обеспечения присутствует меньше или больше уязвимых мест. Однако очень часто покупатели и администраторы не осведомлены о том, что в имеющихся у них продуктах использовано программное обеспечение независимых разработчиков. Другими словами, они не знают о брешах в системе безопасности, хотя независимый производитель уже опубликовал соответствующее предупреждение или выпустил заплатку. Кроме того, производители могут полагаться на качество продуктов независимых разработчиков, но последние не гарантируют, что все процедуры в них реализованы должным образом.
Разработчикам программного обеспечения нужно требовать от независимых производителей соблюдения процессов и методов, признанных полезными в данном отчете. В противном случае разработчикам придется самостоятельно проверять качество встраиваемых в их продукты компонентов независимых производителей. И уж, по крайней мере, независимые производители должны сообщать, какие готовые коммерческие продукты и программы с открытым кодом используются в их разработках.
Вместе со своими продуктами разработчики должны поставлять руководства по обеспечению безопасности. В них нужно указывать все допущения, уровень безопасности используемых средств (например, применение паролей), а также давать рекомендации по настройке конфигурации программного обеспечения.
Дополнительные усилия. В мире накоплено гораздо больше опыта и знаний, которые могут найти практическое применение. Поэтому государство должно:
- стимулировать любого разработчика (будь то поставщик коммерческих продуктов, организация, создающая программы для собственных нужд, или разработчик программ с открытым кодом), как можно быстрее внедрять процессы, которые позволяют создавать программное обеспечение, практически не имеющее дефектов как в спецификациях, так и в архитектуре и реализации;
- стимулировать организации, занимающиеся разработкой программного обеспечения, использовать передовой опыт создания систем безопасности на всем протяжении проектирования;
- требовать от организаций, выпускающих программное обеспечение со значительным числом ежегодно обнаруживаемых уязвимых мест, прибегать к тестированию, которое позволит контролировать ситуацию;
- попросить организации, располагающие соответствующими данными, совместно с группой CERT или другими органами, например с центром Information Technology Information Sharing and Analysis Center (IT-ISAC), заняться поиском конструктивных вариантов, которые помогут точнее определять уязвимые места продукта после его официального выпуска.
Рекомендации на среднесрочную перспективу
Выполнение рекомендаций на краткосрочный период — только начало. Разработчики ПО должны постоянно повышать уровень безопасности своих продуктов и процессов, делая упор на спецификациях и архитектуре. Большая часть существующего программного обеспечения не отличается хорошими характеристиками защиты (если не считать версии, в которые были внесены серьезные изменения). Производителям программного обеспечения следует использовать для перестройки и реструктуризации систем с неприемлемой архитектурой и конструктивными решениями высококачественные процессы разработки, позволяющие вывести параметры безопасности на должный уровень.
Сейчас ощущается нехватка практических данных, доказывающих эффективность процессов и методов разработки безопасного программного обеспечения. Государству следует разработать программу оценки и измерения основных параметров, которая позволит определять эффективность таких процессов и сертифицировать те из них, которые действительно подходят для выпуска безопасного программного обеспечения. Кроме того, необходимо обратиться в центр CERT с просьбой заняться вместе с поставщиками программного обеспечения и другими заинтересованными организациями оценкой процессов и созданием методики тестирования, позволяющей проанализировать появляющиеся улучшения. Наконец, необходимо рассмотреть состояние национальной информационной инфраструктуры, совместно с представителями программной отрасли сформулировать поддающиеся сравнительной оценке ежегодные цели совершенствования систем безопасности и следить за темпами достижения этих целей.
Рекомендации на долгосрочный период
В долгосрочной перспективе группа рекомендует выполнять следующие правила.
Сертификация. В определенной степени программы сертификации (в частности, Common Criteria и ITSEC) ориентированы на проверку уже существующего программного обеспечения. Пятый, шестой и седьмой уровни программы Common Criteria направлены на то, чтобы показать, что конструктивные решения отвечают требованиям к защите. В них даже предусмотрена проверка использования при разработке методов, обеспечивающих создание программного обеспечения с минимальным количеством дефектов. На практике, однако, эти уровни используются достаточно редко, а число инцидентов, связанных с безопасностью, по-прежнему имеет тенденцию к росту. Государству необходимо следить за разработкой программ контроля и анализа, рекомендованных в данном отчете, оценивать их качество, а также инициировать сертификацию процессов и методов, которые доказали свою высокую эффективность при создании безопасного программного обеспечения.
Образование и профессиональная подготовка. Большинство университетов предлагают учебные курсы, ориентированные на изучение предметов типа криптографии и нацеленные, главным образом, на теоретические аспекты конфиденциальности и целостности. Это хорошо для будущих исследователей, но обучению и подготовке практиков достаточного внимания не уделяется. Целостные подходы к разработке безопасного программного обеспечения, которые можно использовать в последующей практике, по-прежнему встречаются достаточно редко.
Министерству национальной безопасности следует стимулировать и финансировать университеты, которые предлагают соответствующее обучение и проводят исследование процессов разработки безопасного программного обеспечения. Особое внимание необходимо уделить развитию уже имеющихся в данной области программ. Университетам следует приглашать экспертов в сфере безопасности и специалистов-практиков из организаций, в которых используются сертифицированные процессы разработки безопасного программного обеспечения, для оказания помощи в подготовке будущих инженеров-программистов и ИТ-специалистов.
Имеет смысл поощрять и финансировать исследования, направленные на их определение, документирование и на обеспечение доступа к прочим процессам разработки безопасного программного обеспечения, средств тестирования, конструкторских решений и способов реализации систем безопасности.
Оценка новых технологий. За последнее десятилетие технологии разработки программного обеспечения и приложений претерпели серьезные изменения, и то же самое сулит ближайшее десятилетие. Новые технологии откроют новые возможности, поставят новые задачи. Это почти наверняка приведет к ужесточению требований к устойчивости программных решений, сокращению дефектов реализации и совершенствованию процессов выпуска безопасного программного обеспечения. Необходимы настойчивые скоординированные усилия к изучению влияния новых технологий на процессы производства безопасного программного обеспечения и на унаследованные продукты.
Хотя ассоциация National Cyber Security Partnership и не поддерживает формальных отношений с Министерством национальной безопасности США, на конференции, прошедшей в декабре 2003 года, глава министерства Том Ридж призвал членов ассоциации к действию. В министерстве положительно оценили рекомендации и приступили к рассмотрению инициатив, которым может быть оказана поддержка. В обозримом будущем ассоциация собирается и по-прежнему продвигаться в том же направлении. Некоторые рекомендации уже приняты и выполнены, имеет смысл разобраться с остальными и сформировать новые рабочие группы. Создание ассоциации позволило добиться весьма высоких результатов в деле продвижения технологии и в привлечении экспертов по формированию политик из самых разных организаций. Поддержанию эффективности партнерских отношений и достижению соглашений, как и раньше, будет уделяться самое серьезное внимание.
Члены рабочей группы Software Process абсолютно уверены: те организации, которые будут применять процессы, позволяющие создавать программное обеспечение с малым количеством дефектов, использовать передовой опыт, методы и технологии безопасности, нацеливать управление на привлечение всех необходимых ресурсов, обеспечение дисциплины, гибкости и настойчивости, а также на постоянное улучшение результатов, непременно добьются успехов в разработке безопасного программного обеспечения.
Литература
- S.T. Redwine, N. Davis. Processes to Produce Secure Software, Nat’l Cybersecurity Partnership Task Force Report, 2004; www.cyberpartnership.org/init-soft.html.
- G.E. McGraw. DIMACS Workshop on Software Security, IEEE Security & Privacy, vol. 1, no. 2, 2003.
- N. Davis, J. Mullaney. The Team Software Process in Practice: A Summary of Recent Results, tech. report CMU/SEI-2003-TR-014, Software Eng. Inst., Carnegie Mellon Univ., September 2003.
- A. Hall, R. Chapman. Correctness by Construction: Developing a Commercial Secure System. IEEE Software, vol. 19, no. 1, 2002.
- R. Linger, S. Powell. Developing Secure Software with Cleanroom Software Engineering. Cybersecurity Summit Task Force Subgroup on Software Process, February 2004.
- H. Mills, R. Linger. Cleanroom Software Engineering. Encyclopedia of Software Engineering, 2nd ed., J.Marciniak, ed., John Wiley & Sons, 2002.
- S. Prowell et al. Cleanroom Software Engineering: Technology and Process, Addison Wesley, 1999.
- J. Herbsleb et al. Benefits of CMM-Based Software Process Improvement: Initial Results, tech. report CMU/SEI-94-TR-013, Software Engineering Institute, Carnegie Mellon University, 1994.
- D.R. Goldenson, D.L. Gibson. Demonstrating the Impact and Benefits of CMMI, special report CMU/SEI-2003-SR-009, Software Eng. Inst., Carnegie Mellon Univ., 2003.
- J. Saltzer, M. Schroeder. The Protection of Information in Computer Systems. Proc. IEEE, vol. 63, no. 9, 1975.
- P. Neumann. Principles Assuredly Trustworthy Composable Architectures: Emerging Draft of the Final Report, tech. report for SRI Project 11459, as part of DARPA’s Composable High-Assurance Trustworthy Systems (CHATS) programs, to be published Sept. 2004.
- J. Viega, G. McGraw. Building Secure Software: How to Avoid Security Problems the Right Way, Addison Wesley, 2001.
- G. Hoglund and G. McGraw. Exploiting Software: How to Break Code, Addison-Wesley, 2004.
- J. Barnes. High Integrity Software: The SPARK Approach to Safety and Security, Addison Wesley, 2003.
- W.R. Bush, J.D. Pincus, D.J. Siela. A Static Analyzer for Finding Dynamic Programming Errors. Software Practice and Experience, vol. 30, June 2000.
- S.J. Vaughn. Building Better Software with Better Tools. Computer, vol. 36, no. 9, September 2003.
Нупур Дэвис ([email protected]) — старший инженер института Software Engineering Institute при университете Карнеги-Меллона. Область ее интересов связана с операционными процессами разработки безопасного программного обеспечения. Сэмюэл Редвайн ([email protected]) — профессор-адъюнкт университета Джеймса Медисона. К его интересам относятся проектирование программного обеспечения, обеспечение компьютерной безопасности и надежного функционирования информационных систем, а также формальные методы. Являлся ведущим редактором отчета, послужившего основой данной статьи. Герлинда Цибульски ([email protected]) — менеджер корпорации SAP по безопасности продуктов. Область ее интересов охватывает вопросы разработки безопасного программного обеспечения и стандартов безопасности. Гэри Макгро ([email protected]) — директор по технологиям компании Cigital. Его практический опыт базируется на многолетней работе в должности консультанта в ведущих компаниях, занимающихся разработкой программного обеспечения. Уоттс Хамфри ([email protected]) — научный сотрудник института Software Engineering Institute при университете Карнеги-Меллона. Его научные интересы связаны с процессами проектирования программного обеспечения, оценкой его качества и управлением разработкой.
Noopur Davis, Watts Humphrey, Samuel Redwine, Gerlinde Zibulski, Gary Mcgraw, Processes for Producing Secure Software. Summary of US National Cybersecurity Summit Subgroup Report. IEEE Security & Privacy, May/June 2004. IEEE Computer Society, 2004, All rights reserved. Reprinted with permission.
Процессы разработки безопасного программного обеспечения
Поделитесь материалом с коллегами и друзьями
Тест. Технология разработки программного обеспечения (ТРППО)
1 Какие программы можно отнести к системному ПО
+драйверы
текстовые редакторы
электронные таблицы
графические редакторы
все ответы верны
2 Специфические особенности ПО как продукта
+продажа по ценам ниже себестоимости (лицензирование)
низкие материальные затраты при создании программ
возможность создание программ небольшие коллективом или даже одним человеком
разнообразие решаемых задач с помощью программных средств
5) все ответы верны
3 Какие программы нельзя отнести к системному ПО
+игровые программы
компиляторы языков программирования
операционные системы
системы управления базами данных
все ответы верны
4 Специфические особенности ПО как продукта
+низкие затраты при дублировании
универсальность
простота эксплуатации
наличие поддержки (сопровождения) со стороны разработчика
все ответы верны
5 Какие программы можно отнести к системному ПО
+утилиты
экономические программы
статистические программы
мультимедийные программы
все ответы верны
6 Этап, занимающий наибольшее время, при разработке программы
+тестирование
сопровождение
проектирование
программирование
формулировка требований
7 Первый этап в жизненном цикле программы
+формулирование требований
анализ требований
проектирование
автономное тестирование
комплексное тестирование
8 Один из необязательных этапов жизненного цикла программы
+оптимизация
проектирование
тестирование
программирование
анализ требований
9 Самый большой этап в жизненном цикле программы
+эксплуатация
изучение предметной области
программирование
тестирование
корректировка ошибок
10 Какой этап выполняется раньше
отладка
оптимизация
+программирование
тестирование
все ответы верны
11 Что выполняется раньше
+компиляция
отладка
компоновка
тестирование
5) нет правильного ответа
12 Что выполняется раньше
+проектирование
программирование
отладка
тестирование
компоновка
13 В стадии разработки программы не входит
+автоматизация программирования
постановка задачи
составление спецификаций
эскизный проект
тестирование
14 Самый важный критерий качества программы
+работоспособность
надежность
эффективность
быстродействие
простота эксплуатации
15 Способы оценки качества
+сравнение с аналогами
наличие документации
оптимизация программы
структурирование алгоритма
хранение и запоминание информации
16 Наиболее важный критерий качества
+надежность
быстродействие
удобство в эксплуатации
удобный интерфейс
эффективность
17 Способы оценки надежности
+тестирование
сравнение с аналогами
трассировка
оптимизация
удобный интерфейс
18 В каких единицах можно измерить надежность
+отказов/час
км/час
Кбайт/сек
операций/сек
мб/сек
19 В каких единицах можно измерить быстродействие
отказов/час
км/час
Кбайт/сек
+операций/сек
мб/сек
20 Что относится к этапу программирования
+написание кода программы
разработка интерфейса
работоспособность
анализ требований
создание базы данных
21 Последовательность этапов программирования
+компилирование, компоновка, отладка
B) компоновка, отладка, компилирование
отладка, компилирование, компоновка
компилирование, отладка, компоновка
все ответы верны
22 Инструментальные средства программирования
+компиляторы, интерпретаторы
СУБД (системы управления базами данных)
BIOS (базовая система ввода-вывода)
ОС (операционные системы)
нет правильного ответа
23 На языке программирования составляется
+исходный код
исполняемый код
объектный код
алгоритм
предметный код
24 Правила, которым должна следовать программа это
+алгоритм
структура
спецификация
состав информации
последовательность
25 Доступ, при котором записи файла читаются в физической последовательности, называется
+последовательным
прямым
простым
основным
вторичным
26 Доступ, при котором записи файла обрабатываются в произвольной последовательности, называется
+прямым
последовательным
простым
основным
вторичным
27 Методы программирования (укажите НЕ верный ответ)
+логическое
структурное
модульное
компиляторное
линейное
28 Что выполняется раньше
+разработка алгоритма
выбор языка программирования
написание исходного кода
компиляция
Все ответы верны
29 Найдите НЕ правильное условие для создания имен
+имена могут содержать пробелы
длинное имя можно сократить
из имени лучше выбрасывать гласные
можно использовать большие буквы
нет правильного ответа
30 Какие символы не допускаются в именах переменных
+пробелы
цифры
подчеркивание
знаки препинания
заглавные буквы
31 Как называется способ составления имен переменных, когда в начале имени сообщается тип переменной
прямым указанием
+венгерской нотацией
структурным программированием
поляризацией
Нет правильного ответа
32 На каком этапе производится выбор языка программирования
+проектирование
программирование
отладка
тестирование
разработка
33 Для решения экономических задач характерно применение
+СУБД (систем управления базами данных)
языков высокого уровня
языков низкого уровня
применение сложных математических расчетов
Нет правильного ответа
34 Для решения инженерных задач характерно применение
+САПР (систем автоматизированного проектирования)
СУБД (систем управления базами данных)
ОС (операционных систем)
(ТРПП) Технология и разработка программного продукта
Нет правильного ответа
35 Причины синтаксических ошибок
+плохое знание языка программирования
ошибки в исходных данных
ошибки, допущенные на более ранних этапах
неправильное применение процедуры тестирования
неправильная установка ПО
36 Когда можно обнаружить синтаксические ошибки
+при компиляции
при отладке
при тестировании
на этапе проектирования
при эксплуатации
37 Ошибки компоновки заключаются в том, что
+указано внешнее имя, но не объявлено
неправильно использовано зарезервированное слово
составлено неверное выражение
указан неверный тип переменной
Все ответы верны
38 Защитное программирование это
+встраивание в программу отладочных средств
создание задач защищенных от копирования
разделение доступа в программе
использование паролей
оформление авторских прав на программу
39 Вид ошибки с неправильным написанием служебных слов (операторов)
+синтаксическая
семантическая
логическая
символьная
алгоритмическая
40 Вид ошибки с неправильным использованием служебных слов (операторов)
+семантическая
синтаксическая
логическая
символьная
алгоритмическая
41 Ошибки при написании программы бывают
+синтаксические
орфографические
лексические
фонетические
морфологические
42 Процедура поиска ошибки, когда известно, что она есть это
+отладка
тестирование
компоновка
транзакция
трансляция
43 Программа для просмотра значений переменных при выполнении программы
+отладчик
компилятор
интерпретатор
трассировка
тестирование
44 Отладка – это
+процедура поиска ошибок, когда известно, что ошибка есть
определение списка параметров
правило вызова процедур (функций)
составление блок-схемы алгоритма
нет правильного ответа
45 Когда программист может проследить последовательность выполнения команд программы
+при трассировке
при тестировании
при компиляции
при выполнении программы
при компоновке
46 На каком этапе создания программы могут появиться синтаксические ошибки
+программирование
проектирование
анализ требований
тестирование
разработка ПО
47 Когда приступают к тестированию программы
+когда программа уже закончена
после постановки задачи
на этапе программирования
на этапе проектирования
после составления спецификаций,
48 Тестирование бывает
+автономное
инструментальное
визуальное
алгоритмическое
структурное
49 Тестирование бывает
+комплексное
инструментальное
визуальное
алгоритмическое
структурное
50 При комплексном тестировании проверяются
+согласованность работы отдельных частей программы
правильность работы отдельных частей программы
быстродействие программы
эффективность программы
все ответы верны
51 Чему нужно уделять больше времени, чтобы получить хорошую программу
+тестированию
программированию
отладке
проектированию
разработке
52 Процесс исполнения программы с целью обнаружения ошибок
+тестирование
кодирование
сопровождение
проектирование
разработка
53 Автономное тестирование это
+тестирование отдельных частей программы
инструментальное средство отладки
составление блок-схем
пошаговая проверка выполнения программы
все ответы верны
54 Трассировка это
+проверка пошагового выполнения программы
тестирование исходного кода
отладка модуля
составление блок-схемы алгоритма
нет правильного ответа
55 Локализация ошибки
+определение места возникновения ошибки
определение причин ошибки
обнаружение причин ошибки
исправление ошибки
анализ данных
56 Назначение тестирования
+повышение надежности программы
обнаружение ошибок
повышение эффективности программы
улучшение эксплуатационных характеристик
приведение программы к структурированному виду
57 Назначение отладки
+поиск причин существующих ошибок
поиск возможных ошибок
составление спецификаций
разработка алгоритма
разработка проекта
58 Создание исполняемого кода программы без написания исходного кода называется
составлением спецификаций
отладкой
проектированием
+автоматизацией программирования
анализ данных
58 Один из методов автоматизации программирования
структурное программирование
модульное программирование
+визуальное программирование
объектно-ориентированное программирование
машинное программирование
59 Автоматизация программирования позволяет
повысить надежность программы
+сократить время разработки программы
повысить быстродействие программы
ускорить процесс программы
все ответы верны
60 Что легко поддается автоматизации
+A) интерфейс
B) работа с файлами
C) сложные логические задачи
D) алгоритмизация
E) разработка ПО
61 Нахождение наилучшего варианта из множества возможных
+A) оптимизация
B) тестирование
C) автоматизация
D) отладка
E) сопровождение
62 Что такое оптимизация программ
+A) улучшение работы существующей программы
B) создание удобного интерфейса пользователя
C) разработка модульной конструкции программы
D) применение методов объектно-ориентированного программирования
E) Все ответы верны
63 Критерии оптимизации
+A) время выполнения или размер требуемой памяти
B) размер программы и ее эффективность
C) независимость модулей
D) качество программы, ее надежность
E) Нет правильного ответа
64 В чем заключается оптимизация условных выражений
A) в изменении порядка следования элементов выражения
B) в использовании простых логических выражений
C) в использовании сложных логических выражений
D) в использовании операций AND, OR и NOT
E) в использовании всех операций выражения
65 Оптимизация циклов заключается в
+A) уменьшении количества повторений тела цикла
B) просмотре задачи с другой стороны
C) упрощение задачи за счет включения логических операций
D) увеличении количества повторений тела цикла
E) упрощение задачи за счет отключения логических операций
66 Оптимизация программы это
+A) модификация
B) отладка
C) повышение сложности программы
D) уменьшение сложности программы
E) быстродействие программы
67 Критерии оптимизации программы
+A) быстродействие или размер программы
B) быстродействие и размер программы
C) надежность или эффективность
D) надежность и эффективность
E) Все ответы верны
68 Результат оптимизации программы
+A) эффективность
B) надежность
C) машино-независимость
D) мобильность
E) Все ответы верны
69 Сущность оптимизации циклов
+A) сокращение количества повторений выполнения тела цикла
B) сокращение тела цикла
C) представление циклов в виде блок-схем
D) трассировка циклов
E) поиск ошибок в циклах
70 Рекомендуемые размеры модулей
+A) небольшие
B) большие
C) равные
D) фиксированной длины
71 В чем заключается независимость модуля
+A) в написании, отладке и тестировании независимо от остальных модулей
B) в разработке и написании независимо от других модулей
C) в независимости от работы основной программы
D) в зависимости от работы вторичной программы
Е) в разработка и написании в зависимости от вторичных программ
72 При модульном программировании желательно, чтобы модуль имел
A) большой размер
+B) небольшой размер
C) фиксированный размер
D) любой размер
E) Все ответы верны
73 Достоинство модульного программирования
+A) создание программы по частям в произвольном порядке
B) не требует компоновки
C) всегда дает эффективные программы
D) снижает количество ошибок
E) Все ответы верны
74 Недостаток модульного программирования
A) увеличивает трудоемкость программирования
+B) усложняет процедуру комплексного тестирования
C) снижает быстродействие программы
D) не позволяет выполнять оптимизацию программы
E) Все ответы верны
75 Достоинство модульного программирования
+A) возможность приступить к тестированию до завершения написания всей программы
B) не требует комплексного тестирования
C) уменьшает размер программы
D) повышает надежность программы
E) Все ответы верны
76 Программирование без GO TO применяется при
+A) структурном программировании
B) модульном программировании
C) объектно-ориентированном программировании
D) все ответы верные
E) машинном программировании
77 Достоинство структурного программирования
+A) можно приступить к комплексному тестированию на раннем этапе разработки
B) можно приступить к автономному тестированию на раннем этапе разработки
C) нет необходимости выполнять тестирование
D) можно пренебречь отладкой
E) Все ответы верны
78 Недостаток структурного программирования
+A) увеличивает размер программы
B) снижает эффективность
C) уменьшает количество ошибок
D) не требует отладки
E) Все ответы верны
79 Что такое объект, в объектно-ориентированное программировании
+A) тип данных
B) структура данных
C) событие
D) обработка событий
E) использование стандартных процедур
Инкапсуляция это
A) определение новых типов данных
B) определение новых структур данных
+C) объединение переменных, процедур и функций в одно целое
D) разделение переменных, процедур и функций
E) применение стандартных процедур и функций
Наследование это
A) передача свойств экземплярам
B) передача свойств предкам
+C) передача свойств потомкам
D) передача событий потомкам
E) Все ответы верны
Полиморфизм это
+A) изменение поведения потомков, имеющих общих предков
B) передача свойств по наследству
C) изменение поведения потомков на разные события
D) изменение поведения экземпляров, имеющих общих предков
E) Все ответы верны
Три «кита» объектно-ориентированного метода программирования
A) предки, родители, потомки
+B) полиморфизм, инкапсуляция, наследование
C) свойства, события, методы
D) визуальные, не визуальные компоненты и запросы
E) Все ответы верны
Какое утверждение верно
A) предки наследуют свойства родителей
B) родители наследуют свойства потомков
C) потомки не могут иметь общих предков
+D) потомки наследуют свойства родителей
E) Все ответы верны
Могут ли два визуальных компонента иметь общего предка
+A) да
B) нет
C) если их свойства совпадают
D) если их методы совпадают
E) Все ответы верны
86. Есть ли различие в поведении объекта и экземпляра того же типа
A) да
B) если у них есть общий предок
+C) нет
D) если у них нет общего предков
E) Все ответы неверны
87. Изменение свойств, приводит к изменению поведения экземпляра
A) нет
B) только для визуальных
C) только НЕ для визуальных
+D) да
Е) Все ответы неверны
88. Процесс преобразования постановки задачи в план алгоритмического или вычислительного решения это
+A) проектирование
B) анализ требований
C) программирование
D) тестирование
E) Все ответы неверны
89. Составление спецификаций это
+A) формализация задачи
B) эскизный проект
C) поиск алгоритма
D) отладка
E) Все ответы неверны
90. Этап разработки программы, на котором дается характеристика области применения программы
+A) техническое задание
B) эскизный проект
C) технический проект
D) внедрение
E) рабочий проект
91 Укажите правильную последовательность создания программы
+A) формулирование задачи, анализ требований, проектирование, программирование
B) анализ требований, проектирование, программирование, тестирование, отладка
C) анализ требований, программирование, проектирование, тестирование
D) анализ требований, проектирование, программирование, модификация, трассировка
E) формулирование задачи, анализ требований, программирование, проектирование, отладка
92. Метод проектирования
+A) нисходящее
B) алгоритмическое
C) логическое
D) использование языков программирования
E) составление блок-схем
93. Нисходящее проектирование это
+A) последовательное уточнение (детализация)
B) составление блок-схем
C) разделение программы на отдельные участи (блоки)
D) трассировка
E) Все ответы верны
94. Признаки нисходящего программирования
+A) последовательная детализация
B) наличие оптимизации
C) наличие тестирования
D) автоматизация программирования
E) Все ответы верны
95. Модульное программирование применимо при
A) проектировании сверху вниз
B) проектирование снизу-вверх
+C) и в том, и другом случае
D) ни в коем случае
E) Все ответы неверны
96 В каких единицах измеряются затраты на проектирование
+A) в человеко-днях
B) в терабайтах
C) в гигабайтах
D) в килобайтах
Е) в мегабайтах
97. Упорядоченная последовательность команд (инструкций) компьютера для решения конкретной задачи.
A. Свойство программы
B. Программное обеспечение
C. Постановка задачи
+D. Программа
E. Язык программирования
98. С позиции специфики разработки и вида программного обеспечения, на какие два класса делятся задачи?
A. Позиционные и функциональные
+B. Технологические и функциональные
C. Позиционные и непозиционные
D. Технологические и параметрические
E. Нет верного ответа
99. Какими последовательными действиями можно представить процесс создания программ?
A. Программирование, постановка задачи, построение алгоритма
B. Построение алгоритма, решение задачи
C. Построение алгоритма, программирование
+D. Программирование, построение алгоритма, постановка задачи
E. Постановка задачи, построение алгоритма решения, программирование
100. Постановка задачи — это …
A. упорядоченная последовательность команд компьютера для решения задач
B. точная формулировка решения задачи на компьютере с описанием входных и выходных данных
+C. совокупность связанных между собой функций, задач управления, с помощью которых достигается выполнение поставленных целей
D. система точно сформулированных правил
E. Все ответы верны
101. Алгоритм — это …
A. разбиение процесса обработки информации на более простые этапы
B. задача, подлежащая реализации с использованием средств информационных технологий
+C. точная формулировка решения задачи на компьютере с описанием входных и выходных данных
D. система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных в желаемый результат за конечное число шагов
E. нет верного ответа
102. Разбиение процесса обработки информации на более простые этапы (шаги выполнения), выполнение которых компьютером или человеком не вызывает затруднений
A. Массивы
B. Безопасность
C. Программное обеспечение
+D. Алгоритм
E. Все ответы неверны
103. Выполнимость — это …
A. конечность действий алгоритма решения задач, позволяющая получить желаемый результат при допустимых исходных данных за конечное число шагов
+B. разбиение процесса обработки информации на более простые этапы (шаги выполнения), выполнение которых компьютером или человеком не вызывает затруднений
C. действие алгоритма решения задач, позволяющая получить не желаемый результат при допустимых исходных данных за бесконечное число шагов
D. система точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных в желаемый результат за конечное число шагов
Е. нет верного ответа
104. Осуществляет разработку и отладку программ для решения функциональных задач
A. Системный программист
B. Программист-аналитик
+C. Прикладной программист
D. Администратор
E. Постановщик задач
105. Занимается разработкой, эксплуатацией и сопровождением системного программного обеспечения, поддерживающего работоспособность компьютера и создающего среду для выполнения программ
+A. Прикладной программист
B Программист-аналитик
C. Системный программист
D. Администратор БД
E. нет верного ответа
106. Анализирует и проектирует комплекс взаимосвязанных программ для реализации функций предметной области
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Постановщик задач
+E. Администратор
107. Участвует в процессе создания программ на начальной стадии работ
A. Администратор БД
+B. Прикладной программист
C. Постановщик задач
D. Системный программист
E. все ответы верны
108. Является основным потребителем программ
A. Прикладной программист
B. Программист-аналитик
C. Системный программист
D. Конечный пользователь
+E. Нет верного ответа
109. Свойство системы сохранять во времени в установленных пределах значения всех характеристик, определяющих способность системы выполнять требуемые функции в условиях заданных режимов эксплуатации
A. Дискретность
B. Экономичность
+C. Готовность
D. Работоспособность
E. Надежность
110. Возможность доступа к услугам АИС с использованием соответствующих технологий всегда, когда в ней возникает необходимость
A. Определенность
B. Работоспособность
C. Надежность
D. Экономичность
+E. Готовность
111. Количество и степень занятости ресурсов, процессов, ОП, внешней и внутренней памяти, каналов ввода/вывода, терминалов и каналов сети
A. Экономичность
B. Готовность
C. Надежность
+D. Определенность
E. Работоспособность
112. Устойчивость — …
A. характеризует способность к безотказному функционированию при наличии сбоев
B. возможность доступа к услугам АИС с использованием соответствующих технологий всегда, когда в ней возникает необходимость
C. Свойство системы сохранять во времени в установленных пределах значения всех характеристик, определяющих способность системы выполнять требуемые функции в условиях заданных режимов эксплуатации
D. количество и степень занятости ресурсов, процессов, ОП, внешней и внутренней памяти, каналов ввода/вывода, терминалов и каналов сети
+E. Нет верного ответа
113. Процесс обеспечивает возобновления нормально функционирования АИС
A. Устойчивость
+B. Перезапуск
C. Готовность
D. Надежность
E. Все ответы верны
С каким этапом жизненного цикла программного продукта связано с алгоритмизацией
114.Процесса обработки данных, детализацией функций обработки, разработкой структуры ПП, выбором методов и средств создания программ?
A. Документирование
B. Программирование
C. Сопровождение
D. Проектирование
+E. нет верного ответа
115. С каким этапом жизненного цикла программного продукта связано с технической реализацией проектных решений и выполнение с помощью выбранного инструментария разработчика (алгоритмические языки и системы программирования и.т.д.)?
A. Документирование
B. Проектирование структуры ПП
+C. Программирование, тестирование и отладка
D. Сопровождение ПП
E. Все ответы верны
116.На каком этапе жизненного цикла программного продукта составляются необходимые сведения по установке и обеспечению надежной работы ПП и т.д.?
A. Проектирование
B. Эксплуатация
C. Документирование
D. Программирование
+E. нет верного объекта
117. Жизненный цикл ПО — …
A. непрерывный процесс, который начинается с момент его полного изъятия из эксплуатации и заканчивается в момент принятия решения о необходимости его создания
+B. процесс, который начинается с момента его полного описания и заканчивается в момент принятия решения о необходимости его создания
C. непрерывный процесс, который начинается с момента принятия решения о необходимости его создания и заканчивается в момент его полного изъятия из эксплуатации
D. прерывающийся процесс, который начинается с момента написания структуры программы и заканчивается в момент его полного изъятия из эксплуатации
E. Нет верного ответа
118. На какие три группы процессов делится структура жизненного цикла ПО по стандарту ISO/IEC 12207?
A. Составные, действующие и вспомогательные процессы
B. Основные, дополнительные и остальные процессы
C. Вспомогательные, основные и дополнительные процессы
+D. Основные, вспомогательные и организационные процессы
E. Нет верного ответа
119. Основные процессы жизненного цикла ПО делятся на …
A. Процесс документирования, процесс обеспечения качества, процесс верификации
B. Процесс поставки, процесс обеспечения качества, процесс верификации
+C. Процесс управления, процесс создания инфраструктуры, процесс обучения
D. Процесс приобретения, процесс поставки, процесс разработки*
E. Процесс управления, процесс разработки, процесс обучения
120. Вспомогательные процессы жизненного цикла ПО делятся на …
A. Процесс документирования, процесс обеспечения качества, процесс верификации*
B. Процесс поставки, процесс обеспечения качества, процесс верификации
+C. Процесс управления, процесс создания инфраструктуры, процесс обучения
D. Процесс приобретения, процесс поставки, процесс разработки
E. Процесс управления, процесс разработки, процесс обучения
Процесс разработки программного обеспечения: как выбрать процесс, который подходит именно вам
Джори Маккей
Джори — писатель, контент-стратег и отмеченный наградами редактор Unsplash Book. Он вносит свой вклад в Inc., Fast Company, Quartz и другие.
2 октября 2019 г. · 12 мин чтения
В жизни есть много вещей, которые можно улучшить с помощью небольшой спонтанности: отношения, планы на выходные, татуировки. Но разработка программного обеспечения не входит в их число.Вместо этого, как так классно выразился Бенджамин Франклин:
«Если вы не планируете, вы планируете потерпеть неудачу». — Бенджамин Франклин
Каждая отличная программа начинается с плана и четкого процесса. К счастью, существует множество процессов разработки программного обеспечения, из которых вы можете выбрать, когда начинаете свой следующий проект. Но какой процесс разработки программного обеспечения подходит вам?
В этом руководстве мы рассмотрим основы жизненного цикла разработки программного обеспечения, почему это так важно понимать, а затем рассмотрим плюсы и минусы пяти лучших процессов разработки программного обеспечения.
SDLC: что такое разработка программного обеспечения жизненный цикл и почему так важно иметь его?
Планируете вы это или нет, все программы проходят один и тот же путь от идеи до дня запуска.В совокупности этапы этого пути называются жизненным циклом разработки программного обеспечения (или сокращенно SDLC). SDLC — это последовательность шагов, которые выполняются во время разработки программного обеспечения.
Управляйте проектами как профессионалы. Попробуйте Planio.
Традиционно на каждом шаге создается выход — идея, документ, диаграмма или часть рабочего программного обеспечения — который затем используется в качестве входного для следующего шага. И так до тех пор, пока не достигнете своей цели.
При этом программное обеспечение никогда не бывает «законченным». Даже выпуск вашей первой версии можно рассматривать как еще один шаг в жизненном цикле вашего программного обеспечения.
Невозможно недооценить важность наличия четкого процесса и знания этапов разработки.
Даже если вы, , можете запускать программное обеспечение без четкого процесса, не означает, что вы должны. Благодаря многолетним испытаниям, итерациям и развитию современные процессы разработки программного обеспечения делают создание новых инструментов более дешевым, эффективным и менее напряженным.
Но, возможно, даже больше, использование формализованного SDLC имеет ряд других преимуществ:
- Создает общий словарь для каждого шага на этом пути
- Определяет каналы связи и ожидания между разработчиками и заинтересованными сторонами проекта
- Устанавливает четкие роли и обязанности для всей вашей команды (разработчиков, дизайнеров, менеджеров проектов и т. д.).
- Предоставляет согласованное «определение готового» для каждого шага, чтобы остановить расползание объема работ и помочь продолжить продвижение проекта.
- Формализует, как справиться ошибки, запросы функций и обновления
С другой стороны, отсутствие плана разработки программного обеспечения означает более длительные сроки, низкое качество или даже полный отказ.Хуже того, ваши разработчики не знают, что им делать. Хотя ваши менеджеры проектов не будут иметь ни малейшего представления о том, какой прогресс был достигнут, и есть ли у вас бюджет или даже на пути к его завершению!
Инструмент управления проектами, который нравится разработчикам и менеджерам.
Решение о том, следует ли проводить формальный процесс разработки программного обеспечения, похоже на вопрос, лучше ли вы спотыкаетесь в пылающей жаре пустыни в надежде, что наткнетесь на Оазис, или получите карту, которая приведет вас прямо туда.
Я знаю, какой вариант выбрать. Итак, давайте начнем с понимания основных «строительных блоков» SDLC, а затем посмотрим, как их оптимизировать, выбрав правильный процесс разработки программного обеспечения для вашей команды .
Решить, проводить ли формальный процесс разработки программного обеспечения, все равно что спросить, лучше ли вы спотыкаетесь в пылающей жаре пустыни в надежде, что наткнетесь на Оазис, или у вас есть карта, которая приведет вас прямо туда.
7 этапов SDLC
Если вы менеджер проекта, вы, вероятно, уже знакомы с различными этапами SDLC.Как пастырь цифрового проекта, вы должны думать обо всем: от требований до взаимодействия с заинтересованными сторонами, разработки и текущего обслуживания.
Эти шаги практически одинаковы для любого процесса разработки программного обеспечения, который вы используете. Однако, как мы увидим позже, порядок и последовательность их выполнения может меняться в зависимости от ваших потребностей, целей, а также размера проекта и команды (например, некоторые шаги могут быть объединены, дублированы или выполняться параллельно).
1. Анализ и планирование
После того, как заказчик или заинтересованное лицо запросили проект, первым шагом SDLC является планирование.Обычно это означает:
- Мировоззрение: Как этот проект связан с более крупной миссией и целями вашей компании?
- Доступность и распределение ресурсов: Есть ли у вас люди и инструменты, необходимые для этого?
- Планирование проекта: Как этот проект соответствует целям вашей компании и другим задачам?
- Оценка стоимости: Сколько это будет стоить?
Этап планирования гарантирует, что вы начнете правильно.Поэтому постарайтесь убедиться, что вы включили все отделы, которые будут затронуты этим проектом, в том числе менеджеров проектов, разработчиков, специалистов по эксплуатации, безопасности и основных заинтересованных сторон.
Попасть в ♥ с Project Management. Попробуйте Planio.
В конце фазы планирования у вас должно быть достаточно информации, чтобы составить высокоуровневый объем работ (SOW) — план, в котором подробно описывается, что строится, почему и как вы это видите.
2. Требования
Следующим шагом является понимание технических требований этого проекта.Каждая часть программного обеспечения — будь то приложение, редизайн веб-сайта или новая функция — должна решать проблему клиента.
По мере того, как вы переходите от фазы планирования и продолжаете заполнять SOW, задавайте вопросы о специфике этого проекта, например:
- Какую проблему это решает?
- Кто будет этим пользоваться и почему?
- Какой тип ввода / вывода данных необходим?
- Потребуется ли вам интегрироваться с другими инструментами или API?
- Как вы будете обеспечивать безопасность / конфиденциальность?
Как только ваша группа разработчиков получит ответы на эти вопросы, они смогут приступить к определению технических требований, условий тестирования и принять решение о стеке технологий.На этом этапе вы также можете начать планирование спринта (если вы используете процесс разработки программного обеспечения Agile) или разбить большие задачи на более действенные шаги.
3. Дизайн и прототипирование
С учетом требований пора приступить к проектированию того, как это программное обеспечение будет выглядеть и как оно будет работать. Мы говорим здесь не об эстетике, а о функциональности и плавности. Как сказал Стив Джобс:
Дизайн — это не только то, как он выглядит и ощущается.
Дизайн — как это работает.
В зависимости от процесса разработки программного обеспечения, которому вы следуете, этот этап SDLC может означать создание простых каркасов, чтобы показать, как взаимодействия будут работать в программном обеспечении, или создание более полноценных прототипов с использованием таких инструментов, как Marvel или InVision для тестирования. с пользователями. В качестве альтернативы вы можете решить, что вам нужно больше отзывов пользователей, и провести дизайнерский спринт, чтобы быстро представить функцию или идею вашим пользователям.
Программное обеспечение для управления проектами, которое вы действительно захотите использовать.
Каким бы способом вы ни занялись, этот этап помогает вашей команде и вашему клиенту — будь то заказчик или заинтересованное лицо — проверить идеи и получить ценную обратную связь, прежде чем вы закрепите свои идеи в коде.
4. Разработка программного обеспечения
Теперь, когда все знакомы с предлагаемыми функциями и дизайном программного обеспечения, самое время создать его в соответствии с требованиями и SOW.
Этот этап, очевидно, является самым сложным и потенциально самым рискованным этапом SDLC (и каждый из процессов разработки программного обеспечения, которые мы обсудим ниже, обрабатывает его по-разному.Однако независимо от того, работаете ли вы в Agile-спринтах, создаете MVP или используете более традиционный метод водопада, цель здесь — придерживаться SOW, избегать сползания объема и создавать чистое и эффективное программное обеспечение.
5. Тестирование
По мере того, как ваша команда разрабатывает программное обеспечение, вы, скорее всего, будете одновременно тестировать, отслеживать и исправлять ошибки. Однако после того, как функции будут реализованы и продукт будет признан готовым к использованию, вам нужно будет провести еще один раунд более глубокого тестирования.Это может означать выпуск продукта для небольшой группы бета-тестеров или использование инструментов UX для отслеживания того, как пользователи взаимодействуют с ним.
Хотя тестирование может быть еще одним длительным этапом SDLC, важно убедиться, что вы не отправляете программное обеспечение с ошибками реальным клиентам. Как мы писали в нашем руководстве по инструментам и рабочим процессам отслеживания ошибок, ошибки могут убить вашу репутацию, привести к потере доходов и, что хуже всего, отнять часы разработки, которые можно было бы потратить на создание новых функций.
6.Развертывание
Когда тяжелая работа (и кодирование) закончилась, пришло время запустить ваше программное обеспечение для всех ваших пользователей. Речь идет о запуске вашего кода в производство. Не придумывать и не реализовывать стратегию выхода на рынок (это больше зависит от ваших отделов продаж и маркетинга).
Получите всех на одной странице. С Планио.
В большинстве компаний этот этап должен быть в значительной степени автоматизирован с использованием модели непрерывного развертывания или инструмента автоматизации выпуска приложений (ARA).
7. Обслуживание и обновления
SDLC не закончится, когда ваше программное обеспечение появится в свободном доступе. Помните, это «жизненный цикл»? Окончание одной фазы — это только начало другой, и то же самое касается и после запуска.
Требования и потребности клиентов постоянно меняются. И когда люди начнут использовать ваше программное обеспечение, они, несомненно, будут находить ошибки, запрашивать новые функции и запрашивать дополнительные или другие функции. (Не говоря уже о базовом содержании и обслуживании вашего программного обеспечения для обеспечения бесперебойной работы и удовлетворения потребностей клиентов.)
Все эти запросы необходимо направить обратно в список невыполненных задач по продукту, чтобы им можно было назначить приоритеты и включить их в дорожную карту продукта.
5 лучших процессов разработки программного обеспечения (и как выбрать подходящий для вас)
Хотя описанный выше SDLC может показаться пошаговым планом создания программного обеспечения, на самом деле это скорее руководство.
Да, вам нужно установить каждый флажок, чтобы убедиться, что вы отправляете и обслуживаете отличное программное обеспечение. Но как вы их проверяете, когда и в каком порядке — решать вам.С годами был формализован ряд различных процессов разработки программного обеспечения для решения все более сложных проектов. Но какой из них вам подходит?
В конечном итоге, какой процесс вы будете использовать, будет зависеть от ваших целей, размера проекта и вашей команды, а также других факторов. Чтобы помочь вам определиться, вот 5 лучших процессов разработки программного обеспечения с плюсами и минусами для каждого.
Последний инструмент для управления проектами, который вам когда-либо понадобится.
1.Waterfall
Что это такое:
Процесс разработки программного обеспечения Waterfall (также известный как «линейная последовательная модель» или «Классическая модель жизненного цикла») — одна из старейших и наиболее традиционных моделей для создания программного обеспечения. В его самой простой форме вы можете думать о методе водопада как о последовательном выполнении каждого шага SDLC — вы должны закончить каждый шаг последовательно, прежде чем двигаться дальше. Однако в большинстве практических приложений фазы немного перекрываются, между ними передается обратная связь и информация.
Некоторым людям также нравится называть это «управляемым планом» процессом, поскольку для завершения проекта вам сначала нужно знать все, что необходимо сделать, и в каком порядке. Отсюда и название «Водопад», поскольку каждая секция перетекает в следующую.
Фазы:
- Планирование
- Требования
- Разработка системы и программного обеспечения
- Внедрение
- Тестирование
- Развертывание
- Обслуживание / обновления
Для кого: Команды с жесткой структурой и необходимостью документации.
Благодаря своей жесткой структуре и длительному предварительному планированию, процесс разработки программного обеспечения Waterfall работает лучше всего, когда ваши цели, требования и стек технологий вряд ли радикально изменятся в процессе разработки (например, во время более коротких разовых проектов) .
С практической точки зрения, каскадный процесс лучше всего подходит для крупных организаций (например, государственных учреждений), которым перед запуском проекта требуется согласование и документация по всем требованиям и масштабам.
Для кого это , а не :
Если вы тестируете новый продукт, нуждаетесь в обратной связи с пользователями в середине потока или хотите быть более динамичным в процессе разработки, следование процессу разработки Waterfall, вероятно, неправильно для тебя.
Никогда не пропустите еще один крайний срок. Попробуйте Planio.
Несмотря на простоту, самый большой недостаток этого процесса заключается в том, что ему не хватает гибкости. Вы не будете создавать и тестировать MVP или прототипы, постоянно меняя свое мнение.И из-за этого, если ваша область видимости не четко прописана, вы можете в конечном итоге пойти по неправильному пути, не зная об этом до дня запуска.
2. Agile и Scrum
Что это такое:
Процесс разработки программного обеспечения Agile (и его самая популярная методология, Scrum) выбирает итеративный и динамический подход к разработке.
В отличие от строгого последовательного потока процесса Waterfall, в Agile кросс-функциональные команды работают в «спринтах» от 2 недель до 2 месяцев, чтобы создать и выпустить полезное программное обеспечение для клиентов для обратной связи.
Agile — это все о быстром движении, частых выпусках и удовлетворении реальных потребностей ваших пользователей, даже если это идет вразрез с вашим первоначальным планом. Это означает, что вам не нужен полный список требований и полное SOW перед началом работы. Вместо этого вы, по сути, движетесь в одном направлении, понимая, что по пути вы измените курс.
Agile — это гораздо больше, чем просто это (которое мы рассмотрим в этом руководстве по внедрению Agile и Scrum). Однако вот простой пример того, как это может выглядеть на практике.Допустим, вы создаете новую функцию для одного из своих продуктов, которая может иметь функции X, Y и Z, . Вместо того, чтобы тратить месяцы на создание всего, вы потратите 2–4 недели на создание минимума, который будет одновременно полезным и полезным (в так называемом «Agile Sprint»), а затем предоставите его своим клиентам.
Не отвлекайтесь, приведите свои проекты в соответствие.
Это обеспечивает более тесную обратную связь на протяжении всего процесса разработки программного обеспечения, чтобы вы могли адаптироваться и реагировать на реальных потребностей клиентов .
Фазы:
- Бэклог продукта
- Бэклог спринта
- Спринт (проектирование и разработка)
- Выпуск рабочего программного обеспечения
- Обратная связь и проверка (добавить в бэклог)
- Планировать следующий спринт
Для кого это : Динамичные команды постоянно обновляют продукты.
Благодаря своему динамичному и ориентированному на пользователя характеру Agile — это процесс разработки программного обеспечения, который предпочитают большинство стартапов и технологических компаний, тестирующих новые продукты или постоянно обновляющих уже существующие.
По мере того, как становится все проще выпускать небольшие выпуски и собирать отзывы пользователей, Agile позволяет компаниям двигаться быстрее и проверять теории, не рискуя всем своим существованием на крупном выпуске, который ненавидят пользователи. Кроме того, поскольку тестирование происходит после каждой небольшой итерации, легче отследить ошибки или вернуться к предыдущей версии продукта, если что-то более серьезное сломалось.
Для кого , а не : Команды с очень ограниченными бюджетами и сроками.
С другой стороны, динамический характер Agile означает, что проекты могут легко выйти за рамки начальных временных рамок или бюджета, создать конфликты с существующей архитектурой или сорваться из-за неправильного управления. Это означает, что это не лучший выбор для команд, не склонных к риску или ограниченных в ресурсах.
Кроме того, использование Agile и Scrum требует целеустремленности и твердого понимания лежащего в основе процесса для правильного выполнения. Вот почему важно иметь в вашей команде хотя бы одного преданного мастера Scrum, чтобы гарантировать, что спринты и вехи будут достигнуты, а проект не остановится.
Завершайте проекты в срок и в установленный бюджет. С Планио.
3. Инкрементальный и итерационный
Что это такое:
Инкрементальные и итерационные процессы разработки программного обеспечения являются промежуточным звеном между структурой и предварительным планированием процесса Waterfall и гибкостью Agile.
Хотя оба они следуют идее создания небольших фрагментов программного обеспечения и предоставления их пользователям для обратной связи, они отличаются от , которые вы создаете в каждом выпуске.
В процессе инкрементной разработки программного обеспечения каждое «инкрементное» увеличение продукта добавляет простую форму новой функции или возможности. Думайте об этом, как о создании общего плана, создании MVP с использованием только основных функций и последующем добавлении функций на основе отзывов.
Однако в процессе итеративной разработки программного обеспечения каждая выпускаемая вами версия включает в себя версию со всеми запланированными функциями. Думайте об этом как о создании v0.1 с самой простой версией каждой функции, а затем обновил ее до v0.2, v0.3 и так далее.
Инкрементные фазы:
- Планирование приращения
- Спецификации
- Разработка
- Валидация
- Повторить для каждой версии
Итерационные фазы:
- Анализ
- Дизайн
- Разработка и тестирование
- (Повторяйте это, пока не будете готовы к выпуску)
Для кого: Команды с четкими требованиями, которым нужна большая гибкость, чем обеспечивает метод водопада.
Оба из них добавляют определенный уровень гибкости в процесс разработки программного обеспечения, не выбрасывая общий план, что делает их идеальными для крупных проектов с определенными масштабами (или групп с меньшим допуском к риску).
Благодаря инкрементальному процессу вы получите раннюю обратную связь по вашей основной функции, которая поможет вам сразу же проверить свое экономическое обоснование. В то время как итеративный подход дает пользователям возможность заранее увидеть, каким может быть полный продукт , чтобы вы могли получить более точную и целенаправленную обратную связь.
Освободите свое время от напряженной работы и будьте организованы.
В обоих случаях вы говорите с пользователями на ранней стадии о том, чего они на самом деле хотят, что может сэкономить вам массу времени, денег и головной боли, чем если бы вы ждали более позднего этапа цикла разработки.
Кому это не подходит: Команда без четкого долгосрочного технологического плана.
К сожалению, попытка добавить структуру к гибкому подходу имеет свои проблемы. Возможно, цели, процедуры или технологии вашей компании меняются со временем, делая предыдущие итерации бесполезными или сломанными.Или, возможно, ваша кодовая база становится беспорядочной и раздутой из-за добавления функций без повышения эффективности.
Кроме того, обе эти модели (и особенно итеративный подход) требуют тщательного планирования и построения архитектуры на раннем этапе. Это означает, что они не идеальны для небольших проектов или команд, которые все еще тестируют варианты использования и пытаются найти продукт, соответствующий рынку.
В чем разница между инкрементальным, итеративным и гибким?
Если вы просто прочитаете несколько последних разделов, вам может быть интересно узнать разницу между инкрементным, итеративным и гибким процессами разработки программного обеспечения.Хотя они довольно похожи, есть несколько ключевых отличий.
Каждое приращение в инкрементальном подходе создает полной функции . В итеративном режиме вы создаете небольших частей всех функций.
Agile, с другой стороны, сочетает аспекты и подходов. В каждом спринте Agile вы создаете небольшую часть каждой функции, по одной, а затем постепенно добавляете функциональность и новые функции с течением времени.
4. V-образный
Что это такое:
V-образный процесс разработки программного обеспечения — это взятие классического метода водопада, который компенсирует его самый большой недостаток: отсутствие тестирования.
Управляйте проектами как профессионалы. Попробуйте Planio.
Вместо того, чтобы работать последовательно в процессе разработки и сохранять все ваши тесты на потом, каждый этап V-образного процесса сопровождается строгим этапом «валидации и верификации», когда требования проверяются перед тем, как двигаться дальше.
Фазы:
- Требования
- Спецификации
- Дизайн верхнего уровня
- Дизайн нижнего уровня
- Разработка
- Модульное тестирование
- Интеграционное тестирование
- Системное тестирование
- Приемочное тестирование
Кто это для: Команды, работающие над небольшими проектами с ограниченным объемом работы.
V-образный процесс разработки программного обеспечения отлично подходит, если у вас есть небольшой проект с относительно четкими (и статичными) требованиями и масштабом. Вместо того, чтобы идти на риск следовать плану только для поиска проблем в самом конце, он предоставляет широкие возможности для тестирования в процессе.
Для кого это не подходит: Команды, которым нужна большая гибкость и своевременный вклад пользователей.
Даже самые тщательно продуманные планы часто сбиваются. А минусы этого процесса в основном противоположны его положительным чертам.
Во-первых, это отсутствие контроля из-за того, что вы следуете жесткой структуре и графику тестирования. Без раннего вклада и обратной связи от пользователей вы все равно рискуете создать программное обеспечение , не подходящее для вашего бизнеса. И, наконец, если вы создаете что-либо, помимо простого небольшого проекта, практически невозможно заранее создать достаточно конкретный план развития.
5. Spiral
Что это такое:
Процесс разработки программного обеспечения Spiral сочетает в себе V-образный процесс, ориентированный на тестирование и оценку рисков, с инкрементным характером итеративного, инкрементального и гибкого подхода.
Программное обеспечение для управления проектами, которое не отстой.
После того, как разработан план для конкретной итерации или вехи, следующим шагом является проведение углубленного анализа рисков для выявления ошибок или областей чрезмерного риска. Например, предположим, что в рамках вашего плана вы предлагаете функцию, которая не была одобрена клиентами. Вместо того, чтобы просто добавлять его к текущему этапу, вы можете создать прототип для тестирования с пользователями, прежде чем переходить к полной фазе разработки.После того, как каждая веха завершена, область действия расширяется (по спирали), и вы начинаете с планирования и еще одной оценки рисков.
Этапы:
- Планирование
- Оценка рисков
- Разработка и проверка
- Оцените результаты и спланируйте следующий «цикл»
Для кого: Группы, не склонные к риску, работают над крупными проектами.
Очевидно, что основная цель такого процесса — снизить риск.Если вы работаете над большим или критически важным проектом, который требует высокого уровня документации и проверки, возможно, будет иметь смысл следовать подобному пути. Также выгодно, если заказчик не совсем уверен в требованиях и ожидает серьезных изменений во время разработки продукта.
Кому это не подходит: Большинство людей.
Хотя процесс спиральной разработки программного обеспечения фантастичен в теории, на самом деле он редко применяется на практике из-за времени и затрат, связанных с применением такого расчетного подхода.Вместо этого он в основном используется как пример того, как критически относиться к итеративному подходу к разработке.
Процессы и планы — всего лишь предположения
Когда вы находитесь на ранних этапах создания нового программного обеспечения, вам может казаться, что пути, проложенные перед вами, бесконечны. Но вместо того, чтобы быть ошеломленным, найдите секунду и вспомните, что каждый процесс и метод разработки программного обеспечения сводится к четырем основным принципам:
- Поймите это: Знайте, что вы хотите создать и почему.
- Построить: Проектировать и разрабатывать работающее программное обеспечение.
- Протестируйте: Дайте пользователям попробовать и собрать отзывы.
- Развивайте его: Используйте эту обратную связь, чтобы сделать его лучше.
Подключайтесь к управлению проектами. Попробуйте Planio.
Те же шаги относятся к выбору процесса разработки, который подходит именно вам. Начните с понимания шагов SDLC, затем выберите процесс, который подходит вам и вашей команде, опробуйте его и соберите отзывы от своей команды.И помните, это жизненный цикл. Если с первого раза у вас что-то не получается, поймите, почему это не сработало, затем выберите другой процесс и начните заново.
Основы процесса разработки программного обеспечения — Часть 1
Это первая публикация из серии из 5 статей, написанная Калпешем Доши, директором по управлению продуктами в BrowserStack, в которой объясняется более широкий процесс разработки программного обеспечения и его влияние на тестирование. Эти публикации должны помочь молодые разработчики и фрилансеры понимают, как работает сильная команда инженеров.
Что такое разработка программного обеспечения?
Разработка программного обеспечения — это итеративный логический процесс, который направлен на создание программного обеспечения для достижения уникальных деловых или личных целей, задач или процессов. Цель достигается разработчиком программного обеспечения, пишущим компьютерный код. Тем не менее, он также включает в себя несколько этапов, таких как исследование, проектирование потока данных и процесса, написание технической документации, всестороннее тестирование, отладка и итеративное внедрение в жизнь.Этот процесс известен как жизненный цикл разработки программного обеспечения (SDLC).
Программное обеспечение разработано для различных целей. Три наиболее распространенных:
- Для удовлетворения конкретных потребностей конкретного клиента / бизнеса (случай с индивидуальным программным обеспечением)
Для решения реальной проблемы - Для личного использования (например, владельцу аптеки может потребоваться инвентарь). для управления и выставления счетов.)
- Потребность в улучшении управления качеством процесса разработки программного обеспечения усилила дисциплину программной инженерии, которая фокусируется на применении системного подхода, воплощенного в инженерной парадигме, к процессу разработки программного обеспечения.
Для управления проектами программного обеспечения доступно несколько методологий, таких как Agile, Waterfall, Scrum, Kanban и некоторые другие.
Обычно любая разработка программного обеспечения подразделяется на два типа:
- Внутренняя разработка
- Внешняя разработка
Что такое PDLC (Жизненный цикл разработки продукта)
Жизненный цикл разработки продукта (PDLC) — это полный процесс создание и вывод на рынок нового продукта.Он включает следующие 5 шагов:
- Концептуализация продукта
- Архитектура и дизайн продукта
- Создание или разработка продукта
- Выпуск продукта
- Реализация продукта и дальнейшее обновление
- Концептуализация продукта : Каждый продукт должен начинаться с идея. В некоторых случаях это может быть достаточно просто, концептуализировать новый продукт на основе того, что уже существует. В некоторых случаях это может быть что-то нестандартное.Многие ведущие технологические компании имеют отделы инноваций, которые сосредоточены исключительно на задаче создания «следующего большого дела». После того, как идея выбрана, значительное время тратится на исследование рынка, функциональный анализ, технический анализ, технико-экономическое обоснование, рентабельность инвестиций. , и разработка прототипа.
- Архитектура и дизайн продукта : Следующим этапом является разработка технической архитектуры продукта. На этом этапе бизнес-группа предоставляет бизнес-спецификации техническим группам, которые затем создают архитектуру продукта, диаграммы рабочих процессов и проектируют БД.
- Разработка продукта : На этом этапе группы разработчиков начинают разработку продукта. Команды разработчиков могут использовать методологии Waterfall или Agile для разработки продукта. Большинство компаний-разработчиков программного обеспечения в настоящее время переходят к методологии гибкой разработки, чтобы ускорить процесс разработки продукта. На этом этапе команды разрабатывают, проводят модульные тесты, интеграционные тесты, тесты производительности и любые другие типы тестирования в зависимости от типа продукта. По завершении этого этапа команда создает альфа-выпуск, который может быть в основном внутренним и ограничиваться несколькими внешними пользователями.
- Выпуск продукта : Как только команда будет уверена в функциональности, удобстве использования и стабильности продукта на основе альфа-версии и получит отзывы, команда перейдет к фазе выпуска бета-версии. В бета-версии компании могут открыть ее для всех клиентов или предоставить доступ ограниченным клиентам, которые запрашивают доступ к бета-версии. На этом этапе команда хочет получить обратную связь от внешних клиентов и внести соответствующие изменения. Когда команда удовлетворена обратной связью по бета-версии и в продукт внесены необходимые изменения, происходит публичный выпуск продукта.Публичный выпуск включает в себя широкие объявления, PR и т. Д. Для создания воздействия в зависимости от продукта.
- Реализация продукта и дальнейшее обновление : Следующий этап — постоянный мониторинг продукта, его использования и роста. Наряду с будущими улучшениями командам также необходимо расставить приоритеты для исправлений ошибок с учетом влияния на клиента.
Пример:
Большинство компаний используют эти этапы для вывода на рынок нового продукта. Например, когда PayPal представил продукт для контекстной проверки, они прошли все эти этапы, чтобы убедиться в успешном запуске продукта.
- Они провели тщательное исследование рынка, чтобы выяснить, почему контекст важен по сравнению с отсутствием контекста.
- Определили основную цель нового продукта, а именно сокращение количества отказов.
- Провели тщательный анализ технической осуществимости. и принятие покупателями
- Работали с командами дизайнеров над созданием целостного контекстного взаимодействия
- Для такого большого проекта они создали три группы доставки, каждая из которых запускала свою схватку, управляемую центральной программой
- Они выпустили продукт с ценным продуктом на ограниченном рынке и продолжал отслеживать показатели
- Продукт был доработан на основе отзывов перед выпуском на более широкий рынок
Что такое SDLC (жизненный цикл разработки программного обеспечения)
Жизненный цикл разработки программного обеспечения определяется как систематический подход, используемый индустрии программного обеспечения для проектирования, разработки и тестирования высококачественного программного обеспечения.Основная цель SDLC — производить высококачественное программное обеспечение, которое соответствует ожиданиям клиентов или превосходит их, завершается в кратчайшие сроки и с учетом сметных затрат.
SDLC состоит из следующих действий:
- Планирование : Самый важный аспект разработки программного обеспечения, анализ требований, выполняется наиболее квалифицированными и опытными инженерами-программистами в организации. После сбора и анализа требований от клиента создается документ о содержании.
- Реализация : Здесь инженеры-программисты начинают писать код в соответствии с проанализированными требованиями
- Тестирование : Это важный этап, который направлен на обнаружение любых ошибок, ошибок или недостатков в программном обеспечении
- Документация : Каждое действие, выполняемое в проекте, документируется для дальнейшего использования и улучшения в процессе разработки.
- Развертывание и обслуживание. : Программное обеспечение развертывается после того, как оно утверждено для выпуска.
- Техническое обслуживание : этот этап происходит после того, как продукт будет запущен. Он включает в себя модификацию некоторых функций с течением времени. Этот этап также направлен на мониторинг производительности системы, исправление ошибок и внедрение запрошенных изменений
Методологии разработки программного обеспечения
Обычно существует 2 типа методологий разработки программного обеспечения —
- Модель водопада
- Модель Agile
Что такое модель Waterfall?
Каскадная модель представляет собой линейный и последовательный подход к разработке программного обеспечения.Следующие шаги выполняются последовательно по схеме «водопад».
- Требования : собрать, проанализировать, документ
- Проектирование : результат в архитектуре программного обеспечения
- Код : разработка, проверка и интеграция программного обеспечения
- Тестирование : систематическое обнаружение и отладка дефекты
- Операции : установка, поддержка и обслуживание полных систем
В реальной реализации Waterfall каждый из вышеперечисленных шагов представляет собой отдельный этап разработки программного обеспечения, и каждый этап обычно завершается до начала следующего этапа.Между ними есть ступени-ворота; например, перед началом этапа проектирования необходимо получить согласие заказчика.
Что такое Agile-модель?
Методология Agile эволюционировала из различных подходов к облегченному программному обеспечению в 1990-х годах и является ответом на неприязнь некоторых руководителей проектов к жесткой, линейной методологии водопада. Основное внимание уделяется гибкости, постоянному совершенствованию и скорости. Методология Agile следует поэтапному подходу.
Разработчики начинают с упрощенного проекта, а затем начинают работать над небольшими модулями.Работа над этими модулями осуществляется еженедельными или ежемесячными спринтами, и в конце каждого спринта оцениваются приоритеты проекта и выполняются тесты. Таким образом, эквивалентные этапы модели водопада выполняются на каждом спринте. Эти спринты позволяют изучать ошибки и учитывать отзывы клиентов в дизайне до начала следующего спринта.
Тем не менее, процесс должен хорошо управляться и документироваться, поскольку быстрые темпы разработки могут привести к дезорганизации.Однако, если все сделано правильно, это приведет к быстрому, низкому риску и эффективному рабочему процессу.
Большинство зрелых компаний сейчас используют методологию Agile. Большинство клиентов, с которыми вы разговариваете, говорят об Agile-процессах, если они специально не упоминают, что они не гибкие. Хотя ни одна компания на самом деле не следует полностью гибким методам, они могут использовать какую-то гибридную модель.
Поскольку каждый знаком с основами процесса разработки программного обеспечения, следующим шагом будет изучение различных типов тестирования в процессе SDLC.
6 основных шагов процесса разработки программного обеспечения
Невозможно переоценить важность программного обеспечения в нашей жизни. Делаем ли мы покупки в Интернете, общаемся с нашими дальними родственниками или выполняем простые задачи, такие как телефонные звонки или игра в игры, программное обеспечение играет неотъемлемую роль в обеспечении всех этих возможностей. В процессе разработки программного обеспечения используются различные системы, известные как Модели разработки программного обеспечения .
Примерами таких моделей являются, среди прочего, модель Spiral, V-модель и модель Agile.Эти модели следуют определенному шагу в обеспечении завершения разработки программного обеспечения. Если вам интересно узнать больше о различных моделях разработки, прочтите соответствующую статью здесь.
В службе разработки программного обеспечения используются различные модели разработки программного обеспечения в зависимости от команды разработчиков и проекта, который необходимо завершить. Процесс, задействованный в этих моделях, четко определяет этапы жизненного цикла разработки программного обеспечения . На каждом этапе жизненного цикла разработки появляется конечный продукт, необходимый для следующего этапа цикла.Дизайн макета продукта выполнен с учетом собранных требований. Дизайн определяет коды, которые нужно написать. Этот шаг является этапом разработки. Тестирование подтверждает продукт, полученный на этапе разработки, и проверяет, соответствует ли он требованиям. В услуге разработка программного обеспечения шесть основных шагов определяют процесс разработки программного обеспечения. Их:
- Общий анализ и сбор требований
- Дизайн продукта
- Кодирование
- Тестирование
- Развертывание продукта
- Техническое обслуживание и эксплуатация продукта
1.Общий анализ и сбор требований:
В разработке программного обеспечения на этом этапе устанавливаются требования к разрабатываемым продуктам. Для большинства проектов этот шаг является основным. Руководители проектов, заинтересованные стороны собираются вокруг, чтобы выполнить и сформулировать требования. Такие вопросы, как «Кто может использовать продукт? Какие данные используются при использовании продукта? И какие данные возвращает продукт в качестве выходных данных? » все ответы на этом шаге.
После того, как требования собраны и даны ответы на подобные вопросы, следует анализ условий. Правдоподобность включения собранных элементов в конечный продукт анализируется и тщательно изучается. Создается документ со спецификацией требований. После завершения анализа требований команда разработчиков может перейти к следующему уровню разработки дизайна продукта, которому необходимо следовать на протяжении всего процесса разработки.
2.Дизайн продукта:
На этом этапе следует создание дизайна продукта на основе документации требований. Дизайн продукта помогает в спецификации необходимого оборудования, необходимого для запуска продукта, другими словами, в развертывании. Это также помогает четко обозначить общую архитектуру продукта, отобразить программные модули, которые необходимо разработать, и их взаимосвязи.
Также пора сделать выбор платформы разработки, например .NET, Java, Laravel, Ruby on Rails или FileMaker.Этот выбор зависит от самих требований, а также от того, какая платформа обычно используется в компании.
Кроме того, на этом этапе разрабатываются пользовательский интерфейс и взаимодействие с пользователем. С учетом целевых пользователей программного приложения и основных функций разработан удобный и современный пользовательский интерфейс. Если вы хотите узнать больше о «Foundation UX: Prototyping», прочтите нашу статью о UX здесь.
Макеты дизайна продукта служат основой для следующего этапа цикла разработки.На следующем этапе, который включает в себя кодирование, группа разработчиков должна будет разработать план реализации языка программирования.
3. Кодирование:
После этапа проектирования продукта команда разработчиков переходит к этапу кодирования и внедрения. После того, как команда разработчиков получит спецификацию требований и проектную документацию, разработчики программного обеспечения могут приступить к программированию. Помимо кодирования, разработчики также проводят модульное тестирование на этом этапе, чтобы выявить потенциальные проблемы как можно раньше на этапе разработки.
Некоторые компании предпочитают передавать на аутсорсинг работы по кодированию, а зачастую и предыдущий этап проектирования продукта, сторонней компании, занимающейся разработкой программного обеспечения. Причины этого аутсорсинга варьируются от простого отсутствия необходимых ресурсов или навыков или желания сосредоточить внимание своей команды на основных продуктах и услугах компании. Здесь можно найти интересную статью о том, что следует учитывать при аутсорсинге.
После этапа кодирования команда может перейти к следующему этапу разработки — тестированию.
4. Тестирование:
После этапа кодирования и внедрения команда может перейти к тестированию интеграции и валидации. Разработка программного обеспечения Команды обслуживания находятся в постоянном процессе выпуска различных программных приложений для различных целей, поэтому этот процесс необходим, так как важно тщательно протестировать продукт по всем доступным параметрам. На этом этапе выявляются потенциальные ошибки в продукте, и, если таковые имеются, они исправляются.
Как мы видели на предыдущем шаге, разработчики программного обеспечения сами проводят модульное тестирование.Следующим этапом тестирования будет интеграционное тестирование. Здесь проверяется взаимодействие между отдельными модулями и / или внешними системами. После интеграционного тестирования будет проведено валидационное тестирование, тестирование конечного программного продукта на основе требований и дизайна UI / UX с точки зрения конечного пользователя.
Другой подход к тестированию — это так называемый метод разработки через тестирование (TDD). Используя этот метод, разработчики программного обеспечения сначала напишут тестовый сценарий для конкретных требований и только после этого напишут код для выполнения этих требований.Затем запускается тест, и код корректируется до тех пор, пока тест не пройдет.
Если в программном приложении больше нет (неприемлемых) проблем, приложение развертывается
5. Развертывание продукта:
После того, как программный продукт пройдет этап тестирования, можно приступить к его развертыванию. Как только продукт готов, первая партия выкатывается и открывается для публики. Это называется бета-тестированием. Если какие-либо изменения требуются из-за отзывов клиентов или возникают какие-либо ошибки, не замеченные на этапе тестирования, они могут быть исправлены и внедрены на этом этапе разработки программного обеспечения.
Развертывание
обычно включает установку так называемого «рабочего» сервера, на котором будет работать программное обеспечение. Таким сервером может быть один из собственных серверов компании или он может находиться в «облаке», используя, например, Amazon Web Services или Microsoft Azure.
После развертывания следующий этап — обслуживание и эксплуатация.
6. Техническое обслуживание и эксплуатация:
После успешного прохождения всех вышеперечисленных шагов и полного выпуска программного продукта на рынок его необходимо поддерживать в рабочем состоянии, и требуется техническое обслуживание продукта.Это включает в себя устранение проблем, поддержание систем в актуальном состоянии с помощью последних исправлений операционной системы или обновлений используемого стороннего программного обеспечения. В случае значительного увеличения пользовательской базы программного продукта может потребоваться расширение в виде дополнительной вычислительной мощности, памяти и / или емкости базы данных для обеспечения бесперебойной работы системы
Эпилог:
Мы прошли 6 основных шагов разработки программного обеспечения . Как, вероятно, понятно, используемые шаги будут различаться в каждой компании, чтобы соответствовать среде и ситуациям в каждой компании и для каждого отдельного проекта разработки программного обеспечения.
Если вы хотите подробнее рассказать об этой теме или обсудить, как наши услуги Software Development могут помочь вам или вашей компании.
КУЛЬТУРНЫЕ РАЗЛИЧИЯ И КАК С ЭТИМ РАБОТАТЬ
При переводе своей деятельности по разработке программного обеспечения в офшор помните о культурных различиях. Эта анимация ниже проинформирует вас о возможных культурных различиях и о том, как с ними бороться.
Резюме
Название статьи
6 основных шагов процесса разработки программного обеспечения
Описание
В службе разработки программного обеспечения используются различные модели разработки программного обеспечения в зависимости от команды разработчиков и проекта, который необходимо завершить.Процесс, включенный в эти модели, четко определяет этапы жизненного цикла разработки программного обеспечения.
Автор
Оффшорная команда Manifera
Имя издателя
Оффшорная команда Manifera
Логотип издателя
Что такое SDLC? Понимание жизненного цикла разработки программного обеспечения — Stackify
Жизненный цикл разработки программного обеспечения (SDLC) относится к методологии с четко определенными процессами для создания высококачественного программного обеспечения.Более подробно, методология SDLC фокусируется на следующих этапах разработки программного обеспечения:
- Анализ требований
- Планирование
- Дизайн программного обеспечения, например архитектурный дизайн
- Разработка программного обеспечения
- Тестирование
- Развертывание
В этой статье будет объяснено, как SDLC работает, погрузитесь глубже в каждый из этапов и предоставьте вам примеры, чтобы лучше понять каждый этап.
Каков жизненный цикл разработки программного обеспечения?
SDLC или жизненный цикл разработки программного обеспечения — это процесс, позволяющий создавать программное обеспечение с высочайшим качеством и наименьшими затратами в кратчайшие сроки.SDLC обеспечивает хорошо структурированный поток этапов, который помогает организации быстро создавать высококачественное программное обеспечение, которое хорошо протестировано и готово к использованию в производственной среде.
SDLC включает шесть этапов, как объяснено во введении. Популярные модели SDLC включают модель водопада, спиральную модель и гибкую модель.
Итак, как работает жизненный цикл разработки программного обеспечения?
Как работает SDLC
SDLC снижает стоимость разработки программного обеспечения, одновременно улучшая качество и сокращая время производства.SDLC достигает этих явно расходящихся целей, следуя плану, который устраняет типичные подводные камни проектов разработки программного обеспечения. Этот план начинается с оценки существующих систем на предмет недостатков.
Далее определяются требования новой системы. Затем он создает программное обеспечение на этапах анализа, планирования, проектирования, разработки, тестирования и развертывания. Предвидя дорогостоящие ошибки, такие как отказ от запроса обратной связи у конечного пользователя или клиента, SLDC может устранить избыточные переделки и исправления постфактум.
Также важно знать, что уделяется большое внимание фазе тестирования. Поскольку SDLC — это повторяющаяся методология, вы должны обеспечивать качество кода на каждом цикле. Многие организации, как правило, тратят мало усилий на тестирование, в то время как более пристальное внимание к тестированию может сэкономить им много времени и денег. Будьте умны и напишите правильные типы тестов.
Теперь давайте рассмотрим различные этапы жизненного цикла разработки программного обеспечения.
Этапы и передовые практики
Следование передовым практикам и / или этапам SDLC обеспечивает бесперебойную, эффективную и продуктивную работу процесса.
1. Определите текущие проблемы
«Каковы текущие проблемы?» Этот этап SDLC означает получение информации от всех заинтересованных сторон, включая клиентов, продавцов, отраслевых экспертов и программистов. Изучите сильные и слабые стороны существующей системы, поставив перед собой цель улучшения.
2. План
«Чего мы хотим?» На этом этапе SDLC команда определяет стоимость и ресурсы, необходимые для реализации проанализированных требований. В нем также подробно описаны связанные с этим риски и представлены подпланы по их смягчению.
Другими словами, команда должна определить осуществимость проекта и то, как они могут успешно реализовать проект с наименьшим риском.
3. Дизайн
«Как мы получим то, что хотим?» Эта фаза SDLC начинается с превращения спецификаций программного обеспечения в план проектирования, называемый Спецификацией проекта. Затем все заинтересованные стороны просматривают этот план и предлагают отзывы и предложения. Крайне важно иметь план сбора и включения отзывов заинтересованных сторон в этот документ.Неудача на этом этапе почти наверняка приведет в лучшем случае к перерасходу средств, а в худшем — к полному краху проекта.
4. Сборка
«Давайте создадим то, что мы хотим».
На этом этапе начинается собственно разработка. Важно, чтобы каждый разработчик придерживался согласованного плана. Кроме того, убедитесь, что у вас есть надлежащие рекомендации по стилю и методам кода.
Например, определите номенклатуру для файлов или определите стиль именования переменных, такой как camelCase.Это поможет вашей команде создать организованный и последовательный код, который будет легче понять, но его также можно будет протестировать на следующем этапе.
5. Кодовый тест
«Мы получили то, что хотели?» На этом этапе мы проверяем наличие дефектов и недостатков. Мы исправляем эти проблемы до тех пор, пока продукт не будет соответствовать исходным спецификациям.
Короче говоря, мы хотим проверить, соответствует ли код определенным требованиям.
Попробуйте бесплатный профилировщик кода Prefix от Stackify, чтобы писать лучший код на своей рабочей станции.Префикс работает с .NET, Java, PHP, Node.js, Ruby и Python.
6. Развертывание программного обеспечения
«Давайте начнем использовать то, что у нас есть».
На этом этапе цель состоит в том, чтобы развернуть программное обеспечение в производственной среде, чтобы пользователи могли начать использовать продукт. Однако многие организации предпочитают перемещать продукт через различные среды развертывания, такие как среда тестирования или промежуточная среда.
Это позволяет всем заинтересованным лицам безопасно поиграть с продуктом перед его выпуском на рынок.Кроме того, это позволяет выявить любые окончательные ошибки до выпуска продукта.
Дополнительно: обслуживание программного обеспечения
«Давайте сделаем это ближе к тому, что мы хотим». План почти никогда не оказывается идеальным, когда он встречается с реальностью. Кроме того, по мере изменения условий в реальном мире нам необходимо обновлять и улучшать программное обеспечение, чтобы оно соответствовало.
Движение DevOps в некоторой степени изменило SDLC. Разработчики теперь несут ответственность за все больше и больше этапов всего процесса разработки.Мы также видим ценность сдвига влево. Когда группы разработки и эксплуатации используют один и тот же набор инструментов для отслеживания производительности и выявления дефектов от начала до вывода приложения из эксплуатации, это обеспечивает общий язык и более быстрое переключение между командами.
Инструменты мониторинга производительности приложений (APM) могут использоваться в среде разработки, контроля качества и производственной среде. Это позволяет всем использовать один и тот же набор инструментов на протяжении всего жизненного цикла разработки.
Подробнее: 3 причины, по которым использование APM смещается в сторону разработки и контроля качества
Примеры
Наиболее распространенные примеры SDLC или модели SDLC перечислены ниже.
Модель водопада
Эта модель SDLC является самой старой и простой. Используя эту методологию, мы завершаем один этап, а затем приступаем к следующему. Каждая фаза имеет свой собственный мини-план, и каждая фаза «водопадов» переходит в следующую. Самым большим недостатком этой модели является то, что мелкие детали, оставленные незавершенными, могут задержать весь процесс.
Agile Model
Модель Agile SDLC разделяет продукт на циклы и очень быстро предоставляет рабочий продукт. Эта методология производит последовательность выпусков.При тестировании каждого выпуска возвращается информация, которая будет включена в следующую версию. По словам Роберта Халфа, недостатком этой модели является то, что упор на взаимодействие с клиентами может в некоторых случаях привести проект в неверном направлении.
Итерационная модель
Эта модель SDLC подчеркивает повторение. Разработчики создают версию очень быстро и за относительно небольшие деньги, а затем тестируют и улучшают ее с помощью быстрых и последовательных версий. Одним из больших недостатков здесь является то, что он может быстро потреблять ресурсы, если его не остановить.
V-образная модель
Расширение водопадной модели, эта методология SDLC тестирует на каждом этапе разработки. Как и в случае с водопадом, этот процесс может натолкнуться на препятствия.
Модель большого взрыва
Эта модель SDLC с высоким риском направляет большую часть своих ресурсов на разработку и лучше всего подходит для небольших проектов. В нем отсутствует этап тщательного определения требований, как у других методов.
Спиральная модель
Самая гибкая из моделей SDLC, спиральная модель похожа на итеративную модель в своем упоре на повторение.Спиральная модель многократно проходит этапы планирования, проектирования, сборки и тестирования с постепенными улучшениями на каждом этапе.
Преимущества SDLC
SDLC, сделанный правильно, может обеспечить высочайший уровень управленческого контроля и документации. Разработчики понимают, что им следует создавать и почему. Все стороны заранее согласовывают цель и видят четкий план ее достижения. Все понимают, какие затраты и ресурсы требуются.
Несколько подводных камней могут превратить реализацию SDLC в скорее препятствие на пути разработки, чем инструмент, который нам помогает.Неспособность принять во внимание потребности клиентов и всех пользователей и заинтересованных сторон может привести к плохому пониманию системных требований с самого начала. Преимущества SDLC существуют только в том случае, если план неукоснительно соблюдается.
Хотите улучшить качество приложений и контролировать производительность приложений на каждом этапе SDLC? Попробуйте бесплатно инструмент Retrace от Stackify и узнайте, как он может помочь вашей организации в разработке высококачественного программного обеспечения.
- Что такое нагрузочное тестирование? Как это работает, инструменты, руководства и многое другое — 5 февраля 2021 г.
- Americaneagle.com и ROC Commerce остаются впереди с Retrace — 25 сентября 2020 г.
- Новые цены Stackify: все, что вам нужно знать — 9 сентября 2020 г.
- ИННОВАТОРЫ ПРОТИВ COVID 19 Мэтт Уотсон, генеральный директор Stackify, советует предпринимателям сосредоточиться на вещах которые делают их счастливыми, независимо от того, является ли работа огромным пожаром в мусорной корзине — 2 сентября 2020 г.
- Stackify присоединяется к списку самых быстрорастущих компаний 2020 Inc. 5000 — 25 августа 2020 г.
Что такое разработка программного обеспечения: определение, процессы и Типы
Разработка программного обеспечения предоставляет программистам серию шагов по созданию компьютерных программ.Этот процесс составляет фазы жизненного цикла разработки программного обеспечения. Понимание метода разработки программного обеспечения открывает широкие возможности в ИТ-индустрии.
В этой статье мы объясняем разработку программного обеспечения, резюмируем типы компьютерных программ и исследуем рабочие места, в которых используется процесс разработки ИТ.
Что такое разработка программного обеспечения?
Разработка программного обеспечения — это процесс, который программисты используют для создания компьютерных программ. Процесс, также известный как жизненный цикл разработки программного обеспечения (SDLC), включает в себя несколько этапов, которые обеспечивают метод создания продуктов, соответствующих техническим спецификациям и требованиям пользователей.
SDLC обеспечивает международный стандарт, который компании-разработчики программного обеспечения могут использовать для создания и улучшения своих компьютерных программ. Он предлагает определенную структуру, которой команды разработчиков должны следовать при проектировании, создании и сопровождении высококачественного программного обеспечения. Целью процесса разработки программного обеспечения ИТ является создание эффективных продуктов в рамках определенного бюджета и сроков.
Ключевые этапы процесса разработки программного обеспечения
Жизненный цикл разработки программного обеспечения состоит из шести основных этапов, включая:
1.Идентификация потребностей
Идентификация потребностей — это этап исследования рынка и мозгового штурма. Прежде чем компания создаст программное обеспечение, ей необходимо провести обширное исследование рынка, чтобы определить жизнеспособность продукта. Разработчики должны определить функции и услуги, которые должно предоставлять программное обеспечение, чтобы его целевые потребители получали от него максимальную отдачу и находили его необходимым и полезным. Есть несколько способов получить эту информацию, включая отзывы от потенциальных и существующих клиентов и опросы.
ИТ-команды и другие подразделения компании также должны обсудить сильные и слабые стороны и возможности продукта. Процессы разработки программного обеспечения запускаются только в том случае, если продукт удовлетворяет всем параметрам, необходимым для его успеха.
2. Анализ требований
Анализ требований — это вторая фаза в жизненном цикле разработки программного обеспечения. Здесь заинтересованные стороны согласовывают технические и пользовательские требования и спецификации предлагаемого продукта для достижения его целей.На этом этапе дается подробное описание каждого компонента, объема, задач разработчиков и параметров тестирования для создания качественного продукта.
На этапе анализа требований участвуют разработчики, пользователи, тестировщики, менеджеры проектов и специалисты по обеспечению качества. Это также этап, на котором программисты выбирают подход к разработке программного обеспечения, такой как водопад или V-модель. Команда записывает результат этого этапа в документ спецификации требований к программному обеспечению, с которым команды всегда могут проконсультироваться во время реализации проекта.
3. Дизайн
Дизайн — это третий этап процесса разработки программного обеспечения. Здесь архитекторы и разработчики составляют расширенные технические спецификации, необходимые для создания программного обеспечения в соответствии с требованиями. Заинтересованные стороны обсудят такие факторы, как уровни риска, состав команды, применимые технологии, время, бюджет, ограничения проекта, метод и архитектурный дизайн.
Документ проектной спецификации (DSD) определяет архитектурный дизайн, компоненты, коммуникации, интерфейсное представление и пользовательские потоки продукта.Этот шаг предоставляет шаблон для разработчиков и тестировщиков и снижает вероятность ошибок и задержек в готовом продукте.
4. Разработка и внедрение
Следующий этап — разработка и реализация проектных параметров. Разработчики кодируют на основе спецификаций продукта и требований, согласованных на предыдущих этапах. Следуя процедурам и рекомендациям компании, разработчики внешнего интерфейса создают интерфейсы и внутренние компоненты, а администраторы баз данных создают соответствующие данные в базе данных.Программисты также тестируют и просматривают код друг друга.
После завершения кодирования разработчики развертывают продукт в среде на этапе реализации. Это позволяет им протестировать пилотную версию программы, чтобы производительность соответствовала требованиям.
5. Тестирование
На этапе тестирования проверяется программное обеспечение на наличие ошибок и проверяется его производительность перед отправкой пользователям. На этом этапе эксперты-тестировщики проверяют функции продукта, чтобы убедиться, что он работает в соответствии с документом анализа требований.
Тестировщики используют исследовательское тестирование, если у них есть опыт работы с этим программным обеспечением, или тестовый сценарий для проверки производительности отдельных компонентов программного обеспечения. Они уведомляют разработчиков о дефектах кода. Если разработчики подтверждают, что недостатки действительны, они улучшают программу, а тестировщики повторяют процесс до тех пор, пока программное обеспечение не будет лишено ошибок и не будет вести себя в соответствии с требованиями.
6. Развертывание и обслуживание
Если в программном обеспечении нет дефектов, разработчики могут доставить его клиентам.После выпуска производственной версии программного обеспечения компания, занимающаяся разработкой программного обеспечения ИТ, создает группу обслуживания для управления проблемами, с которыми клиенты сталкиваются при использовании продукта. Техническое обслуживание может быть оперативным исправлением, если это незначительная проблема, но серьезные сбои программного обеспечения требуют обновления.
Типы программного обеспечения
Программное обеспечение относится к трем основным группам в зависимости от их использования и применения. Вот популярные категории программного обеспечения.
Системное программное обеспечение
Системное программное обеспечение, также называемое операционной системой или ОС, — это программа, которую ваш компьютер использует для перевода команд ввода на машиночитаемый язык.Операционная система управляет аппаратными компонентами компьютера.
Примеры популярных операционных систем, используемых в персональных компьютерах, включают ОС Windows от Microsoft, Mac OS, используемую в Apple MacBook, и Ubuntu на базе Linux. Веб-серверы используют ОС Apache, тогда как операционная система UNIX используется для создания проприетарных систем.
Прикладное программное обеспечение
Это приложение, которое большинство людей используют для выполнения задач на своих компьютерах и смартфонах. Популярные примеры включают приложения для обработки текста, интернет-браузеры, медиаплееры, инструменты для редактирования фотографий, антивирусные программы и даже продукты «программное обеспечение как услуга» (SAS).
Языки программирования
Это язык программирования, используемый для создания программного обеспечения. Он используется только кодировщиками для создания программ. Языки программирования включают Java, C ++, PHP и Simlab.
Вакансии, использующие разработку программного обеспечения
В ИТ-индустрии есть несколько рабочих мест, которые используют разработку программного обеспечения. Вот пять популярных профессий, которые вы можете начать со знанием разработки программного обеспечения. Чтобы получить самую свежую информацию о заработной плате от Indeed, щелкните ссылку о средней заработной плате по стране для каждой должности ниже.
Средняя зарплата по стране: 48 470 долларов в год
Основные обязанности: Компьютерные программисты пишут, модифицируют и отлаживают программное обеспечение. Они пишут код для создания серверных приложений, обслуживания, мониторинга, документирования и тестирования программного обеспечения.
Связано: Узнайте, как стать программистом
Инженер по обеспечению качества
Средняя заработная плата по стране: 81 902 доллара в год
Основные обязанности: Инженеры по обеспечению качества обеспечивают соответствие проектов разработки программного обеспечения проектным спецификациям и требованиям клиентов.Они составляют отчеты по обеспечению качества, тестируют продукты, выявляют дефекты и гарантируют, что программы не содержат ошибок перед развертыванием и выпуском для пользователей.
Средняя заработная плата по стране: 96 991 доллар США в год
Основные обязанности: Администраторы баз данных отслеживают и улучшают производительность систем баз данных. Они устанавливают, настраивают, диагностируют и обслуживают системы баз данных и всегда обеспечивают оптимальную безопасность.
Средняя заработная плата по стране: 93 839 долларов в год
Основные обязанности: Старшие системные аналитики контролируют параметры сети и системы, такие как производительность и безопасность.Они устанавливают, настраивают, обслуживают и обновляют программное и аппаратное обеспечение сетевых систем.
Средняя заработная плата по стране: 110 539 долларов в год
Основные обязанности: Инженеры-программисты документируют и тестируют программы для клиентских приложений. Они управляют проектами и объясняют бизнес-требования и технические характеристики на основе рекомендаций компании и ожиданий пользователей.
Связано: Узнайте о том, как стать инженером-программистом
Если вы являетесь экспертом в области информационных технологий и разработки программного обеспечения, вы можете работать на любой из указанных выше должностей.Если вы умеете программировать, тестировать компьютерные программы или выполнять какие-либо задачи в SDLC, вы можете выбрать одну из многих карьерных возможностей в этом секторе.
Процесс разработки программного продукта: этапы и объяснение жизненного цикла
Из трех моделей сотрудничества с нашими клиентами в процессе разработки программного обеспечения, Разработка программного продукта является синонимом «разработки полного цикла». Он включает в себя все этапы разработки программного обеспечения. Здесь мы объясним, как выглядит процесс разработки программного обеспечения полного цикла.
Обзор процесса разработки программного продукта
Жизненный цикл разработки программного обеспечения состоит из регулярного набора действий или этапов, которые превращают идею продукта в рабочее решение. Любой процесс ИТ-разработки полного цикла состоит из четырех этапов разработки программного обеспечения:
- Разработка идей и требований — обнаружение продукта, определение ключевых характеристик, выявление функциональных и нефункциональных требований и ограничений.
- Проектирование и реализация — реальная работа команды разработчиков по проектированию и созданию функциональности.
- Верификация и валидация — тестирование программного обеспечения, развернутого в различных средах (промежуточное, производственное) в рамках процесса разработки, с целью проверки его соответствия требованиям и потребностям пользователей.
- Техническое обслуживание и развитие — улучшение и изменение готового решения с учетом потребностей бизнеса и отзывов клиентов. Это сложный сам по себе процесс с идентичными этапами разработки программного обеспечения.
Эти основные фазы жизненного цикла разработки программного обеспечения включают в себя различные вспомогательные и вспомогательные действия, такие как проверка требований, архитектурное проектирование, модульное тестирование, управление конфигурацией и изменениями, обеспечение качества, управление проектами и т. Д.
Модели сотрудничества «Бизнес — ИТ» различаются в зависимости от команды и типа проекта, поскольку процесс разработки сложен и не существует единой методологии, подходящей для всех.
Этапы оценки разработки программного обеспечения
С проектами, имеющими более короткий период времени и определенный объем функциональных возможностей, который вряд ли изменится во время разработки, мы можем предоставить точную оценку стоимости и времени. В случае неопределенности или если требуется гибкость из-за того, что требования могут развиваться, безопаснее будет перейти на Agile и, следовательно, на модель T&M.
Вне зависимости от модели, первый этап нашего сотрудничества с клиентом — Presales — одинаков. Вот шаги, которые мы делаем:
- Изучите запрос цен (Request for Proposal) и вернитесь к вам, чтобы уточнить требования к проекту.
- Дайте приблизительную оценку.
- Если возможно, обсудите модель сотрудничества и порекомендуйте модель ценообразования.
Далее есть два сценария: Waterfall (модель с фиксированной ценой) и Agile (модель времени и материалов).
Наш подход к контрактам с фиксированной ценой на процесс разработки программного обеспечения
Чтобы предоставить нашему клиенту четкое представление о том, каких результатов он или она может ожидать, какой ценой и в какие сроки, нам необходимо выявить все требования и подготовить документацию в самом начале. Поэтому мы делим наши проекты на два этапа: Стадия планирования проекта и Стадия разработки проекта .
Этап планирования программного проекта
Этап планирования проекта включает в себя разработку подробных требований и их визуализацию с помощью каркасов, диаграмм потоков данных и даже интерактивных прототипов.Далее предоставляем клиенту подробную смету.
На этом этапе мы тесно сотрудничаем с клиентом. Наша первая цель — увидеть продукт в целом и определить совокупность реальных бизнес-требований высшего уровня. Затем, по мере проработки каждого компонента, необходимо детализировать соответствующие реальные бизнес-требования, чтобы можно было определить гибкие требования к продукту.
По окончании этапа планирования проекта наши клиенты получают:
- Спецификация требований к программному обеспечению — документ, подробно описывающий основные функции программного обеспечения и ограничения, связанные с ними.
- Wireframes — макет ключевых веб-страниц с элементами интерфейса.
- Концепция дизайна — основная идея, вокруг которой вращаются элементы проекта.
- Наряд на выполнение работ , который включает подробную смету проекта, план проекта, технические требования, критерии приемки.
- Команда разработчиков — дизайнер, разработчики, менеджер проектов, QA и др.
Поскольку на этом этапе требуется большой объем работ, он оплачивается отдельно.
Стадия разработки программного проекта
Когда все условия согласованы и наряд подписан, переходим к следующему этапу:
- Реализация. Мы занимаемся фактическим проектированием, разработкой и тестированием программного продукта.
- Развертывание. Мы развертываем продукт в промежуточной среде для пользовательского приемочного тестирования (UAT).
- Выпуск. Развертываем продукт в производственной среде.
- Стабилизация. После выпуска предлагаем месячный гарантийный срок.
UAT начинается со сборки, доставленной клиенту. На этом этапе клиент может просмотреть продукт и отправить нам первый отзыв. Часто клиенты хотят дополнить или изменить первоначальные требования к продукту. Такое изменение может включать в себя дополнительную функцию, настройку или расширение существующих функций. Запрос на изменение — это официальное предложение по настройке какого-либо продукта или системы.Поскольку запросы на изменение выходят за рамки соглашения, они обычно означают, что клиенту придется платить за дополнительные ресурсы, необходимые для их удовлетворения.
Зачем нам нужен Agile для процесса разработки программного обеспечения?
Поскольку у нас такой простой процесс разработки, как описано выше, зачем нам применять гибкий подход к разработке программного обеспечения?
Потому что большое количество наших клиентов действительно могут извлечь выгоду из Agile. Ранняя и непрерывная поставка ценного программного обеспечения, непрерывная интеграция, ежедневные встречи, меняющиеся требования, даже на более поздних этапах разработки, — все это вышло из пространства Agile.
Методология
Waterfall в значительной степени зависит от исходных требований. Все требования к проекту должны быть записаны в SRS на этапе планирования проекта. Но этот подход не учитывает эволюцию требований проекта.
Особенно, когда мы говорим о стартапах. Основная цель и задача любого программного стартапа — вывести на рынок новую идею. Ключевой концепцией здесь является проверка исходной идеи и поиск устойчивого, прибыльного и успешного продукта.
Из-за того, что вначале у основателей есть только идея, процесс разработки продукта включает в себя множество предположений, которые необходимо реализовать и оценить как можно скорее.
Характеристики гибкого подхода к разработке
Agile стал решением недостатков водопадной методологии.
В отличие от модели Waterfall, где продукт доставляется сразу, в самом конце проекта, Agile позволяет клиенту увидеть и повлиять на развитие продукта.
Мы начинаем с анализа требований и планирования, которое заканчивается бэклогом продукта и дорожной картой. После этого мы участвуем в серии автономных итераций (спринтов) с их собственными процедурами планирования, анализа, проектирования, разработки и тестирования.
По окончании спринта наши клиенты получают ощутимый результат. Они могут вносить изменения, вносить в проект новые идеи и полностью контролировать процесс.
Итерация нулевая
Спринт 0 (или Итерация 0) начинается со стартовой встречи, на которой встречаются все стороны — команда, руководство, эксперты в предметной области и заинтересованные стороны.Мы приступили к изучению исходной бизнес-идеи, технологии, архитектурных целей и практики разработки. Мы также обсуждаем критические даты. Наше видение трансформируется в оценочные элементы Backlog (пользовательские истории). Это служит основой для приблизительной оценки и плана выпуска. Крайне важно работать над общим пониманием целей проекта и помнить о потребностях продукта, которые служат для определения приоритетов. После того, как мы выработали общее понимание определения «готово», начинается фактическая разработка.
Спринты
Теперь переходим к итерации. Каждый спринт (2–4 недели) начинается с собрания по планированию, на котором команда изучает истории пользователей из верхней части журнала невыполненных работ по продукту, определяет задачи спринта и выбирает, сколько их необходимо выполнить до конца спринта. Чтобы улучшить отслеживание прогресса и индивидуальную приверженность к производительности команды, задачи Sprint Backlog оцениваются в часах непосредственными исполнителями: разработчиками программного обеспечения, тестировщиками или дизайнерами.
Каждый спринт завершается предоставлением некоторой функциональности, т.е.е. приращение продукта, соответствующее определению «готово».
Остальные элементы отложены для следующих спринтов. Затем следует обзор и приоритезация бэклога продукта.
Мы оцениваем пользовательские истории (элементы бэклога продукта) в приблизительных, относительных единицах — историях. Это позволяет нам делать высокоуровневые прогнозы о том, сколько и когда будет сделано.
На протяжении всей разработки команда работает как единое целое, и мы регулярно получаем обратную связь о ходе разработки.График сгорания показывает уменьшение объема работы.
Версия
Когда желаемое количество функций продукта спроектировано, закодировано и протестировано (в соответствии с планом выпуска, дорожной картой), группа начинает процесс выпуска. Этот процесс начинается с замораживания, при котором вся работа по добавлению новых функций приостанавливается, смещая усилия на исправление ошибок и улучшение исходного кода.
Мы большие поклонники контроля версий и GitHub и используем ветвление, чтобы уменьшить задержки в разработке, вызванные зависаниями.В репозитории проекта есть ветвь «релиз», из которой новые версии программного обеспечения передаются в «производственную» ветку, и отдельную ветвь «разработка», в которую разработчики добавляют новый код.
Заморозка распространяется только на ветку «релиз», и разработчики могут продолжить свою работу над веткой «разработка».
Мы создаем и развертываем код выпуска в тестовой среде, чтобы протестировать и проверить версию продукта.
Заключить
Целью нашей модели разработки программного обеспечения является более эффективное планирование и создание надежного продукта, отвечающего ожиданиям клиента и отраслевым стандартам.Несмотря на универсальность, четыре этапа будут реализованы по-разному в зависимости от методологии процесса разработки программного обеспечения.
Наш подход помогает выбрать наилучший процесс разработки программного обеспечения для вашего проекта.
Вам понравилось чтение? Было ли это полезно? Ваше мнение помогает нам создавать лучший контент. Используйте реакции, чтобы оценить статью. Или оставьте нам сообщение в комментариях. Мы здесь, чтобы повысить вашу техническую смекалку.
4.6 /
5.0 рейтинг
(53 голоса)
7 Методологии базового жизненного цикла разработки программного обеспечения (SDLC): какая из них лучше?
После множества встреч, последующих писем и многочисленных телефонных звонков вы наконец-то подписали контракт.
Поздравляем!
Из всех участников торгов именно вы доказали, что способны предоставить лучшее программное решение. Вы делитесь этой информацией со своей командой, и пора праздновать.
Осевшись, вы начинаете обсуждение проекта. Не оставляя ничего на волю случая, вы выбираете только лучших из своих сотрудников для формирования команды проекта. Вы назначаете стартовую встречу с клиентом. Вы перечисляете темы для обсуждения и готовы к взлету.
Но вы действительно готовы? Обдумали ли вы все, что вам нужно проверить, прежде чем начинать проект?
Вы можете быть удивлены, узнав, что есть одна очень важная вещь, которой многие руководители проектов не уделяют должного внимания.
Это происходит в начале проекта и требует внимательного изучения…
Вы знаете, что это такое?
Это процесс выбора правильной методологии жизненного цикла разработки программного обеспечения.
Вы уже привлекли клиента и знаете, какую систему или программный продукт он ожидает от вас.
В результате у вас есть мысленная картина всего процесса, которому должна следовать ваша команда.
Это хорошо, потому что вы должны увидеть конец проекта, прежде чем приступать к нему.
Все-таки, чтобы сделать правильный выбор методологии SDLC, нужно немного сбавить обороты.
Вы, очевидно, знаете, что есть несколько вариантов на выбор, и у вас есть любимый вариант, который вы обычно используете. Но не бегите с ним, потому что он хорошо работает. Вам нужно выяснить, подходит ли он для вашего текущего проекта. Таким образом, вы избежите ненужных проблем в ходе проекта.
Например, вы можете почувствовать себя загнанным в угол, когда некоторые этапы выбранной вами модели SDLC начинают перекрываться.
Если это не было частью плана, то это может открыть дверь для некоторых реальных проблем.
Или клиент может попросить вас включить в программное обеспечение несколько «мелких» функций. Это может произойти, когда процесс прошел стадию, на которой это можно было приспособить.
Поскольку ситуации редко бывают идеальными, вам следует избегать попадания в такие.
Последнее, чего вы хотите от клиента, — это ему задают такие вопросы, как: «Почему вы не можете этого сделать?» или «Разве вы не обещали доставить?» Поскольку вы начали с хорошей ноты, постарайтесь закончить и на одной.
Мы рассмотрим различные типы методологий SDLC и увидим их сильные и слабые стороны. Мы также предоставим вам полезные рекомендации, чтобы определить, когда лучше всего использовать каждый из них.
Но прежде чем углубиться в это, давайте сначала рассмотрим основные процессы жизненного цикла разработки программного обеспечения.
ЧТО ТАКОЕ ЖИЗНЕННЫЙ ЦИКЛ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ (SDLC)?
Это процесс, через который проходит разрабатываемая программная система.
Сама система предназначена для решения проблемы.Как и в случае с большинством решений, реализация происходит в процессе.
Например, когда компания хочет расширить свои складские мощности, у нее есть выбор: купить, арендовать или построить склад.
Какой бы вариант они ни выбрали, им придется пройти через процесс планирования, исследования и окончательного приобретения. При этом необходимо учитывать размер склада, расстояние от текущего склада и офисов, необходимое количество нового персонала и т. Д.
То же самое и с разработкой программного обеспечения. Жизненный цикл разработки программного обеспечения — это процесс, который проведет вас через проект от начала до конца.
Как правило, во всех различных методологиях есть этапы. Эти этапы представляют собой этапы разработки и внедрения решения. Их:
Планирование
Это этап, на котором вы делаете технико-экономическое обоснование для определения потребности в новой системе.
Вы будете изучать лицо клиента Проблемы, а затем искать возможные решения.Также потребуется оценка ресурсов, необходимых для нового решения. Обычно это время, затраты, персонал и любые другие факторы, которые необходимо учитывать.
Затем вы разработаете план проекта и представите его руководству. Только после получения одобрения вы переходите к следующему этапу.
Анализ
На этом этапе вы определяете конкретные проблемы, с которыми сталкивается клиент. Затем ваша команда предлагает несколько решений и выбирает лучшее.Все требования должны быть четкими, чтобы помочь вам понять потребности клиента.
Цель на этом этапе — собрать информацию. Могут использоваться различные методы, включая индивидуальные интервью, групповые интервью или анкетирование. Наблюдение за людьми во время их работы также является отличным способом сбора информации. Это даст вам ценную информацию, которая никогда не будет передана устно.
Руководство должно проверить требования, выдвигаемые конечными пользователями, чтобы убедиться, что они находятся в рамках проекта.
Конструкция
На этом этапе вы подробно опишете функции и особенности предлагаемого решения.
Вы будете использовать диаграммы процессов, макеты экранов и другие инструменты, чтобы нарисовать картину решения.
Дизайн также покажет, как будут протекать процессы.
Как часть деталей, вы также можете использовать диаграммы отношений сущностей и псевдокод.
Это необходимо для того, чтобы системные инженеры и разработчики понимали, что они должны создавать.
Разработка
Это этап, на котором создается система или программный продукт.
В большинстве случаев вы должны разделить работу на части и поручить над ними работать командам.
Кроме того, вы можете назначить подразделения отдельным экспертам в соответствии с их уровнем навыков. Разработчики баз данных будут обрабатывать потребности базы данных, сетевые инженеры работают над требованиями сети, а системные программисты создают реальный системный код.
Тестирование является частью работы по разработке, и для этой цели генерируются тестовые данные.
Основной проблемой на этом этапе является проверка кода на семантические ошибки. Их труднее всего обнаружить, но они могут вызвать большие проблемы, если останутся незамеченными. По этой причине данные испытаний должны иметь известные результаты для сравнения с результатами испытаний.
Готовая система должна работать в соответствии с проектными спецификациями.
Развертывание
После того, как система была разработана и полностью протестирована, она внедряется для работы пользователей.
В зависимости от ситуации для некоторых реализаций может потребоваться параллельная работа.
Таким образом, в течение некоторого времени вам придется поддерживать в рабочем состоянии как старую, так и новую систему. На этом этапе происходит обучение конечных пользователей. Право собственности на проект также переходит к клиенту.
Этот этап также позволяет получить отзывы пользователей.
Техническое обслуживание
По мере того, как клиент продолжает использовать новую систему, часто возникает необходимость внесения изменений и улучшений.
В связи с новыми требованиями потребуется дополнительная функциональность.Точная настройка системы также может быть выполнена в целях повышения производительности. Выполнение запланированных обновлений может покрыть бреши в безопасности и любые другие возникающие потребности.
Эти этапы иногда разбиваются дальше в зависимости от типа проекта.
Например, вы можете разделить этап разработки на разработку и тестирование. Затем вы будете выполнять эти два действия по отдельности.
Развертывание
может иногда включать техническое обслуживание как часть его в случаях, когда есть быстрые изменения в системных требованиях.Однако это продлит проект в рабочем состоянии.
7 ОСНОВНЫХ МЕТОДОЛОГИЙ SDLC, КОТОРЫЕ ВЫ ДОЛЖНЫ ЗНАТЬ ИЗ
Рассмотрев этапы в процессе разработки системы, мы перейдем к различным методологиям. После этого вы узнаете, как выбрать лучшее для вашего проекта.
Водопад
«Водопад» — это классическая методология SDLC, которая использовалась много лет.
Будучи линейным и последовательным, он подчеркивает необходимость логического развития участвующих фаз.
Одна фаза должна быть выполнена до конца, после чего ее выходные данные используются в качестве входных данных для следующей.
Источник: softwaretestinghelp.com
Уместно будет краткое обсуждение того, что происходит на всех этапах.
Анализ требований
Это первый этап, на котором собираются и анализируются требования новой системы.
Деталей должно быть достаточно, чтобы ничего не упустить. На этапе сбора информации крайне важно, чтобы конечные пользователи были должным образом задействованы.
Следует использовать различные способы для обеспечения учета всех возможных потребностей. Это связано с тем, что после завершения определенного этапа вы не можете вернуться, чтобы внести изменения.
Для этого этапа должно быть установлено достаточное время.
Проектирование системы
Этот этап посвящен разработке проектной спецификации создаваемой системы.
Создается архитектура системы и выбираются другие аспекты. Примерами являются используемый язык программирования и база данных.Это делается в соответствии с требованиями первой фазы.
Проектная спецификация описывает, как требования системы будут технически выполнены. Диаграммы потоков данных и другие диаграммы процессов используются для демонстрации взаимодействия между частями системы.
Реализация
Это этап собственно разработки системы. Различные части системы назначаются отдельным лицам или командам для работы с ними. Разработчики баз данных работают с базой данных, а системные программисты — над кодированием.
Сетевые инженеры также могут быть включены в сетевую часть системы. Некоторым системам требуются определенные сетевые возможности, которые могут потребовать развития конкретной сети.
Тестирование системы
На этом этапе разработанная система тестируется, чтобы убедиться, что она решает проблемы, возникшие на этапе требований. Все обнаруженные ошибки исправляются для обеспечения правильной работы системы.
Обнаруженные ошибки означают, что система должна вернуться к стадии реализации для кодирования.Если они крупные, то этому отдается приоритет.
Развертывание системы
После этапа тщательного тестирования вы устанавливаете систему для использования пользователями. Вы обучите пользователей и предоставите им необходимые руководства. Здесь вы также передаете систему клиенту. После этого вы достигнете соглашения о потребностях в обслуживании и обновлении.
Обслуживание системы
Техническое обслуживание — это заключительный этап, на котором вы будете выполнять обновления системы, а также исправлять ошибки.На этом этапе также будут обрабатываться новые требования, возникающие в результате роста бизнеса.
Преимущества
- Дает возможность получить ясность о ходе проекта. Это потому, что этапы не перекрываются. Проект может быть только на одной стадии в определенное время. Также можно установить сроки для каждого этапа.
- Поскольку каждый этап имеет очень конкретные результаты, эта модель упрощает управление проектом.
- Благодаря своей жесткости разработчики системы и заказчик придерживаются строгой дисциплины при реализации проекта.Сосредоточение внимания на этапах становится необходимостью.
- Возможность адаптации к меняющейся команде благодаря обширной документации, выполняемой на каждом этапе. Проект редко зависит от одного человека. Когда кто-то присоединяется к команде, он может просто просмотреть документацию и наверстать упущенное.
Недостатки
- Очень сложно оценить время и стоимость каждого этапа процесса.
- Не позволяет вносить изменения после того, как процесс находится на стадии тестирования.Можно сделать только минимальные исправления.
- Не подходит для сложных проектов, где требования постоянно меняются или не могут быть известны вначале.
- Обширная документация на каждом этапе занимает много времени.
- Практически невозможно учесть ценные отзывы клиентов после начала разработки.
- Система готова только после завершения всех процессов.
- Серьезные проблемы могут возникнуть на более поздних этапах, когда потребуются изменения.
V-ОБРАЗНАЯ
Подобно методу водопада, V-образная модель является линейной и последовательной, хотя и отличается.
Разница заключается в тестах, связанных с каждым этапом разработки. Это тесты, которые будут запускаться после этапа кодирования, чтобы подтвердить, что требования на каждом этапе выполнены.
Ее также называют моделью проверки и проверки , потому что к каждой фазе прикреплен проверочный тест. Левая сторона буквы «V» содержит этапы проверки, а правая — этапы проверки. Внизу этап кодирования.
Ниже представлена иллюстрация модели.
Источник: crackmba.com
Этапы проверки используются для проверки того, что все требования учтены в системе. С другой стороны, этапы валидации подтверждают, что разработанная система удовлетворяет требованиям.
Этапы проверки:
Анализ требований
Функциональные и нефункциональные требования поступают от пользователей.
Они подробно документируются в соответствии с сообщением клиента.Следует понимать все требования заказчика.
Исходя из этих требований, планируется пользовательское приемочное испытание.
Функциональные характеристики
На этом этапе планируется проектирование системы. Требования к оборудованию, программному обеспечению и сети рассматриваются до согласования фактического проекта.
Группа тестирования разрабатывает план тестирования системы для последующего выполнения после разработки.
Дизайн высокого уровня
Здесь разработана архитектура системы.
Перед достижением соглашения предлагается и обсуждается несколько технических подходов к решению.
Изготовлен план компоновки системы. Это то, что будет использоваться на следующем этапе. На этом этапе составляется план тестирования интеграции.
Рабочий проект / спецификация программы
Также известный как этап проектирования модуля, на этом этапе подробно разрабатывается система.
Следует проявлять осторожность при проектировании модулей для обеспечения совместимости.
Должна быть совместимость между модулями системы и с внешними системами. На этом этапе составляется план тестирования модуля или модуля.
Этап кодирования
Это внизу буквы «V», и на этом этапе реализованы все системные проекты. Выбирается лучший язык программирования, который используется для разработки системы в соответствии с ранее определенными проектами. Также соблюдаются общие стандарты кодирования.
Затем начинаются этапы проверки, которые выполняются в следующем порядке снизу вверх:
Модульное тестирование
В качестве первого уровня тестирования и на самом низком уровне фактический код проверяется на наличие ошибок.
Разработанная система разбита на более мелкие блоки / модули. Затем они анализируются, чтобы убедиться, что они работают должным образом. На этом этапе используется модульный тест, который был разработан на этапе спецификации программы.
Интеграционное тестирование
После того, как блоки прошли испытания, они соединяются, и их функциональность проверяется как единое целое. Проверяется внутренняя связь между модулями, а также интеграция модулей с внешними системами.
Это тест, который был разработан на этапе проектирования высокого уровня или архитектуры.
Тестирование системы
Этот тест проводится, чтобы проверить, соответствует ли система всем функциональным требованиям, изложенным на этапе функциональной спецификации. Несовместимость с внешними системами в основном будет обнаружена на этом этапе.
На этом этапе выполняется тестирование всей системы, готовой к развертыванию.
Пользовательские приемочные испытания
Это тест, подготовленный в начале жизненного цикла системы.
Поскольку он основан на требованиях пользователя, он запускается в пользовательской среде. Пользователь должен подтвердить, что система отвечает всем его потребностям. На этом этапе могут быть обнаружены определенные несовместимости.
Причина может быть в других системах, работающих в пользовательской среде. Команда разработчиков может предложить решения или предлагаемые обходные пути, приемлемые для клиента.
Вот видео, показывающее, как V-образная модель используется в основном для тестирования.
Преимущества
- Позволяет группе обнаруживать ошибки на ранних этапах процесса
- Тесная работа команд разработки и тестирования способствует успеху проекта
- Простота управления процессом благодаря жесткости
- Его строгая последовательность обеспечивает дисциплину во всем процессе, что увеличивает шансы на успех
Недостатки
- Неспособность адаптироваться к новым требованиям, которые могут возникнуть в ходе проекта
- Не лучший для долгосрочных проектов
- Ориентирован на бизнес-требования больше, чем на аспекты разработки системы.Это может привести к тому, что сложности разработки системы будут упущены.
- Не используется работающая система до конца проекта
ПРОТОТИПИРОВАНИЕ
Эта модель в основном ориентирована на обеспечение аппроксимации окончательной системы на начальных этапах.
Он широко используется, когда нет фиксированных требований. Создан прототип, чтобы показать, как будет выглядеть и работать конечный продукт. В прототипе нет полной функциональности.
Затем прототип подвергается испытаниям заказчиком, чтобы убедиться, что все требования соблюдены.
Если нет, собирается дополнительная информация. После получения дополнительной информации прототип обновляется и предоставляется заказчику для дальнейшего тестирования. Производство начинается только после того, как заказчик дает согласие.
На рисунке ниже показаны этапы этой модели SDLC.
Источник: testingexcellence.com
Преимущества
- Прототипы позволяют клиентам легко оставлять отзывы, поскольку они получают представление о том, как будет выглядеть система
- Прототипы дают команде разработчиков возможность познакомиться с конечным продуктом, что повышает шансы на успешную разработку и внедрение.
- Прототипы помогают прояснить требования пользователей, которые в противном случае остались бы неоднозначными
- Участие пользователей позволяет лучше удовлетворить все потребности.Это также увеличивает шансы принятия системы.
- Ошибки обнаружены и исправлены рано
Недостатки
- Объем проекта может выйти за рамки того, что изначально ожидалось или планировалось на
- Это может занять очень много времени
- Если не контролировать, слишком много усилий может быть затрачено на создание прототипов вместо создания реальной системы
- Пользователи могут путать прототип и конечный продукт.
- Сосредоточение внимания на прототипе может отвлечь внимание от всего проекта
СПИРАЛЬНЫЙ
Эта модель использует последовательный подход, работая как прототип.
Таким образом, получается неполная система, которая постоянно проверяется. Однако самым большим отличительным аспектом является то, что он ориентирован на анализ рисков. Он лучше всего подходит для проектов, где критически важно управление рисками.
Ниже представлена спиральная модель.
Источник: airbrake.io
Команда разработчиков начинает с нескольких требований и проходит весь процесс их выполнения. Этапы:
Этап планирования
Этот этап предназначен для сбора требований, технико-экономического обоснования и оценки затрат.
Анализ рисков
Анализ требований проводится для выявления потенциальных рисков. Затем создается стратегия снижения рисков, которая направляет процесс разработки.
Инженерное дело
Это этап собственно разработки программного обеспечения. Также проводится тестирование, и система развертывается в пользовательской среде.
Оценка
Заказчик проверяет программное обеспечение и дает отзывы. На этом этапе также проводится мониторинг рисков.Подтверждено, что стратегия снижения рисков хорошо зарекомендовала себя для проекта.
Преимущества
- Подходит для крупных критических проектов
- Значительно снижает риски, связанные с разработкой больших систем
- Программное обеспечение доступно на ранней стадии процесса
- Гарантирует обратную связь с клиентами в процессе разработки
- Новые функции могут быть добавлены на более поздних этапах
Недостатки
- Требуются знания в области анализа и снижения рисков
- Не подходит для небольших проектов
- Может оказаться очень дорогостоящим из-за необходимого опыта и непрерывных циклов
На видео ниже показано, как это работает;
ИТЕРАТИВНЫЙ
Итерационная модель начинается с разработки только части программного обеспечения.
Полные спецификации требований обычно не известны. Небольшая часть разработанной системы проверяется для определения дальнейших требований.
Каждая успешная итерация создает программное обеспечение, на котором реализовано больше функций. Это продолжается до тех пор, пока не будет достигнута окончательная система.
На рисунке ниже показаны фазы этой модели:
Источник: airbrake.io
Давайте пройдемся по этапам, чтобы понять, как работает эта модель.
Планирование и требования
Это этап сбора требований и ожиданий пользователей.
Анализ и проектирование
Выполнен анализ требований и разработана система. Предлагаемые решения обсуждаются, затем выбирается одно. Техническое представление этого решения сделано.
Реализация
Фактическая разработка происходит путем перевода дизайна системы в код.
Тестирование
Разработанная система проверена на наличие ошибок. В случае обнаружения они исправляются перед развертыванием в пользовательской среде.
Оценка
Сборка системы проверяется на соответствие указанным требованиям. Это также этап, на котором собираются дополнительные требования, если таковые имеются.
После этого текущая сборка возвращается на этап планирования вместе с полученными отзывами. Весь процесс (итерация) начинается заново.Этот цикл продолжается до тех пор, пока система не будет завершена.
Преимущество
- Быстрое обновление программного обеспечения позволяет клиенту оставлять отзывы при взаимодействии с ним
- Подходит для проектов с меняющимися требованиями или тех, которые не были ясны с самого начала
- Поскольку программное обеспечение создается на ранних этапах разработки системы, обнаруживать и устранять проблемы легко.
- Открыт для ценных отзывов клиентов
Недостатки
- В будущем могут возникнуть проблемы с проектированием, поскольку изначально не были учтены все требования.
- Новые реализуемые функции могут побудить пользователей запросить дополнительные возможности. Таким образом, проект может занять больше времени, чем ожидалось.
- Постоянное и необходимое участие клиента может стать бременем для клиента
- Не подходит для небольших проектов
ДОПОЛНИТЕЛЬНАЯ
Эта модель ориентирована на построение всей системы небольшими частями.
Она работает аналогично итеративной модели, но с той разницей, что этот подход начинается с полного знания требований.
Определяет количество меньших частей системы, которые будут построены. Когда эти части готовы, они доставляются заказчику в виде полных модулей.
Он использует классический водопадный подход только для того, чтобы не строить всю систему сразу. Обычно путают и иногда ошибочно принимают за сходство с итеративной моделью, но она выделяется двумя аспектами:
- Все требования известны в начале проекта, тогда как при итеративном использовании известны лишь некоторые.Еще больше обнаруживается, когда пользователь взаимодействует с поставленной сборкой программного обеспечения. Важно понимать, что сборка программного обеспечения — это не полная система, а разработанная часть системы, которая проходит тестирование.
- В инкрементальной модели поставляемые модули представляют собой полные автономные части всего проекта, которые предлагают дополнительную функциональность. При итеративном использовании новые сборки просто работают над адаптацией к новым требованиям.
Вот иллюстрация этой модели.
Источник: BBC Bitesize
Преимущества
- Основная часть системы поставлена раньше остальных
- Общая нагрузка снижена
- Предотвращает эффект от внедрения новой системы сразу
- Каждый выпуск добавляет дополнительную функциональность
- Снижает шансы введения новых требований
Недостатки
- Требуется очень хорошее планирование и проектирование
- Требуется полное понимание системы, которая будет построена до начала проектирования
- Может оказаться дороже, чем предполагалось
- Не подходит для небольших проектов
- Устранение проблемы в одном модуле может потребовать исправления в других модулях
AGILE
Этот метод используется для противодействия ограничениям тех, которые не могут удовлетворить быстро меняющуюся среду.
Требования к проектам, использующим гибкий подход, всегда быстро меняются.
Этот подход основан на итеративном и инкрементном процессах. Это гарантирует удовлетворенность клиентов за счет быстрой доставки частей всей системы. Циклы, через которые доставляется система, называются спринтами.
С технической точки зрения, гибкая модель — это скорее структура или руководство, чем отдельная модель. Существуют различные индивидуальные «подмодели» для реализации этого подхода.Они включают экстремальное программирование (XP), Канбан и Скрам.
Гибкий подход фокусируется на предоставлении работающего программного обеспечения при обеспечении сотрудничества с клиентами.
Взаимодействие между членами команды и быстрое реагирование на изменения также жизненно важны. Вот иллюстрация типичной модели гибкой разработки программного обеспечения.
Преимущества
- Быстро доставляет работающее программное обеспечение в распоряжение клиента
- Более быстрое время выполнения работ
- Способствует обратной связи с клиентами
- Легко адаптируется к изменениям требований
- Проблемы обнаруживаются и быстро устраняются
Недостатки
- Документация обычно отсутствует или недостаточно подробна
- Перекрывающиеся фазы затрудняют оценку хода выполнения проекта
- Сложно оценить стоимость проекта в начале
- Нет времени на проектирование архитектуры системы
- Множество циклов может отвлечь команду от общей цели проекта
НАИЛУЧШАЯ МЕТОДОЛОГИЯ ДЛЯ ИСПОЛЬЗОВАНИЯ
Итак, какая из 7 вышеупомянутых методологий SDLC лучше?
Чтобы ответить на этот вопрос, вы начнете с других вопросов.
Эти вопросы помогут вам разобраться в ситуации. Ниже приведен список некоторых, с которых можно начать. При необходимости вы можете добавить к ним.
- Насколько велик / сложен проект?
- Насколько высока квалификация в вашей команде?
- Какова финансовая устойчивость клиента?
- Сколько времени заказчик готов уделить проекту?
- Какие технологии вы собираетесь использовать?
- Все ли требования известны и зафиксированы ли они?
Ответы на эти вопросы позволят составить картину ситуации.Ситуация в дальнейшем определит, какую модель использовать.
Давайте теперь рассмотрим список ситуаций, которые лучше всего подходят для конкретных моделей разработки программного обеспечения.
Когда выбирать водопадную модель
- Когда требования четко известны и не склонны к изменению
- Проект небольшой и краткосрочный
- Когда проект должен следовать строгой процедуре
- Когда требуется сильная документация
- Когда у вас достаточно ресурсов и опыта
Когда выбирать v-образную модель
- Когда требования известны и зафиксированы
- Используемая технология хорошо известна команде
- Проект короткий
- При наличии технических ресурсов и опыта
- Когда необходимо тщательное тестирование
Когда выбирать модель-прототип
- Когда важно постоянное взаимодействие с клиентами
- Когда нужен отличный пользовательский интерфейс
- При построении сложных систем
- Когда требования малоизвестны
- Когда нет большой срочности в доставке окончательной системы
Когда выбирать спиральную модель
- Когда важны оценка рисков и их предотвращение
- Когда требования не ясны
- Когда проект большой и сложный
- Когда ожидаются изменения
- Когда технология, которая будет использоваться, не очень хорошо известна
Когда выбирать итеративную модель
- Когда проект большой
- Когда требования не ясны и подвержены изменениям
- При необходимости надлежащей документации
- Когда технология, которая будет использоваться, может быть не очень хорошо известна
Когда выбирать инкрементную модель
- Когда проект большой
- Когда требования ясны и не подлежат изменению
- При необходимости надлежащей документации
Когда выбирать гибкую модель
- Нужна быстрая обратная связь
- Требования не полностью известны или понятны
- Когда у вас есть увлеченная команда или наставник, который будет держать команду сфокусированной и мотивированной
- Когда нет строгих требований к надлежащей документации
ЗАКЛЮЧЕНИЕ
Разработка программного обеспечения — это процесс, требующий надлежащего сотрудничества между разработчиком и клиентом.