Desarrollodesoftware1

Costos de desarrollo con UCP

En la actualidad, existen diversas técnicas y métodos que se pueden utilizar para calcular el esfuerzo, costo y tiempo necesario para el desarrollo de un software. Algunas técnicas pertenecen a la rama tradicional, otras a la ágil y otras son más, por así decirlo, abstractas. Usar la técnica correcta es en realidad una tarea difícil, puesto que existen demasiadas variables a considerar. Sin embargo con práctica y experiencia, es posible ajustar las técnicas a los diferentes proyectos y las necesidades específicas del mismo.

Una de las técnicas que más me gustan es la conocida como Use Case Points (UCP) debido a que me permite especificar el esfuerzo necesario para desarrollar un sistema desde la perspectiva del desarrollador, pero con orientación a cómo el usuario interactúa con el sistema. Adicionalmente UCP toma en consideración variables adicionales tales como la experiencia del desarrollador, la complejidad del desarrollo, etc.

Muchos desarrolladores podrán decir que usar casos de uso no es ágil, pero duela a quien le duela, hay que ser francos, “Historias de usuario” es algo muy  distinto de “casos de uso” e incluso la orientación es completamente diferente. Mientras que las historias de usuario están orientadas a definir el producto, es decir el “que”, los casos de uso están orientados a definir el “cómo” o mejor dicho, la funcionalidad del sistema. Ciertamente las historias de uso son muy útiles pues definen el producto y el valor que se entrega al usuario, sin embargo no definen en ninguna forma los aspectos técnicos del requerimiento, es decir, nunca una frase entregará la definición necesaria. Por otro lado los casos de uso pueden ser algo muy “pesado” y que consumen tiempo, pero con práctica puede ser una tarea que toma solo unas horas y ayudan a definir mejor aspectos técnicos de desarrollo, ahorrando a larga, mucho trabajo o iteraciones innecesarias.

Como ingenieros, deberíamos conocer bien cómo estimar usando casos de uso, antes de sumirnos en la “agilidad”. Resulta hasta cómico cuando leo en las redes sociales, ingenieros con muchos años de experiencia, incitando a otros a usar métodos ágiles, pero luego postear “como se cuanto cobrar por mi software”, “cómo puedo estimar cuanto demorare en desarrollar este sistema”, es chistoso y a la vez lamentable. Nuevamente, esto al principio puede parecer tedioso, pero a la larga con práctica, llevará solo unos minutos y quizás hasta lo hagas mentalmente. Entonces ahí puedes usar la misma técnica solo usando un frase o una historia de usuario.

Luego de burlarnos de la pobre base técnica de estos “profesionales de título” e ignorar las ganas de pegar una imagen con los posts de Facebook, vamos a comenzar con un ejemplo: Un usuario necesita enviar un mensaje al dueño de un sitio web, usando el conocido formulario de contacto. Entonces, como historia de usuario diríamos: “Como USUARIO, quisiera contar con un formulario de contacto, para enviar información y obtener soporte”. El rol es USUARIO, el punto de interacción es el “formulario de contacto” y el objetivo es “enviar información”. Excelente definición del valor para el usuario y del producto. Pero nula información técnica o como el desarrollo debe ocurrir.

Entonces, veamos el caso de uso: En general, los casos de uso tienen 2 componentes, el diagrama de caso de uso usando UML y el caso de uso narrado que cuenta la historia de lo que sucede en el diagrama. Aunque el diagrama no es algo obligatorio y comúnmente se obvia para ahorrar tiempo, en mi opinión cuando el desarrollador y el analista son personas diferentes, son muy útiles para comunicar gráficamente los requerimientos a través de la técnica de la “monística” o el arte de dibujar monos. Por otro lado, el caso de uso narrado se separa en lo que hace el sistema frente a lo que hace el usuario, en este ejemplo:

