Software Testing An Overview
Software Testing Defined Software testing is the process of verifying & validating that a program or application: Meets technical specifications Meets business requirements Works as expected
Verification vs. Validation Verification: Have we built the program correctly? Does the software match the specification? Validation: Have we built the right program? Does it actually do what the customer wants it to do?
General approach to testing Black box: no knowledge of internal implementation White box: tester has access to the internal data structures & algorithms Gray box: a combination of the above
Levels of testing Unit (or Component) Integration System
Unit level Tests created to exercise the algorithm being developed Performed by the developer Finds defects as early as possible
Integration level Testing that verifies the interfaces between components against software design Exposes defects in interfaces and interactions between components Progressively larger groups of components are tested until the software works as a system
System level System-level testing focuses on a completely integrated system to verify that it meets requirements
Types of tests Alpha & Beta Regression Usability Security Performance Internationalization (I18n) & localization Acceptance
Alpha & Beta type This testing focuses on how the customer uses the program Alpha and beta releases are tested by the target customers Purpose is to gather feedback
Regression type Focuses on finding defects after a major code change has occurred Seeks to uncover software regressions (old bugs that have reappeared)
Usability type Designed to determine if the user interface is easy to use and understand
Security type Essential for software that processes confidential data to prevent system intrusion by hackers
Performance type Load, stress, and endurance tests Determine how the system performs under a particular workload Can validate and verify other quality attributes of the system: Scalability Reliability Resource usage
Internationalization & Localization type Determines that the application still works even after it has been: Translated into a new language Adapted for a new culture, different currency or time zone
Acceptance type Purpose is to verify issues encountered in Alpha/Beta testing have been resolved Normally performed by the customer in their environment Often known as user acceptance testing (UAT)
Testing process Tied to the development process in use: Waterfall Modified waterfall Agile or Extreme
Waterfall test process Testing performed by an independent group AFTER all functionality is developed DEV tosses finished product over the wall to QA at set milestone dates Testing is considered the last stage Definitely old school
Modified waterfall process Testers are a bit more integrated with development team Test activities begin earlier in the project Testing is more of a continuous process
Agile/Extreme process Testers more fully integrated with DEV team Unit tests are created by DEV before coding; focus is on passing unit test DEV produces regular interim builds for integration & system-level tests Testing is a continuous process
General testing cycle Requirements analysis (determine what can be tested) Test planning (strategy, test plan, test bed) Test development (procedures, scenarios, cases, scripts) Test execution (following the above) Test reporting (results and metrics)
Testing cycle (cont.) Test result analysis (defect analysis) Defect retesting (after DEV has fixed) Regression testing Test closure (capturing results, logs, lessons learned for archive) Repeat
Review Test approach (black, white, gray box) Levels of testing (unit, integration, system) Types of testing (alpha & beta, regression, usability, security, performance, I18N, acceptance) Testing process (waterfall, modified waterfall, agile/extreme) Test cycle
DEV versus QA Avoid ending up in an adversarial relationship Recognize and respect each other s role and abilities Focus on working as a team to create a better product Realize that EVERYONE makes mistakes Keep egos in check