martes, enero 21

Guía de SoapUI para principiantes-Gratis

Desde un twett de SmartBear me llega la noticia de esta guía con 50 hojas de tutorial vinculado con SoapUI y todo gratis. Una muy buena oportunidad para conocer el alcance de este producto.


url: http://bit.ly/JCYXT1

sábado, enero 4

Ruby, una joya para automatizar

Puede ocurrir que la tarea de comenzar a automatizar pruebas resulte frustrante y muy probablemente sea debido a la complejidad del lenguaje que se esté utilizando si la automatización está orientada a realizar scripts mantenibles y reutilizables. Existe mucha información en internet sobre automatización y por lo general se encuentra basada en Java. Java es un lenguaje muy poderoso y ampliamente utilizado en todo el mundo por infinidad de aplicaciones, de eso no hay duda. Pero lo cierto es que para alguien que está comenzando a programar/automatizar no resulta muy amigable y sencillo.

Para empezar a automatizar sin tantas complicaciones sólo hay que elegir un lenguaje simple, que esté orientado a las personas en lugar de las máquinas. Que el lenguaje esté orientado a las personas en lugar de las máquinas significa que sea sencillo de aprender y memorizar. Que su sintaxis sea lo mas familiar posible a nuestra forma de comunicarnos. Vale aclarar que la mayoría se los lenguajes están en inglés por lo que la frase “a nuestra forma de comunicarnos” hace referencia a dicho idioma.

Pues bien, un lenguaje que cumple con esta característica es Ruby. Un lenguaje con una curva de aprendizaje sumamente pronunciada, con una sintaxis sencilla y elegante, sin complicaciones y con un dinamismo mas que importante.

Volviendo a Ruby, quiero comentar que existe muchísima documentación y una amplia comunidad detrás para ayudar.

Ya hemos mencionado en un post anterior como es el clásico “hola mundo” en Ruby y al ser tan fácil lo volvemos a escribir para que quede en esta entrada:

hola_mundo.rb es el nombre del archivo

puts “hola mundo”

Y lo que está en verde es todo el código que contiene. Sencillo verdad?

Por ejemplo, ahora veamos que se entiende con la siguiente porción de código:

10.times do
  puts “hola mundo”
end

Este es un simple ejemplo de lo fácil que es escribir y entender código en Ruby. Eso si, existen conceptos un poco mas complejos, no es todo así de sencillo aunque para comenzar a programar automatización no se requieren demasiados conocimientos sobre un lenguaje, obviamente cuanto mas se conozca mejor será, pero no es una limitación y eso se va adquiriendo sobre la marcha. Recordemos que cuando automatizamos no estamos haciendo una aplicación en sí sino mas bien programando instrucciones para simular el uso del browser por parte del usuario en el caso de pruebas funcionales y para eso no se necesitan grandes destrezas en programación.

Vamos con un ejemplo mas. Que parece que indica el siguiente código?

if titulo.include? “Bienvenido”
  puts “Mensaje de bienvenida OK”
end

Su traducción sería: 
si (if) titulo incluye (include?) la palabra “Bienvenido” imprimir (puts) “Mensaje de bienvenida OK”

Que también se puede escrbir de la siguiente manera:

puts “Mensaje de bienvenida OK” if titulo.include? “Bienvenido”

Quien en algún momento aprendió un lenguaje de programación es muy probable que haya notado que no hemos usado llaves, corchetes ni punto y coma (;). Si, Ruby no los necesita.

Como se puede ver el lenguaje es muy facil de entender y a medida que se va aprendiendo se va tornando hasta divertido.

Ruby tiene muchísimas herramientas orientadas a pruebas que son gratuitas (open source) como Cucumber, RSpec, Minitest entre otros y van surgiendo cada vez mas en el mercado asi como surgen experiencias y respuestas de solución a preguntas de problemas que otros ya tuvieron.

Podríamos decir que el que no tiene los skills técnicos para automatizar podría adquirilos facilmente.
Un tester que entiende como programar tiene un plus respecto de un desarrollador y ese plus lo obtuvo de su experiencia como tester!
Links
Me llegó la noticia de esta publicación que me resultó muy interesante mostrarla, no solo para difundirla a la comunidad sino para tenerla presente y en la medida que vaya pudiendo, evaluar cada una de las herramientas y llevar un registro de ello que también lo estaré publicando.

A continuación les dejo el listado en cuestión, con el nombre de la herramienta nada más, en próximos artículos estaré accediendo a la página oficial de cada una de ellas para conocer su alcance y funcionalidades principales:









