sistemas que se desarrollan en la actualidad siguen presentando fallos en su ejecución, dichos fallos tienen costos significativamente altos. El propósito general de evaluar sistemas es localizar la mayor cantidad de fallos posibles para corregirlos. De acuerdo al estándar IEEE 1633-2008 (Norman F. Schneidewind, 2008), un fallo es una condición accidental que hace que una unidad funcional falle al ejecutar su función requerida. La funcionalidad del sistema queda establecida desde la etapa de análisis y especificación de requerimientos del proceso de desarrollo de software. La importancia de un buen proceso de evaluación se debe a que si no se realizan las pruebas de forma pertinente y adecuada, es imposible asegurar que un producto de software cumple con la funcionalidad de acuerdo a las especificaciones establecidas en relación con los requerimientos del sistema. Sin embargo el número de pruebas que se realizan para localizar y corregir fallos presenta una tendencia exponencial (Jelinski, 1972). Durante la etapa de pruebas, se tienen dos enfoques que son de gran importancia para lograr identificar los fallos existentes en un sistema, estos son la Verificación y Validación. Durante la Verificación se determina si el sistema o una parte de él operan de una manera satisfactoria. Bajo el enfoque de Validación se determina si un sistema o parte de él satisface los requerimientos establecidos por el cliente. Así esta fase del proceso de desarrollo es una forma de medir y mejorar la confiabilidad de software. Este artículo está organizado de la siguiente forma, en la sección 2 se presenta el marco teórico en donde el concepto de confiabilidad de software es abordado. En la sección 3 se describen algunas herramientas de evaluación de sistemas orientados a objetos. En la sección 4 se presenta la propuesta del presente trabajo. Finalmente en la sección 4 se exponen algunas conclusiones y el trabajo a futuro. Marco teórico La confiabilidad de software se define como la probabilidad que tiene un sistema de operar libre de fallos durante un tiempo determinado en un ambiente específico (Musa, 2004). Esta es un área de gran importancia en el proceso de desarrollo de software. En la actualidad la confiabilidad es un atributo de calidad que se exige en el desarrollo de cualquier aplicación de software. Cuando las aplicaciones de software carecen de confiabilidad se tienen consecuencias económicas, políticas y sociales. Para tener niveles adecuados de confiabilidad es necesario evaluar al sistema en cuestión, localizar y corregir la mayor cantidad de fallos antes de que el producto final sea liberado. Pruebas de software La fase de pruebas es una tarea que consume muchos recursos. Para ejecutar esta fase en la práctica las organizaciones que desarrollan software asignan un grupo de evaluadores físicos, los cuales realizan este proceso de forma manual en un lapso de varios meses e incluso años. Este enfoque consume mucho tiempo y conlleva altos costos. Para lograr una cobertura adecuada en la evaluación del sistema en cuestión, es necesario: seleccionar los datos de prueba, las variables del entorno de evaluación, determinar el número de pruebas y el tiempo asignado para este proceso. En la ejecución de la cobertura de evaluación, algunos autores desarrollan modelos de predecibilidad apoyados de métricas de software (Basili, 1996). Para optimizar los recursos que son empleados en la ejecución de miles o millones de pruebas es adecuado utilizar instrumentos de evaluación (Ragab, 2010). Se han realizado algunas propuestas para evaluar sistemas en Internet, entre estas propuestas esta (Davila-Nicanor, 2005), en donde se desarrolló un herramienta la cual automatiza la ejecución de las pruebas, reduciendo el tiempo proyectado para la ejecución de 5000 pruebas funcionales de 4 años a tan solo 6 horas. En la evaluación dinámica de un sistema de software, muchos autores se han enfocado principalmente en 2 tipos de pruebas: las pruebas unitarias y las pruebas de integración. Una cantidad importante de trabajos se han enfocado a pruebas unitarias. Mientras que en pruebas integrales existe una menor incidencia de trabajos. Es importante resaltar que para este último enfoque el contexto de operación es determinante, tal es el caso del lenguaje Java, en el cual las clausulas más importantes se resuelven a tiempo de ejecución, un ejemplo de ello son aspectos como el polimorfismo y la herencia. Pruebas Unitarias Durante la fase de pruebas, el proceso de evaluación tiene dos aspectos importantes, el primero está orientado al desarrollo de pruebas unitarias o modulares. Estas pruebas se basan en comprobar unidades individuales de código y determinar si estas cumplen con los requerimientos establecidos. Cuando hablamos de unidades nos referimos a secciones del código que pueden probarse de forma independiente. En un sistema orientado a
Hola Javier, primero muchas gracias por tan valiosa información. Mi padre lleva muchos años con su negocio que ya es algo así como un micro-mercado y controlar la venta y compra de productos le es imposible, ahora que programa me ayudaría a poder hacerlo? puedo tener un control exacto del negocio? te agradecería mucho la ayuda que me vayas a brindar.
¿Cómo sabes que el sistema funciona? Una respuesta común a esta pregunta es “porque el equipo de testing le echó un vistazo”.  El problema viene al tener que determinar la extensión y profundidad de las pruebas realizadas. Si eres afortunado y trabajas en una empresa con buenos procesos, podrás acreditar lo probado a través de una lista de casos de prueba. Si trabajas en una empresa de clase mundial, entonces hay una gran posibilidad de que tengas la fortuna de tener a tu disposición herramientas para la gestión y automatización de pruebas.De acuerdo con Elfriede Dustin, las herramientas de automatización de pruebas consolidan y mejoran la efectividad de las pruebas siempre y cuando se manejen las expectativas, se entiendan las herramientas, y se seleccione una herramienta compatible con el ambiente de programación. Si necesitas probar un sistema no trivial que conste de algo más que unas cuantas pantallas y reportes, entonces es muy posible que por medio de pruebas manuales no logres realizar todas las pruebas que necesitas para verificar la calidad del sistema. Con la ayuda de herramientas de automatización puedes ejecutar más pruebas, lo cual se traduce en una mayor cobertura del sistema que se está probando.
Herramientas de evaluación para sistemas orientados a objetos.    JUnit  XUnit es una de las herramientas más usadas para realizar pruebas unitarias automatizadas sobre software. Es una de las primeras herramientas de evaluación con la que la localización y detección de fallos es mucho más precisa. Ésta  cuenta  con  una  extensión  llamada  JUnit,  creada por  Kent  Beck  y  Erich  Gamma  (Wahid  & Almalaise,  2011).  Esta  herramienta  se  enfoca  en  realizar  pruebas  sobre  el  código  en  lenguaje  Java.  Sus principales  ventajas  son  el  uso  simple  y  la  automatización  de  las  pruebas.  Herramientas  como  Evosuite  la utilizan  como  complemento  para la  generación  de  sus pruebas.  JUnit es  un  framework  de  evaluación  y  su capacidad está en relación de la experiencia del evaluador que la utiliza.    Herramienta LCT (Lime ConolicTester)  LCT  (al., 2011) utiliza  un  enfoque  de  pruebas  concolic, es decir una  combinación entre  ejecución concreta  y simbólica. Este enfoque se utiliza para estimar los diferentes caminos que tendrá el programa durante el tiempo de  ejecución.  La arquitectura  del  LCT se basa  en  tres  componentes  principales: el  instrumentador el  cual, examina el código para tener un conjunto de valores de entrada,  el  ejecutor de pruebas en el cual se hace la ejecución del  programa con  los valores  ya  preestablecidos, finalmente el selector de  pruebas se encarga  de construir un árbol de ejecución simbólica basado en la información recolectada por los ejecutores de pruebas y selecciona en el árbol la ejecución simbólica siguiente. Este es uno de los primeros frameworks de evaluación que existen, teniendo buenos resultados en su aplicación. Una de sus principales desventajas es que el costo computacional es muy alto y  sólo  se enfoca en la revisión del código  sin  tomar en cuenta la funcionalidad de sistema.    PET y jPET.  PET (Albert  E. a.-Z., 2010) es una herramienta que utiliza archivos bytecode de Java para generar criterios de cobertura de  evaluación,  este  enfoque  se  complementa que se  complementa con  técnicas heurísticas  para determinar la efectividad de la ejecución del programa, los parámetros de cobertura son: sentencias, caminos y loop-K  (ciclo  de  ejecución).  jPET  (Albert  E.  a.-M.-Z.,  2011),  es  una  extensión  de  PET  y  su  función  es proporcionarle al evaluador un ambiente grafico para la creación de casos de prueba. jPET tiene un visor de su comportamiento  en  cada caso y  agrega  un  método  de  analizador  de  precondiciones  escritos  en JML,  esta funcionalidad  no  existe  en  PET.  Una  de  sus  principales  desventajas  es  que  la  cobertura  de  los  casos  de pruebas se limita al diseño del sistema, y nuevamente la  funcionalidad queda ignorada.   Herramienta EvoSuite.  Una  de  las  mejores  herramientas  es  EvoSuite  (Fraser,  2011),  debido  a  que  tiene  un  buen  proceso  de localización de fallos. Su funcionamiento se basa en producir series de pruebas que permiten alcanzar una alta cobertura de código utilizando solo el bytecode.  Para este proceso se implementan varias técnicas como son la búsqueda hibrida, la ejecución simbólica dinámica y la trasformación del alcance de prueba. EvoSuite tiene dos objetivos principales: la cobertura  total  del  conjunto  de  pruebas,  utiliza un  enfoque  de  búsqueda  evolutiva que muta  conjuntos  de  pruebas  completas  respecto a  un criterio de completitud  de  cobertura.    Otro  objetivo importante es que la generación de aserciones basadas en mutación, utiliza pruebas basadas en mutación para producir un conjunto reducido de aserciones que maximiza el número de defectos introducidos en una clase que está en  relación con los  casos  de  prueba.    Es sin  duda  una  de  las mejores  herramientas  de  evaluación,  sin embargo  su  costo  computacional  es  muy  alto  para  cualquier  entorno  de  ejecución  real.    Esta  herramienta genera millones de casos de prueba, lo cual implica un desgaste muy alto en tiempo y esfuerzo.  De esta forma retornamos el problema de origen: costos altos y pocos recursos.    Arquitectura propuesta    En el presente trabajo se propone una arquitectura para una herramienta de evaluación de sistemas orientados a  objetos.  La  evaluación  de  sistemas de  software es  un  proceso costoso,  pero en  la  actualidad  a  ese costo también hay que incluir que las técnicas tradicionales de evaluación no son suficientes, los nuevos paradigmas de  programación  hacen  difícil  la  planeación  y  ejecución  de  pruebas.    Nuestra  propuesta  se  basa  en  la planeación de pruebas y en la ejecución de casos de prueba mediante el paradigma orientado a aspectos.    El diseño de  la arquitectura propuesta es independiente del código fuente, ya que se puede tomar como base el bytecode.  Esto es debido a que en muchos sistemas, las aplicaciones no contienen archivos fuente, debido que 

