miércoles, 14 de noviembre de 2012

20 acciones para estropear las relaciones con tus empleados

Use estos tips sobre relaciones con los empleados para evitar los 20 errores que las organizaciones cometen.

Traducción del articulo (http://humanresources.about.com/od/interpersonalcommunication/a/twentymistakes.htm)
Por Susan M. Heathfield, About.com Guide

Hasta en las mejores organizaciones se cometen regularmente errores en el trato con su personal. Estas pierden al oportunidad de crear relaciones efectivas, exitosas y positivas con los empleados.

Tratan a las personas como niños y y luego se preguntan porque la gente falla frecuentemente en alcanzar sus expectativas. Los gerentes aplican diferentes reglas a diferentes empleados y se sorprenden del porque la negatividad es tan alta en el lugar de trabajo. La gente trabaja duro y pocas veces recibe retro-alimentación positiva.

Al mismo tiempo, muchas organizaciones invierten inconmensurable energía en acciones para asegurar que sus empleados son infelices. Estas resultan poco efectivas en su relación con los empleados. Por ejemplo, actualmente una de las directivas más importantes en las organizaciones es aumentar la participación y contribuciones de los empleados. Las organizaciones tienen que encontrar maneras de utilizar todos los talentos de la gente que emplean. En otro caso, las personas se marcharan para encontrar trabajo en organizaciones que si lo hagan.

De acuerdo a ex Secretario del Trabajo Elaine Chao, el número de personas en la fuerza laboral entre las edades de 25 a 34 se proyecta que descienda en 2.7 millones en los siguientes siete años. Para enfrentar este reto, los puestos de trabajo necesitan recurrir a empleados no tradicionales. De forma adicional los lugares de trabajo necesitan urgentemente retener a sus empleados valiosos.

El libro, High Five, de Ken blanchard y Sheldon Bowles habla acerca de la construcción de equipos de trabajo altamente efectivos. El libro enfatiza que "la esencia de un equipo", de acuerdo al Dr. Blanchard, es "el entendimiento genuino de que ninguno de nosotros es tan listo como la suma de todos".

Los equipos permiten a las personas lograr cosas mas allá de la capacidad de cada miembro. Sin embargo un equipo requiere de una poderosa motivación para que las personas puedan poner el bienestar del grupo por encima de sus intereses individuales. Afortunadamente la generación del milenio creció en un ambiente de trabajo en equipo. Valorando y apreciando los equipos, sus trabajadores más jóvenes tendrán la ventaja en lo que a esto respecta .

Junten estas tendencias con lo lugares de trabajo y no se sorprendan de que la tira cómica de Dilbert sigue siendo tan popular. Tomemos en cuenta que a Scott Adams, el creador de la tira, nuca se le acabara el material porque sin importar lo que las organizaciones quieran o digan para crear relaciones efectivas con sus empleados - a menudo estas no:

  • retienen empleados valiosos,
  • desarrollan a personas empoderadas para trabajar juntas, servir mejor a los intereses de la organización, y
  • crean un ambiente en el cual cada empleado contribuye con todos sus talentos y capacidades al logro exitoso de las metas organizacionales.

La siguiente vez que se enfrente con cualquiera de las siguientes acciones propuestas, pregúntense esto. ¿Esta la acción orientada a lograr el resultado?,¿qué tan fuerte es la motivación del personal? ¿qué quieres lograr?

Veinte errores tontos que los empleadores cometen.


Acá los veinte errores que las organizaciones cometen para arruinar sus relaciones con las personas que emplean.

  1. Agregar otro nivel en la jerarquía porque la gente no esta haciendo lo que quieres que hagan. (¡Más observadores obtendrán resultados!)
  2. Apreciar el rendimiento individual y otorgar bonos por el rendimiento de individuos y no poder comprender porque tus empleados no trabajan como un equipo.
  3. Agregar inspectores y múltiples auditores porque no crees que tu gente trabaja de acuerdo a las normas.
  4. Equivocarte al crear normas y darle a la gente expectativas claras acerca de lo que se supone que ellos deben hacer, y sorprenderte porque fallaron.
  5. Crear jerarquías  pasos y otros bloqueos que le enseñaran a las personas rápidamente que sus ideas están sujetas a veto y sorprenderte porque ninguno tiene alguna sugerencia para mejorar. (hacer a la gente rogar por dinero).
  6. Preguntarle a la gente por sus opiniones, ideas y sugerencias de mejora continua, y fallas al implementar sus sugerencias o autorizarlos para que o hagan. ¿Menor? nunca proveer retro-alimentación acerca de cualquier de las ideas que fueron consideradas o del porque fueron rechazadas.
  7. Tomar decisiones y después preguntar a la gente por su opinión como si su opinión hubiese importado.
  8. Encontrar a algunas personas rompiendo las reglas y políticas de la compañía y llamarle la atención a todos en las reuniones de la compañía en lugar de tratar directamente con los que rompieron las reglas. Mejor, preguntarle a todos quienes son los chicos malos. Aun mejor, crear una política para castigar a todos los empleados.
  9. Crear nuevas reglas para que todo el mundo las siga como forma de hacer frente a los fallos de unos pocos.
  10. Estipular reconocimiento por patrones que inicialmente eran los esperados, parecen buenas ideas pero que se convierten rápidamente en derechos. (Por ejemplo, invitar el almuerzo del viernes cuando se logre la meta. Espera un poco y la gente empezara a preguntarte por el dinero si no reciben el almuerzo. Y te encontraras con empleados que trabajan solo para logar lo que el precio amerita - y no un poco más).
  11. Tratar a la gente como poco confiable - vigilarlos, perseguirlos, amonestarlos por cada pequeño fallo. por causa de unos pocos que son poco confiables.
  12. Fallar al orienta las acciones y comportamiento de las personas inconsecuentes con las políticas y expectativas organizacionales establecidas. (Mejor aún. Permitir que esta inconformidad crezca hasta que te quite la paciencia, luego castigar al próximo infractor con una acción disciplinaria)
  13. Cuando los administradores se quejan de que no pueden hacer todas las revisiones porque tienen demasiados reportes de miembros del personal y la Planificación de Desarrollo del Rendimiento toma mucho tiempo, eliminan las PDR. Mejor, le piden a los supervisores hacerlo con una frecuencia menor a la trimestral o contratan más supervisores para hacer las revisiones. (Fallan al reconocer que invertir una hora por trimestre por persona en desarrollo del personal es el trabajo mas importante del administrador)
  14. Crear políticas para cada contingencia, lo que deja poco margen para proveer las orientaciones individuales que los empleados necesitan.
  15. Por el contrario, tener tan pocas políticas  que los empleados sientan que están en un ambiente en que todo favoritismo y trato injusto es permitido.
  16. Hacer de cada tarea una prioridad. La gente pronto creerá que no hay prioridades. Más importante, nunca se sentirán comprometidos a lograr una tarea o meta.
  17. Programar emergencias diarias que resultan ser falsas. Esto asegura que los empelados no sepan que hacer, y no responderán cuando tengas una emergencia real.
  18. Ordenar a los empleados que cambien la forma en que están haciendo algo sin darles una explicación de lo que intentas conseguir con el cambio. Etiquetarlos como "resistentes" y mandarlos a entrenamiento cuando cuando ellos no pueden subirse a tren de inmediato.
  19. Esperar que lo empleados aprendan haciendo las cosas a la perfección a la primera en lugar de reconocer que se aprende mayormente de los fallos.
  20. Permitir que alguien falle cuando tenias información que el no, y que el podría haber usado para tomar un decisión distinta.

Puedes evitar estas pesadillas en las relaciones con los empleados. Estos ingredientes juntos son la receta para el desastre si quieres ser el empleador de la década siguiente. Relaciones efectivas con los empleados resultaran siempre en ganancia - para ambos los empleados y para ti.

jueves, 10 de mayo de 2012

El trabajo del analista - Estandares y referencias de documentación


Me decidí a escribir sobre este tema ampliando una entrada que ya tenia sobre manejo de requisitos (Manejo de Requisitos de Software) y tratando de arrojar alguna luz a aquellos que se inician en las labores de análisis y diseño. Algunos de mis colegas me preguntan se sienten aturdidos porque no saben como iniciar, documentar y presentar sus a trabajos. Espero que algunas de la referencias acá señaladas les sean de utilidad para que no tenga que reinventar la rueda y tengan una idea de clara de como conducir sus trabajos y como presentarlos.

Estimaciones del proyecto


El método de Punto de Caso de Uso (UCP – Use Case Point), está basado en los tradicionales Puntos Función. Es un método originado de la tesis de master de Gustav Karner (Karner, 1993), desarrollada mientras trabajaba en Objectory AB, bajo supervisión de Ivar Jacobson (creador de los casos de uso). La técnica ha sido usada por la empresa Rational (posteriormente adquirida por IBM) durante varios años y con buenos resultados.

El método estima el tiempo de desarrollo de un proyecto mediante la asignación de pesos a un cierto número de factores que lo afectan. Finalmente se contabiliza el tiempo total estimado a partir de esos factores.

La especificación de requisitos de software (ERS)


En la fase de análisis se deben identificar claramente las necesidades del producto a desarrollar y documentarlas. Como resultado de esta fase se debe producir un documento de especificación de requisitos en el que describa lo que el futuro sistema debe hacer. Se trata por tanto de una actividad no solo de síntesis sino también de síntesis. En esta fase se establecen las bases contractuales del desarrollo del producto en cuestión.

IEEE 830 es una norma para Especificación de Requisitos de Software. Un buen documento de requisitos debería incluir de una forma o de otra toda la información contenida en esta norma, indica como deba organizarse un documento de requisitos. Esta no es una metodología para el análisis de requisitos sino una recomendación de como debe ser presentado la especificación de estos y no exige que sea presentada en el formato propuesto por la especificación.

Esta definición se extiende y aplica a las condiciones que debe cumplir un sistema y cada uno de sus componentes para cumplir para satisfacer un contrato, norma o especificación.

Una buena especificación de requisitos de software provee un conjunto de ventajas entre las que destacan:
  • Reducción del esfuerzo en desarrollo.
  • Constituye una buena base para estimación de costes y planificación.
  • Constituye un punto de referencia para procesos de verificación y validación.
  • Constituye una base para la mejora de los procesos analizados.

 

Características de una buena ERS


  • Correcta: cada requisito que figura en ella refleja alguna necesidad real.
  • No ambigua: cada requisito tiene una única interpretación.
  • Completa: incluye todos los requisitos significativos.
  • Verificable: es posible verificar el una ves entregado el producto que cumple con los requisitos.
  • Consistente: ninguno de los requisitos es contradictorio o entra en conflicto con otros.
  • Clasificada: los requisitos pueden clasificarse por diversos criterios, los más comunes son importancia y escalabilidad.
  • Modificable: cualquier cambio puede realizarse de forma fácil completa y consistente, también es deseable evitar la redundancia.
  • Explorable: se puede conocer tanto el origen como los componentes del sistema que realizan cada requerimiento.
  • Utilizable durante las tareas de mantenimiento y uso: el personal que no ha intervenido directamente en desarrollo debe ser capaz de mantenerlo y modificarlo, la especificación actuá como un plano.

Metodología para el Análisis de Requisitos de Sistemas Software


Existe entre muchas otras esta metodología creada por Amador Durán Toro y Beatriz Bernárdez Jiménez del Departamento de Lenguajes y Sistemas Informáticos de la Escuela Técnica Superior de Ingeniería Informática en Sevilla, es una excelente tesis. La metodología que recopila prácticas y conceptos ya aceptados y explica varios formatos para recopilación y descripción de requisitos.

No solo es muy clara sino que también se han dado a la tarea de complementarla con un software. REM (REquirements Management) es una herramienta experimental gratuita de Gestión de Requisitos diseñada para soportar la fase de Ingeniería de Requisitos de un proyecto de desarrollo software de acuerdo con la metodología definida en la Tesis Doctoral "Un Entorno Metodológico de Ingeniería de Requisitos para Sistemas de Información", presentada por Amador Durán en septiembre de 2000. en este enlace podrán encontrar la herramienta que es de uso libre solo para fines académicos y enlaces a otros documentos y tesis relacionadas.

El formato de salida se puede personalizar mediante XSL, algo que yo mismo he hecho y podemos tener el formato de salida que deseemos.

Tambien esta aNimble Platform que es una herramienta para la gestión de requerimientos descendiente directo de OSRMT. Quizá alguno de Uds. se anime a probar alguna de ellas.

Especificación de diseño de software


Luego de la especificación de requerimientos se siguiente la fase de diseño del sistema en si mismo. En este punto muchos se empiezan a preguntar también como presentar los resultados en un documento que sea claro, bien organizado y compresible para la mayoría de las personas. Por ello abordaremos con brevedad una de las especificación que puede sernos de utilidad.

IEEE 1016 es  un estándar para  "descripción de un diseño de software", entendiendo por tal la representación que sirve para comunicar cómo está diseñado el sistema. Especifica la información que una descripción de este tipo ha de contener y la organización o esquema de presentación recomendada. Puede aplicarse a software de cualquier tipo destinado a funcionar en un ordenador. Su aplicación no está restringida por ninguna consideración relativa al tamaño, complejidad o carácter crítico del software.

Tampoco está condicionada por la aplicación de una determinada metodología de diseño, gestión de configuraciones o control de la calidad, pues se supone que la información relativa a la calidad o los cambios en el diseño de la descripción será gestionada por otras actividades del proyecto. Asimismo, la norma no apoya ni se ve limitada por una técnica descriptiva particular, pudiéndose aplicar a documentos en papel, bases de datos automatizadas, lenguajes de descripción de diseños, etc.

El estándar especifica que un SDD (software design descriptions) se organiza en una serie de vistas de diseño. Cada vista abarca a un conjunto específico de problemas de diseño de las partes interesadas. Cada vista de diseño es orientada por una perspectiva de diseño. Una perspectiva identifica los problemas de diseño que se centraban en el marco de su vista y selecciona el  lenguaje de diseño que se utilizan para describir esta perspectiva de diseño. La norma establece un conjunto común de perspectivas para el diseño de vistas, como punto de partida para la preparación de un SDD, y una capacidad genérica para definir nuevas perspectivas  y con ello ampliar la expresividad de un SDD.

Los contenidos necesarios de un SDD son los siguientes:
  1. Identificación de la SDD
  2. Los actores de diseño identificados
  3. Los problemas de diseño identificados
  4. Los puntos de vista de diseño seleccionados, cada uno con definiciones del tipo de elementos de diseño y lenguaje permitido.
  5. Los puntos de vista de diseño
  6. Los superficie de diseño
  7.  Justificación del diseño

Podrán encontrar uds  mismos mas información respecto de esta y otras normas y métodos en internet. Las especificaciones presentadas incluyen plantillas para su uso, las que son una recomendación y no obligadamente debe usarse pero si seguirse. Les invito a que la lean y la pongan en práctica en la organización de sus proyectos de software.

viernes, 27 de abril de 2012

Código PHP usando ArgoUML

ArgoUML es una aplicación de diagramado de UML escrita en Java y publicada bajo la Licencia BSD. Dado que es una aplicación Java, está disponible en cualquier plataforma soportada por Java. ArgoUML no es solo una herramienta de modelado de uso libre; sino también un proyecto de desarrollo de código abierto en que estamos invitados a participar.

PHP es uno de los lenguajes más usado y extendidos para la programación web. En las versiones más recientes del lenguajes y desde la versión 4 se vienen agregando y mejorado en el lenguaje, un conjunto de características que lo convierten ya en en un lenguaje orientado a objetos. De modo que ya es posible modelar nuestras aplicaciones y programas en PHP usando UML como lenguaje de modelado.


Tenemos varias razones para modelar nuestro software entre ellas:
  • Proveer una representación consistente en todo el ciclo de vida.
  • Mejor interacción entre el usuario/analista/diseñador.
  • Poder evaluar el impacto de cambios conceptuales y estructurales en nuestro software.
  • Agilizar el las labores de programación en etapas iniciales dado que permite abordar problemas complejos y simples mediante una representación universal.

Interfaz de usuario

Interfaz de ArgoUML


La interfaz se encuentra distribuida de la forma en que varios modeladores e IDE's  se encuentran organizados.
  1. Barra de menús y herramientas en la parte superior.
  2. Un explorador del proyecto y los modelos a la izquierda, que permite organizar los elementos en distintas perspectivas.
  3. En el centro el área de diseño e inmediatamente sobre esta un barra de herramientas con los objetos permitidos en el diagrama.
  4. La sección inferior corresponde  a las propiedades del objeto seleccionado.
Dado que uds. mismos pueden explorar la interfaz de esta herramienta podemos centrarnos en su uso y en su aplicación al desarrollo con PHP mediante un ejemplo practico.

El caso de estudio

La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar pedidos p de productos, de los cuales se anota la cantidad en stock. Un cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos.

Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente. Además, sólo es posible realizar peticiones de productos en stock.

Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable del cobro, orden de distribución y confirmación de los pedidos. El cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es parte de un pedido compuesto, se rechaza el pedido entero). Una vez que el pedido está listo para servirse, se ordena su distribución, y una vez entregado, pasa a estar confirmado.