9) Test Collab:
http://testcollab.com/








Herramientas adicionales




20) Meliora TestLab:
https://www.melioratestlab.com/


22) Test Run:
http://runtestrun.com/


24) Enterprise Tester:
http://enterprisetester.com/



Fuente:  

Testing Lateral

Se trata, principalmente, de aplicar técnicas del pensamiento lateral para mejorar las habilidades de los testers. Este enfoque no intenta cubrir todo el rango de posibles habilidades que se consideren ya que para las habilidades que son técnicas o muy especializadas, se requiere de la aplicación de conocimientos adquiridos.

El testing lateral intenta trabajar sobre algunos aspectos soft de los tester, es decir, aquellas habilidades que hacen a su mindset, a su creatividad y su meticulosidad. Esto les permitirá considerar diferentes enfoques al momento de resolver cualquier situación que se presente.

Como notarán, el enfoque es simple. De ahora en más, sólo resta conocer algunas técnicas y ejercicios para ver si funciona. Las siguientes son algunas de las técnicas (un subconjunto de las propuestas por De Bono es su libro) que vamos a probar bajo este enfoque, siempre tratando de poner en práctica las habilidades de los testers:

1. Revisión de supuestos
2. Alternativas
3. Ejercicios de dibujo
4. Fraccionamiento o división
5. Inversión
6. Brainstorming
7. Analogías

Técnica 1: Revisar Supuestos
La primer técnica que vamos a ver es la revisión de supuestos. Es simple y está relacionado a la manera en la que axiomatizamos los conceptos y las ideas. Dar algo por supuesto (supuestos lógicos que se aceptan por válidos en sí mismos), nos ayuda a construir un modelo sobre esto sin preocuparnos, muchas veces, por las cuestiones triviales. Además, la aceptación de que una idea sea correcta, no garantiza su corrección.

Práctica para el dojo:

Ejercicio: El siguiente problema ilustra muy bien el factor restrictivo de los supuestos. Consiste en unir los nueves puntos mediante sólo 4 líneas rectas pero sin levantar el lápiz del papel.

Ayuda: El factor que bloquea la solución es que las líneas rectas han de unir los puntos sin exceder los límites de los propios puntos. Los invito a que intenten resolver el ejercicio.

En testing, hacer muchas suposiciones puede ser peligroso. Estas pueden estar asociadas, por ejemplo, a la estandarización de ciertos sistemas. La interface de una aplicación es la misma para todas las ventanas, funciona de la misma manera que el resto y, por ende, lo hace bien. En conclusión, la revisión intenta demostrar que cualquier supuesto puede ser sometido a examen. Claramente, esta técnica no intenta revisar todos los supuestos posibles. No sería aplicable y rentable para ningún proyecto. Sin embargo, para un tester, tener este pensamiento crítico es fundamental. Como ya dijo Jerry Weinberg: “A tester is someone who knows that things could be different”.
 
*Habilidades de un tester
Habilidades de un tester: el quid de la cuestión…
Según la RAE, habilidad es la capacidad y disposición de una personal para hacer algo. Generalmente, esto es resultado de experiencia, entrenamiento y, en algunos casos, sólo es una capacidad natural.

Un tester debe tener ciertas habilidades para desarrollar su trabajo, algunas habilidades técnicas (también las vamos a llamar hard) para ejecutar cuestiones básicas de su trabajo y otras habilidades soft que tienen que ver con su enfoque hacia el trabajo. 
Estas últimas van más allá de los límites de la profesión y alcanzas otros aspectos de la vida. Son habilidades que hacen a su comunicación interpersonal, negociación y resolución de conflictos, efectividad y creatividad, por nombrar algunas.

A partir de esta diferenciación y teniendo en cuenta la importancia de cada una, podemos definir 3 grupos:

1. Aquellas profesiones que necesitan de las habilidades técnicas y pocas habilidades soft.
2. Aquellas profesiones que necesitan ambas habilidades
3. Aquellas profesiones que necesitan mayormente habilidades soft, pero no así de tantas hard.

Pienso que la profesión de tester está contenida en el segundo grupo y, a continuación, justifico mi elección.

Las habilidades técnicas son aquellas que implican “meterse en el barro”, hacer una estrategia de pruebas, definir/programar y ejecutar casos y generar los respectivos reportes e informes. También, incluyo aquí la aplicación de metodologías para la gestión de los proyectos, entendimiento del dominio/negocio, procedimientos generales y adopción de estándares.

