Academic year 2014-15

Software Engineering

Degree: Code: Type:
Bachelor's Degree in Computer Science 21418 Compulsory subject, 2nd year
Bachelor's Degree in Telematics Engineering 21770 Optional subject
Bachelor's Degree in Audiovisual Systems Engineering 21657 Optional subject

 

ECTS credits: 8 Workload: 200 hours Trimester: 2nd and 3rd

 

Department: Dept. of Information and Communication Technologies
Coordinator: Anders Jonsson
Teaching staff:

Anders Jonsson, Radwan Qasrawi, Kamruddin Nur, Oriol Galimany

Language:

Anders Jonsson: Spanish

Radwan Qasrawi, Kamruddin Nur: English

Oriol Galimany: Catalan

Timetable:
Building: Communication campus - Poblenou

 

Introduction

Software engineering deals with the problem of developing and maintaining software systems in order to achieve efficiency and reliability. The field is also dedicated to developing software in an accessible way to satisfy the requirements of clients and users that have defined and specified the solution. It is an important discipline due to the ample impact that software has on the economic activities of humanity and modern society and the role that software plays in critical systems and the security of many applications. The discipline integrates formal methods from mathematics, computational science and the practices and origin of engineering.

Consequently, software engineering is the systematic, disciplined and rigorous application of approaches to development, operation, maintencance and implementation of software. Evidently, the study of the approaches that lead to the production of quality software is the central topic of software engineering. In summary, software engineering is concerned with the correct construction of software. The software cannot fail because in today's society, thousands of activities are used or regulated by systems that execute software.

Software engineering involves a range of knowledge, definitions of processes, practices, tools, and standards. All this knowledge is used by work teams that carry out tasks that produce high-quality software products that comply with the necessities of the users. These tasks include analysis and specification, design, implementation, verification, testing, maintenance, and management of software projects. All this on time and within the established budget.

Modern software engineering also involves an important approach to sustainability, ensuring that the environmental impact is minimized and the objectives comply with social and ethical principles. Software engineers apply technology in order to develop new systems and construct new instruments for the general progress and wellfare of society, at the same time guaranteeing that the result is of high quality.

 

Prerequisites

It is recommended that the student has passed the programming courses (Foundations of Programming, Object-Oriented Programming, Data Structures and Algorithms).

 

Associated competences

The requirements include teamwork, problem solving, organization, planning, conceptual design and cognitive abilities.

General competenciesSpecific competencies

Instrumental

1.- Cognitive abilities (understanding, interrelated ideas and thoughts, analysis and synthesis) are very important for problem solving, planning, analysis, and design.

2.- Common sense. Similarly, this competency is a tool for problem solving and design and the ability to prioritize restrictions and requirements.

3.- Planning. Be able to solve a complex problem suboptimally given time constraints. To plan ahead and manage an agenda is fundamental in all engineering activities.

4.- Literature research and use of sources and references. As design is principally a conceptual solution of problems, being able to use existing knowledge is fundamental in the development of high-quality software.

Interpersonal

1.- Capacity for communication. In software engineering, the work environment is usually a team collaboration that requires the communication of problems, solutions, and criteria, both in technical and non-technical language. Both written and oral communication has to be effective in presentations to clients or within small project teams.

2.- Capacity to communicate with experts in other fields. Software engineers interact with other engineers in complex projects, as well as other users and consumers of the final software system. Effective solutions should convey information and necessary agreements clearly.

3.- Leadership. Be able to make team decisions or guide the thought process towards effective solutions. It is essential to escape from situations of poor productivity.

4.- Use of technological instruments. To apply different technologies, approaches, and patterns, the correct tools have to be used at the correct time.

5.- Capacity to apply theory to practice. The construction of software systems of realistic magnitude requires a strong foundation and application of theoretic concepts to solid and systematic practice.

Systemic

1.- Information management. A complex problem involves large amounts of information, sometimes inconsistent or incomplete. The software engineer has to organize documentation of requirements and manage the project as well as the product.

2.- Analysis of strong and weak points. Be able to identify the weakest points of a system is fundamental in order to judge its quality and security.

3.- Decision making. Starting from a prior analysis, select the best options available.

4.- Introduce improvements. It is very important being able to analyze a solution and suggest improvements.

5.- Capacity to generate new ideas. To solve a complex problem one has to possess sufficient creativity to generate alternative solutions.

6.- Interest in quality. This competency is fundamental for the application of technologic solutions to a problem.

