Разлика между версии на „Разработка на софтуер“

м
без част от :en препратките; форматиране: интервал, нов ред, тире-числа (ползвайки Advisor)
(→‎Спецификация: правописна грешка)
м (без част от :en препратките; форматиране: интервал, нов ред, тире-числа (ползвайки Advisor))
 
=== Дизайн ===
Когато изискванията се установят, дизайнът на софтуера може също да бъде установен в документ на софтуерен дизайн ({{lang-en|Software_design_document}}). Това включва предварителен или дизайн на високо ниво на главните модули с обща картина (например [[блок-схема]]) на това как се съчетават частите. [[Език за програмиране|Езикът]], [[Операционна система|операционната система]] и хардуерните компоненти трябва да са ясни допреди този моменттова. След като е създаден детайлен дизайн или дизайн на ниско ниво, може да се пристъпи към доказателство за концепцията или да се потвърдят изискванията с [[прототип]].
<!-- проверено дотук -->
 
=== Имплементация, тестване и документация ===
Имплементацията е процесът, в който софтуерните инженери пишат програмния код на проекта.
Обучаването за работа със софтуера е важно, тъй като той е ефикасен, само ако се използва коректно.
 
[[:en:Software maintenance|Поддръжката]] и подобряването на софтуера се справят с новооткрити грешки. Също някои  изисквания може да заемат съществено време и усилия, например пропуснати изисквания може да доведат до промяна в дизайна на софтуера.
 
== Подтеми ==
=== Интегрирана среда за разработка ===
[[File:Anjuta-2.0.0-2.png|thumb|360px|[[Anjuta]], a C and C++ IDE for the GNOME environment]]
[[:en:integrated development environment|Интегрираната среда за разработка]] е [[:en:software application|софтуерна апликация]], предоставяща разбираеми улеснения за [[:en:computer programmer|компютърния програмист]] при разработката на софтуер. Обикновено една среда за разработка съдържа:
* [[:en:source code editor|Редактор на програмния код]]
* [[:en:compiler|Компилатор]] или [[:en:interpreter|интерпретатор]]
* Инструменти за [[:en:build automation|автоматизация на изпълнението]]
* [[:en:debugger|Дебъгер]] (в повечето случаи)
Средите за разработка са създадени за максимална програмна продуктивност, като предлагат компоненти със сходни [[:en:user interface|потребителски интерфейси]]. Типично за една среда е, че е посветена на един [[:en:programming language|програмен език]], така че да предоставя комплект от приставки, които най-добре съвпадат с [[:en:programming paradigm|програмните парадигми]] на езика.
 
=== Моделиращ език ===
[[:en:modeling language|Моделиращ език]] е всеки [[:en:artificial language|изкуствен език]], който може да бъде използван, за да изрази информация, знания или системи в една структура, които са дефинирани в последователна група от правила. Правилата се използват за интерпретация на значението на компонентите в една структура. Моделиращият език може да бъде графичен или текстов. Графичните използват [[:en:diagramming technique|диаграмни техники]] с наименувани символи, които представят концепции, линии, които ги свързват с техните взаимоотношения и други графични анотации, които репрезентират ограничения. Текстовите моделиращи езици обикновено използват стандартизирани ключови думи, придружени от параметри, които да формират компютърно-интерпретативни изрази.
 