Por último, dejé para el final las habilidades soft ya que son las más difíciles de observar, cuantificar y medir y, por lo tanto, quiero hacer especial hincapié sobre ellas. Esto no hace más importantes a estas habilidades por encima de las técnicas (de hecho, un tester no sobreviviría sin habilidades técnicas). 

El tema pasa por como las habilidades pueden ser adquiridas. Las hard, pueden entrenarse con mayor facilidad ya que en cierta medida se aprenden el la escuela, Universidad, cursos, etc. Mientras que las habilidades soft están relacionadas a los patrones de conducta de las personas y, en general, se mejorar/modifican (y entrenan también) haciendo camino al andar.

A continuación detallo las habilidades soft que un tester debería tratar de atender, mejorar y entrenar para ser un tester “completo”:

1. Disciplina y perseverancia
2. Meticulosidad
3. Comunicación (oral y escrita)
4. Curiosidad
5. Observación (fundamental!)
6. Priorización de esfuerzo y gestión del tiempo
7. Actitud positiva
8. Pensamiento negativo
9. Pensamiento crítico

Fuente:
http://germanbraun.blogspot.com.ar/search/label/Testing%20Lateral
http://www.amazon.com/s?search-alias=stripbooks&field-isbn=0060903252
http://testingbaires.com/testing-lateral/

Ejemplos de uso de Javascript

http://tweetmap.it/

Comandos Linux - Parte XIII

Actualizador de paquetes yum (Fedora, Redhat y otros)
1.yum install package_name: descargar e instalar un paquete rpm.
2.yum localinstall package_name.rpm: este instalará un RPM y tratará de resolver todas las dependencies para ti, usando tus repositorios.
3.yum update package_name.rpm: actualizar todos los paquetes rpm instalados en el sistema.
4.yum update package_name: modernizar / actualizar un paquete rpm.
5.yum remove package_name: eliminar un paquete rpm.
6.yum list: listar todos los paquetes instalados en el sistema.
7.yum search package_name: Encontrar un paquete en repositorio rpm.
8.yum clean packages: limpiar un caché rpm borrando los paquetes descargados.
9.yum clean headers: eliminar todos los ficheros de encabezamiento que el sistema usa para resolver la dependencia.
10.yum clean all: eliminar desde los paquetes caché y ficheros de encabezado.

Comandos Linux - Parte XII

Paquetes rpm (Red Hat, Fedora y similares)
1.rpm -ivh package.rpm: instalar un paquete rpm.
2.rpm -ivh –nodeeps package.rpm: instalar un paquete rpm ignorando las peticiones de dependencias.
3.rpm -U package.rpm: actualizar un paquete rpm sin cambiar la configuración de los ficheros.
4.rpm -F package.rpm: actualizar un paquete rpm solamente si este está instalado.
5.rpm -e package_name.rpm: eliminar un paquete rpm.
6.rpm -qa: mostrar todos los paquetes rpm instalados en el sistema.
7.rpm -qa | grep httpd: mostrar todos los paquetes rpm con el nombre “httpd”.
8.rpm -qi package_name: obtener información en un paquete específico instalado.
9.rpm -qg “System Environment/Daemons”: mostar los paquetes rpm de un grupo software.
10.rpm -ql package_name: mostrar lista de ficheros dados por un paquete rpm instalado.
11.rpm -qc package_name: mostrar lista de configuración de ficheros dados por un paquete rpm instalado.
12.rpm -q package_name –whatrequires: mostrar lista de dependencias solicitada para un paquete rpm.
13.rpm -q package_name –whatprovides: mostar la capacidad dada por un paquete rpm.
14.rpm -q package_name –scripts: mostrar los scripts comenzados durante la instalación /eliminación.
15.rpm -q package_name –changelog: mostar el historial de revisions de un paquete rpm.
16.rpm -qf /etc/httpd/conf/httpd.conf: verificar cuál paquete rpm pertenece a un fichero dado.
17.rpm -qp package.rpm -l: mostrar lista de ficheros dados por un paquete rpm que aún no ha sido instalado.
18.rpm –import /media/cdrom/RPM-GPG-KEY: importar la firma digital de la llave pública.
19.rpm –checksig package.rpm: verificar la integridad de un paquete rpm.
20.rpm -qa gpg-pubkey: verificar la integridad de todos los paquetes rpm instalados.
21.rpm -V package_name: chequear el tamaño del fichero, licencias, tipos, dueño, grupo, chequeo de resumen de MD5 y última modificación.
22.rpm -Va: chequear todos los paquetes rpm instalados en el sistema. Usar con cuidado.
23.rpm -Vp package.rpm: verificar un paquete rpm no instalado todavía.
24.rpm2cpio package.rpm | cpio –extract –make-directories *bin*: extraer fichero ejecutable desde un paquete rpm.
25.rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm: instalar un paquete construido desde una fuente rpm.
26.rpmbuild –rebuild package_name.src.rpm: construir un paquete rpm desde una fuente rpm.

