Fundamentals of Software Testing

Software Testing Course Outline

1. Introduction and overview

Establishes a foundation for the course, provides a workable definition of software quality and shows how testing fits in to the overall quality process.

2. What to test and how to test it—The Universal Testing Method

Testers follow the same basic process that scientists use; we follow the principles of experimentation and measurement. In this course, we map your testing method back to those principles and show how, at each step in your testing, you’re making complex decisions about what to test and how to test it. Utilizing a combination of skills, tactics, practices and tools - this section helps build a base that testers in any context (of any skill level) can apply to solve testing problems.

  • Modeling the testing space. How to compose, describe and work with mental models of the software to identify relevant dimensions, variables and dynamics for test definition
  • Determining test coverage. Identify common measures of test coverage; determine how to set the scope of testing; establish a structure to track coverage
  • Determining test oracles. Identify mechanisms to determine whether the application has passed or failed a test; review common formal and heuristic oracles
  • Determining test procedures. Define what test procedures and test cases are; identify common test procedure types; learn how to document test procedures in a practical, efficient manner
  • Configuring the test system. See how to ensure you have everything needed to support testing; discuss common challenges to test configuration; consider test lab requirements and realities
  • Operating the test system. Learn how to manage tester contact with the application under test (AUT); discuss different methods of interaction with the system to address different testing objectives; identify common artifacts and practices related to test operation; use the “Six Thinking Hats” concept applied to testing
  • Observing the test system. Learn what empirical data to capture about the application under test and how to preserve testing interactions for review and reproducibility; consider common tools used to assist with test observation; identify common problems and human tendencies related to observation
  • Evaluating testing results. Discuss possibilities and probabilities related to test results (not every test failure is a bug!); identify typical test result evaluation tasks; consider performance test results interpretation; learn key factors related to defect communications
  • Reporting test results. Learn how to make credible, professional reports of testing results and testing progress that address the varied needs of your target audiences; identify guiding principles for report design; review best practices and examples for defect reporting, progress status reporting, and quality statistics reporting

3. Common Phases of Testing

Different testing activities take place as the software development life cycle progresses and as earlier testing phases complete. This section explains six common phases of software testing. For each phase, the following characteristics are described:

  • Who typically performs the tests
  • The scope of the tests
  • Common tools used to perform the tests
  • Useful techniques and practices
  • What the phase addresses well
  • What the phase often misses

Additionally, the different phases are considered in light of the development methodology used, and an introduction to Agile is given in this section to illustrate how the different test phases correspond with such an iterative, interactive approach.

Test phases and contexts discussed:

  • Unit Testing
  • Integration Testing
  • System Testing
  • Regression Testing
  • Acceptance Testing
  • Alpha/Beta Testing
  • The V-Model for software testing
  • Testing Phases in an Agile project

4. Approaches to Testing

Different approaches to testing are used to address different testing objectives and different project conditions. Some approaches are more formal, lengthy, traceable, and reproducible. Others are more free-form, quicker, less traceable, and less reproducible. The range of such approaches forms a continuum from which testers select the optimal combination for a given project. The best selection of approaches addresses the needs for both positive and negative testing.

  • The Testing Approach Continuum
  • Scripted testing
  • Exploratory testing
  • Scenarios, Checklists, Charters
  • Structuring tester interaction

5. Non-Functional Testing

Without question, functional testing is a must-have for software quality. However, there’s more to the picture than that. This section describes nine types of non-functional testing and identifies who typically performs them, what their scope is, what tools are commonly used, and what best practices apply. Additionally, challenges related to each are discussed so the tester is well prepared to design practical, workable, effective non-functional tests.

  • Usability
  • Accessibility
  • Performance, Scalability, and Capacity
  • Security Testing
  • Internationalization and Localization
  • Compatibility and portability
  • Maintainability and Supportability
  • Testability
  • Disaster Recovery/Business Continuity

6. Platform Specialization

Software is not just for the desktop—it runs on numerous platforms, and it all needs to be tested. This section takes multiple platforms into consideration and identifies each platform’s unique characteristics, important aspects to understand when preparing related tests, and how to best spend your time with the best types of tests for each given platform.

  • Mobile
  • Web
  • Cloud
  • Package implementations (COTS)
  • SOA
  • Data warehouse and business intelligence
  • Telephony and voice

7. Test Automation—Bonus Section

There have been many organizations that have set out to implement automation testing in their projects, and many of them have failed. This section identifies the different types of tools and practices that fall into the “automation” category, and helps set realistic expectations and goals for automated testing. Learn how to optimize your automation testing investment and plan properly for long-term success. This is a bonus section that is discussed as time permits.

  • Definition and overview of automation types
  • Web automation demonstration
  • Challenges of automation
  • Optimizing automation efforts
  • Tool selection process

8. Behavior Driven Development (BDD) & Test Driven Development (TDD)—Bonus Section

BDD and TDD are related approaches to software development that demonstrate a significant positive impact on software quality. This section provides an introduction to the concepts so testers can be prepared to adopt them together with developers and other project members using iterative development methods. This is a bonus section that is discussed as time permits.

  • BDD & TDD defined
  • Feature files and the Gherkin language
  • Gherkin tools for different languages