Разработката на софтуер (на английски: Software development, също като разработване на приложен софтуер, софтуерен дизайн или проектиране на софтуер, софтуерно програмиране, създаване и писане на софтуерна документация, тестване на софтуер и поправяне на софтуерни грешки) е бизнес процеса на писане на програмен код, неговата поддръжка, но в по-широк смисъл включва всичко, което стои между първоначалната концепция за определена програма или желан софтуерен продукт до релийза, понякога това става като планиран процес на разработка. Разработката на софтуер може да включва изследвания, нови разработки, създаване на прототипи, модификация, повторно използване, ре-инженеринг, поддръжка и всякакви други дейности, чийто краен резултат е софтуерен продукт.

При разработката на програмния продукт програмираното му е съобразено с нуждите на дадена целева потребителска група, която се интересува от създаването или подобряването на такъв софтуерен продукт и съответства на маркетинга му. Но софтуерът може да бъде разработван и по множество причини, като най-общо трите са да отговаря на конкретните нужди на потребителите, на дадена фирма или клиент (), да отговаря на възприетите нужди на група от потенциални потребители (често софтуер с отворен код или рекламен) или дори за лична употреба (например напредналият програмист или изследовател-учен може да напише програма за автоматизиране на сложни задачи). Понякога се налага разработката и на вграден софтуер (асемблиране), например когато се изисква процесът на разработка да бъде интегриран с разработката на контролиран физически продукт. Системният софтуер засяга приложните програми и самия процес на програмиране, поради което често се разработва отделно.

Нуждата от по-добро качество на процеса на софтуерна разработка води до началото на софтуерното инженерство, което се стреми да приложи систематичния подход, илюстриран в инженерната парадигма, към разработката на софтуер.

Съществуват много подходи към управлението на софтуерни проекти, известни като циклични модели в живота на софтуерната разработка, методологии, процеси или модели. „Моделът на водопада“ е традиционният подход, а т.нар. гъвкава методология разработка на софтуер е по-модерен подход.

Методологии Софтуерна методология при писането на софтуер (известна още като процес на разработка на софтуер, модел или цикъл на разработване) е рамка, която се използва за структуриране, планиране и контролиране процеса на разработка на информационни системи. През годините са еволюирали много разновидности на такива платформи, всяка със своите отличителни предимства и недостатъци. Има няколко различни подхода в разработката на софтуер: някои използват по-структуриран, инженерен подход за разработка на бизнес решения, докато други възприемат по-частични подходи, като софтуерът се развива на части. Една системна методология на разработка на софтуер не винаги е подходяща за всички проекти. Всяка от възможните методологии е най-подходяща за определен тип проекти, в зависимост от различните технически, организационни, проектни и екипни спецификации.

Повечето методологии споделят някои от следните комбинации в разработката на софтуер:

Анализиране на потребностите Проучване на пазара Събиране на изискванията за предложеното бизнес решение Изработване на план или дизайн на софтуерно решение Анализиране на проблема (математически проблем, задача) Писане на програмен код (имплементация) Тестване на софтуера и оправяне на бъгове Внедряване Поддръжка и оправяне на нови бъгове

Тези етапи често се свързват с цикъла на живот на софтуерната разработка. Различните подходи в разработката на софтуер ги използват в различна последователност или посвещават повече или по-малко време на някои от тях. Детайлите в документацията на всеки етап също може да варират. Посочените етапи могат да се свържат с подхода на „водопада“ или може да бъдат повтаряни в различни цикли (малко „по-екстремен“ подход). По-екстремният подход обикновено включва по-малко отделено време за планиране и документиране, но повече време в писане на програмен код и разработка на автоматизирани тестове. По-екстремните подходи предлагат също непрекъснато тестване по време на живота на разработка, както и работещ (или без бъгове) продукт през цялото време. По-структурираните подходи на „водопада“ се стремят да оценяват рисковете и да разработят детайлен план преди писането на програмен код, за да се избегнат значителни промени в дизайна и програмния код на по-късен етап.

Кой е най-добрият подход често зависи от типа на проблема. Ако проблемът е добре разбран и може да бъде планирано решение за дълъг период от време напред, то подходите на „водопада“ често са най-удачни. От друга страна, ако проблемът е уникален (или е такъв поне за екипа от разработчици) и структурата на софтуерното решение не може да бъде лесно визуализирана, то тогава „по-екстремните“, частични подходи биха свършили по-добра работа.

Дейности по разработката на софтуер

Дизайн Когато изискванията се установят, дизайнът на софтуера може също да бъде установен в документ на софтуерен дизайн (). Това включва предварителен или дизайн на високо ниво на главните модули с обща картина (например блок-схема) на това как се съчетават частите. Езикът, операционната система и хардуерните компоненти трябва да са ясни преди това. След като е създаден детайлен дизайн или дизайн на ниско ниво, може да се пристъпи към доказателство за концепцията или да се потвърдят изискванията с прототип.

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

