Материал из РУВИКИ — свободной энциклопедии

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

Разработка программного обеспечения (англ. software development) — это процесс проектирования и реализации программных решений для удовлетворения нужд пользователя. Этот процесс шире, чем простое программирование и написание исходного кода: он включает формулирование цели, оценку выполнимости, анализ требований, проектирование, тестирование и выпуск программного продукта. Разработка программного обеспечения является частью программной инженерии, которая также охватывает вопросы организационного и проектного управления, управления конфигурациями и другие сопутствующие аспекты[1].

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

Разработка программного обеспечения использует различные инструменты, такие как компиляторы, интегрированные среды разработки (IDE), системы управления версиями, средства автоматизации разработки (CASE), а также текстовые редакторы.

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

Методологии

[править | править код]
Блок-схема эволюционной прототипной модели (iterative development model)[2]

Различные методологии разработки оптимально подходят для определённых типов проектов в зависимости от технических, организационных, проектных и командных факторов[3].

  • Самая простая методология — «программирование и исправление» (code and fix), обычно используется одним программистом для небольших проектов. Программист кратко формулирует цель, пишет код и сразу запускает программу на выполнение. После завершения работа считается законченной, и продукт выпускается. Такой подход подходит для прототипов, но не может применяться к более сложным проектам[4].
  • В последовательной каскадной модели (waterfall model) выполнимость, анализ, проектирование, разработка, обеспечение качества и внедрение происходят последовательно. Для перехода к этапу требуется завершение предыдущего, что может привести к задержкам и усложняет доработки на ранних этапах[5].
  • В итеративных моделях (iterative) этапы переплетаются, что повышает гибкость, эффективность и делает планирование реальнее. Проект реализуется по частям. Такой подход позволяет фокусироваться на приоритетных функциях и при необходимости исключать второстепенные[6]. Гибкая методология (англ. agile) изначально предназначалась для небольших и средних проектов, делает акцент на контроле над реализуемыми функциями для снижения рисков превышения сроков или бюджета[7]. Производные от agile — экстремальное программирование и Scrum. Для открытого программного обеспечения характерна совместная проектировка, программирование и тестирование, что обуславливается распределённой структурой участия добровольцев[8].
  • Некоторые организации интегрируют информационные технологии (ИТ) с процессом разработки ПО, что известно как DevOps или DevSecOps (при включении вопросов компьютерной безопасности)[9]. DevOps включает непрерывную разработку, тестирование, интеграцию кода в систему управления версиями, развёртывание и поставку кода клиентам[10]. Цель интеграции — ускорение и повышение эффективности предоставления ИТ-услуг.

В современных методах также акцентируется раннее выявление и устранение проблем безопасности и ошибок (shift-left testing), что позволяет экономить ресурсы на последующих этапах[11].

По оценкам 2009 года, лишь 32 % программных проектов были реализованы вовремя, в пределах бюджета и в полном объёме. Ещё 44 % были выпущены с утратой хотя бы одной из функций. Оставшиеся 24 % были отменены до выпуска[12].

Жизненный цикл разработки программного обеспечения — это систематизированный процесс создания программных приложений[13].

Оценка выполнимости[править | править код]

Идеи для программных продуктов часто берутся из маркетинговых исследований, анализа демографических данных потенциальных и существующих клиентов, откликов клиентов, предложений других сотрудников или внешних консультантов. Идеи обычно предварительно оцениваются специалистами по маркетингу на предмет экономической целесообразности, каналов сбыта, влияния на другие продукты, нужных функций и соответствия маркетинговой стратегии компании. Для этого производятся оценка затрат и времени реализации проекта[14]. Анализ выполнимости оценивает прибыльность проекта, его стоимость и сроки. По итогам анализа компания принимает решение о дальнейшем инвестировании[15]. После одобрения проект реализуется с расчётом на достижение сроков, бюджета, высокого качества и требуемой функциональности. Однако большинство проектов выходят за рамки сроков или бюджета, а иногда часть функций или качество жертвуется ради соблюдения графика[16].

Анализ[править | править код]

Анализ начинается с формализации требований (requirements analysis), чтобы выяснить бизнес-цели разрабатываемого программного продукта[17]. Сбор требований осложняется тем, что у пользователей могут быть несовместимые или изменяющиеся запросы[6]. Результатом анализа становится спецификация, согласно которой ведётся разработка. Для повышения эффективности и повторного использования проект обычно декомпозируется на объекты и компоненты[17]. Такая декомпозиция позволяет, например, реализовать многопоточные программы, эффективные для многопроцессорных систем[18].

Для описания требований часто применяют структурный анализ, строят диаграммы потоков данных, словарь данных, псевдокод, диаграммы состояний или диаграммы «сущность-связь»[19]. Если проект включает в себя устаревшее ПО из ранее не смоделированных компонентов, для него также разрабатывается модель[20].

Проектирование[править | править код]

Проектирование включает в себя выбор языков программирования, базы данных, организацию аппаратного и сетевого взаимодействия. Проектирование может быть итеративным и сопровождаться обратной связью с пользователями. К разработке зачастую привлекаются специалисты по архитектуре баз данных, разработке интерфейсов, оптимизации серверов и оборудования[17]. Проектировщики стремятся выявлять повторяющиеся паттерны для создания переиспользуемых модулей, например, используя объектно-ориентированное программирование. Обычный пример — архитектура «модель–представление–контроллер» (model–view–controller), разделяющая графический интерфейс и серверную часть[21].

Программирование[править | править код]

Основная задача — создание и понимание программной составляющей, реализующей нужную функциональность[22]. Существует множество стратегий написания кода. Хорошее ПО состоит из независимых компонентов, а избыточная связанность затрудняет сопровождение[23]. Несоблюдение стандартов приводит к запутанному, неэффективному и плохо документированному коду, особенно под давлением сроков[24]. Это усложняет тестирование, отладку и доработку. Рефакторинг кода (например, добавление комментариев) используется для повышения читабельности[25].

Тестирование[править | править код]

Тестирование предназначено для проверки корректности исполнения и отсутствия ошибок. Отладка проводится каждым разработчиком для проверки собственного кода. Программное обеспечение должно корректно исполняться на всех входных данных, даже если ответ ошибочен[26]. Ревью кода другими разработчиками существенно снижает количество последующих ошибок[27]. Отдельное подразделение контроля качества, как правило, занимается комплексным тестированием[26]. Для этого используются приёмочные тесты, стресс-тесты, интеграционное тестирование и тестирование совместимости (например, с разными ОС и браузерами). Тестирование перед написанием кода известно как разработка через тестирование (test-driven development)[28].

Ввод в эксплуатацию[править | править код]

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

Специалисты

[править | править код]

Разработку программного обеспечения осуществляют компоненты команды — разработчики программного обеспечения, обычно работающие вместе. Важна эффективная коммуникация между участниками, особенно если команда небольшая, располагается совместно и имеет опыт совместной работы[31]. Это облегчает выявление проблем и предотвращает дублирование усилий. Для минимизации риска потери знаний проекты организуют так, чтобы несколько человек разбирались в каждом компоненте[32]. Помимо программистов, в проекте участвуют менеджеры продуктов, определяющие стратегию и дорожную карту решения[33], тестировщики, технические писатели, дизайнеры, специалисты по поддержке, маркетологи и специалисты по привлечению средств. Разработчики коммерческого ПО, как правило, работают за плату, в то время как участники открытых проектов чаще всего — волонтёры[34]. Реже участие оплачивается за счёт иных моделей монетизации, например, оказания услуг и модификаций.

Модели и инструменты

[править | править код]

Средства автоматизации проектирования[править | править код]

Компьютерная поддержка проектирования программного обеспечения (англ. computer-aided software engineering, CASE) — инструменты для частичной автоматизации разработки[35]. CASE позволяют моделировать логику программ — как проектируемых, так и существующих для интеграции с новым кодом или реверс-инжиниринга, например, при переходе на новый язык программирования[36].

Документирование[править | править код]

Документация обычно делится на две категории: для разработчиков и для конечных пользователей[37]. Для разработчиков документация чаще всего представлена комментариями к классу, файлу, методу, отражающими API (программный интерфейс приложения) и детали реализации[38]. Такая документация помогает новым участникам быстро освоиться в проекте[39]. В гибких методологиях документация часто пишется параллельно с написанием кода[40]. Документацию для пользователей преимущественно готовят технические писатели[41].

Оценка трудозатрат[править | править код]

Точная оценка необходима на этапе планирования и влияет на успех проекта. Оценкой обычно занимается менеджер проекта[42]. Объём работы, а также опыт разработчиков и возможность переиспользования кода существенно влияют на стоимость и сроки[43]. По состоянию на 2019 год, большинство инструментов оценки ориентированы на обычные приложения и не применимы к веб- и мобильным приложениям[44].

Интегрированная среда разработки[править | править код]

Anjuta, среда разработки для C и C++ в окружении GNOME