Примери за графични моделиращи езици в сферата на софтуерното инженерство са:
* [[:en:Business Process Modeling Notation|Business Process Modeling Notation]] (BPMN, и [[XML]] от BPMN) е пример за процесен моделиращ език
* [[:en:EXPRESS (data modeling language)|EXPRESS]] и EXPRESS-G (ISO 10303- – 11) е интернационален, стандартен моделиращ език за данни
* [[:en:Extended Enterprise Modeling Language|Extended Enterprise Modeling Language]] (EEML) е широко използван за бизнес процесно моделиране
* [[:en:Flowchart|Flowchart]] е схемова репрезентация на алгоритъм или процес на стъпки
* [[:en:Fundamental Modeling Concepts|Fundamental Modeling Concepts]] (FMC) е моделиращ език за софтуерно-интензивни системи
* [[:en:IDEF|IDEF]] е група от моделиращи езици, като най-значимите са [[:en:IDEF0|IDEF0]] за функционално моделиране, [[:en:IDEF1X|IDEF1X]] за информационно моделиране и [[:en:IDEF5|IDEF5]] за моделиране на онтологии
* [[:en:LePUS3|LePUS3]] е [[:en:object-oriented|обектно-ориентиран]], визуален, дизайн-описателен език и [[:en:formal specification|бивш специфициращ]] език, който е съвместим най-вече с моделиране на широко обектно-ориентирани ([[:en:Java (programming language)|Java]], [[:en:C++|C++]], [[:en:C Sharp (programming language)|C#]]) програми и [[:en:design patterns|design patterns]].
* [[:en:Specification and Description Language|Specification and Description Language]] (SDL) е специфициращ език, съсредоточен в недвусмислената спецификация и описание на поведението на разпределени системи
* [[:en:Unified Modeling Language|Unified Modeling Language]] (UML) е [[:en:general-purpose modeling|general-purpose]] език, който е индустриален стандарт за специфициране на софтуерно-интензивни системи. UML 2.0 поддържа тринадесет различни диаграмни техники и има широко разпространен инструмент за помощ
Не всички моделиращи езици са изпълними и за тези, които са, използването им не означава че програмисти не са нужни. Вместо това, изпълнимите моделиращи езици имат за цел да разширят продуктивността на умели програмисти, така че да адресират повече сложни проблеми като [[:en:parallel computing|паралелни изчисления]] и [[:en:distributed system|разпределителни системи]].
 
=== Програмни парадигми ===
[[:en:programming paradigm|Програмна парадигма]] е фундаментален стил на компютърно програмиране, който като цяло не е воден от методология за управление на проекта. Парадигмите се различават в концепциите и абстракциите, използвани за представяне на елементите в една програма (като обекти, функции, променливи, ограничения) и в изчислителните стъпки (като оценяване, продължения, поток от данни). Понякога утвърдените от парадигмата концепции, биват използвани кооперативно в архитектурния дизайн на високо ниво в една система, в други случаи обхватът на програмната парадигма е ограничен до вътрешната структура на конкретната програма или модул.
 
Един програмен език може да поддържа [[:en:multi-paradigm programming language|повече от една парадигми]]. Например програми писани на [[:en:C++|C++]] или [[:en:Object Pascal|Object Pascal]] може да са изцяло [[:en:procedural programming|процедурни]], изцяло обектно-ориентирани, или да съдържат елементи и от двете парадигми. Софтуерните дизайнери и програмисти решават как да бъдат използвани тези елементи. В [[:en:object-oriented programming|обектно-ориентираното програмиране]] програмистите могат да гледат на една програма, като колекция от взаимодействащи си обекти, докато във [[:en:functional programming|функционалното програмиране]] програмата може да се разглежда като поредица от функции. Когато програмни компютри или системи с много процесори, [[:en:process-oriented programming|процесно-ориентираното програмиране]] позволява на програмистите да гледат на апликациите като комплект от конкурентни процеси, действащи върху логически свързани [[:en:data structures|структури от данни]].
 
Както различни групи софтуерно инженерство застъпват различни методологии, така и различните програмни езици застъпват различни парадигми. Някои езици са направени да поддържат само една парадигма ([[:en:Smalltalk|Smalltalk]] поддържа обектно-ориентирано програмиране, [[:en:Haskell (programming language)|Haskell]] поддържа функционално програмиране), докато други поддържат повече от една (например [[:en:Object Pascal|Object Pascal]], [[:en:C++|C++]], [[:en:C Sharp (programming language)|C#]], [[:en:Visual Basic|Visual Basic]], [[:en:Common Lisp|Common Lisp]], [[:en:Scheme (programming language)|Scheme]], [[:en:Python (programming language)|Python]], [[:en:Ruby (programming language)|Ruby]] andи [[:en:Oz (programming language)|Oz]]).
 
Много парадигми са добре познати както с методите, които забраняват, така и с тези, които позволяват. Например чистото функционално програмиране забранява използването на [[:en:side-effect (computer science)|side-effects]], а [[:en:structured programming|структурното програмиране]] забранява използването на [[:en:goto|goto]] изявления.
 
Примери за парадигми на високо ниво включват: