1. introducción a la ingeniería de software (utm 2071)

31
1. Introducción a la Ingeniería de Software Ingeniería de Software UTM 2071 Marzo 2015 1

Upload: mario-a-moreno-rocha

Post on 14-Jul-2015

490 views

Category:

Education


0 download

TRANSCRIPT

Page 1: 1. introducción a la Ingeniería de Software (UTM 2071)

1. Introducción a la Ingeniería de Software

Ingeniería de SoftwareUTM 2071Marzo 2015

1

Page 2: 1. introducción a la Ingeniería de Software (UTM 2071)

1.1 Importancia del Software

La importancia del software en nuestros días es innegable: todas y cada una de nuestras actividades dependen, de cierta medida, al software que nos rodea.

¿Quién hace el software que usamos? ¿Cómo se desarrolla? ¿Qué se necesita para poder desarrollar software de calidad que resuelvan los problemas que nos rodean? ¿Hay suficiente software? ¿Necesitamos más y mejor software?

2

Page 3: 1. introducción a la Ingeniería de Software (UTM 2071)

–President Barack Obama

moveForward(100);

3

Page 4: 1. introducción a la Ingeniería de Software (UTM 2071)

hourofcode.com4

Page 5: 1. introducción a la Ingeniería de Software (UTM 2071)

1.2 Evolución y Características del Software

5

Page 6: 1. introducción a la Ingeniería de Software (UTM 2071)

How Code Has Changed Since The Apollo 11 Moon Landing

http://readwrite.com/2014/07/21/how-computer-code-has-changed-since-apollo-11-landed-on-the-moon

6

Page 7: 1. introducción a la Ingeniería de Software (UTM 2071)

Lehman’s Laws of Software Evolution1 The law of continuing change. -- Any software system used in the real-world must change or become less and

less useful in that environment.

2 The law of increasing complexity. -- As time flows forwards, entropy increases. That is, as a program evolves, its structure will become more complex. Just as in physics, this effect can, through great cost, be negated in the short term.

3 The law of large program evolution. -- Program evolution is a self-regulating process and measurements of system attributes such as size, time between releases, number of reported errors, etc., reveal statistically significant trends and invariances.

4 The law of organisational stability. -- Over the lifetime of a program, the rate of development of that program is approximately constant and independent of the resources devoted to system development.

5 The law of conservation of familiarity. -- Over the lifetime of a system, the incremental system change in each release is approximately constant.

(Lehman, M., (1980), "Programs, life cycles and the laws of software evolution," Proc. IEEE, 15 (3).)

7

Page 8: 1. introducción a la Ingeniería de Software (UTM 2071)

Características del Software

In order to answer this question, this lesson introduces some common software quality characteristics. Six of the most important quality characteristics are maintainability, correctness, reusability, reliability, portability, and efficiency.

Online CS Modules: Software Quality Characteristicscourses.cs.vt.edu/~csonline/SE/Lessons/Qualities/index.html

8

Page 9: 1. introducción a la Ingeniería de Software (UTM 2071)

Margaret Hamilton

Margaret Hamilton, the Engineer Who Took the Apollo to the Moon

https://medium.com/@verne/margaret-hamilton-the-engineer-who-took-the-apollo-to-the-moon-7d550c73d3fa

9

Page 10: 1. introducción a la Ingeniería de Software (UTM 2071)

Software Quality Triangle

10

Page 11: 1. introducción a la Ingeniería de Software (UTM 2071)

Características Operativasa)  Correctness: The software which we are making should meet all the specifications stated by the customer.

b)  Usability/Learnability: The amount of efforts or time required to learn how to use the software should be less. This makes the software user-friendly even for IT-illiterate people.

c)  Integrity : Just like medicines have side-effects, in the same way a software may have a side-effect i.e. it may affect the working of another application. But a quality software should not have side effects.

d)   Reliability : The software product should not have any defects. Not only this, it shouldn't fail while execution.

e)   Efficiency : This characteristic relates to the way software uses the available resources. The software should make effective use of the storage space and execute command as per desired timing requirements.

f)   Security : With the increase in security threats nowadays, this factor is gaining importance. The software shouldn't have ill effects on data / hardware. Proper measures should be taken to keep data secure from external threats.

