**Конструкцијата на софтвер** е дисциплина на софтверското инженерство. Претставува детално создавање на замислен софтвер, со комбинација на кодирање, верификација, испробување на единките и дебагирање. Поврзано е со сите останати дисциплини на софтверското инженерство, но најмногу е поврзано со софтверскиот дизајн и испробувањето на програмска опремаот.

Основи на конструирањето на софтвер
-----------------------------------

Основите на конструирањето на софтвер вклучуваат:

### Намалување на сложеноста

Главен проблем кај луѓето се нивните ограничени можности за извршување на сложени задачи и помнење на информации при работа, особено на долг период. Па според ова, при развивањето на производот се оди да се намали неговата сложеност колку што е можно помалку.

Помала сложеност се добива доколку се стави повеќе акцент на создавање на код кој е едноставен и читлив, него паметен. Минимизирањето на комплексноста се постигнува со стандарди, како и преку многубројни специфични техники. Исто така може да се постигне и со техники кои се фокусирани на конструкцијата.

### Предвидување на промени

Со тек на времето поголем дел од софтверот ќе претрпи измени, па според тоа предвидувањето на промени во голема мера би влијаело за лесно и брзо да се изврши промената. Предвидувањето на промени е поддржано од многу техники како:

* **Методите за комуникација** (на пример стандардите за форматот и содржината на документите)
* **Програмските јазици** (стандарди за програмскиот јазик)
* **Платформ**а (на пример стандарди за програмски интерфејс за повици на оперативниот систем)
* Алатки (Шематски стандарди за нотирање како UML (Унифициран јазик за моделирање)

### Верификација при констукција

Верификацијата при конструкција значи создавање на софтверот на таков начин што недостатоците веднаш ќе бидат откривани од страна на програмерите, на сличен начин како што тоа се прави од стана на тимот за испробување. Специфичните техники што ја поддржуваат верификацијата при конструкција ги вклучуваат следните стандарди за кодирање: преглед на код, испробување на единките, уредување на кодот со цел да се овозможи автоматско испробување, избегнување на користење на сложени или тешко разбирливи програмски структури.

### Стандарди при констуирањето

Стандардите коишто директно влијаат на конструкцијата вклучуваат:

* **Користење на надворешни стандарди**: Стандардите за јазиците за конструкција, алатките, технички интерфејси, како и интеракција на конструкцијата на софтвер со другите дисциплини.
* **Користење на внатрешни стандарди**: Овие стандарди може да бидат дефинирани од страна на тимовите со цел да има подобра координација меѓу нив.

Раководење со конструкцијата
----------------------------

### Конструкциски модели

Голем број на модели се создадени за развивање на софтвер, некои од нив ставаат повеќе акцент на конструкцијата, за разлика од другите. Во поглед на конструкцијата некои од нив се по линеарни, како што се водопадниот и моделите кои испорачуваат по етапи (англиски: staged-delivery life cycle models. Кај ваквите модели со конструкција се почнува откако другите работи ќе бидат завршени како барањата, дизајнот и планирањето. Останатите модели се повеќе итеративни, како прототип моделот и Скрам моделот и имаат тенденција, конструкцијата на софтверот како дел од развојната фаза на процесот, да биде истовремено со другите активности како што се: барањата, дизајнот и планирањето.

### Планирање на конструкцијата

Значаен дел кај планирањето на конструкцијата е изборот на конструкциски модел. Изборот на моделот влијае на тоа како задачите ќе бидат исполнувани, каков ќе биде нивниот редослед на извршување, како и нивото до кое тие ќе бидат завршувани пред да почне конструкцијата. Планирањето на конструкцијата исто така го дефинира и редоследот по кои компонентите ќе бидат создадени и интегрирани, процесите за управување со софтверски квалитет, распределба на задачите на софтверските инженери и останатите задачи во зависност од моделот кој е избран.

### Следење на конструкцијата

Скоро секоја активност може да се следи и да се види колку има сработено. Такви активности се: пишување на кодот, негово изменување, негово повторно користење, неговата комплексност, статистика за пронаоѓањето и поправањето на грешките. Ваквите следења се корисни за понатамошното планирање на конструкцијата, се подобрува конструкцискиот модел, се обезбедува квалитет како и друго.

Практични размислувања
----------------------

Конструкцијата на софтвер е водена од многу практични размислувања:

### Конструкциски дизајн

Во текот на конструкцијата се наоѓаат некои празнини во софтверскиот дизајн, па поради тоа потребно е да се направат помали или поголеми промени кај дизајнот.

### Конструкциски јазици

Конструкциските јазици ги вклучуваат сите форми на комуникација, со кои човекот може го специфицира решението на некој проблем. Во нив спаѓаат конфигурациските јазици, алатки и програмските јазици.

**Конфигурациските јазици** – се оние јазици со кој на софтверските инженери одбираат од конечно множество на претходно дефинирани опции за создавање на софтвер за инсталација.

**Алатки** – се користат за градење на апликации и се посложени од конфигурациските јазици.
Програмските јазици се најфлексибилни од конструкциските јазици. Тие користат три генерални типови на нотации:

* Јазични нотации
* Формални нотации
* Визуелни нотации

### Кодирање

Во оваа активност спаѓаат:

* Техники за пишување на разбирлив изворен код, вклучувајќи имиња и среден код.
* Користење на класи, енумерирани типови, променливи, имиња на константи и слично.
* Користење на контролни структури
* Справување со грешки – планирани грешки и исклучоци (на пример внесување на различен тип на податок од предвидениот)
* Организирање на изворниот код (во искази, наредби, процедури, класи, функции)
* Документирање на кодот

### Испробување при конструкција

Целта на тоа да се врши испробување при конструкцијата е да се намали колку што може бројот на недостатоци уште пред почетокот на фазата испробување. Во некои случаи испробувањето при конструкција се прави откако кодирањето ќе биде завршено, додека пак во други се прават тест случаи пред кодот да биде напишан. Конструкцијата вклучува две форми на испробување, коишто често се користат од стана на програмерите. Тие форми се:

* Испробување на единката (испробување на компонентите)
* Интеграциско испробување

### Реискористување на софтвер

Реискористувањето на софтверот претставува искористување на веќе постоечки софтвер или софтверско знаење, за да се изгради нов софтвер. При реискористувањето на софтвер за време на кодирање или испробување треба да се извршат следните задачи:

- Селектирање на компонентите што можат да се реискористат, база на податоци, тест процедури или тест податоци.
- Проценување на кодот или тестот што може да се рескористи.
- Соопштување на информациите за реискористувањето кај новиот код, тест процедурите или тест податоците.

### Квалитет на конструкцијата

Постојат неколку основни техники за проверка на квалитетот на кодот кај конструкцијата, тоа се:

* Испробувањето на единката и интеграциското испробување
* Развој на софтвер воден од испробување
* Користење на предикати
* Дебагирање
* Технички испитување
* Статичка анализа на кодот

Интеграција
-----------

Клучен дел кај конструкцијата е интеграција на одделни процедури, функции, класи, компоненти и подсистеми. Исто така секој софтверски систем може да биде интегриран со друг софтверски или хардверски систем. При тоа се планира по кој редослед компонентите ќе бидат интегрирани, одделно ќе бидат оценувани како и за тоа од кои софтверски верзии се поддржани.

Наводи
------

1. 1 2 3 4 5 6 7 8 9  SWEBOK Pierre Bourque, Robert Dupuis; executive editors, Alain Abran, James W. Moore, уред. (2004). *Guide to the Software Engineering Body of Knowledge - 2004 Version*. Chapter 4 - Software Construction. IEEE Computer Society. стр. 4–1–4–5. ISBN 0-7695-2330-7. Архивирано од изворникот на 2014-07-14. Посетено на 2012-03-28.CS1-одржување: повеќе имиња: список на уредници (link)
2. ↑  Coding Techniques проверено на 29.03.2012
3. ↑  Software reuse проверено на 29.03.2012

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * п
* р
* у
Информатика |
| --- |
|  |
| Белешка: Оваа предлошка го следи официјалниот АКМ сметачки класификационен систем од 2012 година. |
|  |
| Опрема | 
* Печатена плочка
* Периферен уред
* Интегрално коло
* Интеграција во многу големи размери
* Систем на чип
* Еколошка информатика
* Автоматизација на електронската замисла
* Хардверско забрзување

 |
|  |
| Организација насметачки системи | 
* Сметачка архитектура
* Вграден систем
* Сметање во реално време
* Ослонливост

 |
|  |
| Мрежи | 
* Мрежна архитектура
* Комуникациски протокол
* Мрежен уред
* Мрежен распоредувач
* Мрежен учинок
* Мрежен сервис

 |
|  |
| Софтверска организација | 
* Интерпретатор
* Посреден софтвер
* Виртуелна машина
* Оперативен систем
* Квалитет на софтвер

 |
|  |
| Софтверско запишувањеи алатки | 
* Програмерска парадигма
* Програмски јазик
* Програмски преведувач
* Обласно-специфичен јазик
* Моделен јазик
* Програмска рамка
* Интегрирано развојно опкружување
* Управување со софтверска конфигурација
* Библиотека
* Софтверско складиште

 |
|  |
| Развој на софтвер | 
* Развоен циклус на софтверот
* Анализа на потребите
* Проектирање на програмска опрема
* Конструкција на софтвер
* Софтверско распределување
* Одржување на програмска опрема
* Програмска екипа
* Слободен софтвер

 |
|  |
| Теорија на сметањето | 
* Модел на сметање
* Формален јазик
* Теорија на автоматите
* теорија на пресметувањето
* Сложена теорија на сметање
* Логика
* Семантика на програмски јазик

 |
|  |
| Алгоритми | 
* Алгоритам
* Анализа на алгоритми
* Алгоритамска ефикасност
* Случаен алгоритам
* Сметачка геометрија

 |
|  |
| Сметачкаматематика | 
* Дискретна математика
* Веројатност
* Статистика
* Математички софтвер
* Теорија на информации
* Математичка анализа
* Бројчена анализа

 |
|  |
| Информацискисистеми | 
* Систем за бази на податоци
* Системи за складирање информации
* Претприемнички информациски систем
* Друштвена програмска опрема
* Географски информациски систем
* Систем за поддршка на одлучувањето
* Автоматско производство
* Мултимедиски информациски систем
* Податочно рударење
* Дигитална библиотека
* Сметачка платформа
* Дигитален маркетинг
* Светска пајажина
* Пребарување на информациите

 |
|  |
| Безбедност | 
* Криптографија
* Формални методи
* Безбедносни сервиси
* Систем за забележување на упади
* Хардверска безбедност
* Мрежна безбедност
* Информациска безбедност
* Безбедност на апликациите

 |
|  |
| Интеракција меѓу човекот и сметачот | 
* Интеракциона замисла
* Друштвено сметање
* Сеприсутно сметање
* Визуелизација
* Пристапливост

 |
|  |
| Паралелизам | 
* Паралелно сметање
* Паралелна обработка
* Распределен сметачки систем
* Повеќенитна обработка
* Милтипроцесираност

 |
|  |
| Вештачкаинтелегенција | 
* Обработка на природни јазици
* Претставување на знаењето
* Сметачки поглед
* Автоматско планирање и распоредување
* Методологија на пребарување
* Контролен метод
* Филозофија на вештачката интелегенција
* Распределена вештачка интелегенција

 |
|  |
| Машинско учење | 
* Надгледно учење
* Ненадгледно учење
* Учење со утврдување
* Повеќезадачно учење
* Прекрстна проверка

 |
|  |
| Графика | 
* Анимација
* Рендеринг
* Обработка на дигитална слика
* Графички процесор
* Измешана реалност
* Виртуелна реалност
* Обработка на природни јазици
* Збивање на слики
* Стереометриско моделирање

 |
|  |
| Применетосметање | 
* Електронска трговија
* Претприемнички софтвер
* Сметачка математика
* Сметачка физика
* Сметачка хемија
* Сметачка биологија
* Сметачка социологија
* Сметачко инженерство
* Сметачка здравствена нега
* Дигитална уметност
* Електронско издаваштво
* Кибервојна
* Електронско гласање
* Видеоигри
* Процесор на текст
* Операциони истражувања
* Образовна технологија
* Систем за управување со документи

 |
|  |
| 
* Википедиина книга **Книга**
* Категорија **Категорија**
* Краток преглед **Преглед**
* Википроект**ВикиПроект**
* Страница на Ризницата **Ризница**

 |

 |