Transcript Document

Desarrollo de Software I
Juan Manuel Fernández Peña
[email protected],
http://www.uv.mx/personal/jfernandez
Contenido del curso
•
•
•
•
•
•
•
•
Conceptos básicos
Proceso de desarrollo
UML y sus diagramas más importantes
Calidad y aseguramiento (3s)
Análisis de Requerimientos (3s)
Prueba de software (4s)
Transferencia de software
Mantenimiento (4s)
Evaluación
•
•
•
•
•
•
•
Exámenes:
Ejercicios en clase.
Participación activa (inc. presentaciones):
Reporte de requerimientos
Reporte de Calidad
Reporte de pruebas
Reporte de mantenimiento
30%
10%
20%
10%
10%
10%
10%
• Puntualidad en entrega de reportes, uso de signatura
Conceptos
• sistema, proceso, Ingeniería de Software,
Actividades/flujos
para
desarrollo
(incluidas actividades de soporte)
Sistema
• ¿Qué se entiende por sistema?
• ¿En el caso de software?
Definiciones
• […]
“Conjunto
de
cosas
que,
ordenadamente relacionadas entre sí,
contribuyen
a
determinado
objeto”
Diccionario
• Colección de componentes organizadas
para satisfacer una función o conjunto de
funciones (IEEE 610.12-1990)
Sistema: elementos
•
•
•
•
•
Objetivo o propósito
Partes que lo forman e interacciones
Es una parte de sistema mayor
Frontera que lo separa del medio ambiente
Sistemas abiertos:
– Entradas desde el medio (según necesidades y
propósitos)
– Salidas al medio (según propósitos)
• Indicadores de éxito en su objetivo
Sistema
Ejercicios
• Oficina que emplea Office para su trabajo.
• Estación de estudio del clima
Proceso
• Qué se entiende por proceso
• Cómo están constituidos
Proceso

(1) A sequence of steps performed for a given purpose;
for example, the software development process. (IEEE
610.12)

Cambio o paso de un estado a otro (diccionario)

Serie de acciones o tareas realizadas con el fin de hacer,
producir o alcanzar algo (diccionario)