Интегрированная среда разработки (IDE) поддерживает процесс разработки, предоставляя продвинутые возможности по сравнению с обычным текстовым редактором[45]. IDE обычно включает автоматическую компиляцию, подсветку синтаксических ошибок[46], помощь при отладке[47], интеграцию с системой управления версиями, полуавтоматизацию тестирования[45].

Управление версиями[править | править код]

Управление версиями — важный инструмент для контроля и отслеживания изменений кода. При фиксации новой версии система сохраняет резервные копии модифицированных файлов. В случае совместной работы нескольких программистов система объединяет их изменения и помогает устранять конфликтные ситуации[48].

Модель представлений[править | править код]

Матрица TEAF представлений и точек зрения

Модель представлений (view model) — это каркас, который задаёт различные взгляды и точки зрения на систему и её окружение, используемые в процессе разработки. Обычно это графическое отображение семантики соответствующего представления.

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

Функции пригодности[править | править код]

Функция пригодности (fitness function) — это автоматизированные и объективные тесты для проверки соответствия новых разработок установленным ограничениям, требованиям и нормам[50].

Интеллектуальная собственность

[править | править код]

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

Примечания

[править | править код]
  1. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 1. — ISBN 978-1-4842-3153-1.
  2. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 12. — ISBN 978-1-4842-3153-1.
  3. System Development Methodologies for Web-Enabled E-Business: A Customization Framework (англ.). IGI Global. Дата обращения: 28 июня 2024.
  4. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 8–9. — ISBN 978-1-4842-3153-1.
  5. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 9. — ISBN 978-1-4842-3153-1.
  6. 1 2 Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 2–3, 5–6. — ISBN 978-1-4471-6799-0.
  7. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 13. — ISBN 978-1-4842-3153-1.
  8. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 41–42. — ISBN 978-1-4398-8460-7.
  9. Vishnu, Pendyala. Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 1–2. — ISBN 978-1-7998-1865-6.
  10. Laukkanen, Eero; Itkonen, Juha; Lassenius, Casper (2017). “Problems, causes and solutions when adopting continuous delivery—A systematic literature review”. Information and Software Technology [англ.]. 82: 55—79. DOI:10.1016/j.infsof.2016.10.001. Дата обращения 2024-06-28. |access-date= требует |url= (справка)
  11. Winters, Titus. Software Engineering at Google: Lessons Learned from Programming Over Time : [англ.] / Titus Winters, Tom Manshreck, Hyrum Wright. — O'Reilly Media, Inc., 2020. — P. 17. — ISBN 978-1-4920-8276-7.
  12. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 6. — ISBN 978-1-4398-8460-7.
  13. Saif, Syed Mohsin. Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 46–47. — ISBN 978-1-7998-1865-6.
  14. Morris, Joseph M. Software industry accounting. — 2nd. — John Wiley & Sons, 2001. — P. 1.10.
  15. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 7. — ISBN 978-1-4471-6799-0.
  16. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 3, 8. — ISBN 978-1-4842-3153-1.
  17. 1 2 3 Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 8. — ISBN 978-1-4471-6799-0.
  18. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 193–194. — ISBN 978-1-4842-3153-1.
  19. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 103–104, 117, 127, 131, 137, 141. — ISBN 978-1-4471-6799-0.
  20. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 106. — ISBN 978-1-4471-6799-0.
  21. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 142. — ISBN 978-1-4842-3153-1.
  22. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 31. — ISBN 978-1-4398-8460-7.
  23. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 8–9. — ISBN 978-1-4471-6799-0.
  24. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 31–32, 34–35. — ISBN 978-1-4398-8460-7.
  25. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 31–32, 35. — ISBN 978-1-4398-8460-7.
  26. 1 2 Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 9. — ISBN 978-1-4471-6799-0.
  27. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 272. — ISBN 978-1-4842-3153-1.
  28. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 9. — ISBN 978-1-4398-8460-7.
  29. 1 2 Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 10. — ISBN 978-1-4471-6799-0.
  30. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 37. — ISBN 978-1-4398-8460-7.
  31. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 2. — ISBN 978-1-4842-3153-1.
  32. Winters, Titus. Software Engineering at Google: Lessons Learned from Programming Over Time : [англ.] / Titus Winters, Tom Manshreck, Hyrum Wright. — O'Reilly Media, Inc., 2020. — P. 30–31. — ISBN 978-1-4920-8276-7.
  33. What Does a Product Manager Do? And How to Become One (англ.). Coursera (21 января 2025). Дата обращения: 5 мая 2025.
  34. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 7. — ISBN 978-1-4398-8460-7.
  35. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 22. — ISBN 978-1-4471-6799-0.
  36. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 108–110, 206. — ISBN 978-1-4471-6799-0.
  37. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 243. — ISBN 978-1-4398-8460-7.
  38. Winters, Titus. Software Engineering at Google: Lessons Learned from Programming Over Time : [англ.] / Titus Winters, Tom Manshreck, Hyrum Wright. — O'Reilly Media, Inc., 2020. — P. 193–195. — ISBN 978-1-4920-8276-7.
  39. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 143. — ISBN 978-1-4398-8460-7.
  40. Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 144. — ISBN 978-1-4398-8460-7.
  41. Winters, Titus. Software Engineering at Google: Lessons Learned from Programming Over Time : [англ.] / Titus Winters, Tom Manshreck, Hyrum Wright. — O'Reilly Media, Inc., 2020. — P. 204. — ISBN 978-1-4920-8276-7.
  42. Saif, Syed Mohsin. Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 50–51. — ISBN 978-1-7998-1865-6.
  43. Saif, Syed Mohsin. Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 52–53. — ISBN 978-1-7998-1865-6.
  44. Saif, Syed Mohsin. Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 45. — ISBN 978-1-7998-1865-6.
  45. 1 2 Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — P. 68. — ISBN 978-1-4398-8460-7.
  46. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 236. — ISBN 978-1-4842-3153-1.
  47. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 239. — ISBN 978-1-4842-3153-1.
  48. Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — P. 246–247. — ISBN 978-1-4842-3153-1.
  49. Concepts for Automating Systems Integration (англ.). NIST. National Institute of Standards and Technology. Дата обращения: 28 июня 2024. Архивировано 25 января 2017 года.
  50. Fundamentals of Software Architecture: An Engineering Approach. — O'Reilly Media, 2020. — ISBN 978-1492043454.
  51. Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — P. 44–45. — ISBN 978-1-4471-6799-0.

