Está en la página 1de 19

FUNDAMENTOS DEL

DISEÑO DE
SOFTWARE
Miguel aguilera
CI:24,875,246
Introducción

A través de la historia de la ingeniería del software ha evolucionado un conjunto


de conceptos fundamentales de diseño de software, aunque el grado de interés
en cada concepto ha variado con los años, han pasado la prueba del tiempo
ofreciendo cada uno al ingeniero de software fundamentos sobre el cual pueden
aplicarse métodos de diseño más elaborados.
El diseño de Software juega un papel importante en el desarrollo de software lo
cual permite al ingeniero de software producir varios modelos del sistema o
producto de que se va a construir el mismo que forman una especie de plan de la
solución de la aplicación. Estos modelos puede evaluarse en relación con su
calidad y mejorarse antes de generar código, de realizar pruebas y de que los
usuarios finales se vean involucrados a gran escala. El diseño es el sitio en el que
se establece la calidad del software
Fundamentos del Diseño de Software

Conceptos generales de diseño.


El software no es el único campo donde el diseño se encuentra inmiscuido. En general
podemos ver el diseño como una forma para resolución de problemas. El problema sin
solución definitiva es interesante en términos de comprensión del diseño. Un numero
de otras nociones y conceptos son también de interés en la comprensión del diseño en
su sentido general, objetivos, limitaciones, alternativas, representaciones y soluciones

Contexto del diseño de software.


El diseño del software se encuentra en el núcleo técnico de la respectiva ingeniería y
se aplica de manera independiente al modelo de software que se utilice. Una vez que
se analizan y especifican los requisitos, el diseño del software es la última acción de
la ingeniería correspondiente dentro de la actividad del modelado, la cual establece
una plataforma para la construcción (generación de código y prueba).
Fundamentos de programación orientada
a objetos
 Clase: Esta puede ser definida como la estructura dentro de una
plantilla de programación, esta también puede regir el
comportamiento de objetos de un tipo determinado. En visual
Basic se ocupa una clase por cada elemento gráfico dentro del
entorno de programación.
 Jerarquía de clases: Una clase como se menciono anteriormente es
una plantilla de programación, la jerarquía de clases no es más
que la herencia de características o datos a otras clases de
mayor o menor nivel dentro del mismo programa.
 Constructor: método especial que se puede definir en una clase y que
se llama para crear una instancia de la clase. Se suele utilizar
un constructor para especificar valores predeterminados o
realizar operaciones de configuración del objeto.
 Tipo de datos: Cuando se realiza una programación se debe tener en
cuenta que el programa no entiende que los caracteres que
ingresamos son numéricos o alfanuméricos, por lo tanto se debe
especificar que tipos de datos ingresamos en caso de necesitar
realizar procedimientos matemáticos o físicos.
 Variables: Al trabajar con programación orientada a objetos es muy
común el uso de variables, por ejemplo en el caso de una
calculadora que suma 2 números y entrega un resultado, los 3
datos son variables y pueden interpretarse como X1 + X2 = Xt,
una vez que ingresemos los valores las variables ya poseen datos
definidos y en dicha operación se transforman en constantes
siempre y cuando tengan datos asignados


Garantías de calidad del Software

De acuerdo con el Departamento de Seguridad Nacional de los Estados Unidos,


las características de la garantía de software son:
 Confiabilidad: No existen vulnerabilidades explotables, maliciosas o
insertadas no intencionalmente;
 Ejecución predecible: Confianza de que el software, cuando se ejecute,
funcione como debe de hacerlo;
 Conformidad: Conjunto planeado y sistemático de actividades
multidisciplinarias que garanticen los procesos de software y que
los productos cumplan con los requisitos, normas y
procedimientos.

Disciplinas que contribuyen a la garantía de software, divididos en áreas de


conocimiento y competencia: Ingeniería de software, Ingeniería en sistemas,
Ingeniería en sistemas de seguridad de la información, Garantía de
información, Prueba y Evaluación, Seguridad, Gestión de Proyectos y
Adquisición de Proyectos.

