Статичен анализ срещу динамичен анализ при тестване на софтуер



Какво е статичен анализ?

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

Статичният анализ се извършва след кодиране и преди изпълнение на модулни тестове.

Статичен анализ може да се направи от машина, за да автоматично 'премине' изходния код и да открие неспазващи правила. Класическият пример е компилатор, който намира лексикални, синтактични и дори някои семантични грешки.


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

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


Когато разработчиците извършват анализ на код, те обикновено търсят

  • Кодови редове
  • Честота на коментарите
  • Правилно гнездене
  • Брой извиквания на функции
  • Цикломатична сложност
  • Може да проверява и за единични тестове

Атрибути за качество, които могат да бъдат фокус на статичния анализ:

  • Надеждност
  • Поддържане
  • Изпробваемост
  • Повторно използване
  • Преносимост
  • Ефективност


Какви са предимствата на статичния анализ?

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

Предимства на статичния анализ на кода:


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

    • Недостъпен код

    • Променлива употреба (недекларирана, неизползвана)

    • Неповикани функции

    • Нарушения на гранична стойност

Ограничения за анализ на статичен код:

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


Какво е динамичен анализ?

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

От Wikipedia’s дефиниция на динамичен програмен анализ :

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


Най-често срещаната практика за динамичен анализ е изпълнението на Unit Tests спрямо кода, за да се открият грешки в кода.

Предимства на динамичния анализ на кода:

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

Ограничения за анализ на динамичен код:

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