g)  Safety : The software should not be hazardous to the environment/life.

Keep Reading : http://www.ianswer4u.com/2011/10/characteristics-of-good-software.html#ixzz3TRmYFJ8n

Under Creative Commons License: Attribution Non-Commercial Share Alike

Follow us: ianswer4u on Facebook

11

Page 12: 1. introducción a la Ingeniería de Software (UTM 2071)

Características de Revisióna) Maintainability : Maintenance of the software should be easy for any kind of user.

b) Flexibility : Changes in the software should be easy to make.

c) Extensibility : It should be easy to increase the functions performed by it.

d) Scalability : It should be very easy to upgrade it for more work(or for more number of users).

e) Testability : Testing the software should be easy.

f) Modularity : Any software is said to made of units and modules which are independent of each other. These modules are then integrated to make the final software. If the software is divided into separate independent parts that can be modified, tested separately, it has high modularity.

Keep Reading : http://www.ianswer4u.com/2011/10/characteristics-of-good-software.html#ixzz3TRmwz72n

Under Creative Commons License: Attribution Non-Commercial Share Alike

Follow us: ianswer4u on Facebook

12

Page 13: 1. introducción a la Ingeniería de Software (UTM 2071)

Características de Transicióna) Interoperability : Interoperability is the ability of software to exchange information with other applications and make use of information transparently.

b)  Usability/Learnability: The amount of efforts or time required to learn how to use the software should be less. This makes the software user-friendly even for IT-illiterate people.

b) Reusability : If we are able to use the software code with some modifications for different purpose then we call software to be reusable.

c)Portability : The ability of software to perform same functions across all environments and platforms, demonstrate its portability.

Keep Reading : http://www.ianswer4u.com/2011/10/characteristics-of-good-software.html#ixzz3TRnIamR6

Under Creative Commons License: Attribution Non-Commercial Share Alike

Follow us: ianswer4u on Facebook

13

Page 14: 1. introducción a la Ingeniería de Software (UTM 2071)

1.3 Tipos de Software

14

Page 15: 1. introducción a la Ingeniería de Software (UTM 2071)

Clasificación de Software

http://www.multiwingspan.co.uk/as2.php?page=soft

1. System Software

2. Application Software

3. Development Software (4 generaciones)

List of software categories http://en.wikipedia.org/wiki/List_of_software_categories

15

Page 16: 1. introducción a la Ingeniería de Software (UTM 2071)

–Edsger Dijkstra, The Humble Programmer (EWD340), Communications of the ACM.

“The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no

problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers,

programming has become an equally gigantic problem.”

16

1.4 La Crisis del Software

Page 17: 1. introducción a la Ingeniería de Software (UTM 2071)

Características de la Crisis del Software• Projects running over-budget.

• Projects running over-time.

• Software was very inefficient.

• Software was of low quality.

• Software often did not meet requirements.

• Projects were unmanageable and code difficult to maintain.

• Software was never delivered.

17

Page 18: 1. introducción a la Ingeniería de Software (UTM 2071)

¿Por qué la Crisis del Software?❖ A malady that has carried on this long must be called normal (Booch, p. 8)

❖ Software system requirements are moving targets

❖ There may not be enough good developers around to create all the new software that users need

❖ A significant portion of developers time must often be dedicated to the maintenance or preservation of geriatric software

The Software Crisis

http://www.ics.uci.edu/~ziv/ooad/intro_to_se/tsld010.htm

18

Page 19: 1. introducción a la Ingeniería de Software (UTM 2071)

Why Do We Still Have Software Development Problems?

Improving Software Development Productivity: Effective Leadership and Quantitative Methods in Software Management

By Randall W. Jensen

http://www.informit.com/articles/article.aspx?p=2246403

Tarea 1: ¿Por qué tenemos todavía problemas en el desarrollo de software?

Fecha de Entrega: Martes 17 de Marzo, hora de clase

Valor: 20% del 1er Examen Parcial

19

Page 20: 1. introducción a la Ingeniería de Software (UTM 2071)

1.5 Definición de Ingeniería de Software

20