La garantía de software es una iniciativa estratégica del Departamento de


Seguridad Nacional de los Estados Unidos para promover la integridad,
seguridad y fiabilidad del software. El programa de garantía de software se
basa en la Estrategia Nacional para Asegurar el Espacio Cibernético –
Acción/Recomendación.

“El Departamento de Seguridad Nacional de los Estados Unidos brindará un


esfuerzo nacional público–privado para promulgar las mejores prácticas y
metodologías que promuevan la integridad, seguridad y confiabilidad en el
desarrollo de código de software, incluyendo procesos y procedimientos que
disminuyan las posibilidades de código erróneo, código malicioso o puertas
trampa que puedan ser introducidas durante el desarrollo.”5 Existen
programas de código abierto para la garantía de software, que ayudan a
identificar potenciales vulnerabilidades de seguridad.
Técnicas de pruebas de software.

Hoy en dia los proyectos de software son más complejos que nunca antes. La
industria del software crece a una velocidad altísima y los desarrolladores de
software han de estar a la última de novedades y oportunidades en el mundo del
software para utilizar la última tecnología de la mejor manera. Por lo que esta
vez, he decidido hablar un poco mas de la parte de testeo, que juega un rol
crucial en las construcciones de plataformas escalables de gran actuación.

Hay muchos tipos de negocio, pero en el desarrollo de software, la calidad es


esencial para el éxito. Para garantizar este éxito, la función de testeo es vital.
Los tests de software ayudan a los equipos a evaluar el software con los
requerimientos e información recogida de los usuarios y el product owner,
simplificando la vida de los developers.
1. Prueba unitaria

Empecemos con el primero y más pequeño de


todos – prueba unitaria. La prueba unitaria se
aplica en el elemento más pequeño de un
sistema, cada componente es testeado para
asegurar que funciona correctamente.
Normalmente desarrolla una única función
cohesiva. La función de la prueba unitaria es
de analizar cada pequeña parte y testear que
funciona correctamente.
La prueba unitaria se usa mayormente por
desarrolladores ágil, especialmente en
programadores extremos, los amantes del
TDD. Sin embargo las pruebas unitarias son
más populares hoy en dia y otros
desarrolladores están empezando a utilizarlo.
2. Pruebas de integración

 La prueba de integración es una extensión lógica


de las pruebas unitarias. Dos unidades que ya
han sido testeadas y combinadas en un
componente y su interface son testeadas
entre ellas. Un componente, en este ejemplo,
se refiere a un agregado que está integrado en
más de una unidad, estas son combinadas en
componentes, que son agregadas por orden en
partes mas grandes del programa. El motivo
de las pruebas de integración es de verificar la
funcionalidad y la seguridad entre los
componentes que han sido integrados.
Identifica los problemas que ocurren cuando
las unidades se combinan. Esto es
particularmente beneficioso porque determina
cómo de eficientes son los tests trabajando
juntos. Recuerda que no importante como de
eficiente cada test funcione, si no están
propiamente integrados. Afecta a la
funcionalidad del programa de software.
Además, es importante conocer que las
pruebas de integración están basados en
pruebas unitarias con base de datos u otra
biblioteca ajena de terceras partes.
3. Pruebas funcionales

Las pruebas funcionales se basan en asegurarse


de que todas las características funcionen de
cabo a rabo. Por ejemplo, testear que las
características de un usuario se actualicen
cuando el usuario clicka en el botón de guardar.
Las pruebas funcionales testean una pequeña
parte de la funcionalidad del sistema entera. Se
aplica para verificar que las aplicaciones y
funcionalidades del software actúan
correctamente acorde a un diseño específico.
Las pruebas funcionales son elementos cruciales
para asegurar la calidad del producto software y
confirmar que actúa acorde a sus funciones tal y
como el usuario espera. Los test se utilizan para
verificar que la aplicación, página web ejecute
sus funcionalidad a través de una respuesta
adecuada a los controles de usuario, una interfaz
de usuario consistente, integración con otros
sistemas y procesos de negocios, y manejo
adecuado de información y búsqueda.
4. Pruebas de rendimiento

