2010-11 academic year

Software Engineering (21418)

Degree/study: Bachelor's degree in Computer Sciences (3377)
Year: 2nd
Term: 2nd / 3rd
Number of ECTS credits: 8 credits
Hours of studi dedication: 200 hours
Teaching language or languages: Catalan and Spanish
Teaching Staff: Vladimir Estivill-Castro

1. Presentation of the subject

Software engineering is the field concerned with the development and maintenance of software systems that behave reliably and efficiently. It also focuses on developing software within budget and satisfying customer requirements and users who have defined and specified the solution. It is an important discipline due to the spectrum and broad impact of software in the economical activities of humanity and modern society and for the role of software in critical systems and in ensuring security of many applications. The discipline integrates formal methods of mathematics, computer science and the origins and practices of engineering.

Therefore, software engineering is the systematic, disciplined, quantifiable and rigorous application of approaches for development, operation, maintenance and implementation of software. Obviously, the study of the approaches that lead to the production of quality software is the central focus of software engineering. Software engineering is mainly concerned about building software correctly. The software should not fail because nowadays thousands of activities are monitored, managed or regulated by running software systems.

Software engineering includes a range of concepts, definitions of processes, practices, tools and standards. Work teams use all this knowledge to perform tasks, which produce high quality software and achieve stakeholders' needs. Tasks include the analysis and the specification, design, implementation, verification, testing, maintenance and the project management, all in time and within the budget.

Modern software engineering has also an important approach with regard to producing designs for sustainable systems; whose environmental impact is minimal and whose objectives also consider social and ethical principles. Software engineers apply technology to develop new systems, build new tools and use technology to progress and, in general, produce benefit by ensuring the quality of results.

2. Competences to be obtained in the subject

Capacities for teamwork, organization, scheduling and solving problems are needed. Moreover, conceptual design and cognitive skills are also required.

Transferable skills

Specific competences

Instrumental

1.-Cognitive skills (understanding, interrelation of ideas and thoughts, analysis and summarizations) are very important for problem solving, planning, analysis and design.
2.- Common sense. Similarly, this competence is a tool to solve design problems and prioritise constraints and requirements.
3.- Time scheduling. Being able to solve a complex problem perhaps sub-optimally given constraints of time and to plan in advance the use of time use is essential in any engineering activity.
4.-Bibliographical  research and use of sources and references. Since design is primarily conceptual problem solving, using existing knowledge is essential in the development of quality software.

Interpersonal

1.- Communicative capacity. The work context of software engineering is usually collaborative work in a team where it is necessary to communicate problems, solutions, criteria, as much in a technical language as to non-technical users. Communication must be effective in both written and oral expositions to customers or in small workgroups.
2 .- Capacity to communicate with experts from other fields. Software engineers interact with other engineers on complex projects as well as users and with consumers of the final software system. Solutions are effective if clear information and needed agreements are obtained.
3 .- Leadership. Being able to make decisions in a workgroup or to guide the thought process to effective solutions. It is essential to be able to unblock the lack of productivity.
4 .- Use of technological tools in order to apply different technologies, approaches or patterns. Tools should be used appropriately.
5 .- Capacity to put the theory into practice. Building software systems of realistic magnitude requires the application of fundamental and theoretical concepts in a strong and systematic practice. 

Systemic

1.- Information Management. A complex problem is presented with a lot of information, sometimes inconsistent or incomplete. A software engineer must organize the documentation requirements, the project management and the product.
2.- Analysis of strengths and weaknesses. Be able to identify the weakest point of a system is essential to judge the quality and safety of a system.
3 .- Decision-making. From a preliminary analysis, be able to choose the best available options.
4 .- Improvements. It is very important to analyse a solution and to suggest improvements.
5 .- Capacity to create new ideas. In order to solve a complex problem, the student must have enough creativity to generate alternatives.
6 .- Interest in quality. This is a basic skill of applying technology solutions to a problem.
7 .- Design and project management. The student has to be able to create solutions that meet requirements and to manage the processes that implement the design.
8 .- Anticipating risks. Every project has risks and possible changes, and the student should be able to adjust planning and design solutions to change or modify the requirements.
9.-Process redesign. Each process that represents low efficiency or it is resulted in low quality products must be revised.
10 .-Capacity to adapt to new solutions. Changes cause adjustments and the student should be able to adapt to them.
11.-Learning capacity. It is very important to be willing to absorb new concepts and new technologies in an age of constant technological change.