Solución


(Los colores usados se basan en la definición de arquetipos)


Explorando algunas características

ArgoUML tiene varios conjuntos de criticas de diseño que pueden ayudarnos a mejorar nuestros modelos y software. en el menú contextual de los elementos podemos ver las criticas que son aplicables así como la gravedad de las mismas.
También es posible ver la cantidad total de criticas por grado de prioridad.



Podemos documentar cualquier elemento, además de ser muy útil nos permitirá mantener un código bien documentado y que pueda ser entendido por otros, y utilizar estos comentarios para generar documentación de referencia con programas como phpDocumentor.


Es posible explorar el código de un elemento en diferentes lenguajes soportados





Generando el código y actualizando nuestro modelo


La generación de código es unas de las características que más me agrada de este modelador. Me permite crear rápidamente
crear las definiciones básicas de las clases y otros elementos, que luego puedo especificar con mayor detalle de acuerdo a las necesidades. Todo sin perdida de código al actualizar mi modelo.

Simplemente debemos seleccionar las clases y los lenguajes para los que generaremos el código así como la ruta de destino y estamos listos para continuar programado en cuanto generamos el código. Entre los lenguajes soportados están PHP 4 y 5, Java y C++.




En el código generado tendremos un archivo por cada elemento, también se generaran los paquetes o directorios en caso que hayamos agrupado en paquetes los elementos de nuestro modelo.

Se siguen las buenas prácticas de nombrado para los archivos. Esto resulta conveniente sobre todo cuando tenemos una gran cantidad de elementos (clases, paquetes, interfaces y otros) que nos resultaría difícil recordar lo que contienen labor que resultaría aun más engorrosa para otros que necesiten revisar nuestro código.

El código generado integra los comentarios y demás elementos informativos que hayamos incluido algunos de estos pueden configurarse a nivel global, de proyecto o del elemento de diseño.