Spring 2025 — Syllabus

The true subject matter of the tester is not testing, but the design of test cases —Jeff Offutt
Brightspace Gradescope Piazza Help yourself learn

Class hours

Tuesday, Thursday 10:30am - 11:50am EST, Room Lecture Center 12 (This course will be held in person)

You are the main driver of your learning success. 
Your engagement and participation are the most important aspect of your learning experience. 
You are encouraged to do all the activities, try all concepts, experience everything 
introduced in this course, ... and do beyond the course's minimum requirements. 
The best way to learn software testing is to do it, and do it often. To help you practice  
and maximize hands-on experience, we will do lab-style activities almost every class meeting. 
Although attendance is not required, you will have the best learning experience in the course 
if you are able to attend the meeting.

Meet the team

Instructor: Upsorn Praphamontripong

Office hours:
Thursdays 1:00pm-2:00pm EST (Zoom link)
Fridays 12:00pm-2:00pm EST (Zoom link)

Teaching Assistant: Sharmista Kuri
Office hours: Wednesdays 12:00pm-2:00pm EST, (Zoom link)

Last date of office hours: 6-May-2025


Course overview

Software is everywhere. Software defines the behavior of services such as transportation systems, medical services, and embedded applications such as spaceships, household appliances, and mobile phones. Society's reliance on software applications places a high demand on their reliability; knowledge of software testing is becoming necessary for all software developers and software engineers. Although many factors affect the engineering of reliable software, including careful design and sound process management, testing is the primary way the industry evaluates software during development.

Testing is the most time-consuming and expensive part of software development. Not testing is even more costly. Inappropriate or inadequate testing can cause unexpected behavior, catastrophic software failure, monetary loss, and loss of life.

Have you ever wondered how we should test software? How do we know if we have tested enough? How many tests do we need? When should we stop testing? We write tests to test software, but how do we test our tests?

This course has two closely related themes:

  • First, more than half the effort in software development is devoted to activities related to testing, including test design, execution, and evaluation. In this course, you will learn quantitative, technical, and practical methods software engineers and developers can use to test their software.
  • Second, more than half of software development effort is not a new development, but maintenance activities such as adding new features, correcting problems, migrating to new platforms, and integrating third-party components into new projects.

These two themes are intertwined because much of the effort during maintenance is testing the changes, and much of the effort in testing is about evaluating changes. This course covers both themes quantitatively, with a solid basis in theory and with practical applications. Along the way, you will (i) learn when, where, and how to test software appropriately and effectively, (ii) have hands-on experience with test generation and test automation, and (iii) see how you can easily apply the concepts to any software testing situation.

Everyone can be successful in this course and I hope that developing an understanding of the field of software testing will help you build confidence, get excited about exploring and developing new testing approaches, and have a positive impact on your software-related profession.


Topics to cover

image showing topics covered in this course

Our focus

We focus on designing effective tests. We are not trying to train you in any specific test automation (or software development) frameworks. Programmers, software developers, and software engineers can always learn test automation frameworks by following and experimenting with the APIs.

In this course, we focus on how test engineers should design tests. You will explore a variety of test design concepts, apply the theories to design abstract tests, and automate the abstract tests using JUnit and Selenium. Along the way, you will be exposed to challenges in test automation and explore best practices in test automation.

By getting started with some of the most commonly used test automation frameworks (JUnit and Selenium), I hope to provide you with the fundamentals that can help you explore additional test automation frameworks beyond what we cover in this course.


Learning objectives

  • Be able to explain the quantitative, technical, and practical methods that software engineers and developers can use to test their software
  • Apply testing techniques and criteria to all phases of software development — unit (developer) testing, integration testing, system testing, etc.
  • Be able to analyze and assess the quality of software, and apply theoretical and practical knowledge of test criteria to improve the quality of software
  • Recognize good quantitative programming and design practices to ensure the software can be efficiently and effectively modified and tested
  • Realize that maintainability and testability are more important than efficiency for almost all modern software projects
  • Develop research and inquiry-based skills that can be used to learn, connect, and develop software testing phenomena
  • Communicate ideas with others within a group learning environment
image showing course goals

Prerequisite

You must have passed CSI 311. Knowledge of discrete math, programming, data structures and general knowledge of software engineering.

Additional expectation

We will generate tests from mathematical models of the software. You will need knowledge of discrete math (sets, graphs, logic, and grammar), programming, data representation, and general knowledge of software engineering. You will need an understanding of the syntax and semantics of multiple programming languages. Most examples will be in Java and some assignments will require automated tests. Programming skills are required and you are expected to know Java or learn on your own. You are expected to have the ability to pace yourself on homework assignments and be able to attend class regularly.