Curso Normal
1. El USUARIO visita la página web que contiene el formulario
2. El SISTEMA despliega el formulario
3. El USUARIO llena los datos
4. El USUARIO presiona el botón “Enviar”
5. El SISTEMA valida los datos ingresados.
6. El SISTEMA almacena los datos en la Base de Datos.
7. El SISTEMA despliega el mensaje de confirmación que los datos fueron almacenados.
8. Fin

Cuando algo sale mal con el formulario, ocurre un flujo alternativo. Por ejemplo el usuario ingreso mal un dato:

Curso Alternativo (Paso 5)
5. El SISTEMA valida los datos y estos están incorrectos
6. El SISTEMA despliega el formulario
7. El SISTEMA despliega mensaje: “Datos ingresados no son válidos”
8. El USUARIO llena los datos
9. El USUARIO presiona el botón “Enviar”.
10. El SISTEMA valida los datos ingresados.
11. El SISTEMA almacena los datos en la Base de Datos.
12. El SISTEMA despliega el mensaje: “Datos enviados exitosamente”.
13. Fin

Bien, ya tenemos nuestro primer caso de uso. De este podemos descomponer algunas cosas:

  • Los actores son USUARIO y SISTEMA.
  • El sistema usa una base de datos.
  • El nombre del botón es “Enviar”.
  • El sistema requiere base de datos.
  • Los mensajes a desplegar para el caso de éxito y cuando hay un error.

Ahora comenzaremos con UCP. En este ejemplo tenemos solo un caso de uso, pero habitualmente un sistema estará formado por múltiples casos de uso. UCP se compone de 4 datos:

  1. Factor de Complejidad Técnica (TCF – Technical Complexity Factor).
  2. Factor de Complejidad Ambiente (ECF – Environment Complexity Factor).
  3. Puntos de Casos de Uso sin Ajustar (UUCP – Unadjusted Use Case Points).
  4. Factor de Productividad (PF – Productivity Factor).

Los pasos para obtener el valor de cada ítem son:

  1. Determinar y calcular los Factores Técnicos.
  2. Determinar y calcular el Factor Ambiente.
  3. Calcular los Puntos sin Ajustar de los Casos de Uso.
  4. Determinar el Factor de Productividad.
  5. Multiplicar el valor de todas las variables.

Determinando el Factor Técnico:

Existen trece factores técnicos estándar para estimar el impacto en la productividad que diferentes variables generan en la aplicación. Estos 13 factores tienen un valor de peso estandarizado y uno puede agregar un valor de 0 a 5 que nos permite indicar la importancia que dichos factores tienen en nuestra aplicación. La multiplicación de peso con el valor dado nos entregan el factor que cada ítem tendrá. La suma total de estos factores se conoce como Factor de Complejidad Técnica sin ajustar. El valor final para el Factor de Complejidad Técnica se obtiene usando la fórmula adicional: FCT =(FCT sin Ajustar*0,01)+0,6. En este ejemplo:

factor_tecnico

Factor de Complejidad Ambiente:

El Factor de Complejidad Ambiente estima el impacto en la productividad de varios factores ambientales, tales como el si los desarrolladores tienen conocimiento y experiencia en el lenguaje, si son desarrolladores de medio tiempo, su nivel de motivación, etc. Al igual que en el caso anterior, tenemos una serie de preguntas a contestar, las que tienen un peso e influencia, y se les asigna un valor de 0 a 5 para definir el factor final. Nuevamente, la suma de los factores nos otorgaran el valor del factor ambiente no ajustado, y obtendremos el final usando la siguiente fórmula: FA =1,4(FA sin ajustar*0,03). En este ejemplo:

factor_ambiente

Puntos por Caso de Uso sin Ajustar:

Los puntos por caso de uso sin ajustar se calculan en base a dos datos:

  • El peso sin ajustar de los casos de uso (Unadjusted Use Case Weight – UUCW), basado en el número total de actividades o pasos contenidos en el escenario del caso de uso.
  • El peso sin ajustar del Actor (Unadjusted Actor Weight – UAW), basado en la combinación de la complejidad de los actores (usuarios u otros sistemas) que intervienen en el caso de uso.

