miércoles, 31 de agosto de 2011

La crisis del software.

Propiamente la crisis del software se detecto en la década de los 60's, y desde 1968 se empezó a utilizar este término, en la primera conferencia organizada por la OTAN sobre desarrollo de software, así mismo, se utilizó por primera vez el término ingeniería del software para describir el conjunto de conocimientos que existían en aquel estado inicial. En la siguiente imagen veremos la evolución del software y la aparición de la crisis del software.


Definición: Es el hecho de que el software que se construye no solamente no satisface los requerimientos ni las necesidades pedidos por el cliente, sino que además excede los presupuestos y los horarios de tiempos.


A raíz de la crisis del software los científicos se dieron cuenta de la necesidad de desarrollar mejores técnicas para un sólido y métodico desarrollo de software que garantice su calidad en términos de estabilidad, robustez, funcionalidad. 


Causas de la crisis del software.

  • Requerimientos sin fin, Cambios continuos y descontrolados.
  • Cronogramas arbitrarios.
  • Insuficiente tiempo para probar.
  • Entrenamiento inadecuado.
  • Estándares fuera de control.
  • Tecnología.
Como se ve, si nosotros iniciamos con requerimientos que no tienen fin o estamos  cambiando a cada rato de requerimientos, lo más seguro es que el tiempo se nos venga ensima, y así habrá menos tiempo para probar el producto, que en la mayoría de los casos esto es lo que ocasiona que el  producto que se venda salga con fallas, al igual que si se pone a personal que no esta previamente capacitado en el tema, o las normas que se deben de seguir no son las mas adecuadas, o las herramientas tecnológicas que se están usando son muy obsoletas o no son las adecuadas para ese proyecto, propician que el producto a entregar salga con muchas fallas.


Como ejemplo de la crisis del software, citare el sistema operativo Windows Vista.



La gran mayoría de nosotros manejamos cualquier sistema operativo de la familia Windows, inclusive hubo personas de nuestra generación que llegaron a utilizar una versión anterior a Windows 2000.
El sistema operativo que mas agrado a la mayoría de los usuarios de Windows fue el Windows XP, porque era muy cómodo, sin embargo, los avances en el desarrollo de software se san día con día, lo que sucedió con este sistema operativo es que se volvió "obsoleto" y es así que sale al mercado Windows Vista. Para los usuarios en un principio, esto significaría mejores cosas en su interfaz, en programas, etc., pero la verdad es que este sistema operativo en sus inicios tuvo muchas fallas, como que no admitía la instalación de ciertos programas, o que requería estar en constante actualización, por mencionar solo algunas. Es por eso que este es el sistema operativo que menos se utiliza de la familia Windows, las causas posiblemente fueron una mala planeación al inicio o el tiempo de entrega se les vino ensima.


Otro caso soprendente es el del accidente del vuelo 603 de Aeroperú del 2 de octubre de 1996, producido porque el sistema informático del avión (un Boeing 757) se volvió loco a causa de la obstrucción de uno de los juegos de puertos estáticos que miden la presión atmosférica para calcular la altura y velocidad del avión: en lugar de indicar que había una discrepancia entre los datos que proporcionaban los puertos estáticos de la intrumentación del capitán y los del copiloto, el sistema a ratos no daba datos y a ratos daba datos incorrectos, llegando  a dar a la vez alarmas de exceso de velocidad y de peligro de entrada en pérdida por ir demasiado despacio, lo que evidentemente no puede suceder a la vez. Dado que el vuelo era de noche y al no poder confiar en sus instrumentos, los pilotos estaban a todos los efectos volando a ciegas por lo que terminaron por chocar con el mar cuando intentaban volver al aeropuerto y creían estar volando a una altura segura.


Es por eso que al momento en que vamos a desarrollar un software, necesitamos analizar muy bien que es lo que vamos a crear y tomar en cuenta cuales son los requerimientos del cliente.


Referencias:
http://www.itlalaguna.edu.mx/academico/carreras/sistemas/ingsofware1/Unidad1.pdf
http://sitiopoo.galeon.com/crisis.html
http://www.informatizate.net/index.php?option=com_content&view=article&id=67%3Acomo-desarrollar-software-y-no-morir-en-el-intento&catid=36%3AArt%C3%ADculos+de+Miembros+de+informatizate&Itemid=62&limitstart=4
http://www.microsiervos.com/archivo/ordenadores/software-fuera-de-control.html
http://www.microsiervos.com/archivo/ordenadores/software-fuera-de-control.html
http://www.lawebdelpiloto.com/2011_05_08_archive.html