Textbook

Ammann and Offutt, Introduction to Software Testing (2nd edition), textbook cover
[Recommended]  Introduction to Software Testing (2nd edition), Paul Ammann and Jeff Offutt, Cambridge University Press, 2016. Book website (solution manual)

Where appropriate, additional references that can be relevant for further reading will be provided.

You should read the relevant material before the class meeting. Doing so will allow you to ask specific questions in class that will further your understanding of the material and also better prepare you for class activities. The schedule for the readings is given on the Schedule page. The class meetings may not cover everything in the readings and will often include material not found in the readings (based on class discussion).


Learning activities

What will you do to succeed in learning?   To facilitate your learning process, the course structure consists of five main activities: hands-on activities, practice-of-the-days (POTDs), homework assignments, quizzes, and the final exam.

1. Hands-on activities

These hands-on activities scattered throughout the course serve as the main driver of your learning success. These activities help you to (i) understand the underlying concepts and apply them to test software, (ii) get started with specific concepts, technologies, tools, and frameworks, (iii) get ready to work on homework assignments, (iv) prepare for quizzes and final exam, and (v) practice skills test engineers need (such as technical skills, software evaluation, collaboration, and communication).

You are encouraged to work in small groups, allowing peer learning and imitating industrial software development and quality assurance scenarios.

Each activity is designed to get you to think about some specific aspect of the material we are learning that day. It helps you to develop competency in basic and advanced concepts. Throughout the course, you will have multiple opportunities to explore test generation tools and test automation frameworks and share your opinion through discussion and writing.

We will do hands-on activities in almost every class meeting. They will not be graded.

You are the main driver of your learning success. Your engagement and participation are the most important aspect of your learning experience. Although no submission is required, you are encouraged to do all the activities. If you miss class, you should do the posted activity on your own to learn the material.

Hands-on activities will form the basis for POTDs, homework assignments, quizzes, and the final exam.

2. Practice-of-the-days (POTDs)

Five main purposes of this activity are to help you to (i) refine your thoughts and reinforce the concepts, (ii) assess your understanding, (iii) get ready to work on homework assignments, (iv) prepare for quizzes and final exam, and (v) practice skills test engineers need (such as technical skills, software evaluation, collaboration, and communication).

POTDs help you develop competency in basic and advanced concepts. This activity helps you to reinforce and assess your understanding of the concepts in recent classes. It also allows me to work with you on any particular topics or skills that can be improved.

We will do POTDs on most Thursdays and some Tuesdays. Most will be done in small groups; some will be individual exercises. You will submit your POTDs electronically. They will be graded on a completion basis. Full credit can only be received if it is complete and submitted by 10:30am EST the next day. Any submission received after this time will be considered late. If you miss class, you should do the posted POTD on your own to learn the material.

POTDs will form the basis for homework assignments, quizzes, and the final exam.

3. Homework assignments

Homework assignments are the main mechanism to help you learn the fundamentals, apply the concepts, and experience the software testing process. Some homework assignments will be written and some will require programming. Most will allow collaboration with one partner to help you practice teamwork skills.

Assignments will be posted on the class website and discussed in class. You will submit your homework assignments electronically. More details on submission guidelines will be available on the assignment pages.

Because each homework helps you develop competency in basic and advanced concepts, it is important that you manage your time wisely. All homework assignments must be submitted before class on the day they are due − this will also help you focus on the class discussion instead of being worried about the homework. Any submission received after this time will be considered late.

Remember to have a backup (disk or storage somewhere) for every assignment you turn in. In this way, if there is any problem with the copy submitted, the backup can be used for grading purposes.

The University's standards of academic integrity and code of conduct is in effect. Please refer to the collaboration and Professionalism sections of the course policies.

Homework assignments will form the basis for quizzes and the final exam.

4. Quizzes

We will have five quizzes, approximately every two weeks, and no midterm exam. The goals of the quizzes are to reinforce the concepts in recent classes and assess your understanding of recent topics / skills. The quizzes also allow me to work with you on any topics or skills that can be improved.

Quizzes will generally cover material from previous classes. Quiz guidelines will be posted on the Schedule page.

You will take quizzes during the first 15 minutes of class on Tuesdays or Thursdays.

No make-up quiz. No late quiz. No dropped quiz.

To help you familiarize yourself and prepare for a paper-based final exam, quizzes are closed book / notes, paper-based, and administered in class. No collaboration.