7.- Design and management of projects. Be able to create solutions that satisfy the requirements and manage the processes that implement the design.

8.- Anticipation of risks. Each project involves risks and possible changes. As a consequence, it is necessary to propose a plan that allows for the adjustment of solutions and designs in response to changes or modifications in the requirements.

9.-Redesign of processes. Each process that results in poor efficiency or low-quality products has to be revised.

10.- Capacity to adapt to new solutions. Changes cause adjustments and require a capacity for adaptation.

11.- Capacity to learn. It is very important being open to learning new concepts and technologies in an era of constant technological change.

The specific competencies can be summarized in three main categories.

1.- Knowledge of the tools, practices, and methodology of software engineering.

2.- Capacity to analyze and discover requirements for a complex problem whose solution involves the development of a software system.

3.- Capacity to design and implement a solution that adheres to the principles of software engineering and satisfies the functional requirements, at the same time complying with high-quality specifications and implemented within the time and budget constraints.

These categories can be broken down into the following specific competencies:

1.- Knowledge of software engineering methodologies.

1.a.- Knowledge of the different types of life cycles of software.

1.b.- Capacity to choose a methodology among existing ones in a concrete case.

1.c.- Capacity to understand how the analysis process and design decisions affect the final product..

2.- Capacity to analyze and discover the requirements of a complex problem.

2.a.- Capacity to extract requirements: identify stakeholders, actors, use cases, and classify requirements into functional, non-funcional and domain-dependent.

2.b.- Capacity to express requirements unambiguously in an organized and technically correct way.

2.c.- Knowledge of a standar modelling language such as UML to express requirements.

2.d.- Capacity for teamwork in order to capture requirements.

2.e.- Capacity for clearly communicating requirements to clients in order to obtain feedback and validate requirements.

3.- Capacity to design a solution to a complex software engineering problem based on existing requirements.

3.a.- Capacity to understand and interpret the given requirements.

3.b.- Capacity for organizing and planning the tasks and activities of the project.

3.c.- Making design decisions, which involves the following two steps:

a) Identify the forces involved and find the best solution in order to obtain a balance between criteria and priorities.

b) Verify that the solution involves components and modules with minimal coupling and maximal cohesion.

3.d.- Capacity to clearly and convincingly communicate the decisions made during the development of a real project.

3.e.- Time management: capacity to find an acceptable approximate solution to a complex problem.

3.f.- Capacity for teamwork.

3.g.- Knowledge of object-oriented technology, which involves:

a) knowledge of an object-oriented programming language such as C++

b) knowledge of a standard modelling language such as UML

c) capacity to apply and use design patterns

3.h.- Capacity to implement the design, which involves the capacity to obtain feedback, revise the code and perform testing in order to adjust the design.

3.i.- Capacity to perform testing and validate the implementation of a solution.

 

Assessment

General evaluation criteria

All types of competencies from the previous section are evaluated, as well as specific competencies by means of the following graded mandatory activities:

• Four exams (one mid-term and one end-term for each of the two trimesters), corresponding to the following four topics:

o The life cycle and the methodologies

o Visual modelling and UML

o Design patterns

o Implementation using C++

• Problems solved during lab sessions (in pairs) that may form part of a global project during the two trimesters of the course

• Participation and discussion during seminars of course material, as well as solutions to exercices handed in after each seminar

The final grade of the course is calculated as follows:

• Four exams (4x10% = 40%)

• 8 lab sessions and solutions handed in at a later date (8x5% = 40%)

• 10 seminars and solutions to exercices handed in at a later date (10x2% = 20%)

To pass the course, it is necessary to achieve a passing grade on 1) each of the four exams; 2) the project implemented during lab sessions; y 3) attendance during seminars and solutions to exercices handed in.

The lab sessions and seminars are NOT RECOVERABLE, and it is thus necessary to achieve a passing grade on these during the regular course period.

Each exam is separately recoverable during a make-up session in July. However, for a student to participate in the make-up exam, the following criteria have to be met: 1) pass at least 2 out of 4 regular exams; 2) pass the lab session; and 3) pass the seminars.

 

Detailed evaluation

Four exams

Each exam consists of concrete questions about fundamental topics of software engineering, and exercices similar to real-world problems.

What is evaluated?

General competencies:

• Problem solving

• Organization and planning

Specific competencies:

• Capacity to analyze and discover the requirements of a complex software engineering problem

• Capacity to design a solution for a complex software problem given requirements

• Capacity to apply UML

• Capacity to apply concepts from analysis and object-oriented design

