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.



Chris Murphy,


Class Meeting Times

Tues/Thurs 1:30-3:00pm, location TBA

In addition to registering for the Lecture, students must register for one of the Recitation sessions. Registration for one of these sessions is mandatory, as these will be used for project meetings and other group activities.


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
  • Refactoring
  • Efficiency

Software Testing

  • Black-box and White-box testing
  • Debugging

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 (30%)
    • There will be 5-6 short assignments (2-3 weeks each) related to the major themes of the course.
  • Reading assignments (10%)
    • Each week you will have a reading assignment related to the lecture topics. You will then be asked some short questions about the reading and then submit your answers via Canvas.
  • 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.