To encourage you to relearn what you have not yet mastered, you may submit a reflection and correction. I hope that you will review the materials and / or seek help if needed to ensure that you understand, and can appropriately apply the testing concepts and analyze the quality of your tests. You will have an opportunity to reflect on and correct each quiz to receive up to 50% of the points that you lose on the quiz. The quiz reflection and correction must be submitted within three days of the graded quiz being returned to you. The due date will be announced.

Quizzes will form the basis for the final exam.

5. Final Exam

The final exam is comprehensive, closed book / notes / web, paper-based, and administered in class. No collaboration. The only exception is a single sheet of 8 1/2 x 11 paper (single / double-sided, your choice) with hand-written notes by the person taking the exam.

Only handwriting on a single sheet of paper is allowed. No writing on electronic device(s) and print.

Picture IDs are required to take the exam.

To request a make-up exam, please refer to the make-up exam policy.

 1. Set aside time and space for your studies. 
    Once you have selected that time and space, try to stick with your plan. 
    Pick a comfortable spot, as much as possible, don't use that time or place for anything else.
    
 2. Make friends. Build our Software Testing community. 
    When possible, form a study/work group for the class.
       
 3. Attend class meeting. 
    Attending class meeting will help to establish your routine, put you in the learning mindset, 
    and remind you that you are learning in a community.
    
 4. Everyone brings diverse experiences, backgrounds, and opinions.  
    Let's learn, grow, and achieve our goals together.

Help yourself learn — Learn with purpose and vision !!

Intending to tailor our class to better support and emphasize your differences, energy, and passions, as well as to enhance your strengths, you are encouraged to be involved in designing and shaping this course to maximize your learning experience, skills, and knowledge. Please feel free to share your ideas / opinions / suggestions on things that we should do or try to help you learn software testing, using the Help yourself learn form.


Assessment

How will your learning be evaluated?   The grade you will earn for this course will be based on how well you demonstrate your learning and understanding.

Assessment and evaluation

Your overall score will be mapped to a letter grade as follows:

For undergraduate students

You get If you score
A   >= 93
A-  >= 90
B+ >= 87
B   >= 83
B-  >= 80
C+ >= 77
C   >= 73
C-  >= 70
D+ >= 67
D   >= 63
D-  >= 60
E    < 60

By default, grades will not be rounded or curved in this course, and there is no grade bump.

Grading concerns and appeals — All regrade requests must be made within one week of the graded work being returned to the student. See Policies for more details.

Cheating / Plagiarism / Professionalism Penalty — up to 100% penalty
Excessive missed classes, rude behavior toward course staff (instructor and TAs) or classmates, unauthorized homework assistance, contacting TAs when they are not on the clock, etc., can be held against a student when final grades are calculated.


Class platforms

Brightspace

In addition to the course website, Brightspace will be the central hub for additional course resources, scoring, announcements, and other pertinent information.

Submission site

We will use Gradescope for student submissions (POTDs, Homework Assignments, Project). If you have not used Gradescope before, you may find an introduction on how to use Gradescope video helpful. If you have any questions or encounter any issues, please post your questions or concerns in the course Piazza.

Discussion board

To foster a sense of community in the course, we will use Piazza for a discussion board. In addition to in-person assistance, this is the place where you can seek help, offer help, share your thoughts and discoveries, or discuss technical difficulties and potential troubleshooting. Information for accessing our class Piazza site will be provided on the first day of class. Ask all technical questions about the material, the assignments, or the project on Piazza.

The sooner you begin asking questions on Piazza, the sooner you will benefit from the collective knowledge of your classmates, TA, and instructor.

Use Piazza — for questions related to course material and technical issues.
Use email — for personal issues and emergencies.

Do not post grade, sensitive / confidential / personal information on Piazza.

Do not post code — any code at all — on a "public" thread in Piazza. Posting program source code publicly will usually be considered an honor code violation. If you need to include a "fragment" of your code in your post, please make your post "private" and tag instructor and TA.

Updates to the course will generally be noted on the Piazza page.

You may post any reasonable class-related topics.
  • Real-life software failures: Start a discussion about a real-life software failure. Tell us what happened and how it affected users.
  • Real-life troubleshooting: Start a discussion about your experience, tutorial, suggestion, and troubleshooting that is related to our class
  • Application: Describe how one of the ideas from our testing class could have found a real-life software failure before the software was released.
  • Start a thread about an error in the handouts or slides
  • Start a thread about a topic that goes beyond what we discuss in class.
  • Post questions to an appropriate thread and they will be answered by the instructor, TAs, or classmates.
  • Answer a classmate's question.

Academic integrity