Comandos Linux - Parte XI

Archivos y ficheros comprimidos
1.bunzip2 file1.bz2: descomprime in fichero llamado 'file1.bz2'.
2.bzip2 file1: comprime un fichero llamado 'file1'.
3.gunzip file1.gz: descomprime un fichero llamado 'file1.gz'.
4.gzip file1: comprime un fichero llamado 'file1'.
5.gzip -9 file1: comprime con compresión máxima.
6.rar a file1.rar test_file: crear un fichero rar llamado 'file1.rar'.
7.rar a file1.rar file1 file2 dir1: comprimir 'file1', 'file2' y 'dir1' simultáneamente.
8.rar x file1.rar: descomprimir archivo rar.
9.unrar x file1.rar: descomprimir archivo rar.
10.tar -cvf archive.tar file1: crear un tarball descomprimido.
11.tar -cvf archive.tar file1 file2 dir1: crear un archivo conteniendo 'file1', 'file2' y'dir1'.
12.tar -tf archive.tar: mostrar los contenidos de un archivo.
13.tar -xvf archive.tar: extraer un tarball (si el archivo además está comprimido con gzip, bzip2 o xz, descomprimirlo automáticamente).
14.tar -xvf archive.tar -C /tmp: extraer un tarball en /tmp.
15.tar -cjvf archive.tar.bz2 dir1: crear un tarball comprimido en bzip2.
16.tar -xjvf archive.tar.bz2: descomprimir un archivo tar comprimido en bzip2
17.tar -cJvf archive.tar.xz dir1: crear un tarball comprimido en xz.
18.tar -xJvf archive.tar.xz: descomprimir un archivo tar comprimido en xz.
19.tar -czvf archive.tar.gz dir1: crear un tarball comprimido en gzip.
20.tar -xzvf archive.tar.gz: descomprimir un archive tar comprimido en gzip.
21.zip file1.zip file1: crear un archivo comprimido en zip.
22.zip -r file1.zip file1 file2 dir1: comprimir, en zip, varios archivos y directorios de forma simultánea.
23.unzip file1.zip: descomprimir un archivo zip.

Comandos Linux - Parte X

Atributos especiales en ficheros (usar "+" para colocar permisos y "-" para eliminar)
1.chattr +a file1: permite escribir abriendo un fichero solamente modo append.
2.chattr +c file1: permite que un fichero sea comprimido / descomprimido automaticamente.
3.chattr +d file1: asegura que el programa ignore borrar los ficheros durante la copia de seguridad.
4.chattr +i file1: convierte el fichero en invariable, por lo que no puede ser eliminado, alterado, renombrado, ni enlazado.
5.chattr +s file1: permite que un fichero sea borrado de forma segura.
6.chattr +S file1: asegura que un fichero sea modificado, los cambios son escritos en modo synchronous como con sync.
7.chattr +u file1: te permite recuperar el contenido de un fichero aún si este está cancelado.
8.lsattr: mostrar atributos especiales.

Comandos Linux - Parte IX

Permisos en ficheros (usar "+" para colocar permisos y "-" para eliminar)
1.ls -lh: Mostrar permisos.
2.ls /tmp | pr -T5 -W$COLUMNS: dividir la terminal en 5 columnas.
3.chmod ugo+rwx directory1: colocar permisos de lectura ®, escritura (w) y ejecución(x) al propietario (u), al grupo (g) y a otros (o) sobre el directorio 'directory1'.
4.chmod go-rwx directory1: quitar permiso de lectura ®, escritura (w) y (x) ejecución al grupo (g) y otros (o) sobre el directorio 'directory1'.
5.chown user1 file1: cambiar el dueño de un fichero.
6.chown -R user1 directory1: cambiar el propietario de un directorio y de todos los ficheros y directorios contenidos dentro.
7.chgrp group1 file1: cambiar grupo de ficheros.
8.chown user1:group1 file1: cambiar usuario y el grupo propietario de un fichero.
9.find / -perm -u+s: visualizar todos los ficheros del sistema con SUID configurado.
10.chmod u+s /bin/file1: colocar el bit SUID en un fichero binario. El usuario que corriendo ese fichero adquiere los mismos privilegios como dueño.
11.chmod u-s /bin/file1: deshabilitar el bit SUID en un fichero binario.
12.chmod g+s /home/public: colocar un bit SGID en un directorio –similar al SUID pero por directorio.
13.chmod g-s /home/public: desabilitar un bit SGID en un directorio.
14.chmod o+t /home/public: colocar un bit STIKY en un directorio. Permite el borrado de ficheros solamente a los dueños legítimos.
15.chmod o-t /home/public: desabilitar un bit STIKY en un directorio.