Литература

[править | править код]
  • Conde, Dan. Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales. — Aspatore Books, 2002. — ISBN 1587622025.
  • Davis, A. M. Just enough requirements management: Where software development meets marketing. — Dorset House Publishing Company, Incorporated, 2005. — ISBN 0932633641.
  • Dooley, John F. Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring : [англ.]. — Apress, 2017. — ISBN 978-1-4842-3153-1.
  • Kit, Edward. Software Testing in The Real World. — Addison-Wesley Professional, 1992. — ISBN 0201877562.
  • Hasted, Edward. Software That Sells: A Practical Guide to Developing and Marketing Your Software Project. — Wiley Publishing, 2005. — ISBN 0764597833.
  • Hohmann, Luke. Beyond Software Architecture: Creating and Sustaining Winning Solutions. — Addison-Wesley Professional, 2003. — ISBN 0201775948.
  • Horch, John W. (Март 1995). “Two Orientations On How To Work With Objects”. IEEE Software. 12 (2): 117—118. ProQuest 215832531.
  • Langer, Arthur M. Guide to Software Development: Designing and Managing the Life Cycle : [англ.]. — Springer, 2016. — ISBN 978-1-4471-6799-0.
  • McCarthy, Jim. Dynamics of Software Development. — Microsoft Press, 1995. — ISBN 1556158238.
  • Morris, Joseph M. Software industry accounting. — 2nd. — John Wiley & Sons, 2001.
  • Rittinghouse, John. Managing Software Deliverables: A Software Development Management Methodology. — Digital Press, 2003. — ISBN 155558313X.
  • Saif, Syed Mohsin. Software Effort Estimation for Successful Software Application Development // Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 45–97. — ISBN 978-1-7998-1865-6.
  • Tucker, Allen. Software Development: An Open Source Approach : [англ.] / Allen Tucker, Ralph Morelli, Chamindra de Silva. — CRC Press, 2011. — ISBN 978-1-4398-8460-7.
  • Vishnu, Pendyala. Evolution of Integration, Build, Test, and Release Engineering Into DevOps and to DevSecOps // Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities : [англ.]. — IGI Global, 2019. — P. 1–20. — ISBN 978-1-7998-1865-6.
  • Wiegers, Karl E. More About Software Requirements: Thorny Issues and Practical Advice. — Microsoft Press, 2005. — ISBN 0735622671.
  • Winters, Titus. Software Engineering at Google: Lessons Learned from Programming Over Time : [англ.] / Titus Winters, Tom Manshreck, Hyrum Wright. — O'Reilly Media, Inc., 2020. — ISBN 978-1-4920-8276-7.
  • Wysocki, Robert K. Effective Software Project Management. — Wiley, 2006. — ISBN 0764596365.