El peso sin ajustar de los casos de uso se categorizan en Simple, Mediano y Complejo. Como se mencionó anteriormente se valorizan de acuerdo al número de pasos que contienen, incluyendo flujos alternativos.

Tipo

Descripción

Valor

Simple

Una interfaz de usuario simple que probablemente interviene en solo una entidad de base de datos. El escenario exitoso tiene 3 o menos pasos. Su implementación requiere menos de 5 clases.

5

Mediano

Más de una interfaz e interactúa con 2 o más llamadas a una base de datos. Contiene entre 4 a 7 pasos. Su implementación requiere programar de 5 a 10 clases.

10

Complejo

Involucra más de 3 interacciones con una base de datos. Contiene sobre 7 pasos. Su implementación requiere más de 10 pasos

15

Peso sin ajustar de los actores:

De igual forma los actores son clasificados en función de su complejidad y cantidad de interacciones como Simple, Medio y Complejo.

Tipo

Descripción

Valor

Simple

El actor representa otro sistema con una API bien definida.

1

Medio

El actor representa otro sistema interactuando mediante una conexión de red.

2

Complejo

El actor es una persona interactuando mediante una interfaz.

3

Finalmente, el valor de los casos de uso sin ajustar se obtiene sumando el total del peso o valor de los casos de uso con el peso o valor de todos los actores. Por ejemplo:

casos_uso

Con todos estos valores, es posible obtener los puntos por caso de uso multiplicando los resultados entre si. Y para obtener la cantidad de horas hombre correspondientes al esfuerzo por desarrollar, basta con multiplicar la cantidad de puntos obtenidos por el factor de productividad que corresponde al tiempo que un desarrollador requiere para completar un punto. El valor estándar es de 20 horas por punto, pero esto puede variar según la experiencia del desarrollador y la complejidad del proyecto. Puesto que nuestro ejemplo es solo un formulario, podemos decir que puedo completar 1 punto por día (8 horas laborales).

Esto representa entonces el valor de horas requeridas para programar, sin embargo todo proyecto formal tiene otras fases además de la de desarrollo, tales como análisis, diseño y pruebas. Usando valores porcentuales para asignar una proporción del tiempo al proyecto, podemos obtener un estimado de lo que demora el proyecto completo.

Luego, ya que conocemos el valor hora de un desarrollador promedio, podremos completar el resto de los cálculos necesarios para estimar el valor venta del proyecto. Habitualmente podemos cobrar el doble del costo del valor de horas necesarias para completar el proyecto, más el impuesto (20%), es decir, multiplicamos los valores de costo por 2.2.

Finalmente tendremos el resumen de nuestro proyecto completo:

resultados_final

Para facilitar la vida a quienes desean usar mi template, pueden copiarlo desde Google Docs.

Happy Coding!

biz-people-new-845x321

Cómo conseguir una pega en USA – Parte 1: El curriculum

Siempre he pensado que es bueno devolver la mano a aquellos que te apoyaron, y aunque en ocasiones no tuviste el privilegio que otros tuvieron como un apellido que les permite robar o atropellar y matar gente impunemente, un pituto para una pega o simplemente más recursos y que los papitos le pagaron la U, siempre es bueno apreciar lo que uno tiene, lo que ha logrado y quienes han estado en tu camino. Y aunque no tengas como devolver a todos y cada uno los favores y ese granito de arena que aportaron a tu vida, en ocasiones lograr una posición en la que puedes ayudar a otros a llegar donde tu has llegado, lejos o cerca, porque el que tu estes en un lugar ¨privilegiado¨no es una razón para mirar a otros en menos, sino una oportunidad y una obligación de tender la mano y ayudar a otros a llegar donde estás tú. Es por esto y porque he visto cómo las cosas están en Chile que me atrevo a escribir este post que espero ayude a algunos talentosos desarrolladores a conseguir una mejor calidad de vida.

experienciasEn esta serie de publicaciones voy a explicar lo que he aprendido respecto a los procesos laborales fuera de Chile, como funcionan los procesos de selección “técnica” y que es lo que buscan los reclutadores antes, durante y después de la entrevista. Este no sera el post final, pero será un inicio.