Y la última es la prueba de rendimiento. En el


desarrollo de software, la prueba de rendimiento
es una práctica de test que determina la
actuación de un sistema en términos de respuesta
y estabilidad en una carga de trabajo en
particular. También puede servir para investigar,
medir, validar o verificar otros atributos de
calidad del sistema, como la escalabilidad,
seguridad y uso de recursos.
Las pruebas de rendimiento construye unos
estándares de actuación en la implementación,
diseño y arquitectura de un sistema.
Puede servir para verificar que una plataforma de
software presenta las especificaciones del
product owner. Este test muestra como eficiente
es un software. Chequea como de bien un
software trabaja bajo una carga máxima de
trabajo.
Mantenimiento de software

En ingeniería del software, el mantenimiento de software es la modificación de un producto de software


después de la entrega, para corregir errores, mejorar el rendimiento, u otros atributos.1 El
mantenimiento del software es una de las actividades más comunes en la ingeniería de software.
El mantenimiento de software es también una de las fases en el ciclo de vida de desarrollo de sistemas
que se aplica al desarrollo de software. La fase de mantenimiento es la fase que viene después del
despliegue (implementación) del software en el campo.
Una percepción común del mantenimiento es que se trata meramente de la corrección de defectos. Sin
embargo, un estudio indicó que la mayoría, más del 80%, del esfuerzo de mantenimiento es usado para
acciones no correctivas Esta percepción es perpetuada por usuarios enviando informes de problemas que
en realidad son mejoras de funcionalidad al sistema.[cita requerida]
El mantenimiento del software y la evolución de los sistemas fue abordada por primera vez por Meir M.
Lehman en 1969. Durante un período de veinte años, su investigación condujo a la formulación de las
leyes de Lehman. Principales conclusiones de su investigación incluyen que el mantenimiento es
realmente un desarrollo evolutivo y que las decisiones de mantenimiento son ayudadas por entender lo
que sucede a los sistemas (y al software) con el tiempo. Lehman demostró que los sistemas continúan
evolucionando con el tiempo. A medida que evolucionan, ellos crecen más complejos a menos que se
toman algunas medidas como refactorización de código para reducir la complejidad.
Fundamentos al requerimiento del
diseño
 La importancia de la ingeniería de software está en fomentar un enfoque
sistemático para el desarrollo, la implementación y el mantenimiento del
software a través del ciclo de la vida del sistema de software. Es muy
diferente escribir programas pequeños y eficientes que desarrollar
sistemas de software. Las técnicas utilizadas para su desarrollo al realizar
programas, no parecen adecuadas cuando se aplican al desarrollo de
sistemas grandes. Cuando se utilizan metodologías de desarrollo
inapropiados, los proyectos tienden a presentar un aumento significativo
de los costos y un consumo extra de tiempo
La ingeniería de software apunta a proveer metodologías y técnicas que ayuden a
desarrollar sistemas de software a tiempo, y a su vez, que aseguren que el
desarrollador cumpla con las expectativas de calidad y permanezca dentro del
presupuesto.
Las características de un proceso de
software se resumen de esta forma:
 Comprensión: Este requiere claridad y declaración de la naturaleza explicita de la definición de proceso.

Visibilidad: Se refiere a la capacidad de observar la salida de varias actividades del proceso, de manera que se mida el
progreso de proceso.

Confiabilidad: Se refiere a la capacidad del proceso para evadir errores o detectar errores y manejarlos antes de que
estos avancen en el producto.

Robustez: Se refiere a la capacidad del proceso de no detenerse a pesar de problemas inesperados.

