Introduccion
Por su longitud he decidido dar una breve introduccion a este articulo. Basicamente trata de buenos habitos del software desde su desarrollo, desde su codigo y como pieza de software.
En la parte de desarrollo se toman como buenas practicas en el ciclo de desarrollo de software.
La parte de codigo son breves requisitos para que nuestro codigo sea facil de leer y mantener, no son pasos ni sugerencias si no cuestiones que se deben tener en cuenta al momento de diseñar y codificar el sistema.
Finalmente, la parte de software son evaluaciones que nos diran si nuestro sistema o aplicacion tendra aceptacion; en terminos de facebook, son los puntos para que un usuario ponga "like" a nuestro programa.
Desarrollo
Para que el desarrollo de software fluya adecuadamente, con una mejor estimacion y aprovechamiento del tiempo, reduccion de costos y aumento de calidad se recomiendan seguir algunas de las mejores practicas. A continuacion presento algunas de las recomendaciones:
Elegir modelo de desarrollo, el modelo de desarrollo juega un papel fundamental en el ciclo de desarrollo de software, esta eleccion puede afectar enormemente la duracion del proyecto, su correctividad, su costo y su mantenimiento. Existen diferentes modelos de desarrollo entre los que destacan las variantes de los modelos en espiral, iterativo, por prototipo y en cascada.
Requerimientos, uno y quiza el mas importante de los factores que llevan al exito en el desarrollo de software. Los requerimientos, el conocer las necesidades del cliente, juegan hoy en dia un papel demasiado importante. Tanto como un proceso de ingenieria como un proceso de negocios, los requerimientos deben ser captados del cliente y cubiertos en su mayoria en el desarrollo.
Cabe destacar que el entendimiento oportunuo de estos requerimientos por todo el equipo involucrado es tan vital como los requerimientos en si. Podremos tener al mejor equipo de desarrollo del mundo, pero mientras ellos no sepan que es lo que se espera estaremos entrando en un ciclo de malos entendidos y retrasos.
Arquitectura, es sorprendente el impacto que tiene esta practica en los desarrollos. Hoy en dia los desarrollos en web, multiplataforma y moviles pintan como los favoritos, sin embargo no por ello implica que todos los desarrollos deban ser de esta indole. Diferentes proyectos tienen diferentes necesidades, y dichas necesidades deben ser captadas como requerimientos. Estos requerimientos nos diran que plataforma debe tener nuestro desarrollo, y a partir de ese momento podemos pensar en buenas practicas como lo son los patrones de diseño.
Diseño, esta practica aunque puede requerir bastante tiempo suele ser de suma ayuda : un buen diseño y el entendimiento de los requerimientos son la clave para reducir el tiempo en los desarrollos, sus costos por correcion y mejorar su escalabilidad. El programador no requiere consumir mas tiempo resolviendo pequeños fallos o descuidos cuando ya han sido cubiertos en la etapa de analisis y de diseño. Ademas, hacer un buen diseño presenta otras ventajas como lo son facilitar el mantenimiento y entendimiento de codigo, generar buenos habitos de programacion, aprovechar los patrones de diseño y tener una primera documentacion.
Revisiones, quiza aun mas importante que las pruebas son las revisiones, estas permiten al equipo evaluar su trabajo de manera constante y aprovechar el conocimiento del equipo de desarrollo. Dicho de una forma romantica, es una forma de ver donde estamos y hacia donde vamos, y si nos hemos detenido por que y como solucionarlo. Las revisiones reducen los tiempos de correccion de codigo y mejoran la calidad del proyecto.
Es importante no perder de vista el alcance del proyecto durante las revisiones ya que estas pueden generar grandes lluvias de ideas.
Pruebas, no se trata de realizar las pruebas ya que hemos terminado y nos ha sobrado el tiempo o cuando un periodo termina. Las pruebas son una parte integral del software. Darle su importancia, tiempo y dedicacion puede evitar que pasemos la pena de estar frente a nuestros clientes o inversores y de pronto recibir una pantalla azul de la muerte.
El equipo de pruebas debe estar integrado por diferentes tipos de usuario, no unicamente desarrolladores. Son los usuarios los que buscaran hacer las cosas de nuevas maneras y pondran realmente a prueba nuestro desarrollo. Suele ser comun que en las empresas el equipo de pruebas este integrado por el mismo equipo de desarrollo: lo cual resulta en un error, los desarrolladores ya han probado el "camino feliz" del software y aunque puedan obtener algunos fallos, es muy posible que no obtendran su mayoria debido a su propia influencia en el proyecto. Ademas, hay que esperar nuevas sugerencias por parte del equipo de pruebas.
Pruebas de desempeño, un paso previo a la implementacion, aqui es donde probamos nuestro desarrollo en un ambiente real y similar al de nuestros usuarios. Esto nos permite conocer los alcances y necesidades fisicas (hardware), asi como requerimientos previos (software) necesarios para que nuestro desarrollo trabaje optimamente. No solo eso, ademas nos dice como se comportara el desarrollo en diferentes ambientes y que se puede esperar de el.
En la industria de los videojuegos este tipo de pruebas han tenido un peso importantisimo, dando paso a que en la actualidad los juegos liberados vienen con su clausula de: compatible con... (y una larga lista de hardware y software). Esto permite a los videojugadores prevenir la compra de equipo no apto para sus sistemas o conseguir las actualizaciones necesarias.
Nota: si nuestra empresa tambien ofrece la venta de equipo de hardware no esta de mas ofrecer la actualizacion del equipo del cliente, aunque hay que hacerlo con precaucion ya que se puede interpretar de mala forma, tambien hay que considerar otras opciones como adecuar nuestro desarrollo al equipo del cliente.
Administracion de proyectos, estimar el proyecto, incentivarlo, manejar los recursos, dirigir el proyecto e incluso ampliar o reducir sus capacidades a fin de conseguir el alcance es una tarea que requiere una dedicacion total. Esta actividad va muy de la mano con la parte de negocios de nuestro proyecto, ya que si el proyecto esta mal estimado y mal planeado llevara a un fracaso, a una perdia de dinero o incluso de un cliente. El administrador de proyectos no es un vendedor, pero es la persona que ve por el proyecto y que se cumplan los lineamientos, los objetivos y los tiempos, para lograrlo debe de valerse de todos los recursos disponibles e incluso solicitar mas si es necesario, tambien debe saber distinguir en que momento agregar mas recursos deja de ser viable. Cambiar los equipos de trabajo, acercar al personal, facilitar la retroalimentacion y el mejoramiento profesional son algunas de las cosas que un administrador de proyectos hace.
Migracion de datos, hay que tener en cuenta que rara vez se desarrolla un software para cubrir una necesidad que previamente no era cubierta. Esto implica que hay datos que hacen su trabajo y que estaran en un formato que debe ser facil de migrar a nuestro sistema. La migracion de datos es una tarea compleja y que puede llegar a ser incluso un proyecto nuevo.
Medir el Aprovechamiento, cada vez que se implemente un servicio o un sistema hay que medir el rendimiento y el aprovechamiento previo y el actual. Esto puede ser util de dos formas, le dices al cliente como tu producto o servicio ha facilitado o mejorado sus procesos, y, aparte conoces tu mismo el valor de tu trabajo. Es la parte "final" de la transicion, saber si la meta se alcanzo y con que resultados.
Soporte, los modulos de soporte en muchas ocasiones son malamente empleados... Es tipico querer actualizar un programa y que tengamos que adquirir la nueva version por que la actualizacion o no se encuentra disponible via red o es tan grande el cambio que es mejor bajar una nueva version.
En la opinion de un servidor considero que es bastante disgustante dichas acciones, para que implementar un modulo de actualizacion? Debe ser para corregir erroes, ampliar funcionalidad, mejorar el uso de la herramienta. No hay que vender nuevamente el software, si lo que se trata es de hacer negocios, hay mejores estrategias que son vistas con mejores ojos (hechen un vistaso a Google).
Pero el soporte no es unicamente actualizaciones, la creacion de modulos completamente nuevos, la reinstalacion del equipo, la capacitacion y otros servicios mas son necesarios para que los sistemas tengan exito. Todos estos servicios deben de darse, pueden ser la diferencia entre una recomendacion y un cliente leal a solo un cliente que vino a probar.
Codigo
Para que el codigo sea considerado de buena calidad debe contar minimo con las siguientes caracteristicas.
Limpieza en el codigo, debe ser legible y facil de interpretar.
Coherente y consistente, quien lee el codigo debe poder figurarse que funcionalidad puede seguir. Se debe de explicar por si mismo, no ser ilogico o irracional.
Facil de corregir, la funcionalidad no debe estar comprometida y por una correccion sencilla hechar todo a perder, entre mejor sea el diseño de nuestro codigo mas facil sera de corregir y menos afectara a la funcionalidad del mismo.
Reutilizable, los componentes deben ser portables a otros sistemas, esto ahorrara trabajo; si bien al inicio parecera que es retrabajo hacer los componentes generales, a mediano plazo se estaran reutilizando tanto los componentes y su depuracion sera tan centrada que habra valido la pena el pequeño tiempo invertido.
Software
Las siguientes son lo que yo llamo las cinco estrellas del software:
1. Rapidez, el software puede no estar optimizado, sin embargo si a la velocidad en que se ejecuta y realiza sus tareas es la "normal" (la que el usuario espera o requiere) entonces podemos decir que nuestro programa es rapido, lento o regular. Por ejemplo, un reproductor de musica (en la opinion de un servidor) debe ser un programa que se ejecute muy rapidamente, es por ello que programas como iTunes o Windows Media Player no son recomendables. Cierto es que dichos programas tienen otras funcionalidades que los hacen valiosos, pero en lo personal no sacrifico el tiempo de realizacion de la tarea principal (abrir y reproducir una cancion) por otras tareas secundarias (ver videos o bajar musica y programas).
En el caso de software mas especializado como las suit de multimedia o diseño, por el tiempo que se estaran utilizando y el valor que tiene su resultado es de esperar que se ejecute un poco mas tardado. Como por ejemplo solidworks o autocad.
2.Estable y disponible, el software debe funcionar correctamente y no fallar a mitad de sus tareas, ademas debe de encontrarse disponible cada vez que se requiere. Suena a exigir mucho, y es cierto: en muchas ocasiones el software fallara por razones ajenas a las del software mismo, sin embargo para que un programa sea considerado confiable debe dar opciones de restauracion del trabajo perdido, y alternativas de su uso. Un ejemplo claro es Microsoft Office, si bien es tipico que el programa falle, tambien lo es recuperar el trabajo perdido con su opcion de restaurar documentos. En cuanto a disponibilidad, el trabajo hecho en MS Office puede abrirse unicamente en versiones posteriores de office y en algunos casos en software de terceros como open Office, esto es una falta al hacer el trabajo realizado en dicho sistema menos portable.
Tomando otro ejemplo, tenemos las herramientas de adobe las cuales permiten exportar e importar entre distintos formatos incluyendo a sus competidores, sin embargo no cuenta de fabrica con una opcion de auto salvado del trabajo lo que da a lugar en caso de perdida de una perdida todal del trabajo.
En esta estrella incluyo el mantenimiento del software ya que va muy de la mano con su disponibilidad y su estabilidad. Mientras se este actualizando, en muchas ocasiones el software no esta disponible (una tendencia que comienza a desaparecer), y despues de actualizarse la estabilidad se pone en juego. Estos dos factores hacen que el programa tenga tiempos en que no lo podremos usar o presente fallas. Mantener las aplicaciones debe ser algo transparente para el usuario sin llegar a ser invasivo, tomo como ejemplo las tecnologias en la nube, las cuales son actualizadas y todos sus usuarios reciben los beneficios sin llegar a preocuparse por actualizar.
3.Usabilidad, el software debe ser intuitivo, facil de usar. Los conocimientos de los usuarios deben ser facilmente aplicables a los programas. Quien ya usa Windows Live MSN debe poder usar sin problemas otras aplicaciones de chat instantaneo como Google Talk o Skype.
La usabilidad por si misma cubre otras cuestiones como el diseño y la rapidez de uso tanto para usuarios promedio como para usuarios con capacidades diferentes. El software no debe ser enredo para nadie, y hacer las operaciones y cumplir las tareas para lo que el programa fue hecho no debe ser una cuestion complicada como presionar CTRL+ALT+SHIFT+CHANGO+ESC y luego poner una contraseña de 16 caracteres con caracteres especiales, minusculas, mayusculas y numeros y todo esto tan solo para mandar imprimir...
He de mencionar que hacer las cosas usables no quiere decir poner todas las opciones a la vista del usuario inmediatamente, hay que saber aprovechar menus, barras, botones y demas elementos de una buena interfaz de usuario. Esconder algunas funcionalidades secundarias o de configuracion y dejarlas accesibles via un click puede ser la mejor opcion.
4.Inteligencia, oh! no es que seamos pretenciosos y le dictemos al programa que hacer "Ejecuta! Notepad.exe! Escribe: Hola Mundo!" (aunque es quiza uno de los sueños y proyectos mas intentados en la historia). De lo que la estrella de inteligencia se refiere es que el software debe aprender que hace su usuario con el. Un buen ejemplo es Google Chrome y Opera, estos exploradores van guardando las paginas mas visitadas por sus usuarios y las presentan en sus paginas en blanco o en su pagina de inicio.
Entre mas inteligencia se le agregue al software el usuario tendra que pensar menos y le sera mas util dicho programa; y es que hemos de recordar que el usuario comunmente lo que desea es que todo sea facil y rapido.
5.Personalizacion, la quinta estrella es parte de las megatendencias de nuestro mundo, ahora queremos que las cosas sean mas personalizables, darles nuestro toque para que tenga nuestro estilo. Hacer al software personalizable, expandible y modificable es un factor que no debe pasar desapercibido. Terceros querran hacer plugins para nuestro software, diseñadores haran skins y nuestro programa obtendra una mejor difusion sin tomarnos mas trabajo, dando ademas a los usuarios una experiencia mas rica y satisfactoria.
Permite a terceros hacer skins, vistas, themes, look&feel o como desees llamarle, deja a los usuarios darle color a tu programa de una forma facil y rapida; ademas permite que terceros expandan las capacidades del software brindandoles herramientas de desarrollo, documentacion o incluso componentes middleware que se ajusten facilmente a otras aplicaciones.
Ejemplos son: Winamp en su tiempo con su larga lista de skins, Firefox con su larga lista de plugins e incluso, por que no?, los ipod/iphone/ipad con su gran cantidad de aplicaciones incrementandose dia a dia.
No hay comentarios:
Publicar un comentario