“Este post contiene información pública y otra basada en mi experiencia, no es una receta mágica ni contiene información privada o secreta de mi empleador u otras empresas socias de mi empleador”.

Primera parte: Preparando tu curriculum vitae (resume):

Brillar en un ciello lleno de estrellas es bastante difícil, y eso no siempre se logra brillando más, sino que brillando diferente: “En un ciello lleno de luces blancas, el que ilumine con luz roja será la que destaque y no quien brille más blanco”.

Ahora bien, lo que buscamos es generar una buena primera impresión profesional, para eso lo más importante será estar bien preparado siempre, ojo!, esa es la regla: preparación!! entonces antes de comenzar con el proceso más largo, vamos a preparar nuestro curriculum (resume) con la información correcta y de la forma adecuada, en resumen que poner y qué no poner:

No pongas información que no es necesaria, lo que se necesita si estás postulando a un cargo en USA es: tu nombre, correo (email), teléfono y nada más. Los típicos datos que te piden en Chile para filtrar empleados con hijos, por edad, etc, no deben ir en tu CV, ya que algunas empresas temen que de no seleccionar tu CV los acuses de discriminación, así que muchas veces evitan recibir o leer CVs con mucha información personal, de igual forma si pones pretensiones de renta, eso lo puedes negociar después.

Un CV largo no tiene porque ser bueno, y ojo, en este caso el tamaño importa, y entre mas resumido, pero con mayor calidad será siempre mejor. No pongas cargos o experiencia laboral no relevante, no sirve si estas postulando a un trabajo de astronauta que hayas sido empaque en el super. Entiendo que no todos tendrán mucha experiencia laboral, pero es mejor poner proyectos personales (por hobby) de desarrollo de aplicaciones que poner que eres promotor o trabajabas en un call center.

Pon el filete primero, luego la ensalada. He leido varios CVs de 6 páginas (leer el punto anterior) donde ponen la experiencia laboral y estudios en la página 5!, los reclutadores no tienen tiempo, algunas veces revisan más de 500 perfiles para un cargo, ¿tu crees que van a darse el trabajo de leer toda la biblia que tienes como CV donde hasta pones que sabes hacer Beatbox?. Pon el filete primero, tu experiencia y tus estudios.

No tienes experiencia, consigue más! La experiencia es todo, si no tienes experiencia trabajando entonces participa de un grupo de desarrollo de aplicaciones, crea algunas aplicaciones para Android o iOS y publicalas, subelas a Github, práctica creando cosas entretenidas, ¿que tal una app para tu club de programación? participa en proyectos Open Source o en fundaciones/corporaciones desarrollando apps con fines sociales, quizás trabajas gratis, pero tendrás la ventaja que estarás trabajando para usuarios finales y reales, aprendiendo y podrás cometer errores, y nadie te dirá mucho porque después de todo es voluntariado. Ganar experiencia metiendo los dedos es muy valorado, porque muestra con hechos cuál será tu aporte en tu nuevo trabajo.

No tienes estudios, uf!, ahi si estamos en un problema. De partida es dificil entrar a trabajar sin conocimientos basicos de informatica, los que se consiguen estudiando y aunque lo lograras, para conseguir una visa de trabajo debes tener una carrera universitaria de al menos 4 años, así que a ponerse las pilas y sacar un título de ingeniería aunque sea de ejecución. No importa donde, en el extranjero no les importa si fue en la UC, U. de Chile, UTFMS, U. de los Lagos, USACH, Inacap, A. Bello, etc., pero debes tener al menos 4 años de estudios para convalidar con un Bachelor, sino ni de temporero podrías conseguir visa de trabajo.

resume-sampleListo, ahora que tenemos claro que tenemos que poner estudios y experiencia primero, entonces ahora viene el cómo:

De partida los estudios basta con ponerlos con el título logrado o el grado, donde lo obtuviste (centro de estudios) y los años.

