CSE 216 Software Engineering (3)
Liang Cheng (Fall 2017), Michael Spear (Spring 2017, Fall 2017)
Current Catalog Description
The software life-cycle; life-cycle models; software planning; testing; specification methods; maintenance. Emphasis on team work and large-scale software systems, including oral presentations and written reports. Prerequisite: CSE 109.
- UML Distilled, Martin Fowler, Addison Wesley
- Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides, Addison-Wesley 1994.
Students will have:
- Understanding of:
- basic software engineering terminology
- the software life-cycle
- the roles and responsibilities of the various stakeholders in a software project
- the role of software process in facilitating development and ensuring software quality
- Ability to prepare a requirements specification.
- Ability to create control-flow graphs, and compute simple quality metrics.
- Ability to use CASE tools.
- Ability to design interfaces.
- Ability to use the Unified Modeling Language.
- Gain experience working in a team.
- Appreciation of the issues that make large-scale software engineering challenging.
Relationship between Course Outcomes and Student Enabled Characteristics
CSE 216 substantially supports the following student enabled characteristics:
A. An ability to apply knowledge of computing and mathematics appropriate to the discipline.
B. An ability to analyze a problem and identify and define the computing requirements appropriate to it solution.
C. An ability to design, implement, and evaluate a computer-based systems process, component, or program to meet desired needs.
D. An ability to function effectively on teams to accomplish a common goal.
F. An ability to communicate effectively with a range of audiences.
G. An ability to analyze the local and global impact of computing on individual organizations, and society.
I. An ability to use current techniques, skills, and tools necessary for computing practices.
J. An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices.
K. An ability to apply design and development principles in the construction of software systems of varying complexity.
Prerequisites by Topic
- Fluency in writing code in JAVA.
- Ability to effectively use classes to construct medium-scale software.
Major Topics Covered in the Course
- Software Devekopment Process
- Project Management (including Project Planning, Cost Estimation, and Configuration Management)
- Requirements Engineering
- Software Architecture
- Object-Oriented Analysis
- Object-Oriented Design
- System Modeling using UML
- Software Complexity
- Software Quality
- Software Testing
- CASE Tools
Assessment Plan for the Course:
The students are given seven homework assignments, five pop quizzes, a midterm examination, and a final examination. Students are also divided into teams of 5-6 students. Each team goes through four iterations to design and implement a medium-sized software project. Each iteration has different sets of deliverables (e.g. requirements documents, analysis and design documents, UI sketches, implementation code, tests, and written reports). Teams are also asked to give in-class presentations about their projects. The performance of the students on homework assignments, pop quizzes, course projects, and the examinations are tracked. I also conduct in-class anonymous surveys (after the midterm and before the final examination) to collect feedback.