Software Testing

Instructor: Seyed-Hassan Mirian, Mehran Rivadeh Certificate: Official (bilingual)
Term: Summer 2025 Prerequisite: Object-Oriented Programming
Schedule: Monday 15:00-18:00 Online Class: Online Class

General Objective

One of the most important skills for a software engineer is familiarity with software testing methods and the ability to use them appropriately. In this course, students will learn about software testing concepts and techniques, taking their first steps beyond being just a programmer.

Topics

  • Software Testing Concepts
    • Testing and failure concepts
    • Software tester workflow
    • Types of software tests (Acceptance Testing, System Testing, Integration Testing, etc.)
    • V-Model
    • Code coverage concept
    • Black-box and White-box testing
  • Unit Testing
    • Purpose of unit testing
    • Writing and executing unit tests in Python (unittest package)
  • Test Automation
    • Testable software and continuous testing
    • Purpose of test automation
    • Test case design
    • Unit test automation (Robot or Pytest tools)
  • Testing in Agile Environments
    • Cost of change diagram
    • Continuous integration
    • System testing in agile environments
    • TDD concept with practical examples
  • Coverage-Based Test Design
    • Test requirements and coverage criteria definition
    • How to use coverage criteria
    • Overview of coverage criteria (Input space partitioning, Graph coverage, Logic coverage, Syntax coverage)
  • Creating Test Roadmaps and Planning
  • Changing Systems and Regression Testing
  • Mock and Stub
    • Mock and Stub concepts and architecture
    • Implementing Mock tests
  • Static Code Analysis
    • Introduction to static code analysis
    • Familiarity with static analysis tools (SonarQube)

Assessment

  • Weekly practical exercises: 50% of grade
  • Final exam: 50% of grade

References

  1. P. Ammann and J. Offutt. Introduction to Software Testing. Cambridge University Press, 2017.