En el caso de tu experiencia laboral, ahi es mas importante usar un formato o método especial, mi recomendación es usar la metodología STAR (Situación, Tarea, Acción y Resultados), que en simples palabras significa describir tu cargo, que hacías, como lo hacías y que lograste, por ejemplo:

Senior Java Developer at Acme (2010-2014)

(situación) Como desarrollador en la empresa Acme, (tarea) durante el año 2015 lidere el desarrollo de la versión móvil de la aplicación de gestión de flota y administración de pedidos, (acción) para lo cual utilice la arquitectura de Amazon Web Services como Backend y PhoneGap para el rápido desarrollo usando tecnología híbrida basada en HTML5, (resultado) como resultado pudimos liberar la primera versión antes de lo estimado, reduciendo los costos de operación en 40 millones de pesos anuales.

En general, para llenar esta descripción debes seguir esta pauta:Metodología Star

  • Situación: Contexto general, donde, cuando, quien participaba, cual era el problema,etc.
  • Tarea: Un problema específico que fue resuelto, si trabajaste en muchos, pon el más llamativo.
  • Acción: Qué pasos seguiste para resolver el problema? qué tecnología usamos?
  • Resultados: Se específico, que lograste? pon números!

Luego, 2 cosas que te darán puntos adicionales son los cursos o certificados, trata de poner solo los más importantes, no pongas tus habilidades (powerpoint, excel, paint, php, java, etc), para eso esta Linkedin, pon solo los cursos. Y agrega tus proyectos y repositorios en Github, incluso esos simples que hiciste en la U te daran puntos. Ojo! que los van a mirar, asi que preocupate que sean aquellos de mejor calidad.

Finalmente y lo más importante, todo en Ingles. Si no hablas inglés perfectamente no importa, pero consigue a alguien que te ayude con tu CV. Si tienes que pagar, entonces hazlo, tomalo como algo en serio, una inversión, valdrá la pena.

Próximamente:

  • Cómo conseguir una entrevista
  • Lo que debes hacer antes, durante y después de una entrevista.

Watch Boston Dynamics’ next-gen Atlas robot do warehouse work (and bounce back from bullying)

Atlas robot pushed
We already know that Boston Dynamics’ robots can run with the big dogs and go dashing through the snow. But can they pick up and put away 10-pound boxes? And can they pick themselves up after being pushed down by bullies? Yes, they can. Heaven help us, they can. A newly released video shows the company’s next-generation, two-legged Atlas robot keeping its balance while it walks through the woods on a rough, snowy trail. But things get really eerie when Atlas is put in a warehouse setting, where the robot picks up boxes and slides them onto shelves. It just… Read More

from GeekWire http://ift.tt/1PXI3vv
via IFTTT

reverse-engineering

Ingenieria inversa de Android Apps

b85d8f26e874779cf3259aa6e53f5734Alguna vez te has preguntado qué hay dentro de una App en Android?, ciertamente uno quiere intrusear en el código para aprender, pero esto también puede tener otras intenciones, como por ejemplo para verificar que hace realmente una App con nuestros datos, como el tan comentado caso de la App desarrollada por Subtel para Chile, donde en mi humilde el desarrollador tuvo que trabajar apurado, y ni las mínimas recomendables prácticas fueron seguidas, pero bueno ese es otro tema, seguramente para un futuro post.

Volviendo al tema original, hay un punto importante, la Ingeniería Inversa o la decodificación de software esta prohibido en algunos paises, es mas, en algunos es penado por ley, por lo que lo que continuar leyendo y ejecutar este proceso será únicamente de tu responsabilidad y espero que se realice con fines académicos o de investigación.

A las herramientas!

logoLo primero que deberás hacer es obtener el APK, y aunque hay muchas formas de obtener una copia del software, la más simple para mi ha sido usando el servicio proporcionado por APK Pure, donde usando un sitio web puede descargar el APK. Si, existen otros métodos, pero tiendo a trabajar desde una tablet, chromebook o en equipos donde no puedo instalar mucho software para uso personal. Entonces, en este ejemplo descargamos Maqui una app que he desarrollado hace algún tiempo, la cual puedes ver en Google Play.

