Att undersöka programvara är en mångfacetterad process beroende på dina mål. Försöker du förstå hur det fungerar, hitta buggar, utvärdera dess säkerhet eller utvärdera dess användbarhet? Tillvägagångssättet förändras i enlighet därmed. Här är en uppdelning av vanliga metoder:
1. Statisk analys: Detta handlar om att undersöka koden * utan att * utföra den. Metoder inkluderar:
* Kodgranskning: Att manuellt inspektera koden för fel, stilkonsekvenser, säkerhetssårbarheter och anslutning till kodningsstandarder. Detta görs ofta i samarbete.
* Statiska kodanalysverktyg: Automatiserade verktyg som analyserar kod för potentiella buggar, sårbarheter och kodkvalitetsproblem. Exempel inkluderar Sonarque, Findbugs och Ludd. Dessa verktyg kan identifiera saker som nollpekare undantag, minnesläckor och osäkra kodningspraxis.
* Designrecension: Undersökning av programvarans arkitektur, designdokument och specifikationer för att identifiera potentiella problem tidigt i utvecklingslivscykeln.
2. Dynamisk analys: Detta handlar om att köra programvaran och observera dess beteende. Metoder inkluderar:
* testning: Detta är avgörande och omfattar olika tekniker:
* Enhetstestning: Testa enskilda komponenter eller moduler i programvaran.
* Integrationstestning: Testa interaktionen mellan olika komponenter.
* Systemtestning: Testa hela systemet som helhet.
* Acceptanstest: Testa programvaran för att säkerställa att den uppfyller användarens krav.
* regressionstest: Återprovning efter ändringar för att säkerställa att ny kod inte har brutit befintlig funktionalitet.
* Prestandatestning: Utvärdera programvarans hastighet, skalbarhet och stabilitet under olika belastningar. Detta inkluderar belastningstest, stresstestning och uthållighetstest.
* Säkerhetstest: Identifiera sårbarheter som kan utnyttjas av angripare. Detta innebär penetrationstest, sårbarhetsskanning och säkerhetsrevisioner.
* Användbarhetstest: Att observera användare som interagerar med programvaran för att identifiera områden för förbättring i användargränssnittet och användarupplevelsen.
* felsökning: Använd felsökningsverktyg för att gå igenom koden, inspektera variabler och identifiera grundorsaken till fel.
* Övervakning: Att observera programvarans beteende i en produktionsmiljö för att identifiera flaskhalsar, fel och andra problem. Detta involverar ofta avverkning och mätvärden.
* Profilering: Analysera programvarans prestanda för att identifiera områden för optimering.
3. Omvänd teknik: Detta innebär att analysera sammanställd kod eller ett löpande system för att förstå dess funktionalitet, ofta utan åtkomst till källkoden. Detta används för olika ändamål, inklusive säkerhetsanalys, kompatibilitetstest och skapa lösningar.
Verktyg och tekniker som används:
* felsökare (t.ex. GDB, LLDB): För att gå igenom kod och inspektera variabler.
* profiler (t.ex. ValGrind, Yourkit): För att identifiera prestanda flaskhalsar.
* Versionskontrollsystem (t.ex. Git): För att spåra ändringar och samarbeta om kodgranskning.
* Issue Trackers (t.ex. Jira, Github -problem): För att hantera felrapporter och funktionsförfrågningar.
* Automatiserade testramar (t.ex. Junit, Pytest): För att skriva och köra automatiserade tester.
* statiska analysverktyg (som nämnts ovan): För att automatiskt upptäcka kodlukt och potentiella buggar.
De specifika metoderna och verktygen som används beror starkt på sammanhanget:typen av programvara, utvecklingsstadiet, tillgängliga resurser och undersökningens mål. En omfattande undersökning involverar ofta en kombination av statiska och dynamiska analystekniker.