Description
Software testing accounts for a large portion of software development costs. With the ever-increasing use and complexity of software, testing skills have become extremely important for the software industry. In current development methodologies, testing can sometimes drive the development, rather than just being a step performed after implementing a program. This course on Software Testing addresses the need for teaching concepts and tools to undergrads and grad students. This course is required for the Software Engineering concentration in the undergraduate Computer Science program.
Topics include systematic approaches to software testing, theoretical foundations, and the current state of practice. Students will get hands-on experience with techniques and tools that improve software testing and overall development skills.
Upon successful completion of the course, students will be able to
- Write test packages to develop an understanding of the levels of testing (unit, integration, system, and acceptance). Understand test driven development.
- Work on test case generation, test scripting, test automation, and test reporting, and define the process most testing must follow.
- Learn to use advanced features of automated testing frameworks and tools such as JUnit, Mockito, TravisCI, Selenium, FiTNesse, JMeter, EclEmma, and mutation tools.
- Use systematic test generation strategies.
- Measure white-box coverage during test execution.
- Use Logic coverage.
- Assess test adequacy using mutation analysis.
- Perform regression testing.
- Demonstrate and write code for performance testing.
For simplicity, we will use Canvas for (1) disseminating slides, reading materials, and lecture videos, (2) submitting quizzes, assignments, surveys, and exams, (3) maintaining a detailed calendar of activities and deadlines, and (4) posting grades. Microsoft Teams will be used for answering questions and holding office hours for students who can’t meet in person. The schedule on the course website will only show the topics being covered every week.
Topics
The topics covered in this course are listed below (subject to change, not in exact order, as time permits):
- Goals of software testing
- Software testing activities
- Test driven development
- Unit testing
- Test oracles
- Test automation (JUnit, Parameterized tests, Theory)
- Test doubles
- Test automation (Mockito)
- Levels of testing
- Test automation (TravisCI)
- GUI and web testing
- Input Space Partitioning
- Code Coverage Criteria using Graph Formalism
- Control flow
- Data flow
- Test automation (EclEmma)
- Mutation analysis
- Test automation (PIT, Major)
- Performance testing
- Acceptence testing
- Regression testing
Audience and Prerequisites
This course is geared towards undergraduate and graduate students in Computer Science. The prerequisite is CS314 with a C or better. Students are expected to know the basics of software engineering as taught in an undergraduate course using a text such as Pressman, Software Engineering: A Practitioners Approach, or Somerville, Software Engineering. Students should have experience in designing and debugging object-oriented software. Students are expected to have the basic background of the undergraduate core of computer science, which includes discrete math (sets, graphs, first-order predicate calculus) and data structures.
Communication with Course Staff
All queries to the instructor and TA should be sent by email to cs415@cs.colostate.edu, which will ensure that both of them get it. You can also post your questions on the appropriate Teams channel not general). Queries posted on any other discussion group will not be monitored.
Materials
- Required Texts:
- Paul Ammann and Jeff Offutt, Introduction to Software Testing, Cambridge University Press, Cambridge, UK. Either Edition 1 (ISBN 0-52188-038-6, 2008) or Edition 2 (ISBN: 9781107172012, 2016).
- Other material:
- Video recordings of lectures will be available via Echo360 on Canvas.
- Powerpoint slides will be available on Canvas under Modules→Slides.
Grading
Late submissions are not allowed for assignments, projects, and exams unless accompanied by documentation of emergency situations. The instructor makes the final determination of whether an extension is warranted. However, in all these cases, all SDC accommodations will be given per instructions.
Here are the formally graded elements of the course and associated weighting:
| Activity | Weight |
|---|---|
| Individual Assignments | 15% |
| Team Projects | 50% |
| Class Participation | 5% |
| Exam | 30% |
The assignment of letter grades will be made as follows:
| Letter grade | Points |
|---|---|
| A-, A | ≥ 90 |
| B-, B, B+ | [80–90) |
| C, C+ | [70–80) |
| D | [60–70) |
| F | [0–60) |
In general, we will not assign lower grades than shown. We reserve the right to change the grading cut lines.
Class participation
In-person students need to attend the lectures, work on in-class assignments, ask and answer questions, and participate in class discussions. Project team meetings will also be held in class. In case you miss a live lecture, you can view a recording.
Class participation will be graded for in-person students (section 001) based on iclicker activity and participation in 5 Canvas quizzes (marked Q1b, Q2b, etc).
For distance students, class participation will be based on participation in 10 Canvas quizzes, 5 marked Q1a, Q2a, etc, and 5 marked Q1b, Q2b, etc.
Individual Assignments
There will be six assignments throughout the semester. They involve typing up the answers to 2-3 questions per assignment. These will help with understanding the material and practicing the questions in a form that will be similar to what will be asked in the exams.
In addition to these assignments, we are planning to have a seventh assignment that will consist of smaller quizzes to quickly test your knowledge. These quizzes will be made available on Canvas and on a Mileage Learn + platform. Quizzes will be in the form of multiple choice, true/false and free response questions. Milage Learn + is a new application aiming to help students learn through gamification and testing.
Policy: Late submissions are not allowed.
Team Project
There will be a team project that involves multiple tasks based on tools and techniques that will be taught during the semester. Some may require presentations to the instructor/TA and/or the whole class. Teams will have 4-5 members. There will be three sprints during the semester.
Policy: Late submissions are not allowed.
Exams
There will be two midterms and one final exam. The final exam is not cumulative. All exams will be on Canvas using the respondus lockdown browser.
| Exam | Available From | Available Until |
|---|---|---|
| Midterm 1 | Feb 20, 12:01 AM | Feb 22, 11:59 PM |
| Midterm 2 | Apr 3, 12:01 AM | Apr 5, 11:59 PM |
| Final | May 9, 12:01 AM | May 11, 11:59 PM |
Policy: The exams may not be taken or submitted after the due date. If you miss an exam, you receive a score of zero.
CSU COVID Guidance
For the latest information about the University’s COVID resources and information, please visit the CSU COVID-19 site: https://covid.colostate.edu/.
Course Policies
For a detailed description of the course policies click on the policies tab at the top.