Entonces el proceso es simple, abrimos APK Pure y pegamos el enlace completo en la barra de búsqueda, y le hacemos click al icono de búsqueda. Luego, nos aparecera la opcion de “Download APK”.

Captura de pantalla 2016-02-23 a las 10.17.50 p.m.

Luego de descargar la APK viene la magia: usaremos otro servicio en línea para desempaquetar la APK y convertir los binarios de vuelta al código fuente, y así leer y aprender sobre cómo el desarrollador ha programado esta App.

Captura de pantalla 2016-02-23 a las 10.25.53 p.m.

Seleccionamos la APK que deseamos analizar, seleccionamos un decompilador, para este caso recomiendo Jadx y le damos a “Upload and Decompile”.

Una vez finalizado el proceso, se nos presenta el código fuente que puede ser examinado en línea, o podemos usar la opción “Save” para descargar todo de una vez en un archivo comprimido (ZIP). Como siempre, la parte más “jugosa” se encontrará dentro de la carpeta “com” y listo, eso es todo amigos!

Happy Coding!

Las baterías de hidrógeno se sitúan como gran esperanza para drones y smartphones

Las baterías de hidrógeno se sitúan como gran esperanza para drones y smartphones
Las baterías de hidrógeno son la última promesa sobre la revolución que se acerca en el almacenamiento de energía. La novedad es que su presentación al público es cosa de menos de un mes, aunque el punto negativo sigue siendo el precio.
Los drones son probablemente una de las tendencias más destacadas de los últimos tiempos, y es algo que resulta muy curioso, porque más allá de usos para el público general como la grabación de vídeo o manejo y conducción eventual, no parece que pueda llegar a ser una tecnología rompedora ni usada en la cotidianidad del día a día, aunque Amazon se empeñe en demostrar que tienen mucho que decir en asuntos de entrega de paquetes. La realidad es que uno de los escollos a los que se enfrentas los drones actuales es su corta autonomía, y la solución a esto la puede tener una nueva batería de hidrógeno desarrollada por Intelligent Energy, según leemos en The Verge.
Se trata de una compañía británica que investiga con energía basada en hidrógeno, y la batería de hidrógeno es su máximo hallazgo hasta la fecha, ya que añadiendo pilas de hidrógeno en baterías tradicionales de drones se puede alargar el tiempo hasta dos horas más respecto a lo que consigue una batería de las que actualmente se usan. Lo mejor es que debido a las características del hidrógeno comprimido la batería se puede recargar en pocos minutos, frente a los 40 que requieren las mencionadas baterías tradicionales.

El uso de baterías de hidrógeno podría suponer una gran ayuda al despegue de los smartwatches.

El uso de baterías de hidrógeno podría suponer una gran ayuda al despegue de los smartwatches.

Según Intelligent Energy, las pruebas son muy solventes, ya que se ha estado experimentando con ello durante 14 meses, y se espera que las primeras demostraciones públicas lleguen durante el CES en Las Vegas. Normalmente estos anuncios pueden venir publicitados sin experimentaciones previas, pero que comience a llegar a las ferias en estado final es garantía de su comercialización. El gran problema sigue siendo el precio, que sí supera por mucho al de producción de baterías actuales.
Se acerca una revolución en autonomía, y quien se adelante cumplirá con una de las grandes demandas del mercado.
Lo que más ilusiona de esta nueva tecnología de batería, que se suma a la lista de otros clásicos como el grafeno, es su implementación futura y plausible en otro tipo de dispositivos, que globalmente sí necesitan mejorar su autonomía exponencialmente, a la vez que mejorar considerablemente el tiempo de carga en el caso de no conseguir lo primero. De hecho, durante el verano la compañía ya se hizo famosa anunciando esta aplicación del hidrógeno en baterías de smartphones, con la afirmación de que con su sistema podrían ofrecer una semana de autonomía frente al día en el que situaríamos el estándar actual.

via Hipertextual http://ift.tt/1P61QIz