Advanced Software Engineering
Objectives:
The objective of this course is the study of principles, techniques and tools which are used for the development of large scale software projects with emphasis on the design of object-oriented systems.
By employing programming languages such as C++ and Java as well as the Unified Modeling Language (UML) students will have the opportunity to investigate the application of the most established Design Principles, Design Patterns and Refactorings for the evaluation of design quality and the resolution of design/coding problems encountered in software industry. Students will participate in collaborative software development projects to simulate actual industrial (or open-source) processes and will also employ state-of-the-art Computer-Aided Software Engineering tools. In the context of this course references to the open research problems in the field of Software Engineering will be made.
Skills:
Upon successful completion of this course students will be able to:
- apply techniques and tools for the analysis, design and implementation of comprehensible, maintainable and reusable software systems
- perform maintenance on software projects
- evaluate the design quality of software systems
- develop software projects collaboratively
Prerequisites:
- familiarity with the algorithmic way of problem solving
- knowledge of an object-oriented programming language
- knowledge of basic data structures
Content:
• Introduction to Software Engineering. Challenges in the development of large-scale software projects
• Brief overview of object-oriented programming concepts: Java
• Agile Software Development Methodologies
• Overview of the Unified Modeling Language (UML)
• Object-Oriented Analysis and Design (ICONIX Methodology)
• Collaborative Software Development. Version Control Systems
• Object-Oriented Design Principles
• Design Patterns
• Design Heuristics
• Software Refactoring
• Software Quality. Software Metrics.
• Empirical Studies in Software Engineering
• Computer-Aided Software Engineering (CASE) tools
Textbooks:
Gamma, E., Helm R., Johnson, R., Vlissides, J. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
Fowler, M., Beck, K., Brant, J., Opdyke, W., Roberts, D., Refactoring: Improving the Design of Existing Code. Addison Wesley, 1999.
Martin, R.C., Agile Software Development: Principles, Patterns and Practices. Prentice Hall, 2003.
Rosenberg, D., Stephens, M., Use Case Driven Object Modeling with UML: Theory and Practice, Apress, 2007.
Assessment:
50% Final Exams
50% 2 Personal Assignments and 2 Team Projects