• Capacity to apply and use software design patterns

• Capacity to distinguish between different methodologies of software engineering

• Capacity to structure, read, and write programs in C++

When does the evaluation take place?

• Mid-term and end-term of the two trimesters (2 y 3)

Lab sessions

The lab sessions introduce tools that complement the methodologies of software engineering and that simulate the phases of a realistic project to be carried out in teams, and where general and specific competencies are put in practice. Students work in teams of two to implement a project in C++, which is handed in at regular intervals throughout the course duration. The fourth exam is part of the evaluation of the lab sessions, to ensure that each student has acquired the desired knowledge.

What is evaluated?

General competencies:

• Problem solving

• Organization and planning

• Teamwork

• Effective and efficient communication

Specific competencies:

• Capacity to analyze and discover the requirements of a complex software engineering problem

• Capacity to design a solution for a complex software problem given requirements

• Capacity to apply UML

• Capacity to apply concepts from analysis and object-oriented design

• Capacity to apply and use software design patterns

• Capacity to distinguish between different methodologies of software engineering

• Capacity to structure, read, and write programs in C+

When does the evaluation take place?

• The 8 lab sessions are distributed throughout the two trimesters, meaning that there is a lab session approximately every two weeks. Normally, the activities of a lab session have to be completed outside class and the results of the lab session are handed in before the next session.

Seminar participation

During seminar sessions, practical cases and exercices are discussed and solved. These exercices have to be completed and handed in at a later date, usually before the next seminar. The objective is to strengthen the general and specific competencies as well as to provide feedback and continuous evaluation.

What is evaluated?

Competencias generales:

• Problem solving

• Organization and planning

• Teamwork

• Effective and efficient communication

Specific competencies:

• Capacity to analyze and discover the requirements of a complex software engineering problem

• Capacity to design a solution for a complex software problem given requirements

• Capacity to apply UML

• Capacity to apply concepts from analysis and object-oriented design

• Capacity to apply and use software design patterns

• Capacity to distinguish between different methodologies of software engineering

When does the evaluation take place?

• The 10 seminars are distributed throughout the two trimesters, i.e. 5 seminars per trimester. Normally the activities of a seminar consists of a discussion of the solution to concrete problems and a collective discussion or student presentation of their solutions in order to debate alternatives and provide feedback of the seminar teacher. The solution to each exercice has to be handed in at a later date.

 

Contents

A brief description of the content is:

• Software life cycle

• Visual modelling and use of languages such as UML

• Analysis and object-oriented design

• Use and application of software design patterns

• Advanced implementation tools

The following is a detailed description:

Part I: Software engineering and its processes

Topic 1: Life cycle and methodologies

Concepts:

• Notion of software engineering

• Relation of software engineering to the profession of computer science and other professions

• Life cycle of software products and associated models

Procedures:

• Identify the different parts or processes of the generic life cycle and the activities that are carried out in each phase

• Analyze the advantages and disadvantages of the different models of the life cycle in the context of a specific project

Attitude:

• Interest in software engineering and its importance in most areas of computer science

• Critical view to evaluate the advantages and disadvantages of the different models of the life cycle and the methodologies of software engineering

Topic 2: Requirements engineering

Concepts:

• Definition and classification of the types of requirements

• Elements of a requirements document and associated formalisms

• Life cycle of requirements engineering

Procedures:

• Classification of funcional, non-funcional and domain-dependent requirements

• Identification of stakeholders and actors

Attitude:

• Use of use case diagrams in UML to analyze and discover requirements

• Edit requirements documents as a result of the analysis of a realistic problem

• Maintain a requirements document and update it as a result of changes

Topic 3: Methodologies

Concepts:

• Description of different examples of methodologies

• Agile methodologies as opposed to traditional methodologies

• Process-based methodologies as opposed to person-based methodologies

Procedures:

• Identify the advantages and disadvantages of different methodologies

• Apply the practices and processes of some of the methodologies

Attitude:

• Critical view to evaluate a methodology

 

Part II: Analysis and object-oriented design

Topic 4: Modelling using UML

Concepts:

• Advantages of visual modelling

• Definition and brief history of UML

• The principal UML diagrams and elements involved

Procedures:

• Utility of UML diagrams and their use in different phases of the life cycle

• Understanding UML diagrams and applying them to concrete problems

• Use of the most common UML diagrams (use case diagrams, static diagrams, and sequence diagrams) to solve a problem and, to a lesser extent, other types of diagrams

Attitude:

• Understand the importance of using a standard formalism when elaborating diagrams

