Curricular Unit:Code:
Software Engineering1093ESOF
3UndergraduateComputer Systems Engineering6 ects
Learning Period:Language of Instruction:Total Hours:
Winter SemesterPortuguese/English78
Learning Outcomes of the Curricular Unit:
This course aims to introduce and develop the fundamentals, models and tools of software engineering used in the design, management, development, evaluation and testing, and software documentation.
Upon successfully completing this course, students should be able to:
- Describe the software engineering process
- Identify and choose development methodologies
- Describe and apply software standards
- Identify and use UML diagrams
- Identify and produce the different types of documentation
- Plan a project with a management tool using a given methodology
- Describe the architectures of REST and MVC applications, and implement a web application using a framework
- Using a Version Control System
- Configure and use logging, static code analysis and optimization tools
- Define automated tests, distinguish different types of tests and contexts of use
1. Introduction
1.1 Objectives, syllabus, and evaluation
1.2 Software engineering processes
2. Development methodologies
2.1 Classical methodologies
2.2 Agile methodologies
3. Software project management
3.1 Planning
3.2 Documentation
3.3 Development cycle
3.4 Risk management
4. Software engineering methods
4.1 Architectures and software models
4.2 Design patterns
5. Software engineering tools
5.1 Version control
5.2 Static analysis
5.3 Debugging
5.4 Code optimization
6. Software engineering practice
6.1 Development tools
6.2 Automated testing
6.3 Integration
Demonstration of the Syllabus Coherence with the Curricular Unit's Objectives:
The syllabus presented is consistent with the learning objectives of the curricular unit since there is a great convergence between the table of contents and the knowledge that the student is supposed to acquire in each of these chapters. The fundamental concepts of software engineering are presented through the different sections of the syllabus. The learning objectives are achieved by complementing theoretical concepts with practical examples. The different tasks of the software engineering process are applied on a project proposed to students, i.e., contemplating the different phases such as requirements analysis, modeling, implementation, tests and maintenance.
Teaching Methodologies (Including Evaluation):
The transmission of knowledge in this course will be carried out using theoretical-practical oriented lectures and practical classes in a laboratory environment. The lectures present the fundamental concepts for understanding the items of the program. In practical laboratory classes, students are faced with real problems that they have to solve eventually using the appropriate modeling or development tools. The evaluation is divided into two components: theoretical (50%) and practical (50%). In the first case, the evaluation results from a written test applied during the semester on the subjects taught in the classroom. In the second case, it results from practical works proposed by the teacher and which are carried out and defended by the students throughout the semester.
Demonstration of the Coherence between the Teaching Methodologies and the Learning Outcomes:
The teaching/learning methodology applied in this curricular unit as well as its evaluation system are perfectly aligned with the objectives to be achieved by the students at the end of the school term. The theoretical concepts are presented, discussed, applied and evaluated in the context of the lectures, which guarantees students a solid foundation to understand in depth the challenges that arise in this area of ??knowledge. On the other hand, so that the study is not restricted to conceptual models, in practical classes, concrete case studies are presented and solutions to real problems are implemented using appropriate software tools and equipment. This combination guarantees a training for students that allows them to know the scientific fundamentals essential to a good understanding of the topic as well as their ability to adapt to constant technological changes. The evaluation process consisting of theoretical tests and practical work also guarantees a correct balance between the effort dedicated to both components. The objective is to train professionals with knowledge of state-of-the-art techniques and tools, but also to ensure their ability for future developments. In this course the different concepts of software engineering are addressed. The concepts are then applied in the practical projects.
[1] Guerreiro, S., “Introdução à Engenharia de Software”, FCA, 2015
[2] Nunes,M., O`Neill, H., “Fundamental de UML”, FCA, 2004
[3] Pressman, R., ”Software Engineering: A practitioner’s Approach”, 8th Ed., McGraw-Hill, 2015.
[4] Sommerville, I., ”Software Engineering”, Adisson-Wesley, 2005.
[5] Gamma, E., Helm, R., Johnson, R., Vlissides, J., “Design Patterns: Elements of Reusable Object-Oriented Software”, Addison-Wesley, 1994
Lecturer (* Responsible):
Ivo Pereira (