The specific competences can be summarized in three main capacities:

1.- Knowledge of tools, methods and practices in software engineering.
2.- Capacity to analyze and discover requirements of a complex problem whose solution involves developing a software system.
3.- Capacity to design a solution to the complex problem that adheres to the principles of software engineering which achieves the functional requirements while meeting quality specifications and it is implemented in time and within anticipated budget.

If we break down these capacities and competences, we will get the next details about specific competences.

1.- Knowledge of the different methodologies of software engineering.
 1.a.- Knowledge of the different models of software life cycle.
 1.b. - Capacity to choose a specific methodology among the existing ones depending on the case.
 1.c. - Capacity to understand how the process of analysis and design decisions affects the final product.

2.- Capacity to analyse and describe the requirements of a complex problem.
  2.a.- Capacity to extract requirements: identify stakeholders, actors, use cases, classified according to whether they are functional, nonfunctional or of the domain requirements.
  2.b.- Capacity to express needs in an organized and technically specific and unambiguous way.
  2.c.- Command in a standard modelling language (ex UML) to express requirements.
  2.d.- Capacity to work in teams to capture requirements.
  2.e - Capacity to communicate requirements to customers clearly to obtain feedback and validate requirements.

3.- Capacity to design a solution to a complex problem of software engineering from requirements.
  3.a.- Capacity to understand given requirements.
  3.b. - Capacity to organize and plan various developments phases and tasks.
  3.c. - Making design decisions. In order to do it, it is necessary to:
       a) Identify the forces involved and find the best solution that get a balance between criteria and priorities.
    b) Verify that the solution has components and modules with minimal coupling and maximum cohesion.
  3.d- Capacity to communicate decisions in the resolution of a case study in a convincing and clear way.
  3.e.- Optimising time: capacity to find a good enough approach to solve a complex problem.
  3.f- Capacity of teamwork.
  3.g. - Knowledge about object-oriented technologies, that is to say:
      a) Command an object-oriented language (for example, C ++)
      b) Know a standard modelling language (for example, UML)
    c) Capacity to implement and use design patterns.
  3.h. - Capacity to implement the design, which consists of:
    a) the capacity to obtain feedback from the code review and testing to adjust the design.
  3.i - Capacity to test and validate the implementation of a solution.

 

  

3. Contents

The brief description of the content is:

  • Software life cycle
  • Visual modelling and the use of languages as UML
  • Analysis and object-oriented design
  • Use and implementation of the software engineering patterns.

The detailed information is the following:

Part I: Software engineering and its processes.

Unit 1: Life cycle and methodologies:

Concepts:

  • Notion of software engineering
  • The connection between software engineering and the professional fields of computing and other professions.
  • Life cycle of software products and their models.

Processes:

  • Identification of different parts or processes of a generic life cycle and the activities carried out in each phase.
  • Analysis of advantages and disadvantages of different schemes for a life cycle and in relation to the context of a particular project.

 Attitudes:

  • Interest in software engineering and its importance in most fields of computing profession.
  • Critical turn of mind to assess the advantages and disadvantages of several models of a life cycle and methodologies of software engineering.EscoltaLlegeix fonèticament

Unit 2: Requirement engineering:

Concepts:

  • Definition and classification of different types of requirements.
  • Elements of a requirements document and related formalisms.
  • Life cycle of requirement engineering.

Processes:

  • Classification of the functional, non-functional and domain requirements.
  • Identification of stakeholders and actors.

Attitudes:

  • Use of "use case diagrams" in UML to analyse and discover requirements.
  • Writing requirement documents as a result of an analysis of a case study.
  • Maintenance of a requirement document and management of its updating as a result of changes. 

Unit 3: Methodologies:

Concepts:

  • Description of various examples of methodologies.
  • Agile methods vs. traditional methods.
  • Methodologies based on processes vs. methodologies based on people.