Metodologías de diseño de software.

Primero empezaremos por definir lo que es una metodología.


Metodología: Conjunto de procedimientos, técnicas, herramientas y un soporte documental que ayuda a los desarrolladores a realizar nuevo software.



La metodología indica cómo hay que obtener los distintos productos parciales y finales.


Existen tres generaciones de metodologías:

  • Desarrollo Convencional (Sin Metodología) .
  • Desarrollo Estructurado.
  • Desarrollo Orientado a Objetos.
A continuación veremos las características de cada una de ellas:


Desarrollo Convencional.
  • Los resultados finales son impredecibles.
  • No hay forma de controlar lo que está sucediendo en el proyecto.
  • Los cambios organizativos afectan negativamente al proceso de desarrollo.
Con este tipo de desarrollo sin metodología, uno de los principales riesgos que se corre es que el software no funcione adecuadamente o definitivamente no funcione, haciendo que el se le entregue un producto que no sirve al cliente o en el peor caso no entregar el producto final.


Desarrollo Estructurado.
  • Programación estructurada.
  • Diseño estructurado.
  • Análisis estructurado.
Con este tipo de desarrollo el software será mejor de lo que se esperaba con el anterior desarrollo, ya que al ser todo estructurado se tiene un mejor control de las cosas,por lo cual hace mas completo el desarrollo del software y el producto final será de mejor calidad que uno que no tiene una metodología.


Desarrollo Orientado a Objetos.
  • Se eliminan las fronteras entre las fases, debido a la naturaleza iterativa del desarrollo OO.
  • Aparece una nueva manera de concebir los lenguajes de programación, al incorporarse bibliotecas de clases y otros componentes reutilizables.
  • Hay un grado alto de iteración y soplamiento, lo que lleva a una forma de trabajo muy dinámica.

La esencia del desarrollo orientado a objetos  es la identificación y organización de conceptos del dominio de la aplicación y no tanto de su representación final en un lenguaje de programación.

Entre las características deseables de toda metodología están:
  • Existencia de reglas predefinidas.
  • Cobertura total del ciclo de desarrollo.
  • Verificaciones intermedias.
  • Planificación y control.
  • Comunicación efectiva.
  • Utilización sobre un abanico amplio de proyectos.
  • Fácil información.
  • Herramientas CASE.
  • Actividades que mejoran el proceso de desarrollo.
  • Soporte al mantenimiento.
  • Soporte de la reutilización del software.

Existen tres tipos de metodologías:
  • Estructuradas: Se definen primero las estructuras de datos de entrada y salida.
  • Orientadas a objetos: Pueden ser de dos tipos, revolucionarios o puros, y sintetistas o evolutivos.
  • Para sistemas en tiempo real: En este tipo de metodología, al ser en tiempo real, trata de hacer las tareas sincronizadas, poder reaccionar cuando se presente algún evento externo y manejar datos continuos o discretos, entre otras cosas.
Las fases de la metodología son:

Requisitos: Los requisitos son una lista de cosas que queremos que haga nuestro programa. 

Análisis: Definir más claramente qué es lo que va a hacer nuestro programa. Durante el análisis debemos de hacer varias cosas como:
  • Identificar actores: Usuarios y/o sistemas con los que se comunica nuestro programa.
  • Identificar casos de uso: Un caso de uso es algo que un actor quiere hacer con nuestro programa.
  • Detallar los casos de uso: Describir mas a fondo los casos de uso.
  • Diagrama de clases: Es un diagrama de clases de objetos que tienen sentido para el usuario.
Diseño preliminar: En esta etapa, vamos a pensar en como se van a hacer las cosas, tratando de establecer la arquitectura de nuestro programa.

Diseño detallado: En este tipo de diseño ya nos enfocamos a las clases y a los métodos.

Implementación y pruebas: Como su nombre lo indica aquí vamos a ponernos a trabajar nuestro programa, es decir, la codificación, una vez terminada esta fase es necesario hacer varias pruebas, en caso de algún error hay que ver en que nos equivocamos con anterioridad y corregirlo de inmediato.

Referencias:



lunes, 29 de agosto de 2011

Esqueleto de Clases.

El proyecto ya lo he mencionado varias veces, es una calculadora en Java. Aquí esta el esqueleto de clases para este proyecto:


Clase: Calculadora.