Comandos Linux - Parte VIII

Usuarios y grupos
1.groupadd nombre_del_grupo: crear un nuevo grupo.
2.groupdel nombre_del_grupo: borrar un grupo.
3.groupmod -n nuevo_nombre_del_grupo viejo_nombre_del_grupo: renombrar un grupo.
4.useradd -c “Name Surname ” -g admin -d /home/user1 -s /bin/bash user1: Crear un nuevo usuario perteneciente al grupo “admin”.
5.useradd user1: crear un nuevo usuario.
6.userdel -r user1: borrar un usuario ('-r' elimina el directorio Home).
7.usermod -c “User FTP” -g system -d /ftp/user1 -s /bin/nologin user1: cambiar los atributos del usuario.
8.passwd: cambiar contraseña.
9.passwd user1: cambiar la contraseña de un usuario (solamente por root).
10.chage -E 2011-12-31 user1: colocar un plazo para la contraseña del usuario. En este caso dice que la clave expira el 31 de diciembre de 2011.
11.pwck: chequear la sintaxis correcta el formato de fichero de '/etc/passwd' y la existencia de usuarios.
12.grpck: chequear la sintaxis correcta y el formato del fichero '/etc/group' y la existencia de grupos.
13.newgrp group_name: registra a un nuevo grupo para cambiar el grupo predeterminado de los ficheros creados recientemente.

Comandos Linux - Parte VII

Espacio en disco
1.df -h: mostrar una lista de las particiones montadas.
2.ls -lSr |more: mostrar el tamaño de los ficheros y directorios ordenados por tamaño.
3.du -sh dir1: Estimar el espacio usado por el directorio 'dir1'.
4.du -sk * | sort -rn: mostrar el tamaño de los ficheros y directorios ordenados por tamaño.
5.rpm -q -a –qf '%10{SIZE}t%{NAME}n' | sort -k1,1n: mostrar el espacio usado por los paquetes rpm instalados organizados por tamaño (Fedora, Redhat y otros).
6.dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n: mostrar el espacio usado por los paquetes instalados, organizados por tamaño (Ubuntu, Debian y otros).

Comandos Linux - Parte VI

