Ryan Bensussan Harvey Instructor in Computer Science

COSC A451 Software Engineering
Syllabus (General)

Table of Contents

Course Description

From the Instructor

This course provides students with a view into the job of a software engineer through hands-on interaction with course material. Topics covered include engineering processes and their application to the development of software; cost and effort estimation; software testing and test management; team structure, roles and composition; deployment and configuration management; and professional ethics.

This course is taught with a mandatory service learning component, during which you students work on a real software development project in a team context for a real client and reflect upon that experience. It is not possible to pass this course without taking part in this hands-on learning experience.

From the Undergraduate Bulletin

This course describes engineering processes and their application to the development of software.

Prerequistes

One of:

To be successful in this course, students are expected to have practical experience building software, and in particular, should be comfortable working with data structures, designing classes, and writing software modules.

Learning Objectives

Students will experience the job of a software engineer through hands-on interaction with course material. The course will provide students with opportunities to experience: engineering processes and their application to the development of software; cost and effort estimation; software testing and test management; team structure, roles and composition; deployment and configuration management; and professional ethics.

Learning Outcomes

Upon completion of this course, students should be able to:

  • Perform as a constructive member of a software development team
  • Communicate effectively with teammates
  • Iteratively create software by means of the delivery and deployment of software increments
  • Manage a codebase via version control, documentation, and team processes
  • Manage running software via testing, deployment, debugging, and maintenance activities
  • Identify customer needs to construct requirements for software
  • Identify customer acceptance of delivered software increments and understand satisfaction level
  • Use software practices to iteratively improve their software development processes and skills
  • Reflect on software development processes and identify changes that can improve future work
  • Reflect on ethical choices that arise during the course of software development in a corporate/client-interaction setting and identify personal and professional values that guide decisions

Learning Format

Content Delivery. This course is taught in an experiential service learning format. Conceptual material is delivered in lecture and discussion format, and applied when possible through a service learning project experience.

Service Learning Project. A central focus of this course, the service learning project places students in the context of a software team working on a real piece of existing software for a real client. Projects are created by partners with a public benefit mission (usually non-profits or governmental organizations), and partners participate with the class during the course of the project as product owners for the software being built. Through the project, students gain real-life experience of what it’s like to work on a team as a professional software engineer.

Critical Reflection. With an experiential format, research has shown that students retain material better when they reflect critically on their learning. As such, students will be expected to write weekly reflection journal entries, as well as a short personal reflection essay at the end of the semester.

Exams. There are no exams in this course. However, students will be responsible for writing an analysis paper on a software ethics issue of their choice and presenting it in a mini-conference format at the end of the semester.

Selected Topics

This course generally covers some combination of the following topics:

  • Software Engineering definition and concepts
  • Software Processes and Developer Practices
  • Agile Teams & Communication Models
  • Version Control, Documentation, & Complexity Management
  • Continuous Integration & Delivery (CI/CD)
  • Test-Driven and Behavior-Driven Development Styles (TDD/BDD)
  • Software Architecture & Design Patterns
  • Requirements Estimation & Agile Metrics
  • Software-as-a-Service (SaaS) Software Models
  • Deploying & Maintaining Software
  • Debugging & Refactoring Software
  • Working with Legacy Software
  • Professionalism, Software Craftsmanship & Software Ethics