Atributos: Color de la ventana, tamaño de la ventana, tamaño de los botones, distribución de los botones, signo de los números.


*Hasta el momento, estos son los únicos atributos que tengo, como mencione anteriormente, el objetivo es hacer primero una calculadora básica, y posteriormente si alcanza el tiempo, modificar la básica para así hacer la científica, con esto se agregaran nuevos atributos*


Métodos.


Introducir datos:


Este método consiste en que el usuario introducirá los números con los cuales va a  realizar alguna operación.


Sumar:


En este método mediante la introducción de valores numéricos, se calculará la suma de los mismos.


Restar:


En este método mediante la introducción de valores numéricos, se calculará la resta de los mismos.


Multiplicar:


En este método mediante la introducción de valores numéricos, se calculará la multiplicación de los mismos.


Dividir:


En este método mediante la introducción de valores numéricos, se calculará la división de los mismos.


Calcular porcentaje:


En este método mediante la introducción de valores numéricos, se calculará la el porcentaje de los mismos.


Calcular resultado:


En este método mediante la introducción de valores numéricos, y la selección de la operación a realizar, se calculará el resultado que arrojo dicha operación.


Borrar pantalla:


En este método permite borrar la pantalla después de que se haya calculado algo, o si tenemos un error.


Memorizar datos:


En este método mediante la introducción de valores numéricos, y el cálculo de alguna operación, podremos guardar estos el resultado que nos dio dicha operación.




Recordando por supuesto, que la clase y los métodos son públicos y los atributos privados.

Responsabilidad de una clase.

En las entradas anteriores, ya había definido lo que iba a ser mi proyecto, al igual que la declaración de mi única clase, a continuación explicare la responsabilidad de esa clase.


Clase calculadora: Esta clase es la que actuará como medio de comunicación entre el usuario y en este caso la calculadora, ya que el usuario mediante la introducción de números, seleccionará que operación quiere realizar.

Casos de Uso

En la siguiente tabla se muestran los casos de uso para mi proyecto.




Nombre del caso
Actor involucrado
Descripción
Casos de uso involucrados
Sumar números
Usuario
Operación que por medio de la introducción de varios números los suma.
Introducir números.
Restar números
Usuario
Operación que por medio de la introducción de varios números los resta.
Introducir números.
Multiplicar números
Usuario
Operación que por medio de la introducción de varios números los multiplica.
Introducir números.
Dividir números
Usuario
Operación que por medio de la introducción de varios números los divide.
Introducir números.
Calcular porcentaje de números
Usuario
Operación que por medio de la introducción de varios números calcula un porcentaje.
Introducir números.
Introducir números
Usuario
El usuario por medio del mouse introduce los números, para posteriormente realizar una operación con ellos.

miércoles, 24 de agosto de 2011

Diseño con clases

Pues bien, como en la entrada pasada definí lo que sería mi proyecto, ahora toca definir varias cosas, como lo son la clase, los atributos y los métodos, conceptos que ya manejamos en las clases pasadas. Bueno así es como quedaría definido el proyecto:


Clase (pública).
Calculadora.


Atributos (privados).
Color de la ventana.
Tamaño de la ventana.
Tamaño de los botones.
Distribución de los botones.
Signo de números.

Métodos (públicos).
Introducir datos.
Sumar.
Restar.
Multiplicar.
Dividir.
Calcular porcentaje.
Calcular resulatdo.
Borrar pantalla.
Memorizar datos.

 
Hasta el momento es lo único que puedo sacar de esta clase, si en de pronto se me olvido poner algo, corregiré la entrada, poniendo las cosas faltantes.

Nociones básicas

En esta primera entrega de POO voy a describir lo que será el proyecto final para la clase y también para el Taller de POO.
Para todo ingeniero o persona que tenga que hacer cálculos, es necesario que tenga una calculadora, es por eso que como proyecto final elegí hacer una calculadora en Java, ya que es el único lenguaje orientado a objetos que se utilizar.
La calculadora quedaría mas o menos así:




Esta es una calculadora básica, como apenas estoy aprendiendo a programar bien en Java, el objetivo será realizar una calculadora como esta, tomando en cuenta el tiempo de realización, podre darle un mejor formato, y si es posible agregarle el cálculo de funciones trigonométricas y de funciones trigonométricas inversas, que a mi parecer esa sería la calculadora ideal a realizar, y que a las personas que tenemos que hacer cálculos mas elaborados, pues esta calculadora con estas funciones servirá mas.


