CIS 350 Software Design & Engineering - Spring 2016

Course Overview

You know how to write a "program". But how do you create a software "product" as part of a team, with customers that have expectations of functionality and quality? This course introduces students to various tools (source control, automated build systems, programming environments, test automation, etc.) and processes (design, implementation, testing, and maintenance) that are used by professionals in the field of software engineering.

Topics will include: software development lifecycle; agile and test-driven development; source control and continuous integration; requirements gathering and analysis; software architecture; object-oriented design and design patterns; Android application development; software testing; refactoring.

Students should be proficient in Java and have completed CIS 121.


Teaching Staff


Teaching Assistants

  • Rachel Brown
  • Ankita Chadha
  • Kathy Chen
  • Teresa Fan
  • Jane Guo
  • Annie Meng
  • Lizzy Nammour
  • Molly Wang


Class Meeting Times

Tues/Thurs 1:30-3:00pm, Towne 100

In addition to registering for the Lecture, students must register for one of the Recitation sessions.

Registration for one of these sessions is mandatory; however, rather than actual weekly recitations like in other courses, these times are simply placeholders for potential group project meetings and other activities (so don't worry, you won't actually have class on Fridays!).


Topics Covered

Software Process Models

  • Traditional models: waterfall, RUP
  • Agile models: XP, Scrum
  • Continuous integration
  • Software configuration management

Software Requirements

  • Gathering & eliciting requirements
  • Documenting requirements

Software Design

  • Software design principles and internal quality
  • Software architecture
  • Class modeling and UML
  • Software design patterns
  • User interface design and usability

Implementing Software

  • Test-driven development
  • Defensive programming
  • Readability and understandability
  • Threads and synchronization

Software Testing

  • Black-box testing
  • White-box testing

Software Maintenance

  • Debugging
  • Refactoring
  • Efficiency

We will also have 1-2 guest speakers from industry.



There will be no required textbook for this course. There will be numerous assigned readings over the course of the semester, but they will be made available to you via Canvas.



Note that these are only guidelines, but final course grades will likely be based on the following:

  • Midterm exam (15%)
    • This will be scheduled for sometime in early March.
    • The exam will be closed-book, closed-notes, etc.
  • Final exam (25%)
    • This is scheduled by the university registrar.
    • The exam will be comprehensive, but will focus on material covered after the midterm.
  • Homework assignments (40%)
    • There will be 5-6 short assignments (2-3 weeks each) related to the major themes of the course.
  • Group project (20%)
    • You will work in groups of four on a semester-long project using an agile development methodology.
    • Most students will work on Android apps but you may choose iOS, Ruby on Rails, etc. depending on the nature of your project.
    • You may also have the option of developing an app for a "real customer" who is a member of the Penn community, or contributing to an open-source project.