Dos aspectos: paso de tiempo y transformaciones
Proceso
Jacobson, Booch, Rumbaugh
• Define quién está haciendo qué, cuándo y
cómo alcanzar un determinado objetivo
• Para ser efectivo
– Proporciona normas para desarrollo eficiente
de productos de calidad
– Captura y presenta mejores prácticas
– Reduce riesgos y lo hace predecible
Proceso
• Debe ser capaz de evolucionar a lo largo
de los años, limitado a las posibilidades
reales de:
– Tecnologías (lenguajes, SO, equipos, redes)
– Herramientas
– Personas
– Patrones de organización (trabajo a distancia,
mezcla
de
personal
con
socios,
subcontratación)
Adaptadas de Moprosoft
• Proceso: conjunto de prácticas relacionadas entre sí,
llevadas a cabo por roles y por elementos
automatizados, que utilizando recursos y a partir de
insumos producen un satisfactor de negocio para el
cliente
• Práctica: conjunto de actividades, infraestructura y
mediciones, que describen la ejecución de un proceso
• Actividad: conjunto de tareas específicas asignadas a
uno o más roles
• Rol: responsable de una o más actividades
Adaptadas de Moprosoft
Patrón de procesos
• Definición general
–
–
–
–
–
–
Nombre, categoría y Propósito
Descripción general de actividades
Objetivos, indicadores, metas
Responsabilidad, autoridad
Subprocesos y procesos relacionados
Entradas, salidas, productos internos
• Prácticas
– Roles, actividades, flujo, mediciones, infraestructura
– Situaciones excepcionales, lecciones aprendidas
• Guías de ajuste
Ejercicio procesos
• Defina alguno de los siguientes procesos
– Hacer un pastel
– Retirar dinero de un cajero automático
– Obtener el grado de Maestra(o) en Ingeniería de
Software
• Defina alguno de los siguientes procesos
– Realizar la prueba de unidad de una clase o módulo
de software
– Instalar un producto de software
– Obtener en Internet un tutorial en el uso de una
herramienta
Ingeniería de software
• Qué es
• Qué elementos comprende
• ¿Es realmente una ingeniería?
Bauer, 1972
• Ingeniería del Software trata del
establecimiento de los principios y
métodos de la ingeniería a fin de obtener
software de modo rentable que sea
manejable y trabaje en máquinas reales
Davis, 1993
• SE es la
científicos a
aplicación
de
principios
– La transformación ordenada de un problema
en una solución operativa de software y
– El mantenimiento subsecuente del software
hasta el fin de su vida útil
• Comienza mucho antes de escribir la
primera línea de código y termina mucho
después de liberar la primera versión.
Pressman 2005
• La ingeniería es el análisis, diseño, construcción, verificación
y gestión de entidades técnicas (o sociales). Con
independencia de la entidad a la que se va a aplicar
ingeniería, se deben cuestionar y responder las siguientes
preguntas:
–
–
–
–
–
–
–
–
–
–
¿Cuál es el problema a resolver?
¿Cuáles son las características de la entidad que se
utiliza para resolver el problema?
¿Cómo se realizará la entidad (y la solución)?
¿Cómo se construirá la entidad?
¿Qué enfoque se va a utilizar para no contemplar los
errores que se cometieron en el diseño y en la construcción
de la entidad?
¿Cómo se apoyará la entidad cuando usuarios soliciten
correcciones, adaptaciones y mejoras de la entidad?
Sommerville
• La IS es una disciplina de la Ing que comprende todos
los aspectos de la producción de soft desde las
etapas iniciales de la especificación del sistema, hasta
el mantenimiento de éste después de que se utiliza.
Dos frases clave:
• Disciplina de la ingeniería: los ing hacen que las cosas
funcionen. Aplican teorías, métodos y herramientas
donde sean convenientes, pero las utilizan de forma
selectiva y siempre tratando de descubrir soluciones a
los problemas, aún cuando no existan teorías y
métodos aplicables para resolverlos. También saben
que deben trabajar con restricciones financieras y
organizacionales, por lo cual buscan soluciones
tomándolas en cuenta.
• Todos los aspectos de producción de
software: la IS no solo comprende los
procesos técnicos del desarrollo de
software, sino también actividades tales
como la gestión de proyectos de software
y el desarrollo de herramientas, métodos y
teorías de apoyo a la producción de
software
Ingeniería de Software
swebok 2004
• WHAT IS SOFTWARE ENGINEERING?
• The IEEE Computer Society defines software
engineering as:
• “(1) The application of a systematic, disciplined,
quantifiable approach to the development,
operation, and maintenance of software; that is,
the application of engineering to software.
• (2) The study of approaches as in (1).”1
Aspectos relevantes
• Sistemático: realizado de acuerdo a un sistema o
plan
• Disciplinado: entrenado, que sigue las reglas
• Cuantificable: que expresa o mide la cantidad de
algo
Áreas de conocimiento
•
•
•
•
•
•
•
•
•
•
Software requirements
Software design
Software construction
Software testing
Software maintenance
Software configuration management
Software engineering management
Software engineering process
Software engineering tools and methods
Software quality
Disciplinas relacionadas
• Computer engineering
• Project management
• Computer science
• Quality management
• Management
• Software ergonomics
• Mathematics
• Systems engineering
Actividades protectoras
(Pressman)
•
•
•
•
•
•
•
•
Seguimiento y control del proyecto de software
Revisiones técnicas formales
Garantía de calidad del software
Gestión de configuración del software
Preparación y producción de documentos
Gestión de reutilización
Mediciones
Gestión de riesgos
Computing Curricula 2001 project
(CC2001) (Draft)
• “computer engineering embodies the
science and technology of design, construction,
implementation and maintenance of software
and hardware components of modern
computing systems and computer-controlled
equipment.”
• Algoritmos,
lógica
digital,
interacción
humano-computadora, sistemas operativos,
etc.
Materias complementarias
•
•
•
•
•
•
•
􀂊 Linear algebra;
􀂊 Differential and integral calculus;
􀂊 Differential equations;
􀂊 Probability;
􀂊 Statistics;
􀂊 Numerical analysis;
􀂊 Discrete mathematics.
Ergonomía (partes)
•
•
•
•
•
•
•
•
•
•
Cognition
Cognitive AI I: Reasoning
Machine Learning and Grammar Induction
Formal Methods in Cognitive Science: Language,
reasoning, Cognitive Architecture
Cognitive AI II: Learning
Foundations of Cognitive Science
Information Extraction from Speech and Text
Lexical Processing
Computational Language Acquisition
The Nature of HCI
Systems engineering
• The International Council on Systems Engineering
(INCOSE)11 states that “Systems Engineering is an
interdisciplinary approach and means to enable the realization
of successful systems. It focuses on defining customer needs
and required functionality early in the development cycle,
documenting requirements, then proceeding with design
synthesis and system validation while considering the
complete
problem:
operations
performance,
test,
manufacturing, cost and schedule, training and support and
disposal.
• Systems Engineering integrates all the disciplines and
specialty groups into a team effort forming a structured
development process that proceeds from concept to
production to operation. Systems Engineering considers both
the business and the technical needs of all customers with the
goal of providing a quality product that meets the user needs.
Explorar qué tanto saben de …
Requerimientos
Diseño
Construcción
Prueba
Mantenimiento