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

Разработка на софтуер

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

Основни задачи Планиране Планирането е част от всеки проект. В процеса на планиране се откриват конкретни задачи свързани със самия проект.

Важна част от създаването на софтуерна програма е извличане на изискванията или техния анализ.Ralph, P., and Wand, Y. A Proposal for a Formal Definition of the Design Concept. In, Lyytinen, K., Loucopoulos, P., Mylopoulos, J., and Robinson, W., (eds.), Design Requirements Engineering: A Ten-Year Perspective: Springer-Verlag, 2009, pp. 103 – 136 Клиентите най-често имат абстрактно виждане какво искат като краен резултат и нямат идея какво софтуерния продукт трябва да прави. Опитните софтуерни инженери разпознават непълните, прекалено амбициозни или често противоречиви изисквания още във фазата на планиране. Честото тестване и изпробване на продуктите в процеса на разработка намалява риска от внедряване на ненужни изисквания.

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

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

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

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

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

Документацията описва начина на работа на програмата, така че тя да може да бъде използвана от крайните потребители. Без ясна документация софтуерът трудно може да бъде използван, особено когато става дума за силно специализирани и сравнително сложни продукти, като Photoshop или AutoCAD.

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

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

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

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

Етапи от разработката на софтуер Анализ на изискванията в системното инженерство и софтуерното инженерство, обхваща онези задачи, които определят потребностите или условията отговарящи за нови или изменени продукти, като се вземат предвид възможните противоречащи си изисквания на различни заинтересовани страни, анализиране, документиране, валидиране и управление на софтуера или системните изисквания.Kotonya, G. and Sommerville, I. 1998. Requirements Engineering: Processes and Techniques Chichester, UK: John Wiley and Sons. Анализа на изискванията е от решаващо значение за успеха на системите или софтуерните проекти. Изискванията трябва да бъдат документирани, обжалвани, измерими, проверими, проследими, свързани с определени бизнес потребности или възможности, и да определя ниво на детайлност, достатъчно за проектирането на системата.

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

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

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

Софтуерната архитектура означава и система от практики за подбор, определяне и проектиране на една софтуерна структура.

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

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

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

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

За ефективно оползотворяване на времето работата се разделя на модули/части, които се задават като под-задачи на отделните софтуерни разработчици според техните умения.

Тази фаза отнема най-много време спрямо останалите.

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

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

Софтуерното тестване е компромис между бюджета, времето и качеството.

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

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

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

Поддръжка на софтуера е процеса на модифициране на софтуерните продукти след пускането им в експлоатация и цели подобряване на характеристиките и качествата им.

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

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

Процеси на разработка на софтуер Методологии Методологията е свързана от една страна с анализ на принципите и методите, правилата и постулатите, прилагани в една дисциплина, а от друга – със систематичното изследване на методите, които са или могат да бъдат приложени в тази дисциплина.Methodology, Мириам Уебстър

Водопаден модел

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