Statička analiza vs dinamička analiza u testiranju softvera

Što je statička analiza?

Statička analiza ne uključuje dinamičko izvršavanje testiranog softvera i može otkriti moguće nedostatke u ranoj fazi, prije pokretanja programa.

Statička analiza vrši se nakon kodiranja i prije izvođenja jediničnih testova.

Statičku analizu može napraviti stroj za automatsko 'prolazak' kroz izvorni kod i otkrivanje pravila koja se ne pridržavaju. Klasični je primjer kompajler koji pronalazi leksičke, sintaktičke, pa čak i neke semantičke pogreške.

Statičku analizu može provesti i osoba koja bi pregledala kod kako bi osigurala da se za izradu programa koriste odgovarajući standardi i konvencije kodiranja. To se često naziva Pregled koda, a vrši ga vršnjački programer, netko drugi osim programera koji je napisao kôd.

Statička analiza također se koristi za prisiljavanje programera da ne koriste rizične dijelove programskog jezika postavljanjem pravila koja se ne smiju koristiti.

Kada programeri izvrše analizu koda, oni obično traže



  • Linije koda
  • Učestalost komentara
  • Pravilno gniježđenje
  • Broj poziva funkcije
  • Ciklomatična složenost
  • Također može provjeriti jedinstvene testove

Atributi kvalitete koji mogu biti u fokusu statičke analize:

  • Pouzdanost
  • Održavanje
  • Ispitljivost
  • Ponovna upotrebljivost
  • Prijenosnost
  • Učinkovitost

Koje su prednosti statičke analize?

Glavna prednost statičke analize je u tome što pronalazi probleme s kodom prije nego što bude spreman za integraciju i daljnje testiranje.

Prednosti statičke analize koda:

  • Može pronaći slabosti u kodu na točnom mjestu.
  • Mogu ga provoditi obučeni programeri osiguranja softvera koji u potpunosti razumiju kôd.
  • Izvorni kod mogu lako razumjeti drugi ili budući programeri
  • Omogućuje brže okretanje radi popravaka
  • Slabosti se pronalaze ranije u životnom ciklusu razvoja, smanjujući troškove popravljanja.
  • Manje nedostataka u kasnijim ispitivanjima
  • Otkrivaju se jedinstveni nedostaci koji se ne mogu ili teško mogu otkriti pomoću dinamičkih testova

    • Nedostižni kôd

    • Varijabilna uporaba (neprijavljeno, neiskorišteno)

    • Nepozvane funkcije

    • Kršenje granične vrijednosti

Ograničenja analize statičkog koda:

  • Vremenski je ako se provodi ručno.
  • Automatizirani alati proizvode lažno pozitivne i lažno negativne podatke.
  • Nema dovoljno obučenog osoblja za temeljito provođenje statičke analize koda.
  • Automatizirani alati mogu pružiti lažni osjećaj sigurnosti da se sve rješava.
  • Automatizirani alati toliko dobri koliko i pravila pomoću kojih skeniraju.
  • Ne pronalazi ranjivosti uvedene u runtime okruženju.

Što je dinamička analiza?

Za razliku od statičke analize, gdje se kod ne izvršava, dinamička analiza temelji se na izvršavanje sustava , često koristeći alate.

Iz Wikipedije definicija dinamičke analize programa :

Dinamička analiza programa je analiza računalnog softvera koja se izvodi s izvršenjem programa izgrađenih od tog softvera na stvarnom ili virtualnom procesoru (analiza izvedena bez izvršavanja programa poznata je kao statička analiza koda). Alati za dinamičku analizu programa mogu zahtijevati učitavanje posebnih knjižnica ili čak rekompilaciju programskog koda.

Najčešća praksa dinamičke analize je izvršavanje jediničnih testova prema kodu kako bi se pronašle pogreške u kodu.

Prednosti dinamičke analize koda:

  • Identificira ranjivosti u runtime okruženju.
  • Omogućuje analizu aplikacija u kojima nemate pristup stvarnom kodu.
  • Identificira ranjivosti koje su mogle biti lažno negativne u analizi statičkog koda.
  • Omogućuje vam provjeru valjanosti nalaza statičke analize koda.
  • Može se provesti protiv bilo koje prijave.

Ograničenja dinamičke analize koda:

  • Automatizirani alati pružaju lažni osjećaj sigurnosti da se sve rješava.
  • Ne možemo jamčiti potpuno pokrivanje izvornog koda testom
  • Automatizirani alati proizvode lažne pozitivne i lažne negativne podatke.
  • Automatizirani alati jednako su dobri kao i pravila pomoću kojih skeniraju.
  • Teže je pratiti ranjivost na točno mjesto u kodu, rješavanje problema traje dulje.