Entre las funciones de la calculadora básica, estará el cálculo de las cuatro operaciones básicas: suma, resta, multiplicación y división, que el usuario podrá realizar con la introducción de valores numéricos mediante el mouse o el teclado.


Me gustaría también, agregarle un botón para borrar la pantalla, y si es posible agregar otro para memorizar los datos, al igual que otro para el cálculo de porcentajes.


En si este es el proyecto que elegí, espero y poder terminar en menos tiempo del previsto para así poder hacer una calculadora mas elaborada. 


Referencias:
http://juanda404.wordpress.com/2010/08/10/calculadora-en-java/

jueves, 18 de agosto de 2011

Implementación de una clase.

Este es un ejemplo de como programar una clase en Java. Mis compañeros que son IAS, tal vez recuerden de sus clases de contabilidad el término "Estado de resultados", bien, aquí lo que yo hice, fue tomar dos conceptos del estado de resultados, el ISR y el PTU, veamos el ejemplo:


Aquí, se muestran mis atributos, que en este caso son 3 ISR, PTU, y suma. También se puede ver el constructor, en el cual le di como valor inicial a suma el valor de 100000. Por último se pueden ver los 2 métodos que tengo, calcular el ISR y calcular el PTU. Ahora veamos como crear los objetos: 



En esta figura, podemos observar como crear mis objetos dentro del main, en este caso mis objetos son Edo1 y Edo2, "x" y "y" son variables que yo utilizo para, por medio de mis objetos acceder a los métodos, imprimir los resultados, y así termina el programa, veamos los resultados:





jueves, 11 de agosto de 2011

Herramientas de trabajo.

Cuando nosotros vamos a programar en Java, es necesario descargar alguna versión del JDK (Java Development Kit), sin embargo, siempre ocurre un problema con el compilador, es decir con el archivo javac.exe, no se reconoce, ya que su ruta esta mal especificada, es por eso que aquí mostraremos una serie de pasos para aprender como configurar la variable de entorno Path para asi incluir la ruta del compilador:

Paso 1: Debemos de identificar en donde se instalo Java, que por lo
general es en el Disco Local, en los Archivos de Programa:

Paso 2: Ya que encontramos en donde esta instalado Java, abriremos esa carpeta y nos encontraremos con una que dice "jdk1.6.0_20", que es la versión que se instalo, abrimos esa carpeta y encontraremos una que se llama bin, dentro de esta carpeta debemos de localizar el archivo javac.exe:
Paso 3:
Una vez encontrado el archivo javac.exe, le daremos un click con el botón derecho del mouse y seleccionaremos la opción Propiedades, una vez seleccionada la opción se desplegara un cuadro de dialogo, en el debemos localizar Ubicación, que es donde esta la ruta correcta que debemos de proporcionar como variable a Windows, copiamos la ruta:

Paso 4: Ya que copiamos la ubicación del archivo, debemos de ir a Equipo, una vez ahí, daremos click con el botón derecho del mouse y seleccionaremos la opción Propiedades, una vez seleccionada la opción nos abrirá la venta de Sistema, ya en la ventana de Sistema, en el panel izquierdo debemos de seleccionar la opción Configuración avanzada del sistema:
Paso 5: Ya seleccionada la opción se nos abrirá el siguiente cuadro de dialogo, en
el debemos de dar click al botón Variables de entorno:
Paso 6: Una vez que oprimimos el botón, aparecerá otro cuadro de dialogo, en el cual debemos de localizar en el apartado de variables de sistema a la variable Path, la seleccionamos y daremos click al botón Editar, lo que dará como resultado otro cuadro de dialogo, en el apartado de Valor de la variable, debemos de pegar la ruta del compilador, que previamente habíamos copiado:
Paso 7: Una vez hecho todo esto, daremos click en el botón Aceptar de todos los cuadros de dialogo,y habremos terminado, sin embargo para que el sistema tome en cuenta la ubicación del archivo javac.exe, es necesario reiniciar Windows, una vez reiniciado Windows abriremos el cmd y teclearemos javac para ver que ya lo identifica:
Aquí podrán descargar el JDK:  http://windows.software.hispavista.com/ce/n5170-java-developers-kit-jdk-6/

Como editor de texto, estoy utilizando en Notepad++, que es un editor con soporte para varios lenguajes de programación, únicamente funciona en Windows.


Aquí podrán descargar el Notepad++: http://notepad.softonic.com/descargar