След като основните изисквания са събрани от клиента, започва техния по-задълбочен анализ. Определя се обхвата на разработения продукт като се поставят конкретни задачи на проекта и се изработва съответната документация (scope document).

Някои функционалности могат да останат извън обхвата на проекта като впоследствие могат да го оскъпят. Най-честа причина е неяснота по отношение на изискванията и приложението в самото начало на разработване. Ако друга компания извършва разработването и планирането, този документ може да се счита за правен документ и е част от договорните отношения. В случай на възникване на спорове и двусмислено тълкуване – какво е обещано на клиента и какво е получено като продукт, документацията по разработване на проекта (scope document) може да се приложи за изясняване и разрешаване на спорни моменти.

Спецификация Източниците на идеи за софтуерни продукти са много. Тези идеи могат да дойдат от пазарно проучване, включващо демографията на потенциално нови клиенти, съществуващи клиенти, друг вътрешен персонал от разработчици или креативна трета страна. Идеите за софтуерни продукти се оценяват от маркетингов специалист по отношение на икономическа изпълнимост, както и за съчетаване със съществуващи канали на разпределение, за възможни ефекти върху съществуващи продуктови линии, за необходими допълнения и за съчетаване с интересите на компанията. Цената и определеното време се преценяват във фазата на пазарно оценяване. Също в тази фаза се решава дали проектът трябва да бъде осъществен, в зависимост от по-детайлната информация, предоставена от маркетинговия състав и софтуерните разработчици.

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

Писане на програмен код Това е писането на програмистки код, използвайки алгоритми, на базата на софтуерния дизайн, или на написани, или зададени спецификации, които го описват.

Създаване на потребителски интерфейс Това може да включва също и писането на API (Application Programming Interface), външно или вътрешно.

Тестване и софтуерна документация

Софтуерното тестване е интегрална и важна фаза в процеса на софтуерна разработка. Тази част от процеса осигурява разпознаването на дефектите възможно най-рано. В някои процеси, известни като тестово разработване, тестовете може да бъдат разработени преди писането на програмен код и да служат като показател за коректна имплементация.

Документирането на вътрешния дизайн на софтуера, с цел бъдеща поддръжка и подобрение, се прави по време на разработката. Софтуерният инженерен процес, избран от екипа от програмисти, в процеса на разработване се решава колко вътрешна документация е необходима.

Плановите модели (като waterfall) обикновено съдържат повече документация от гъвкавите модели.

Потребителска документация

Разликата между софтуерната и потребителската документация е че софтуерната документация е предназначена за разработчиците и екипите, които работят с тях, докато потребителската документация често се намира на самият уебсайт и е предназначена за потребителите, които не се нуждаят от специализирани знания по програмиране.

Имплементация Имплементацията е процесът, в който системния администратор инсталира софтуерът на крайните потребители след като софтуерните инженери напишат програмния код на проекта.

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

Обучаването за работа със софтуера е важно, тъй като той е ефикасен, само ако се използва коректно.

Поддръжката и подобряването на софтуера се справят с новооткрити грешки. Също някои изисквания може да заемат съществено време и усилия, например пропуснати изисквания може да доведат до промяна в дизайна на софтуера.

Подтеми Бизнес процеси и модели на данни

Бизнес моделът илюстрира функциите, асоциирани с моделирането на бизнес процеса и организациите, отговорни за изпълнението им. С изобразяващи дейности и потоци от информация, е създадена фондация, която да визуализира, дефинира, разбере и валидира естеството на процеса.

Моделът на данните позволява детайлите на информацията да бъдат съхранени и се използва главно, когато крайният продукт е поколението на компютърен софтуерен код за апликация или подготовката на функционална спецификация, която да помогне или за правенето, или за продажбата на софтуера.

View model

View model е рамка, която осигурява различни гледни точки върху системата и нейната среда, които да бъдат използвани в процеса на софтуерна разработка.

Целта на гледните точки и изгледите е да позволят на инженерите да разбират много сложни системи и да организират елементите на даден проблем, както и решението му. В проектирането на физически интензивни системи, гледните точки често отговарят на възможностите и отговорностите в инженерната организация.

Най-сложните системни спецификации са толкова обширни, че никой не е напълно способен да разбере всички аспекти на всички спецификации. Освен това всички имаме различни интереси в дадена система и различни причини за изследването на системните спецификации. Бизнес изпълнител би задавал по-различни въпроси относно направата на една система, отколкото човек, който е работил по имплементирането. Затова концепцията на платформата за гледните точки е да предостави различни виждания към спецификациите на една сложна система.

Computer-aided software engineering