Our course relies upon and cherishes its community of trust. We firmly endorse, uphold, and embrace the University's standards of academic integrity and code of conduct that students will not lie, cheat, or steal, nor shall they tolerate those who do. We recognize that even one honor infraction can destroy an exemplary reputation that has taken years to build. Acting in a manner consistent with the standards of academic integrity and code of conduct will benefit every member of the community both while enrolled in the University and in the future.

Students are expected to be familiar with the University's standards of academic integrity and code of conduct.

Each assignment will describe allowed collaborations, and deviations from these will be considered academic dishonesty. If you are in doubt regarding the requirements, please consult with me before you complete any requirement of this course. Unless otherwise noted, exams, quizzes, and individual assignments will be considered pledged that you have neither given nor received help. Among other things, this means that you are not allowed to describe problems on an exam (or a quiz) to a student who is currently taking or has not taken it yet. You are not allowed to show or share exam (or quiz) papers (or copies) to another student or view another student’s exam (or quiz) papers while working on an exam (or a quiz). Sending, receiving, or copying electronic files that are part of course assignments are not allowed collaborations (except for those explicitly allowed in assignment instructions).

If course staff detect violations such as cheating, plagiarism, improperly sharing, copying another solution to an assignment (including portions thereof), or other dishonest behavior and academic integrity violation, they may impose any penalty up to and including a failing grade (E) in the course. This is independent of and in addition to the operations of the University authorities (Dean of Undergraduate Education or Graduate Studies).

  • 1st Offense: You will receive zero (0) points on that assessment and your final course grade will be reduced by one full letter grade (e.g., B- goes down to C-)
  • 2nd Offense: Automatic E in the course

Students who have had prohibited collaborations may not be allowed to work with partners on remaining homework assignments and projects.


DAISS and special circumstances

It is my goal to create a learning experience that is as accessible as possible. If you anticipate any issues related to the format, materials, or requirements of this course, please meet with me outside of class so we can explore potential options.

Students with disabilities may also wish to work with the Disability Access and Inclusion Student Students (DAISS) — Campus Center 130, 518-442-5501, [email protected] — to discuss a range of options for removing barriers in this course, including official accommodations. The DAISS office will provide the course instructor with verification and recommend appropriate accommodations.

For general questions, please visit the Disability Resource Center website. If you have already been approved for accommodations through DAISS, please be sure to have your accommodation letter sent to me and meet with me so we can develop an implementation plan together.


Religious accommodations

Students who wish to request academic accommodation for a religious observance should submit their request to me by email as far in advance as possible so we can try to make appropriate accommodations. For more information, please visit https://www.albany.edu/registrar/academic-calendar/religious-observances.

Accommodations do not relieve you of the responsibility for the completion of any part of the coursework missed as the result of a religious observance.


Safe, inclusive, and equitable environment

My goal is to provide a safe and equitable learning environment for all students. Students and course staff are all expected to treat each other with respect. Please review the University's diversity statement for the commitment to diversity and inclusion.

If you witness or are aware of someone who has experienced prohibited conduct, you are encouraged to submit a report to https://www.albany.edu/equity-compliance/file-complaintt or contact [email protected], the office of Equity & Compliance.

If you would prefer to disclose such conduct to a confidential resource, you can turn to the Counseling and Psychological Services (CAPS).

As your course instructor and as a person, know that I care about you and your well-being and stand ready to provide support and resources as we can. As a faculty member, I am required by the University policy and federal law to report certain kinds of conduct that you report to me to the University's Title IX Coordinator (https://www.albany.edu/equity-compliance). The Title IX Coordinator's job is to ensure that the reporting student receives the resources and support that they need, while also determining whether further action is necessary to ensure survivor safety and the safety of the University community.


Student support team

If you are feeling overwhelmed, stressed, or isolated, there are many individuals who are ready and wanting to help. Please contact the Counseling and Psychological Services (CAPS).

If you or someone you know is struggling with gender, sexual, or domestic violence, there are many community and University resources available (https://www.albany.edu/health-well-being/sexual-violence-support-advocacy). Contact the Sexual Assault Hotline at 518-447-7716. The https://www.albany.edu/health-well-being/emergencies provides a list of emergency contacts, including Life-threatening Emergencies, Urgent Mental Health Concerns, Urgent Medical Concerns, and Sexual Violence Support & Advocacy.

There are many resources available to you when you experience academic or personal stress. In addition to your instructors, the tutoring services center (https://www.albany.edu/tutoring/access-tutoring-resources) offers several options to fit your needs. It has staff members (https://www.albany.edu/myualbany/academic-support-tutoring) who you can contact to help manage academic or personal challenges. Please do not wait until the end of the semester to ask for help.