1. Conocimiento de la Ingeniería del Software
1.1. El cuerpo de conocimientos de la ingeniería de software ha evolucionado para convertirse en un “núcleo estable” que representa cerca de “75% del conocimiento necesario para desarrollar un sistema complejo”.
2. Principios Fundamentales
2.1. Principios que guían el proceso
2.1.1. Ser ágil
2.1.2. En cada etapa, centrarse en la calidad
2.1.3. Estar listo para adaptar
2.1.4. Formar un equipo eficaz
2.1.5. Establecer mecanismos para la comunicación y coordinación
2.1.6. Administrar el cambio
2.1.7. Evaluar el riesgo
2.1.8. Crear productos del trabajo que agreguen valor para otros
2.2. Principios que guían la práctica
2.2.1. Divide y vencerás
2.2.2. Entender el uso de la abstracción
2.2.3. Buscar la coherencia
2.2.4. Centrarse en la transferencia de información
2.2.5. Construir software que tenga modularidad eficaz
2.2.6. Buscar patrones
2.2.7. Representar el problema y su solución desde varias perspectivas diferentes
2.2.8. Tener en mente que alguien dará mantenimiento al software
3. Principios que guían toda Actividad Estructural
3.1. Principios de Comunicación
3.1.1. Escuchar
3.1.2. Antes de comunicarse, prepararse
3.1.3. Alguien debe facilitar la actividad
3.1.4. Es mejor la comunicación cara a cara
3.1.5. Tomar notas y documentar las decisiones
3.1.6. Perseguir la colaboración
3.1.7. Permanecer centrado
3.1.8. Si algo no está claro, hacer un dibujo
3.1.9. Avanzar
3.1.10. Negociar
3.2. Principios de Planeación
3.2.1. Entender el alcance del proyecto
3.2.2. Involucrar en la actividad de planeación a los participantes del software
3.2.3. Reconocer que la planeación es iterativa
3.2.4. Estimar con base en lo que se sabe
3.2.5. Tomar en cuenta los riesgos
3.2.6. Ser realista
3.2.7. Ajustar la granularidad
3.2.8. Definir cómo se trata de asegurar la calidad
3.2.9. Describir cómo se busca manejar el cambio
3.2.10. Dar seguimiento al plan con frecuencia y hacer los ajustes que se requieran
3.3. Principios de Modelado
3.3.1. Elaborar el software
3.3.2. Viajar ligero
3.3.3. Tratar de producir el modelo mas sencillo
3.3.4. Construir modelos susceptibles al cambio
3.3.5. Enunciar un propósito explícito para cada modelo creado
3.3.6. Adaptar los modelos
3.3.7. Construir modelos útiles
3.3.8. No ser dogmático respecto de la sintaxis del modelo
3.3.9. Confiar en el instinto
3.3.10. Obtener retroalimentación
3.4. Principios de Construcción
3.4.1. Principios de Codificación
3.4.2. Principios de Preparación
3.4.2.1. Entender el problema
3.4.2.2. Comprender los principios y conceptos de diseño
3.4.2.3. Elegir un lenguaje adecuado
3.4.2.4. Elegir el ambiente de programación
3.4.2.5. Crear pruebas unitarias
3.4.3. Principios de Programación
3.4.3.1. Restringir algoritmos
3.4.3.2. Usar programación por parejas
3.4.3.3. Seleccionar la estructura adecuada
3.4.3.4. Entender la arquitectura del sotfware
3.4.3.5. Lógica condicional sencilla
3.4.3.6. Crear lazos anidados
3.4.3.7. Seleccionar nombres significativos
3.4.3.8. Escribir el código
3.4.3.9. Crear imágenes visuales
3.4.4. Principios de Validación
3.4.4.1. Realizar el recorrido del código
3.4.4.2. Llevar a cabo pruebas unitarias
3.4.4.3. Rediseñar el código
3.4.5. Principios de la Prueba
3.4.5.1. Todas las pruebas deben poder rastrearse hasta los requerimientos del cliente
3.4.5.2. Las pruebas deben planearse mucho antes de que den comienzo
3.4.5.3. El principio de Pareto se aplica a las pruebas de software
3.4.5.4. Las pruebas deben comenzar “en lo pequeño” y avanzar hacia “lo grande”
3.4.5.5. No son posibles las pruebas exhaustivas
3.5. Principios de Despliegue
3.5.1. Manejo de las expectativas de los clientes
3.5.2. Ensamblaje y prueba del paquete completo
3.5.3. Establecimiento de un régimen de apoyo
3.5.4. Proporcionar materiales de aprendizaje apropiados
3.5.5. Corrección del software antes de la entrega