Processes:

  • Identification of advantages and disadvantages of various methodologies.
  • Applications of the practices and processes of some methodologies.

Attitudes:

  • Be critical to evaluate a methodology.

Part II: Analysis and object-oriented design.

Unit 4: Analysis and object-oriented design:

Concepts:

  • Definition and properties of objects
  • Definition and properties of classes
  • The relationship of inheritance, composition, aggregation, association and dependency
  • Polymorphism and inheritance hierarchies
  • Practice C++ as an example of object-oriented language

Processes:

  • Division of a complex problem using the concepts and procedures of the object-oriented paradigm.
  • Use of the UML language to model object-oriented systems.
  • Using a languages like UML to model object-oriented systems.
  • Using a language like C++ to implement object-oriented systems.
  • Test driven development.

Attitudes:

  • Good programming practices (encapsulation, no duplication, short methods, clear nomenclature)
  • Adoption of conventions for coding in the workgroup.
  • Adaptation to change, the code that conforms a modelling in a constant evolution.
  • Understanding the advantages of test driven development.

Unit 5: modelling with UML:

Concepts:

  • Advantages of visual modelling
  • Definition and brief history of UML
  • Main UML diagrams and the included elements in them.

 

Processes:

  • Usefulness of the various UML diagrams and their use in various stages of the life cycle.
  • Understanding of UML diagrams and their application to a particular problem.
  • Using the most important UML diagrams (sequence and static use case diagrams) in the solution of a problem and, to a lesser extent, some other types of diagrams.

Attitudes:

  • Acceptance of the importance of using a standard formalism when diagrams are used.

Unit 6: Software patterns:

Concepts:

  • The software pattern concept
  • Catalogue of patterns and its usefulness

Processes:

  • The use of UMP to understand a particular design pattern.
  • Using the taxomony of patterns to identify a pattern as a generic solution to a particular problem.
  • Using design patterns for a solution to a specific case.

Attitudes:

There is no need to reinvent the wheel. Most problems that appear in the practice are solved and the solution is available as a pattern that certainly has characteristics of superior quality to what we can develop in a first isolated iteration. 

4. Assessment

4.1 General criteria to evaluate

All competences of the section 3 will be evaluated as well as the specific competences through the following evaluated activities, which are compulsory:

  • A final exam at the end of the third term. To pass it, students must solve correctly a particular problem in limited time.
  • Practical problems solved in the laboratory (in pairs) and can be part of a global project during the subject in two terms (the assessment is continuing and the mark of the eight sessions of practical problems corresponds to 40%). 
  • Three small tests that go deeply into concepts and their discussion with regard to the subject contents.
  • Participation in seminars and discussion of class material, engagement in the seminar sessions and activities during the seminar sessions.  

The final grade for the subject is calculated as follows:

Final exam (10%)
Three small tests (10%)
Practical problem sessions in the laboratory (40%)
            Each session represents 5%
Participation in seminars and discussion of practical activities (10%)
            Each session means 1%

Providing that the following criterion of integrity of the evaluation is kept:

IT IS NECESSARY TO PASS THE FINAL EXAM, AT LEAST TWO OF THE THREE SMALL TESTS, AT LEAST 60% OF THE SEMINAR ACTIVITIES AND COMPLETE MORE THAN 50% OF THE PRACTICAL PROBLEMS SESSIONS TO PASS THE SUBJECT.

4.2 The detailed evaluation is the following:

Final Exam

In the final exam, a particular problem and a set of analysis and design questions are set out. The problem must be solved in limited time. Students can have notes and supplementary material for the exam.

What it will be evaluated?

Transferable skills

  • Problem solution
  • Organization and planning

Specific competences

  • Capacity to analyse and describe the requirements of a complex problem of software engineering.
  • Capacity to design a solution to a complex software problem from given requirements.

When it will be evaluated?

During the exams period in the third term.

Three small tests 

In a limited period of time, several small activities that put concepts into practice should be solved. These activities will be similar to activities done before in seminar or laboratory discussions and they are focused on a particular practice or a specific concept.

What it will be evaluated?

Transferable skills

  • Problem solution
  • Organization and scheduling

