Какво са софтуерните технологии?
Една от най-новите дисциплини, свързани с разработването на софтуер е "Софтуерни технологии". На английски дисциплината е известна под името Software Engineering, което не може да се преведе точно на български език. Според IEEE (Institute of Electrical and Electronics Engineers) тази дисциплина означава прилагане на добре познатите инженерни принципи в областта на разработването на софтуер.
Разработването на софтуер се различава от другите производствени дейности по това, че се създава нематериален продукт. Въпреки това, софтуерът често се вгражда в техника, която се използва в различни браншове, така че неправилното му функциониране може да има съвсем материален ефект. Особено сега когато софтуерът се използва навсякъде - от медицинско оборудване до управление на самолети, крайният резултат от грешки в него би могъл да бъде с фатални последици.
Дори софтуерът, който не се вгражда в други устройства, оказва сериозно влияние върху живота ни. Свикнали сме да се доверяваме на софтуер за финансовите ни данни и пароли. Използваме го за управление на бизнеса и ежедневните ни дейности. И все пак все още сме далеч от напълно надежден софтуер. Съществува опасност от проникване на хакери или просто претоварване на системата. Не на последно място е възможно софтуерът да работи коректно от техническа гледна точка, но от гледна точка на потребителя да е неудобен за употреба. Освен това често рутинният софтуер е проектиран чрез модела "кодиране и корекция", при който водещи са принципите и изискванията на интерфейса с външния свят, което води до увеличаване на проблемите. В този случай също трябва да се познават в детайли както целта на изградената архитектура, така и много други предизвикателства, на които може да бъде подложена тази архитектура, за да бъде устойчива.
Софтуерните технологии включват, разбира се, писането на код, но това е само един етап от целия процес. Истинските софтуерни технологии спазват добре дефиниран жизнен цикъл на разработка на софтуер.
Връзка с миналото...
Преди близо 500 години в епохата на Ренесанса, един италиански философ, държавник и историк, на име Макиавели, е казал, че "... няма нищо по-трудно за планиране, по-съмнително за успех и по-опасно за управляване от инициативата за въвеждане на нов ред." През последните 50 години компютърните системи въведоха нов ред. И въпреки, че технологиите направиха огромен скок от времето на Макиавели, неговите думи продължават да са все така верни.
История и възникване като направление
Когато се създават първите цифрови компютри, в началото на 40те години на миналия век, инструкциите, които са ги "задвижвали" са били вградени в самите компютри. Това бързо се е оказало непрактично и липсата на гъвкавост води до създаването на т.нар. von Neumann архитектура. Така разделянето на хардуера и софтуера започва с абстракцията, която е била използвана за справяне със сложността на компютрите.
Програмните езици започват да се появяват през 50те, което е още една голяма стъпка към абстракцията на софтуера от хардуера. Основните езици като Fortran, ALGOL и COBOL са създадени в края на 50те, за да се справят съответно с научни, алгоритмични и бизнес проблеми. През 1968 г. Едсгар Дейкстра публикува своята статия "Операторът GO TO се смята за вреден" (Go To Statement Considered Harmful), а през 1972 Дейвид Парнас въвежда ключовата концепция за модулност и "скриване на информацията", за да помогнат на програмистите да се справят с непрекъснато нарастващата сложност на софтуерните системи.
Самият термин "Софтуерни технологии", който се свързва с Маргарет Хамилтън (виж карето), е използван за първи път като име на първата международна конференция, посветена на производството на софтуер, спонсорирана и подпомогната от НАТО. На конференцията вземат участие редица софтуерни експерти от цял свят, които се обединяват около идеята за дефиниране на добри практики за създаване на софтуер, чрез прилагане на инженерен подход. Резултатът от конференцията е документ, който дефинира как трябва да бъде разработван софтуера. Оригиналният документ е достъпен публично. С него се поставят основите на съвременната дисциплина Софтуерни технологии.
Дисциплината Софтуерни технологии е създадена за справяне с ниското качество на софтуера и за да направи управляеми проектите, които излизат извън рамките на предвиденото време и бюджет. По този начин софтуерът се разработва чрез систематичен подход, който гарантира доставката му на време, в рамките на бюджета и според спецификацията. Традиционните инженерни производства вече се справят с тези проблеми и затова се приема, че техните принципи могат да се приложат и върху разработката на софтуер.
Направления
Софтуерните технологии могат да бъдат разделени на десет направления:
- Инженеринг на изискванията (Requirements engineering): извличането, анализа, спецификацията и проверката на изискванията към софтуера;
- Проектиране на софтуер (Software design): процеса на дефиниране на архитектура, компоненти, интерфейси и други характеристики на система или компоненти.
- Разработване на софтуер (Software construction): Подробното създаване на работещ и смислен софтуер чрез комбинация от кодиране, проверка, тестване и отстраняване на грешки.
- Тестване на софтуер (Software testing): емпирично техническо изследване проведено за да предостави на заинтересованите страни информация относно качеството на продукта или услугата, която се тества.
- Поддръжка на софтуер (Software maintenance): съвкупност от дейности необходими за да се предостави икономически обоснована поддръжка на софтуера.
- Управление на софтуерната конфигурация (Software configuration management): идентифициране на конфигурацията на софтуерна система през определени периоди от време, така че да може систематично да се контролират промените в конфигурацията, и да се управляват интегритета и проследимостта на конфигурацията през жизнения цикъл на системата.
- Управление на софтуерното производство (Software engineering management): приложението на дейности по управлението - планиране, координиране, измерване, наблюдаване и протоколиране - за да се гарантира, че разработването и управлението на софтуера е систематично и дисциплинирано.
- Процес за производство на софтуер (Software engineering process): дефиницията, имплементацията, оценката, измерването, управлението, промяната и подобряването на жизнения цикъл на самия процес за производство на софтуер.
- Средства и методи за производство на софтуер (Software engineering tools and methods): компютърните средства, които са предназначени да подпомагат жизнения цикъл на разработване на софтуер, и методите, които канализират тези дейности, така че да повишат значително вероятността тези дейности да се успешни.
- Управление на качеството на софтуера (Software quality management): множеството от налични характеристики на софтуера, което води до изпълнение на изискванията.