Advanced Software Engineering
Software engineering is a complex endeavor. Software engineers work in diverse teams to create and comprehend complex information, such as: code structure, implementation rationale, dynamic software behavior, change implications, and team dynamics. In this class, we will learn modern software engineering practices and discuss state-of-the-art research in software engineering. The students will work on research projects to understand and extend the state of the art in software engineering.
- Software process and lifecycle: Requirements analysis, design, testing, release, maintenance
- Empirical software engineering; socio-technical approaches and findings
- Reuse-oriented programming and open-source software (e.g. code search, trust)
- Security and automated testing tools (static/dynamic/fuzzing)
- Software improvement (code clones, similarity detection)
- Software archaeology and code comprehension
- Software 2.0; AI and machine learning
Prerequisites:Undergraduates: ECE 368 and another programming-intensive course: One of ECE 30862 (OOP), 461 (SE), 463 (Networks) 468 (Compilers), 469 (OS), comparable course from CS with instructor approval, or comparable experience (e.g. programming-intensive internship; substantial outside projects
Graduate students: No formal prerequisites, but appropriate programming experience will be essential to understand the material.
Applied / Theory:
Homework:Approximately 6 homework assignments
Projects:1 semester-long project
Exams:1 midterm exam
Winters, Titus, Tom Manshreck, Hyrum Wright, and Safari, an O???Reilly Media Company. Software Engineering at Google. 1st ed. 2020. Available online in full-text through the Purdue Libraries.
Sommerville, Ian. Software Engineering. 10th ed. Pearson India; 2018. ISBN-10: 9332582696
Brooks, Frederick P. The Mythical Man-month: Essays on Software Engineering. Anniversary ed. Reading, Mass.: Addison-Wesley Pub., 1995. Web. Available online in full-text through the Purdue Libraries.