Course Websites

CS 427 - Software Engineering I

Last offered Fall 2024

Official Description

Software process, analysis and design. Software development paradigms, system engineering, function-based analysis and design, and object-oriented analysis and design. Course will use team-projects for hands-on exercises. Course Information: Same as CSE 426. 3 undergraduate hours. 3 or 4 graduate hours. Prerequisite: One of CS 222, CS 240, CS 241, CS 340, CS 341 or ECE 391.

Related Faculty

Course Director


Varies by semester, using course notes available for free and linked from the course Wiki

Learning Goals

Compare & Contrast different software engineering and development processes. (1), (2), (4), (6)
Learn a particular process (XP: user stories, test-driven development, refactoring, pair programming). (1), (2), (4), (6)
Improve activities that are common to most processes (configuration management, testing, metrics, documentation, reverse engineering, refactoring). (1), (2), (4), (6)
Contribute effectively to a team in maintaining existing large code (CS427) ot developing new code (CS428/9). (1), (2), (3), (4), (5), (6)
Communicate effectively, both orally and in writing, with peers and software customers (TAs), and describe your process (the latter for CS429). (3), (5)
Manage/organize software projects (requirements, architecture, design, documentation, management, planning). (1), (2), (3), (4), (5), (6)
Use a set of modern software development services (e,g., GitHub, Travis) (2), (3), (5), (6)

Topic List

(CS 427) Software development processes
(CS 427) Software configuration management
(CS 427) Testing
(CS 427) Debugging
(CS 427) Component-based software engineering
(CS 427) Refactorings
(CS 427) Code smells
(CS 427) Reverse Engineering
(CS 427) Metrics
(CS 427) Design Patterns
(CS 427) Software Documentation
(CS 427) Large code
(CS 428/9) Managing Software Projects
(CS 428/9) Requirements
(CS 428/9) UML
(CS 428/9) Design
(CS 428/9) Quality Assurance
(CS 428/9) Non-XP development processes
(CS 428/9) User Interface Design
(CS 428/9) Performance/Security/Web Engineering

Assessment and Revisions

Revisions in last 6 years Approximately when revision was done Reason for revision Data or documentation available?
Completely switched the topics covered in CS427 vs. CS 428/9 fall 2007-spring 2008 Teach students first how to maintain large, existing code before how to develop their projects from scratch. CS427 is one course taught in fall, and CS428/9 is another course taught in spring. These two courses form a two-course sequence in software engineering. It used to be that students would start their own projects in CS427, but they had trouble developing new projects from scratch when they never saw maintenance of existing large projects. Most work in industry is on maintenance not on developing new projects from scratch. informal discussions of Ralph and Darko
Removed RUP process from the curriculum spring 2008 The material was getting outdated as this process is not widely used in practice informal discussions
Varied large projects that students work on in CS427 fall 2007/2009/2011 We varied the large open-source projects that students maintain (Eclipse refactorings for Fortran, NASA Java PathFinder, Eclipse refactorings for Java) to better align the projects with the background of TAs who help the students with the projects informal discussions of Ralph, Darko, and Danny
Added more emphasis on Web engineering and concurrency fall 2009 Computing is getting more networked, distributed and parallel, so we added more topics to cover these important issues
Software Engineering IDSO70960ONL4 -    Lingming Zhang
Software Engineering IS336104ONL3 -    Lingming Zhang
Software Engineering IS436107ONL3 -    Lingming Zhang