Каква е дефиницията на софтуерния бъг и какво да знаем за бъговете?

+12 гласа
2,010 прегледа
попитан 2016 август 16 от big_boi_sha (220 точки)

2 отговори

+2 гласа
отговорени 2016 август 17 от Daniel Ivanov (11,160 точки)

Здравей, 

Ще допълня ilinovster с още и по-подробна информация за бъга.

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

Когато един софтуер или нещо от заобикалящия ни свят има много бъгове и/или не работи както трябва, се казва, че е  бъгав/дефектен. Рапортите, които описват откритите бъгове се наричат бъг рапорти (бъг репорти) ,например bug/defect/fault/problem/trouble reports , change request и др.

Защо бъговете могат да бъдат пагубни?

Има бъгове, които могат да останат неоткрити, понеже много трудно или рядко се прояват, но има и такива, които биха били критични и биха причинили freeze-ове или crash-ове.

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

Едини бърз пример: Бъгове в кода, контролиращ Therac-25 (машина за радиотерапия), са били причината за смъртта на няколко пациента през 80-те.

Най-известните типове бъгове са:

От аритметичните:

Делене на 0;

Артитметично пренатоварване или сгъстяване – Arithmetic overflow/underflow

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

Загуба на аритметичната точност, поради закръгляне или числово нестабилни алгоритми.

Логически бъгове – това са бъгове при обработването на информацията в софтуера:

Infinite loops (безкрайни цикли) и infinite recursion (безкрайна рекурсия). Рекурсия какво означава го имаме в предишен въпрос и е отговорен, а infinite loops – това са безкрайни цикли, които нямат терминиращо условие или terminating condition на български и затова се повтарят безкрайно и могат да затлачат компютъра така, че без рестарт да не може да се оправи.

Пример за безкраен цикъл:

while (true) {

    console.log("Infinite Loop");

}

и пример за безкрайна рекурсия:

(define Ω
  (let ([ω (lambda (f) (f f))])
    (ω ω)))

Syntax bugs или синтактични бъгове – това са бъгове свързани със синтаксиса в кода. Грешна операция, например x=5 вместо x==5 , при някои езици х=5 ще сложи на х стойността 5, докато в други х==5 ще провери дали х в момента е 5 или някое друго число.

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

Resource bugs – бъгове свързани с ресурсите:

Null pointer – има референция към празен или невалиден обект;

Ползване на неинициализирана променлива;

Ползване на грешен тип данни;

Нарушаване на достъпа (Access violation или също така segmentation fault) – бъг породен от хардуер с memory protection, който съобщава на операционната система, че има нарушение на достъпа;

Memory leaks – теч на паметта. Едно приложение може да работи идеално до някое време и след това да почне да изисква много повече ресурс за вършене на същата работа, бъг породен от постоянна алокация на реурси без освобождаване. Често срещан проблем при игри, програми и драйвъри;

Buffer overflow;

Double free error и др.

Multi-threading programming bugs:

Deadlock – бъг при който една задача или един task (А) не може да продължи преди друг task (B) да свърши и в същото време B не може да продължи преди A да свърши;

Race condition – компютърът не прави задачите в оказаният му ред.

Interfacing bugs – бъгове свързани с интерфейса:

Incorrect API usage –  неправилно използване на приложно програмния интерфейс;

Incorrect protocol implementation;

Incorrect hardware handling;

Incompatible systems -  несъвместими системи.

Performance bugs:

Бъгове свързани с RAM-та (random access memory-то) или RDM (random disk memory-то);

Прекалено голямата сложност на един алгоритъм.

И не на последно място – нещо свързано с QA-ството:

Teamworking bugs:

Липса или грешни коментари по дадената работа, които е трябвало да остави;

Разлики между документацията и актуалния продукт.

+1 глас
отговорени 2016 август 17 от ilinovster (1,870 точки)
В компютърните технологии бъг (bug) е програмна грешка в дадена програма. Това понятие включва и грешка в микрокод вложен в микропороцесор или друго електронно устройство. Процеса на откриване на програмни грешки (bugs) се нарича дебегване (debugging). Този процес започва още с първоначалното написване на кода и продължава през целия процес на обединението му с други програмни кодове до получаването на готов софтуерен продукт.
...