Facilidad de mantenimiento: Se refiere a la cantidad de modificaciones que pueden hacerse al sistema de software sin
producir errores.

Facilidad de verificación: Un proceso es verificable si sus propiedades pueden ser fácilmente verificables.

Rapidez: Se refiere a la agilidad y rapidez del proceso para ser capaz de entregar un producto final a partir de las
especificaciones.

Facilidad de soporte: Se refiere a la posibilidad de que las actividades del proceso sean soportadas por un conjunto de
herramientas automatizadas.

Métodos de análisis de requerimientos.

 Cuando deseamos abarcar el desarrollo de proyectos de Software, debemos


realizar ciertas acciones que garanticen establecer las metas a alcanzar,
acuerdos que permitan al cliente y al equipo desarrollador unos criterios
de las funcionalidades que adoptará la solución final entregada, este
aspecto es fundamental en todo proyecto de Software; por tal manera
revisaremos en este artículo las técnicas de análisis de requerimientos,
¿cuáles son? y ¿para qué sirven?, con la finalidad de ponerlas en práctica
en nuestros desarrollos.
Entrevistas

 Otra técnica fundamental en la consecución de datos e información son las


entrevistas; mediante una entrevista, interactuamos de forma directa con
las personas implicadas en el proceso que deseamos sistematizar, esta será
la oportunidad de realizar todas las preguntas necesarias para entender el
proceso.
Proyectos de Software existentes

 Si bien es cierto en la actualidad existen una gran gama de soluciones


tecnológicas de todo tipo, y el Software no se queda excluido; sea cual
sea el desarrollo que deseas llevar a cabo es muy probable que exista un
Software con las mismas características o muy similar, la finalidad de esta
técnica es analizar los funcionamientos de estos proyectos existentes y
utilizar la lógica y los métodos de trabajo.
Para esta técnica puedes aprender a utilizar un Software, solicitar capacitación o
investigar su mapa de navegación (manual de usuario).
Prototipos

 Realizando prototipos podemos de forma fácil, hacernos una imagen de lo


que será el proyecto como tal; simular el producto final y sus
funcionalidades permitirá generar nuevas ideas, inclusive descartar ideas
que inicialmente parecían relevantes.
El uso de prototipos garantiza confiabilidad en el producto entregado; debido a
que estos buscan verificar que se cumplen con los requerimientos recolectados.
Conclusión
 Los cambios radicales en hardware a partir de la última mitad del siglo anterior
causaron una forzada evolución del software, lo cual ha generado el
establecimiento de modelos, estándares y redefinición de conceptos que
ratifican un establecimiento cada vez más fuerte de la Ingeniería del Software
a nivel mundial.
 La gestión de proyectos de desarrollo de software es motor esencial para el éxito
de cualquier proyecto de este tipo. La gestión debe fraccionarse en las etapas
definidas claramente, manteniendo en cuenta los 4 requisitos indispensables:
las personas, el producto, el proceso y el proyecto.
 La programación orientada a objetos es una extensión actual de la tecnología que
si bien ha evolucionado desde mediados del siglo pasado, presenta hoy día un
enfoque nuevo y distinto al tradicional.
 El diseño de la arquitectura es parte fundamental de los principios de la Ingeniería
del Software y es único en el sentido de que se organiza en función de los
objetos y clases que se definirán. De hecho, probablemente la parte más
difícil del desarrollo de software orientado a objetos es la identificación de
clases necesarias y la forma como interactúan entre sí.
Bibliografía
 [1] Swebok_Ironman_June_23_ 2004
 [2] http://www.info-ab.uclm.es/asignaturas/42530/pdf/M1tema2.pdf
 [3] http://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software
 [4] http://www.monografias.com/trabajos28/proyecto-uml/proyecto-
uml.shtml
 [5] PRESSMAN Roger S., 2005. Ingeniería de Software. Un enfoque práctico.
Sexta edición. 2005, Estados Unidos.

También podría gustarte