2. Ingeniería de software es la aplicación de un
enfoque sistemático, disciplinado y
cuantificable al desarrollo, operación y
mantenimiento de software, y el estudio de
estos enfoques, es decir, la aplicación de la
ingeniería al software. Es la aplicación de la
ingeniería al software, ya que integra
matemáticas, ciencias de la computación y
prácticas cuyos orígenes se encuentran en la
ingeniería.
2
3. 3
Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los
requisitos del cliente y examinar cualquier restricción que se pueda aplicar.
Diseño y arquitectura
Se refiere a determinar cómo funcionará de forma general sin entrar en
detalles. Consiste en incorporar consideraciones de la implementación
tecnológica, como el hardware, la red, etc. Se definen los casos de uso para
cubrir las funciones que realizará el sistema, y se transforman las entidades
definidas en el análisis de requisitos en clases de diseño, obteniendo un
modelo cercano a la programación orientada a objetos.
Programación
Reducir un diseño a código puede ser la parte más obvia del trabajo de
ingeniería de software, pero no es necesariamente la porción más larga. La
complejidad y la duración de esta etapa está íntimamente ligada al o a los
lenguajes de programación utilizados.
4. Pruebas
Consiste en comprobar que el software realice correctamente las tareas
indicadas en la especificación. Una técnica de prueba es probar por separado
cada módulo del software, y luego probarlo de forma integral, para así llegar
al objetivo. Se considera una buena práctica el que las pruebas sean
efectuadas por alguien distinto al desarrollador que la programó, idealmente
un área de pruebas; sin perjuicio de lo anterior el programador debe hacer
sus propias pruebas.
Documentación
Todo lo concerniente a la documentación del propio desarrollo del software y
de la gestión del proyecto, pasando por modelaciones (UML), diagramas,
pruebas, manuales de usuario, manuales técnicos, etc. Todo con el propósito
de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones
al sistema.
Mantenimiento
Mantener y mejorar el software para enfrentar errores descubiertos y nuevos
requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del
software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver
con dar mantenimiento. Una pequeña parte de este trabajo consiste en
arreglar errores, o bugs. La mayor parte consiste en extender el sistema para
hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la
Ingeniería civil, Arquitectura y trabajo de construcción es dar mantenimiento.
4
6. El diseño de los datos
Trasforma el modelo de dominio de la
información, creado durante el análisis, en las
estructuras de datos necesarios para
implementar el Software.
El diseño arquitectónico
Define la relación entre cada uno de los
elementos estructurales del programa.
6
7. El Diseño de la Interfaz
Describe como se comunica el Software consigo mismo,
con los sistemas que operan junto con él y con los
operadores y usuarios que lo emplean.
El Diseño de procedimientos
Pero hay que tener en cuenta que el diseño del sistema
debe servir como guía para las personas involucradas en el
desarrollo de software Debe proporcionar una imagen
completa del software desde una perspectiva de
implementación y se tiene que tener el cuidado de incluir
todos los requerimientos del sistema.
Para crear un buen diseño tenemos que basarnos en los
requerimientos que obtuvimos, hay que considerar los
datos que se deseen de entradas y salida y como estos
interactúan en el sistema y en la base de datos, el diseño
de los procesos del sistema y la interfaz
7
9. -¿De qué se trata?: Validar un dato es evaluarlo mediante algún proceso que
compruebe que el mismo cumple con los requisitos necesarios para sernos de
utilidad a la hora de procesarlo y generar información.
Tengan en cuenta que: Datos Inútiles = Información Inútil = Malas decisiones.
-¿Cómo lo hago?:
A la hora de programar hay que pensar siempre que el usuario no va a hacer lo que
nosotros creemos, y muchas veces no hará lo que le indiquemos. Es con esa
mentalidad que debemos pensar para realizar una buena validación y captura de
Datos, y posterior generación de información fiable.
Supongamos que tenemos una aplicación que requiere el ingreso de datos
personales básicos:
Le pondremos un campo de ingreso de edad*:
- No debemos dejar que ingrese valores absurdos:
Ej.:
- Edad=-1
-Edad=203(puede llegar a darse el caso pero es muy improbable).
-Edad=asdf(he visto casos así, cualquier verdura acepta).
9
10. los archivos que mantienen almacenada la
información son creados por diferentes tipos de
programas de aplicación existe la posibilidad de
que si no se controla detalladamente el
almacenamiento, se pueda originar un duplicado
de información. Esto aumenta los costos de
almacenamiento y acceso a los datos, además de
que puede originar la inconsistencia de los datos
- es decir diversas copias de un mismo dato no
concuerdan entre sí -, por ejemplo: que se
actualiza la dirección de un cliente en un archivo
y que en otros archivos permanezca la anterior.
10
13. Matemáticas: fundamental. Probablemente no necesitas ser un
genio de las matemáticas, pero es básico saber álgebra,
geometría y probabilidades. Yo agregaría matemáticas discretas,
es fundamental saber contar, hablaremos sobre matemáticas
más adelante en este blog.
Estimación: Hay que saber estimar, ese es uno de los mayores
defectos de los programadores, y algo que deben aprender a
mejorar rápidamente en su carrera. Una buena manera es dividir
el problema en partes más pequeñas, estimar el esfuerzo de cada
una, llevar un registro de las estimaciones, y después revisar que
fue lo que estuvo mal con la estimación, y corregir. Aprender en
retrospectiva, para ir mejorando las estimaciones.
Micro economía: en esto estoy totalmente de acuerdo, se deben
entender los fundamentos de la economía, oferta, demanda,
costo de oportunidad, etc. Muchos programadores ignoran el
aspecto económico o no se preocupan del impacto que su
perfeccionismo pueda tener sobre el negocio. Muchas decisiones
en un proyecto van a estar influenciada por el dinero. Se debe
entender la diferencia entre lo perfecto y lo que es relevante para
el valor del negocio.
13
14. Diseño de Interfaces de Usuario: finalmente otra persona será la que use
tu programa, y hay una manera adecuada de desplegar la información y
definir las interacciones. Muchas interfaces malas son creadas por
programadores, que no se preocupan de la importancia de la usabilidad
y la accesibilidad. No se trata de que se vea lindo, se trata de que sea
usable, entendible. Hay que aprender el lenguaje de los controles en
pantalla y saber cuando usar cada control para cada uso específico.
Lenguajes de Bajo Nivel: C o Assembler. En algún momento aparecen los
problemas de desempeño, y hay que entender cómo un lenguaje de alto
nivel nos abstrae de detalles de bajo nivel como punteros, uso de
memoria, branching, aritmética, representación de la información en
bits, etc. Cuando uno entiende esto puede llegar a optimizar el código de
mejor manera.
Arquitectura de Computadores, o cómo funciona un computador
internamente. Esto incluye el conocimiento de hardware, redes, sistemas
operativos. En algún momento se encontrarán con problemas de pagina
miento, pérdida de paquetes, falla a nivel de hardware, y hay que saber
como enfrentar esos problemas.
Programar, programar, programar. Escribir código, leer código. Participar
en algún proyecto opensource, escribir tu propio código, realizar algún
code kata (ya veremos que es eso). Leer blogs sobre programación donde
enseñen alguna técnica, o leer tutoriales sobre un framework, y
probarlos por ti mismo.
14