Curricular Unit:Code:
Software Engineering831ESOF
Year:Level:Course:Credits:
3UndergraduateComputer Systems Engineering6 ects
Learning Period:Language of Instruction:Total Hours:
Portuguese/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
- Plan a project with a management tool using a given methodology
- Identify and use UML diagrams
- Describe and apply software design patterns
- Identify and produce the different types of documentation
- Describe the architectures of REST and MVC applications
- 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
Syllabus:
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 and Profiling
5.4 Code optimization
6. Software engineering practice
6.1 Development tools
6.2 Automated testing
6.3 Continuous integration and deployment
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 assessment of the skills acquired by the student in this course consists of the following assessment elements:
1. Assessment Test 1
2. Assessment Test 2
3. Practical Project
4. Exam(s)
Continuous evaluation:
NF = 0.3*(1) + 0.3*(2) + 0.4*(3)
Exam Assessment:
NF= (4)
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.
Reading:
[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