SWENG 431: Software Verification, Validation, and Testing

Textbook Information

  • Required Material: Paul C. Jorgensen, “Software Testing – A Craftsman’s Approach”, 4th Edition, Auerbach, 2013, ISBN 978-1-4665-6068-0.

Published Remarks

  • None

Hardware Requirements

  • None

Software Requirements

The following are the main tools we will be using in the course and a few of the features you should be aware of.

 

Proctored Exams

  • None

Course Description

Software quality needs to be assured in order to perform reliably. Quality assurance not only achieves a good state of the current software, but also the maintain reliable state after future continuous improvements. This course will introduce the assurance of software quality from the perspectives of software validation, verification, and test. Students will learn the topics of

  • the differences between validation, verification and test,
  • different types of techniques for quality assurance,
  • validation / verification methodologies and testing techniques,
  • software testing process and test cases generation,
  • pre-conditions and post-conditions,
  • software complexity measurement,
  • unit testing and integration testing,
  • functional testing and structural testing,
  • the application of the fundamental discrete math theories for test,
  • exploring testing tools (JUnit, Selenium),
  • developing testing tools (functional and structural),
  • object oriented testing

Prerequisite:  SWENG 411

Overview

The focus of SWENG 431 is on software validation, verification and testing. The goal of software V, V & T is to ensure software quality at different stages of the software development life cycle. In other words, it can be conducted in parallel with software development. You will learn different V, V & T techniques, explore tools to conduct V, V & T, and even develop tools to help perform V, V & T. Although code implementation is not a focus of this class, you are asked to develop tools in Java to assist in generating test cases. Other tools may also be utilized, such as Matlab or Octave, to evaluate the quality metric of software using matrices. The provided course modules will start with an introduction to unit testing, which includes functional testing and structural testing. The concepts of black-box testing and white-box testing are first realized. With the understanding of unit testing, we then move forward to the integration testing. Software testing borrows a lot of concepts from discrete math and graph theory. Therefore, a number of topics will review those mathematical theories and show the application to the testing fields. We will discuss briefly about system testing that can exploit the UML use case diagram to test the intended system features. The final focus will be on the object-oriented testing, because most of today’s programming languages are object-oriented based. Please obtain a copy of the textbook. There is a lot more information that cannot be covered in the module notes.  This course will be delivered in class and via this site on Canvas. You should review materials taught in class and posted on Canvas and pay attention to the course announcements as you enter the course. The announcements will help you stay on task, be used to provide feedback and communicate with you any changes that may occur as the course progresses.

Course Outline:

Module 1 – Intro to Software Validation, Verification and Test Module 2 – Pre-conditions and Post-conditions Module 3 – Discrete Math for Testers Module 4 – Intro to Functional Testing for Unit Test (Part I) Module 5 – Intro to Functional Testing for Unit Test (Part II) Module 6 – Intro to Functional Testing for Unit Test (Part III) Module 7 – Graph Theory for Testers (Part I) Module 8 – Graph Theory for Testers (Part II) Module 9 – Structural Testing (Part I) Module 10 – Structural Testing (Part II) Module 11 – Integration Testing (Part I) Module 12 – Integration & System Testing (Part II) Module 13 – Object Oriented Testing (Part I) Module 14 – Object Oriented Testing (Part II) Module 15 – Team Project Presentations

Objectives

By the end of this semester, you will …

  • learn the importance of software V, V & T to the software development life cycle, in addition to their distinctive practices, and meanings.
  • practice how to conduct exception handling and utilize input verifiers to ensure software quality to be less error prone.
  • understand the testing process is in parallel with the software process, and realize that a test plan can support high quality software development.
  • compare the inspection, walkthrough, and review processes to validate software to achieve early quality improvement and implementation cost reduction.
  • realize the differences between a white box approach and a black box approach in testing, and comprehend the application domains of these approaches.
  • justify the importance of a unit testing for a software component as well as the integration testing for a software system.
  • exercise how to develop testing tools and make use of event handling to perform GUI testing.
  • demonstrate how to conduct path testing and path sensitization utilizing predicates, and how to generate a minimal set of test cases for the nested loops.
  • explore how to generate test cases by combinational logic model to test software with independent variables, and by state machines and state charts for software with dependent variables.
  • learn how to conduct object-oriented testing for object-oriented software, taking advantage of the techniques of state models, and N+ test strategy.
  • experience the coverage testing techniques and how they can be utilized to support the quality assessment of engineers’ designed test cases.
  • apply the debugging technology and incorporate it to develop a coverage tool.

Outcomes

Upon completion of the course, students should possess:

  • the ability to conduct unit testing, integration testing, and OO testing
  • the ability to come up with pre-conditions and post-conditions
  • the ability to perform black-box testing and white-box testing
  • the ability to prepare test cases for functional testing and structural testing
  • the ability to apply discrete math and graph theory to software V, V & T
  • the ability to work with others as a team
  • the ability to utilize computer aided tools to evaluate software quality in a quantitative way using matrices
  • the ability to perform a tester’s duty and justify suitable testing techniques for use
  • the ability to explore testing tools and develop testing tools
  • the ability to test GUI-based software systems
  • the ability to research software tools and study the features that correspond to the class materials

 This course supports the following ABET outcome:

  • Outcome (1): an ability to identify, formulate, and solve complex engineering problems by applying principles of engineering, science, and mathematics
  • Outcome (6): an ability to develop and conduct appropriate experimentation, analyze and interpret data, and use engineering judgment to draw conclusions
  • Outcome (7): an ability to acquire and apply new knowledge as needed, using appropriate learning strategies

How to Succeed in the Course

This is a difficult and a heavy course and covers a lot of materials in one semester. I recommend the following steps that will maximize your chances for success in this online class:

  1. Devote sufficient time (about 15-20 hours per week or 3 to 4 hours each day on this class) and effort. Your workload may be more or less depending on your prior experience with computing but will vary perhaps more because of the topics that I will be covering in each Module.
  2. Follow or get ahead of the schedule. Schedule blocks of time every day to study the assigned material (the lecture modules, lecture notes, and the assigned sections in the textbook). If you are having trouble with the course material, read the textbook, study the appropriate sections for more details, and communicate for help (see 5 below). Take notes for your understanding and submit unclear concepts to the muddiest point form at the end of each Module.
  3. Do all the “module practice questions” for each Module, go back and re-read any materials necessary before taking the quiz.
  4. Work on project assignments as early as you can. You need to finish one system design and one programming project every week.
  5. Prepare for unexpected problems and emergencies. Understand that problems and glitches do occur in online learning, as they do in any learning environment. Have a backup plan (such as using the computers on campus or at a local library) for submitting assignments in case your computer crashes or your service is interrupted. SAVE your work.
  6. Participate in the discussion forums for the muddiest points to share questions. Communicate your answers and thoughts with the entire class through the discussion boards rather than using private emails. Read others’ questions, comments and replies.  Request and attend virtual office hours to interact with the instructor and your classmates.

Course Requirements and Grading

Grade Assignments

   A    92.5  A-    88.5 – 92.5  B+    84.5 – 88.5
 B    80.5 – 84.5  B-    76.5 – 80.5  C+    72.5 – 76.5
 C    68.5 – 72.5  D     64.5 – 68.5  F       < 64.5