Topic 5: Analysis and object-oriented design

Concepts:

• Definition and property of objects

• Definition and property of classes

• Relations of inheritance, composition, aggregation, association and dependence

• Polymorphism and inheritance hierarchies

• The language C++ as an example of an object-oriented language

Procedures:

• Division of a complex problem using concepts and procedures of object-oriented design

• Use of UML to model object-oriented systems

• Use of a language such as C++ to implement an object-oriented design

• Test-driven development

Attitude:

• Good programming practices (classification, non-duplication, short methods and clear nomenclature)

• Conform to conventions when writing code in teams

• Adaptation to changes, writing code that implements a model in constant change

• Understanding the advantages of test-driven development

Topic 6: Software patterns

Concepts:

• Concept of software pattern

• Pattern libraries and their use

Procedures:

• Use of UML to understand the pattern for a concrete design

• Use of pattern libraries to identify a pattern that represents a generic solution to a specific problem

• Use of patterns as part of solving a concrete problem

Attitude:

• One should not have to reinvent the wheel. The great majority of problems that appear in practice have already been solved and the solution is available in the form of a pattern that most likely is characterized by superior quality to a solution implemented from scratch

Topic 7: Advanced implementation tools

Concepts:

• Learn to use advanced implementation tools

• Qt: library for implementing graphical user interfaces

• Templates: generic programming

Procedures:

• Practical application of Qt in order to implement a graphical interface

• Develop programs using templates

Attitude:

• Typical tools for software development that are good to know

 

Methodology

The course represents, to the student, 18 theory sessions (each lasting 2 hours, including two mid-term exams), 8 lab sessions (each lasting 2 hours), and 10 seminars (each lasting 2 hours) during two trimesters.

The theory sessions are lectures where all students participate that introduce basic theoretic concepts and methodologies and illustrate adequate procedures for solving complex problems using software engineering tools and techniques.

The seminars are in small groups and consist of a discussion of concrete problems and immediate feedback derived from the constructive discussion regarding solutions proposed by the students to concrete exercices.

The lab sessions are in mid-size groups where students work in pairs to complete the phases of a software project, applying concrete tools for software production in the context of software engineering. These lab sessions aim at a practical implementation and concrete illustration of how to use tools such as CASE, IDE, or version control systems. The objective is to put theoretical concepts into practice and help complement the competencies and capabilities in a real and practical sense.

 

Resources

Basic bibliography

- Fowler, Martin. UML distilled: a brief guide to the standard object modeling language / Martin Fowler with Kendall Scott Reading (Mass.) : Addison-Wesley, cop. 2000

- Meyer, Bertrand. Construcción de software orientado a objetos / Bertrand Meyer traducción: Miguel Katrib Mora, Rafael García Bermejo, Salvador Sánchez ; revisión técnica: Jesús García. Madrid [etc.] : Prentice Hall, 1998

- Sommerville, Ian. Software engineering / Ian Sommerville Harlow : Addison-Wesley, 2009

- Larman. Applying UML and patterns: an introduction to object-oriented analysis and design 

Complementary bibliography

-Costal, Dolors. Enginyeria del software especificació: especificació de sistemes orientats a objectes amb la notació UML / Dolors Costal, M. Ribera Sancho, Ernest Teniente Barcelona: Edicions UPC, 2000

- Joyanes Aguilar, Luis. Pla docent assignatura Estudis Programación orientada a objetos / Luis Joyanes Aguilar Madrid: Osborne/McGraw-Hill , cop. 1998

- Peralta Giménez, Allen J. Enginyeria del software: programació orientada a objectes / Allen J. Peralta Giménez, Horacio Rodríguez Hontoria Barcelona: Edicions UPC, 1994 Upper Saddle River, N.J.: Prentice Hall PTR, cop. 1998

- Pressman, Roger S. Ingeniería del software un enfoque práctico / Roger S. Pressman adaptación: Darrel Ince traducción: Rafael Ojeda Martín [et al.] dirección, coordinación y revisión Madrid McGraw-Hill cop. 2002

- Schach, Stephen R. Software engineering / Stephen R. Schach Boston: Irwin, cop. 1993 Shtern, Victor

- Shtern, Victor. Core C++: a software engineering approach / Victor Shtern Upper Saddle River: Prentice Hall PTR, cop. 2000

- Stroustrup, Bjarne. The C++ programming language / Bjarne Stroustrup 

Educational resources

- Lecture notes in free format

- Problem compendium

- Course website in the Aula Global