Montando un sistema de ficheros
1.mount /dev/hda2 /mnt/hda2: montar un disco llamado hda2. Verifique primero la existencia del directorio '/ mnt/hda2'; si no está, debe crearlo.
2.umount /dev/hda2: desmontar un disco llamado hda2. (Antes es necesario salir del punto '/mnt/hda2'.
3.fuser -km /mnt/hda2: forzar el desmontaje cuando el dispositivo está ocupado.
4.umount -n /mnt/hda2: correr el desmontaje sin leer el fichero /etc/mtab. Útil cuando el fichero es de solo lectura o el disco duro está lleno.
5.mount /dev/fd0 /mnt/floppy: montar un disco flexible (floppy).
6.mount /dev/cdrom /mnt/cdrom: montar un cdrom / dvdrom.
7.mount /dev/hdc /mnt/cdrecorder: montar un cd regrabable o un dvdrom.
8.mount /dev/hdb /mnt/cdrecorder: montar un cd regrabable / dvdrom (un dvd).
9.mount -t udf,iso9660 -o loop file.iso /mnt/cdrom: montar un fichero o una imagen ISO.
10.mount -t vfat /dev/hda5 /mnt/hda5: montar un sistema de ficheros FAT32.
11.mount -t ntfs-3g /dev/hda5 /mnt/hda5: montar un sistema de ficheros NTFS.
12.mount /dev/sda1 /mnt/usbdisk: montar un usb pen-drive o una memoria (sin especificar el tipo de sistema de ficheros).

Comandos Linux - Parte V

Encontrar archivos
1.find / -name file1: buscar fichero y directorio a partir de la raíz del sistema.
2.find / -user user1: buscar ficheros y directorios pertenecientes al usuario 'user1'.
3.find /home/user1 -name \*.bin: buscar ficheros con extensión '. bin' dentro del directorio '/ home/user1'.
4.find /usr/bin -type f -atime +100: buscar ficheros binarios no usados en los últimos 100 días.
5.find /usr/bin -type f -mtime -10: buscar ficheros creados o cambiados dentro de los últimos 10 días.
6.find / -name \*.rpm -exec chmod 755 '{}' \;: buscar ficheros con extensión '.rpm' y modificar permisos.
7.find / -xdev -name \*.rpm: Buscar ficheros con extensión '.rpm' ignorando los dispositivos removibles como cdrom, pen-drive, etc.…
8.locate \*.ps: encuentra ficheros con extensión '.ps' ejecutados primeramente con el command 'updatedb'.
9.whereis halt: mostrar la ubicación de un fichero binario, de ayuda o fuente. En este caso pregunta dónde está el comando 'halt'.
10.which comando: mostrar la senda completa (el camino completo) a un comando.

Comandos Linux - Parte IV

Gestionar archivos y directorios
1.cd /home: entrar en el directorio “home”.
2.cd ..: retroceder un nivel.
3.cd ../..: retroceder 2 niveles.
4.cd: ir al directorio raíz.
5.cd ~user1: ir al directorio user1.
6.cd -: ir (regresar) al directorio anterior.
7.pwd: mostrar el camino del directorio de trabajo.
8.ls: ver los ficheros de un directorio.
9.ls -F: ver los ficheros de un directorio.
10.ls -l: mostrar los detalles de ficheros y carpetas de un directorio.
11.ls -a: mostrar los ficheros ocultos.
12.ls *[0-9]*: mostrar los ficheros y carpetas que contienen números.
13.tree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(1)
14.lstree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(2)
15.mkdir dir1: crear una carpeta o directorio con nombre 'dir1'.
16.mkdir dir1 dir2: crear dos carpetas o directorios simultáneamente (Crear dos directorios a la vez).
17.mkdir -p /tmp/dir1/dir2: crear un árbol de directorios.
18.rm -f file1: borrar el fichero llamado 'file1'.
19.rmdir dir1: borrar la carpeta llamada 'dir1'.
20.rm -rf dir1: eliminar una carpeta llamada 'dir1' con su contenido de forma recursiva. (Si lo borro recursivo estoy diciendo que es con su contenido).
21.rm -rf dir1 dir2: borrar dos carpetas (directorios) con su contenido de forma recursiva.
22.mv dir1 new_dir: renombrar o mover un fichero o carpeta (directorio).
23.cp file1: copiar un fichero.
24.cp file1 file2: copiar dos ficheros al unísono.
25.cp dir /* .: copiar todos los ficheros de un directorio dentro del directorio de trabajo actual.
26.cp -a /tmp/dir1 .: copiar un directorio dentro del directorio actual de trabajo.
27.cp -a dir1: copiar un directorio.
28.cp -a dir1 dir2: copiar dos directorio al unísono.
29.ln -s file1 lnk1: crear un enlace simbólico al fichero o directorio.
30.ln file1 lnk1: crear un enlace físico al fichero o directorio.
31.touch -t 0712250000 file1: modificar el tiempo real (tiempo de creación) de un fichero o directorio.
32.file file1: salida (volcado en pantalla) del tipo mime de un fichero texto.
33.iconv -l: listas de cifrados conocidos.
34.iconv -f fromEncoding -t toEncoding inputFile > outputFile: crea una nueva forma del fichero de entrada asumiendo que está codificado en fromEncoding y convirtiéndolo a ToEncoding.
35.find . -maxdepth 1 -name *.jpg -print -exec convert ”{}” -resize 80×60 “thumbs/{}” \;: agrupar ficheros redimensionados en el directorio actual y enviarlos a directorios en vistas de miniaturas (requiere convertir desde ImagemagicK).

Comandos Linux - Parte III

Gestionar archivos y directorios
1.cd /home: entrar en el directorio “home”.
2.cd ..: retroceder un nivel.
3.cd ../..: retroceder 2 niveles.
4.cd: ir al directorio raíz.
5.cd ~user1: ir al directorio user1.
6.cd -: ir (regresar) al directorio anterior.
7.pwd: mostrar el camino del directorio de trabajo.
8.ls: ver los ficheros de un directorio.
9.ls -F: ver los ficheros de un directorio.
10.ls -l: mostrar los detalles de ficheros y carpetas de un directorio.
11.ls -a: mostrar los ficheros ocultos.
12.ls *[0-9]*: mostrar los ficheros y carpetas que contienen números.
13.tree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(1)
14.lstree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(2)
15.mkdir dir1: crear una carpeta o directorio con nombre 'dir1'.
16.mkdir dir1 dir2: crear dos carpetas o directorios simultáneamente (Crear dos directorios a la vez).
17.mkdir -p /tmp/dir1/dir2: crear un árbol de directorios.
18.rm -f file1: borrar el fichero llamado 'file1'.
19.rmdir dir1: borrar la carpeta llamada 'dir1'.
20.rm -rf dir1: eliminar una carpeta llamada 'dir1' con su contenido de forma recursiva. (Si lo borro recursivo estoy diciendo que es con su contenido).
21.rm -rf dir1 dir2: borrar dos carpetas (directorios) con su contenido de forma recursiva.
22.mv dir1 new_dir: renombrar o mover un fichero o carpeta (directorio).
23.cp file1: copiar un fichero.
24.cp file1 file2: copiar dos ficheros al unísono.
25.cp dir /* .: copiar todos los ficheros de un directorio dentro del directorio de trabajo actual.
26.cp -a /tmp/dir1 .: copiar un directorio dentro del directorio actual de trabajo.
27.cp -a dir1: copiar un directorio.
28.cp -a dir1 dir2: copiar dos directorio al unísono.
29.ln -s file1 lnk1: crear un enlace simbólico al fichero o directorio.
30.ln file1 lnk1: crear un enlace físico al fichero o directorio.
31.touch -t 0712250000 file1: modificar el tiempo real (tiempo de creación) de un fichero o directorio.
32.file file1: salida (volcado en pantalla) del tipo mime de un fichero texto.
33.iconv -l: listas de cifrados conocidos.
34.iconv -f fromEncoding -t toEncoding inputFile > outputFile: crea una nueva forma del fichero de entrada asumiendo que está codificado en fromEncoding y convirtiéndolo a ToEncoding.
35.find . -maxdepth 1 -name *.jpg -print -exec convert ”{}” -resize 80×60 “thumbs/{}” \;: agrupar ficheros redimensionados en el directorio actual y enviarlos a directorios en vistas de miniaturas (requiere convertir desde ImagemagicK).

Comandos Linux - Parte II

Apagar, reiniciar o cerrar sesión
1.shutdown -h now: apagar el sistema (1).
2.init 0: apagar el sistema (2).
3.telinit 0: apagar el sistema (3).
4.halt: apagar el sistema (4).
5.shutdown -h hours:minutes &: apagado planificado del sistema.
6.shutdown -c: cancelar un apagado planificado del sistema.
7.shutdown -r now: reiniciar (1).
8.reboot: reiniciar (2).
9.logout: cerrar sesión.
10.exit: salir del intérprete de comandos (si solo hay uno, equivale a cerrar sesión).

Comandos Linux - Parte I

Información del sistema

  • arch: mostrar la arquitectura de la máquina.
  • uname -m: mostrar la arquitectura de la máquina.
  • uname -r: mostrar la versión del kernel usado.
  • uname -a: mostrar la información completa.
  • dmidecode -q: mostrar los componentes (hardware) del sistema.
  • hdparm -i /dev/hda: mostrar las características de un disco duro.
  • hdparm -tT /dev/sda: realizar prueba de lectura en un disco duro.
  • cat /proc/cpuinfo: mostrar información de la CPU.
  • cat /proc/interrupts: mostrar las interrupciones.
  • cat /proc/meminfo: verificar el uso de memoria.
  • cat /proc/swaps: mostrar ficheros swap.
  • cat /proc/version: mostrar la versión del kernel.
  • cat /proc/net/dev: mostrar adaptadores de red y estadísticas.
  • cat /proc/mounts: mostrar el sistema de ficheros montado.
  • lspci -tv: mostrar los dispositivos PCI.
  • lsusb -tv: mostrar los dispositivos USB.
  • lshw: listar el hardware.
  • discover: listar el hardware.
  • date: mostrar la fecha del sistema.
  • cal 2011: mostrar el almanaque de 2011.
  • cal 07 2011: mostrar el almanaque para el mes julio de 2011.
  • date 041217002011.00: colocar (declarar, ajustar) fecha y hora.
  • clock -w: guardar los cambios de fecha en la BIOS.

Automatización de Pruebas con la ayuda del BDT

Aquí, básicamente, el testing es conducido a través del comportamiento - Behavior driven testing (BDT) – y acompaña al desarrollo conducido a través del comportamiento -Behavior-driven development (BDD)-.

BDD combina las principales normas de desarrollo basadas en pruebas (TDD), y su foco es la reevaluación del enfoque de las pruebas unitarias que debe hacer todo desarrollador para luego pasar su “creación” al área de testing.

bdd-cycle-around-tdd-cycles1
Ventajas entre el BDD y BDT
  • Compromete a los stakeholders y al equipo de entrega que poseen diferentes puntos de vista, asegurando cubrir las mismas expectativas.
  • BDD inicia su actividad con las metas que persigue el negocio en cuestión, mientras que BDT tiene como objetivo elaborar un lenguaje específico de negocio que le permita describir el comportamiento del sistema sin detenerse demasiado en cómo se desarrolló esa conducta.
Algunas conclusiones
  • La mayoría de los clientes de negocios requieren desarrollos de productos mediante metodología scrum, básicamente por el tiempo en el que requieren la solución.
  • Originalmente, la automatización de pruebas no ha igualado el nivel de éxito en sus fases de desarrollo.
  • A menudo, este resultado es producto de haber percibido inadecuadamente los esfuerzos y recursos necesarios para implementar con éxito y de manera duradera, el desarrollo del entorno de automatización.
Una experiencia que deberíamos investigar y analizar es la que resulta de la combinación de: Calabash + Cucumbe.

Testing de Caja Blanca – Parte I

Es el testing sobre el código fuente de la aplicación, y en consecuencia, sobre los diferentes algoritmos y estructuras de datos utilizados.

Básicamente, el tester selecciona distintos valores de entrada para examinar cada uno de los posibles flujos de ejecución del programa y cerciorarse de que se devuelven los valores de salida adecuados. Al estar basadas en una implementación concreta, si ésta se modifica, por regla general las pruebas también deberán rediseñarse.

Aunque las pruebas de caja blanca son aplicables a varios niveles —unidad, integración y sistema—, habitualmente se aplican a las unidades de software. Su cometido es comprobar los flujos de ejecución dentro de cada unidad (función, clase, módulo, etc.) pero también pueden testear los flujos entre unidades durante la integración, e incluso entre subsistemas, durante las pruebas de sistema.

Ahora bien, para realizar este tipo de testing, tendremos que tener las siguientes habilidades:
  • conocimientos de programación
  • conocimientos del framework de desarrollo
  • conocimiento funcional para poder entender el objeto de determinadas clases y métodos
Hay diversas técnicas que se pueden aplicar, además de las principales que se enuncian en todo material teórico, como ser:
  • Cobertura
  • Mutation Testing
  • Fault Injection
  • Análisis Estático de código
Técnica: de Cobertura
Se basa en verificar que todos los caminos lógicos de la aplicación se alcanzan en función de los diferentes valores de entrada de los parámetros. Básicamente este tipo de pruebas se automatizan con la ejecución de las Pruebas Unitarias (Unit Testing).

Técnica: de Mutation Testing
Se basa en realizar ligeras modificaciones en el programa que darían lugar a un comportamiento anómalo del mismo (resultados distintos) y verificar si la estrategia de testing utilizada es capaz de detectar estos cambios. (p.e. eliminando sentencias). El aspecto más que importante a tener en cuenta en esta técnica es que hay saber elegir muy bien qué modificar, es decir cómo realizar la mutación, para provocar un comportamiento diferente. Nota: Se la considera como parte de la técnica “de Fault Injection”

Técnica: de Fault Injection
Se basa en utilizar la técnica de Code Insertion Testing, en tiempo de compilación, con la cual se introducen nuevas sentencias que provocan un error o un comportamiento anómalo en el sistema. No obstante, la Fault Injection también se aplica en tiempo de ejecución, como el hecho de provocar determinados fallos o excepciones del sistema que permitan estudiar el comportamiento del sistema en esos casos.

Técnica: de Análisis Estático de código
Se basa en evaluar (directa o indirectamente) la deuda técnica del software o lo que es lo mismo, evaluar el grado de mantenibilidad del sistema. Esta última característica (mantenibilidad) es un item al que no se le suele prestar la debida atención, y que es importante considerarlo ya que todo sistema crece y se va modificando. No hay que olvidarse que un sistema con una deuda técnica elevada, será más propenso a tener errores.

Fuentes:
http://jummp.wordpress.com/2011/05/21/testing-de-caja-blanca-white-box-testing/
http://es.wikipedia.org/wiki/Pruebas_de_caja_blanca
http://testingbaires.com/testing-de-caja-blanca-parte/