Eggplant es la solución que presenta la compañía Testplant. Esta herramienta es independiente de las tecnologías ya que utiliza la pantalla como imagen y mediante reconocimiento OCR es capaz de identificar imágenes y texto para su utilización. Tiene un interfaz sencillo aunque utiliza un código de generación de scripts muy poco extendido en la actualidad, Sense Talk, originalmente desarrollado por Next Step. Esta herramienta se puede integrar con otras muchas como Eggplant Manager, también de este fabricante. Se puede usar tanto Windows, MacOS y Linux.
De las técnicas anteriormente descritas me llamaron atención Monkey testing, ADB Input y BDD, estas tres técnicas se ejecutan a través de la terminal con comandos de tipo adb shell en el caso de la primera y la segunda, la tercera a hace uso de la gema (ruby) android-calabash, lo que buscaba con la herramienta es ofrecer una experiencia similar (guardando las proporciones) de lo que ofrece servicios como firabase test Lab y AWS Device Farm, la cual consiste en pedir la APK y seleccionar los dispositivos a probar.

Las herramientas de gestión de la reputación online te ayudarán a saber qué dicen de ti y dónde. La más recomendada es Google Alerts, un sistema de alertas que te avisa cuando alguien publica algo sobre tu nombre o marca. Aunque tal y como señala el webmaster Dean Romero, “no hacen falta demasiadas herramientas para saber qué se está diciendo de ti en Google. El algoritmo está muy cualificado para encontrar los términos que busques. Basta teclear tu nombre o tu marca y listo”.
Karol Pomaski, CEO & Founder y Carlos Alberto David Piña, Chief Business Development Officer & Founder; desarrollaron el primer Sistema ERP Gratis, que brinda a los usuarios una nueva forma de administrar sus negocios de acuerdo a sus necesidades, 100% en la nube y utilizando los más altos estándares de seguridad, totalmente gratis, sin cargos ocultos.
“Son herramientas muy útiles en su versión gratuita, de hecho la principal limitación de Zoho CRM sin pago es que sólo permite el acceso a tres usuarios distintos dentro de la empresa, lo que para una pyme suele ser suficiente. En el caso de Openbravo, al ser software libre, el problema puede venir, como con cualquier solución open source (código abierto), en que hay que tener ciertos conocimientos técnicos para ponerlas a funcionar. Por eso, aunque Openbravo sea gratuito, si no tienes conocimientos técnicos debes valorar si te compensa contratar a alguien que instale y configure Openbravo para ajustarlo a las necesidades específicas de la empresa”, explica José Carlos Cortizo, CMO de BrainSins .
×