CIS 350 Software Design & Engineering - Spring 2017

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 and/or web application development; software testing; refactoring.

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


Teaching Staff



Class Meeting Times

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


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.