Specific competences

  • Capacity to analyse and describe the requirements of a complex problem of software engineering.
  • Capacity to design a solution to a complex software problem from given requirements
  • Capacity to apply UML
  • Capacity to apply concepts of analysis and object-oriented design
  • Capacity to apply and use patterns of software engineering
  • Capacity to distinguish among different methodologies of software engineering

When it will be evaluated?

Since this subjects lasts two terms, approximately, during the middle of both terms, and at the end of the first term of the subject.

Problem sessions in the laboratory

In the laboratory, there will be introduced tools that support the methodologies of software engineering and will make up phases of a project which will be done in group and where general and specific competences will be put into practice. Students should work with another person and make an oral and written practical communication participating in roles as users and stakeholders.

What it will be evaluated?

Transferable skills

  • Problem solution
  • Organization and scheduling
  • Teamwork
  • Efficient communication

Specific competences

  • Capacity to analyse and describe the requirements of a complex problem of software engineering.
  • Capacity to design a solution to a complex software problem from given requirements.
  • Capacity to apply UML
  • Capacity to apply concepts of analysis and object-oriented design
  • Capacity to apply and use patterns in software engineering
  • Capacity to distinguish between different methodologies of software engineering

When it will be evaluated?

The 8 problem sessions are dealt during the two terms, that is to say one problem session every 3 weeks approximately. The activities of a problem and laboratory session should be completed during the session and the results of a problem session should be delivered before the next session.

Participation in seminars and discussion about practical activities

In seminar sessions, solutions and concepts in practical cases and activities will be discussed. Probably, students will be required to present partial or whole solutions and discuss in front of the class or the lecturer. The aim is going deeply into the specific and general skills and getting  feedback and a continuing assessment.

What it will be evaluated?

Transferable skills

  • Problem solution
  • Organization and scheduling
  • Teamwork
  • Efficient communication

Specific competences

  • Capacity to analyse and describe the requirements of a complex problem of software engineering.
  • Capacity to design a solution to a complex software problem from given requirements.
  • Capacity to apply UML
  • Capacity to apply concepts of analysis and object-oriented design
  • Capacity to apply and use patterns in software engineering
  • Capacity to distinguish between different methodologies of software engineering

When it will be evaluated?

The 20 problem sessions are divided into two terms, that is to say 10 sessions each term, so one seminar session weekly. The activities of the seminar sessions usually consist of the discussion of solutions to specific cases; specific problems and collective discussion or the expositions by students to put their solutions to debate alternatives and get feedback form the seminar teacher.5. Bibliography and and didactic resources 

5.1. Recommended 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"

5.2. Complementary bibliography

  • Costal, DolorsEnginyeria del software especificació : especificació de sitemes orientats a objectes amb la notació UML / Dolors Costal, M. Ribera Sancho, Ernest Teniente Barcelona : Edicions UPC, 2000
  • Joyanes Aguilar, LuisPla 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ónMadrid McGraw-Hill cop. 2002
  • Schach, Stephen R. Software engineering / Stephen R. Schach Boston : Irwin, cop. 1993 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 Stroustruptext

5.3. Didactic resources

  • Notes in free format
  • Collection of problems
  • The web of subject in Moodle

6. Metodology

The subject involves 18 theory sessions (2 hours each), 8 problem sessions in laboratories (2 hours each) and 20 seminar sessions (2 hours each) during two terms. 

The theory sessions are lectures where students take part and the basic theoretical concepts and methodologies are introduced and the suitable processes for solving complex problems with tools and techniques of software engineering are shown. 

The seminar sessions are in small groups and deal with discussion of specific problems and the immediate feedback resulting from constructive discussion of proposed solutions by students and of specific activities suggested by teachers.

The problem sessions are in medium-size groups but students have to work in pairs to carry out a software project in phases, implementing also specific tools for the software production in the context of software engineering. The aim of these laboratory sessions is preparing a practical activity and a specific illustration that allows using tools such as CASE, IDE and control of versions ones. Its aim is put theoretical concepts into practice and use the complete of competences and skills in a real, concrete and practical sense.

 

7. Planning of activities

The class timetables and the details for each lecture, problem sessions in laboratory or seminar sessions are published in the calendar and timetables of the WEB by ESUP.