Engenharia de Software

Base Knowledge

Programming skills required for writing unit tests.

Teaching Methodologies

The following teaching methodologies are used in this course unit:

1. Expository method: explanatory method where theoretical foundations and concepts are presented by the teacher and discussed with the class. Concepts and information will be presented to students through, for example, slide presentations or oral discussions. It will be used in classes to structure and outline the information.

2. Demonstrative method: based on the example given by the teacher of a technical or practical operation that one wishes to be learned. It focuses on how a given operation is carried out, highlighting the most appropriate techniques, tools and equipment. It will be used, for example, in practical and laboratory classes.

3. Interrogative method: process based on verbal interactions, under the direction of the teacher, adopting the format of questions and answers. It allows for greater dynamics in the classroom and consolidates learning. It will be used, for example, to remember elements of previous classes and in revisions of the lectured content.

4. Active methods: pedagogical techniques will be used in which the student is the center of the learning process, being an active participant and involved in his own training. The teacher assumes the role of facilitator, stimulating critical thinking, collaboration, creativity and student autonomy. They will be applied in classes to achieve a dynamic and more lasting learning environment.

Learning Results

At the end of the course unit the student will be able to:

1. Define Software Engineering. Explain the relationship between software and Software Engineering. Justify the importance of software quality. Demonstrate the need for Software Engineering. Identify the main challenges in Software Engineering. Analyze how software quality affects cost and customer satisfaction. Analyze ethics and professional responsibility in Software Engineering.

2. Explain software development processes. Compare plan-driven and agile processes. Synthesize approaches such as waterfall, prototyping, incremental, spiral, and component-based. Analyze the implications of different development approaches on real projects. Identify the activities of the development process.

3. Discuss the agile methods and their applicability. Summarize the Scrum framework and eXtreme Programming practices. Compare different types of agile methods. Discuss agile practices in a development environment. Use agile approaches (e.g. Scrum, eXtreme Programming) in specific projects. Analyze the results obtained when applying agile methods to specific projects.

4. Identify the characteristics of Requirements Engineering. Classify requirements as functional and non-functional. List the requirements attributes. Analyze the influence of different requirements attributes on prioritization and development effort. Differentiate high- and low-level requirements. Explain the phases of the Requirements Engineering process. Indicate requirements gathering methods. Use requirements gathering methods in a practical project. Assess the importance of documentation in Requirements Engineering.

5. Explay the software design. Compare software analysis and design. Differentiate between functional and object-oriented design. Explain software design activities. Analyze different levels of abstraction in software architecture. Describe the different architectural patterns. Compare monolithic and microservices architectures. Build architectural, classes/objects, database and user interaction designs. Analyze the effectiveness of different architectural patterns in specific projects.

6. Identify types of UML diagrams. List software used to create UML diagrams. Synthesize characteristics and relationships in use cases, class, activity, interaction, state, component and distribution diagrams. Construct UML diagrams to represent different aspects of a system. Analyze the usefulness of different types of UML diagrams in specific scenarios.

7. Explain the importance of software testing. Differentiate between validation and defect detection. Compare software inspections and software testing. Identify different types of tests, including unit, performance and functional. Relate different testing phases with the software life cycle. Implement automated tests in a practical project. Analyze the effectiveness of different types of load/stress tests in ensuring software quality.

8. Define software quality. Analyze the cost of quality and the software quality management approaches. Identify software, metrics and reviews standards. Compare simplistic approaches and the Horch approach to the cost of quality. Build a quality plan for a software project. Analyze the compliance of a software product with established quality standards. Describe the metrics used in software quality. Identify the main characteristics of reviews and inspections.

Program

1. Introduction. Software. Product specification. Software quality. Software Engineering. Need for Software Engineering. Main challenges of Software Engineering. Software cost. Ethics and professional responsibility.

2. Software development processes. Plan-driven processes vs. agile processes. Classic waterfall approach. Prototype model. Incremental or iterative approach (e.g. Scrum, eXtreme Programming, Kanban, Lean). Spiral model. Component-based approach. Other approaches. Process activities: specification, design, implementation, testing.

3. Agile software development methods. Applicability. Advantages and disadvantages. Types of agile methods. Scrum: sprints, product backlog, product owner, scrum master, scrum team, sprint planning meeting, sprint backlog, daily scrum, sprint review meeting, sprint retrospective, burndown chart. eXtreme Programming: principles, practices, requirements (user stories), refactoring, tests, pair programming.

4. Requirements engineering. Classification: functional vs non-functional. Attributes: priority (1-10, 1-5, MoSCoW), effort, risk, duration, cost, user profile. Levels: high level, low level. Conditions for acceptance. Phases: survey, analysis and documentation, specification and documentation, validation and verification. Requirements management software. Collection methods. Quality. Documentation: language, use cases, user stories, user scenarios, prototypes, rich pictures.

5. Software design. Analysis vs. Design. Functional design vs object-oriented design. Software design activities. Software architecture design: abstraction levels, architecture representation, architecture patterns (MVC – Model View Controller, layered, repository, client-server), monolithic architecture vs microservices. Class/object design. Database design: MySQL (E-R diagrams), NoSQL (graphs). User interaction design: mockups, prototypes.

6. Unified Modeling Language (UML). Types of Diagrams. Software used to create UML diagrams. Use case diagrams: characteristics, “extend” relationship, “include” relationship, generalization relationship, packages. Class diagrams: objects, classes (attributes, operations), relationships between classes, interfaces. Activity diagrams: nodes, actions, flows, synchronization bar, partitions. Interaction diagrams: sequence diagrams (actors, objects, messages, launchpad, cycles), communication diagrams. State diagrams: states, events, transitions, activities, actions, objectives. Component diagrams. Distribution diagrams.

7. Software testing. Validation vs defect detection. Software inspections vs software testing. Unitary tests. Examples. Performance tests. Functional testing with users: alpha, beta, acceptance. Tests based on usage scenarios. Automated functional tests. Regression testing. Load/stress tests.

8. Software quality. Cost of quality: simplistic approach, Horch approach. Software quality management. Quality plan. Production process and product quality. Software standards (ISO 9001, ISO/IEC 15504, ISO/IEC 27001, CMMI). Metrics. Reviews and inspections.

Curricular Unit Teachers

Nuno Miguel Gil Fonseca

Grading Methods

Periodic Evaluation
  • - Individual and/or Group Work - 60.0%
  • - Exam - 40.0%
Final evaluation
  • - Individual and/or Group Work - 50.0%
  • - Exam - 50.0%

Internship(s)

NAO

Bibliography

Borges, J. L. M., Cunha, J. F., Dias, T. G. (2015). Modelação de dados em UML – uma abordagem por problemas. FCA.

Guerreiro, S. (2015). Introdução à engenharia de software. FCA.

Laboon, B. (2016).  A friendly introduction to software testing (1ª edição). CreateSpace Independent Publishing Platform.

Palhoto, T. (2016). Desenvolvimento ágil de software. FCA.

Sommerville, I. (2011). Engenharia de software  (9a edição). Addison Wesley.