CS 520: Theory and Practice of Software Engineering

Fall 2020

News | Description | Logistics | Grading | Schedule | Nondiscrimination | Academic integrity | Reading | Prerequisites | Acknowledgements



CS 520 introduces students to the principal activities and state-of-the-art techniques involved in developing high-quality software systems. Topics include: requirements engineering, formal specification methods, software design, software testing and debugging, program analysis, and automated software engineering.

This course will cover the following high-level topics:

Besides becoming familiar with Software Engineering principles and best practices, students will learn about cutting-edge research in Software Engineering, Security, and Human-Computer Interaction. The exercises and the group project provide additional hands-on experience in using state-of-the-art techniques.


Lecture:Tuesday and Thursday 10:00 – 11:15AM (Live via Zoom and recorded. See Moodle for Zoom link.)

Heather Conboy
office hours: Mondays 1:00 - 2:00PM (See Moodle for Zoom link), after Thursday lectures for 1 hour, or by appointment
email: hconboy@cs.umass.edu
Graders: Mitali Dave, Karishma Jain, and Megha Malladi

All assignment submissions are through Moodle.

Late policy: Assignment due dates and times are listed on the schedule. All deadlines are sharp and the submission site will be closed at the specified time. Requests for extensions will be considered in extenuating circumstances.


Students are responsible for submitting all assignments to receive a passing grade for the entire class.

 Assignment Grade
Homework 30%
In-class exercises 35%
Class project 25%
Participation 10%


(subject to change; check regularly)

week date day topic homework
Week 1
Aug 25 Tu Course introduction
Aug 27 Th Software architecture and design
Week 2
Sep 1 Tu Best and worst programming practices
Project topic selection
Due: Sat Sep 26, 2020, 9:00PM EDT
Sep 3 Th Object oriented design principles
Week 3
Sep 8 Tu Object oriented design patterns
Sep 10 Th User interfaces
Homework 1: Code review, architecture, & design
Due: Tue September 29, 2020, 9:00AM EDT
Week 4
Sep 15 Tu Version control
Sep 17 Th In-class exercise: Advanced uses of git. Due Sep 24.
Week 5
Sep 22 Tu Software requirements
Sep 24 Th Collaborative development
Week 6
Sep 29 Tu Software testing
Project mid-point presentation (see last section)
Due: Tue Oct 27, 2020, 9:00AM EDT
Oct 1 Th In-class exercise: Software testing. Due Oct 8.
Week 7
Oct 6 Tu Recorded guest lecture by Manish Motwani: High-Quality Automated Program Repair
Oct 8 Th Final project: Initial progress report (also Monday 10/12 office hour)
Homework 2: Implementation & testing
Due: Sun October 25, 2020, 9:00PM EDT
Week 8
Oct 13 Tu Debugging
Oct 15 Th In-class exercise: Debugging. Due Oct 20.
Week 9
Oct 20 Tu Homework 2 review
Oct 22 Th Model checking
Week 10
Oct 27 Tu Final project: Mid-point presentations
Final project completion
Due: Tue Nov 24, 2020, 11:55PM EST
Oct 29 Th Final project: Mid-point presentations
Week 11
Nov 3 Tu Model inference of processes
Homework 3: Delta debugging (optional)
Due: Sat Nov 14, 2020, 9:00PM EST (if you decide to submit it)
Nov 5 Th In-class exercise: Model inference of processes. Due Nov 10.
Week 12
Nov 10 Tu No class: There is a Systems Lunch talk this Friday at noon
Nov 12 Th Theorom proving
Week 13
Nov 17 Tu Reasoning about programs
Nov 19 Th Final project: Final presentations

Nondiscrimination policy:

Software engineering is at its nature a collaborative activity and it benefits greatly from diversity. This class includes and welcomes all students regardless of age, background, citizenship, disability, sex, education, ethnicity, family status, gender, gender identity, geographical origin, language, military experience, political views, race, religion, sexual orientation, socioeconomic status, and work experience. Our discussions and learning will benefit from these and other diverse points of view. Any kind of language or action displaying bias against or discriminating against members of any group, or making members of any group uncomfortable are against the mission of this course and will not be tolerated. The instructor welcomes discussion of this policy, and encourages anyone experiencing concerns to speak with him.

Academic integrity:

Students are allowed to work together on all aspects of this class. However, for the homework assignments, each student must submit his or her own write-up, clearly stating the collaborators. Your submission must be your own. When in doubt, contact the instructors about whether a potential action would be considered plagiarism. If you discuss material with anyone besides the class staff, acknowledge your collaborators in your write-up. If you obtain a key insight with help (e.g., through library work or a friend), acknowledge your source and write the summary on your own. It is the student's responsibility to remove any possibility of someone else's work from being misconstrued as the student's. Never misrepresent someone else's work as your own. It must be absolutely clear what material is your original work. Plagiarism and other anti-intellectual behavior will be dealt with severely. Note that facilitation of plagiarism (giving your work to someone else) is also considered to be plagiarism, and will carry the same repercussions.

The individual programming assignment policy generalizes from the above. Students are allowed to discuss the architecture and design with others. But each student must write their own code when implementing and testing. Whenever students use publically available resources (e.g., research papers, technical articles, Stack Overflow posts), they must clearly reference the materials in their code.

Students are encouraged to use the Internet, literature, and other publicly-available resources, except the assignment solutions and test (including quizzes, midterms, finals, and other exams) solutions, from any terms' versions of this course and other academic courses, whether at UMass and at other institutions. To reiterate, the students are not allowed to view and use assignment and test solutions, unless explicitly distributed by the COMPCSI 520 staff as study material.

Whenever students use Internet, literature, and other publicly-available resources, they must clearly reference the materials in their writing, attributing proper credit. This cannot be emphasized enough: attribute proper credit to your sources. Failure to do so will result in a zero grade for the assignment and possibly a failing grade for the class, at the instructor's discretion. Copying directly from resources is not permitted, unless the copying is clearly identified as a quote from a source. Most use of references should be written in the words of the student, placing the related work in proper context and describing the relevant comparison.

The students should familiarize themselves with the UMass Adademic Honesty Policy and Guidelines for Classroom Civility and Respect. These policies and guidelines apply to this class.

Students who violate University standards of academic integrity are subject to disciplinary sanctions, including failure in the course and suspension from the university. Since dishonesty in any form harms the individual, other students, and the university, policies on academic integrity have been and will be strictly enforced.


The following text books provide a more comprehensive discussion of the topics addressed in this class. Note that these text books are not a requirement for this class.


Students should have taken an intermediate course in software engineering and have built, in a team, a software system of roughly 10,000 lines of code or more. Students are expected to be familiar with an object oriented programming language, such as Java or C++. The ability to use linux and download and use off-the-shelf tools are expected.


Various materials used in this course have greatly benefited from materials developed by Yuriy Brun, Rene Just, Michael Ernst, David Notkin, Alex Orso, and Lee Osterweil. Thank you.