Page 21: 1. introducción a la Ingeniería de Software (UTM 2071)

1.5 Definición de Ingeniería de Software❖ Software engineering may be defined as

❖ the study of software process, development principles, techniques and notations

❖ the production of quality software, that is delivered on time, within budget, and adequately meets its users needs and expectations

❖ the disciplined application of engineering, scientific and mathematical principles and methods in the economical production of quality software

Ziv Research and Consulting

http://www.ics.uci.edu/~ziv/ooad/intro_to_se/index.htm

21

Page 22: 1. introducción a la Ingeniería de Software (UTM 2071)

Ingeniería de Software vs Programación❖ A Programmer writes a complete program

❖ a software engineer writes a software component that will be combined with components written by other software engineers to build a system

❖ the component one writes may be modified by others

❖ it may be used by others to build different versions of the system long after one has left the project

❖ Programming is primarily a personal activity

❖ Software engineering is essentially a team activity

❖ Programming is just one aspect of software development

❖ Large software systems must be developed similar to other engineering practices

22

Page 23: 1. introducción a la Ingeniería de Software (UTM 2071)

1.6 Paradigmas de Desarrollo de Software

1. Built and Fix model

2. Waterfall y Modified Waterfall models

3. Rapid Prototyping

4. Boehm’s Spiral Model

23

Page 24: 1. introducción a la Ingeniería de Software (UTM 2071)

Métodos Ágiles de DesarrolloManifesto for Agile Software Development (2001)

❖ Individuals and interactions over Processes and tools

❖ Working software over Comprehensive documentation

❖ Customer collaboration over Contract negotiation

❖ Responding to change over Following a plan

An Introduction to Agile Software Developmenthttp://www.serena.com/docs/repository/solutions/intro-to-agile-devel.pdf

24

Page 25: 1. introducción a la Ingeniería de Software (UTM 2071)

Agile Manifesto1 Customer satisfaction by rapid delivery of useful software

2 Welcome changing requirements, even late in development

3 Working software is delivered frequently (weeks rather than months)

4 Close, daily cooperation between business people and developers

5 Projects are built around motivated individuals, who should be trusted

6 Face-to-face conversation is the best form of communication (co-location)

7 Working software is the principal measure of progress

8 Sustainable development, able to maintain a constant pace

9 Continuous attention to technical excellence and good design

10 Simplicity—the art of maximizing the amount of work not done—is essential

11 Self-organizing teams

12 Regular adaptation to changing circumstance

25

Page 26: 1. introducción a la Ingeniería de Software (UTM 2071)

Método de Cascada

26

Page 27: 1. introducción a la Ingeniería de Software (UTM 2071)

Desarrollo Ágil Genérico

27

Page 28: 1. introducción a la Ingeniería de Software (UTM 2071)

Dos Métodos de Ejemplo❖ XP (Extreme Programming) ❖ Scrum

28

Page 29: 1. introducción a la Ingeniería de Software (UTM 2071)

1.7 Herramientas CASE❖ CASE (computer-aided software engineering) is the use of a computer-

assisted method to organize and control the development of software, especially on large, complex projects involving many software components and people.

❖ From the development, system design, coding, through to the testing and maintenance, these computerized tools can be used throughout the life-cycle of software to ensure that the finished product is of high quality, with minimal defect, and in the most time-efficient and cost-effective manner possible.

❖ Utilizing CASE tools help make this possible for software developers.

29

Page 30: 1. introducción a la Ingeniería de Software (UTM 2071)

Beneficios de las herramientas CASE❖ Some of the benefits of CASE and similar approaches are that, by making the

customer part of the process (through market analysis and focus groups, for example), a product is more likely to meet real-world requirements.

❖ Because the development process emphasizes testing and redesign, the cost of servicing a product over its lifetime can be reduced considerably. An organized approach to development encourages code and design reuse, reducing costs and improving quality.

❖ Finally, quality products tend to improve a corporation's image, providing a competitive advantage in the marketplace.

30

Page 31: 1. introducción a la Ingeniería de Software (UTM 2071)

Clasificación de Herramientas CASE

Upper CASE

•requirements

•specification

•planning

•design

Lower CASE

•implementation

•integration

•maintenance

31