CIS 5730

Software Engineering

Summer 2023

Bryn Mawr lamp

About This Course

On the first day at your new job as a software engineer, your manager says to you "Here's 10,000 lines of code. Find the bugs. Fix them. Then make the software better." Where would you even begin?

This course seeks to answer questions like: How would you test a program you didn't write? How would you know when you were done testing it? How would you locate and fix the bugs? And make sure that your fixes didn't break other stuff? How would you modify existing code to make it better? What does "better" even mean?

After completing this course, students will be able to:

  • Evaluate and improve the quality of an existing piece of software
  • Apply best-practice principles and patterns to design and implement software that is easy to understand and modify
  • Employ modern testing and verification techniques to assess the correctness of a piece of software
  • Develop reliable, secure software

This course is intended for students in Computer Science graduate programs; these students will have first priority during Advance Registration.

Undergraduates and students in other graduate programs should follow the waitlist procedure described on the CIS Advising website; please do not contact the Instructor with requests to be added to the waitlist.

Students who wish to take this course are expected to have completed an undergraduate-level course in software engineering and/or software design (e.g. CIS 3500, CIT 5940, or equivalent), and be proficient in Java.

Lectures, readings, and assignments in this course are expected to cover the following topics:

  • Software Design
    • Designing for flexibility and extensibility
    • Designing for security
    • Design patterns and anti-patterns
    • Refactoring and code smells
  • Software Testing and Verification
    • Test case generation and coverage metrics
    • Symbolic execution and model checking
    • Fault-based testing and mutation analysis
    • Debugging and fault localization
  • Software Quality
    • Reliability and fault-tolerant computing
    • Java programming best practices

This course will also include a group project in which students will modify an existing distributed system involving mobile (Android) and web (Node Express) components.

Course Logistics

In Summer 2023, this class will begin on Monday, May 22. Class meetings will be held on Mondays, Tuesdays, and Thursdays from 7-9:30pm ET via Zoom. Although attendance at class meetings is strongly encouraged, lectures will be recorded and made available to registered students via Canvas.

There is no required textbook for this course. Students should have ready access to a computer capable of running a modern Java development environment, e.g. Eclipse, IntelliJ, VS Code, etc.

Course grades will likely be determined based on the following assessments (grade weights are tentative at this time):

  • Individual Assignments (40%): There will be five assignments (three programming, two written) over the course of the semester based on the major topics of the course. These assignments are to be completed individually.
  • Group Project (30%): Students will work in a group of 3-4 students to improve and add functionality to an existing software system.
  • Final Exam (25%): A cumulative, take-home exam will be administered on the last day of the course.
  • Class Contributions (5%): In order to build a community among class participants, students are expected to identify articles, videos, podcasts, etc. related to the software development industry and to share a summary and reflection on the course discussion board.

Creating a Welcoming Environment

The Department of Computer & Information Science is dedicated to the cause of improving diversity, equity, and inclusion in the field of computing, and to supporting the wellness and mental health of our students.

It is essential that all members of the course community – including the instructor, TAs, administrators, and students – work together to create a supportive, inclusive environment that welcomes all students, regardless of their race, ethnicity, gender identity, sexuality, ability, or socioeconomic status. All participants in this course deserve to and should expect to be treated with respect by other members of the community.

Class meetings, office hours, and group working time should be spaces where everyone feels welcome and included. In order to foster a welcoming environment, students of this course are expected to: exercise consideration and respect in their speech and actions; attempt collaboration and consideration, including listening to opposing perspectives and authentically and respectfully raising concerns, before conflict; refrain from demeaning, discriminatory, or harassing behavior and speech.

Additionally, your mental health and wellness are of utmost importance to the course Instruction Staff, if not the College as a whole. All members of the instruction staff will be happy to chat or just to listen if you need someone to talk to, even if it’s not specifically about this course. If you or someone you know is in distress and urgently needs to speak with someone, please do not hesitate to contact CAPS: 215-898-7021; 3624 Market St. If you are uncomfortable reaching out to CAPS, any member of the instruction staff will be happy to contact them on your behalf.

We understand that student life can be extremely difficult, both mentally and emotionally. If you are living with mental health issues such as anxiety, depression, ADHD, or other conditions that may affect you this semester, you are encouraged to discuss these with the Instructor. Although the details are up to you to disclose, the Instruction Staff will do their best to support and accommodate you in order to ensure that you can succeed in this course while staying healthy.

For more information, please email Prof. Chris Murphy: cdmurphy@seas.upenn.edu

Top