Blog de Antonio Manuel Muñiz

Desarrollo, Ingeniería y Calidad del Software

Archivos mensuales: marzo 2008

Menos es más

He encontrado un blog magnífico, sofware-quality, en él he leido una entrada en la que se hace referencia a un artículo de Linda Hayes. En el artículo se expone que la productividad y la calidad del producto software generado por un equipo numeroso de personas es menor que la de un producto generado por un equipo reducido de personas.

Creo que esto es totalmente cierto. Pero tabién es cierto que existen formas de conseguir que un equipo amplio se coordine, que parte del equipo de desarrollo se dedique a sub-componentes del sistema, y a cada uno de éstos se le apliquen herramientas que permitan asegurar la calidad del producto final. Las palabras adecuadas son… integración continua.

Anuncios

La agilidad de Ruby on Rails

Hacía tiempo que quería probar Ruby on Rails, por fin me he decidido a hacer algo, mi primera toma de contacto ha sido bastante satisfactoria. En principio, en comparación con Java, se necesita mucho menos para montar una aplicación simple: instalación, un par de comandos y listo. Los pasos a seguir para crear una aplicación web básica con Ruby on Rails son los siguientes:

1. Instalación de Ruby on Rails
2. Creación del esqueleto de la aplicación:

$ rails AplicacionEjemplo

3. Iniciar la aplicación en el servidor integrado de RoR (WEBrick). Muy útil durante el desarrollo.

$ script/server

Veremos la siguiente interfaz en localhost:3000

4. Es posible que exista algún tipo de problema con las versiones de cada componente instalado (especialmente en MacOS 10.4), en ese caso se mostrará la versión necesaria y la actualizamos con:

$ gem install -v=X.Y.Z ident.

5. Inicialización de la base de datos. Suponemos que se dispone de una base de datos MySQL instalada y configurada. Lo único que nos hará falta para que Ruby conecte con la base de datos es configurar el fichero config/database.yml
Configuraremos la sección development (Ruby ofrece otras dos configuraciones, test y production):


# Seccion modificada para una base de datos MySQL
development:
adapter: mysql
database: personas_development
username: root
password:
socket: /private/tmp/mysql.sock

6. Ruby genera ficheros de migración para la base de datos. Estos ficheros son clases Ruby que modelan las entidades de BD.

$ script/generate migration personas

Este comando genera la clase Ruby (db/migrate/001_personas.rb) mencionada antes, debemos completarla añadiendo la estructura de la tabla en BD:

class Personas < ActiveRecord::Migration
def self.up
create_table :personas do |table|
table.column :name, :string
table.column :dni, :string
end
end
def self.down
drop_table :accounts
end
end

7. Utilizando rake (make para Ruby) migraremos la tabla a la BD configurada:

$ rake db:migration

Antes de ejecutar el comando debemos crear la base de datos personas_development en la BD.

Rake añade un campo más a la tabla llamado id para usarlo como clave primaria.
La potencia de esta utiliadad ofrecida por RoR es importante ya que ante una migración a una bueva BD lo único que hemos de hacer es modificar el fichero de configuración database.yml y volver a ejecutar el comando. De esta forma se crearán todas las tablas necesarias en la BD.

8. Por último, y esto es lo que más me ha gustado, vamos a generar todos los elementos necesarios para que nuestra aplicación pueda crear/modificar/actualizar/eliminar ítems en la base de datos, ¡¡con un solo comando!!

$ script/generate scaffold accounts name:string dni:string

Además el código generado es totalmente fiel al patrón MVC (de hecho, crea tres carpetas una para cada capa), y legible para seres humanos (en otras ocasiones he visto código generado que deja sin palabras… y sin ganas de seguir).

9. Nada más, reiniciamos el servidor (Ctrl+C y script/server) para que conecte con la base de datos, accedemos a localhost:3000/account, y como diría Freddy: The Show Must Go On!

Maven, NetBeans y SQE

NetBeans 6.0 ofrece una serie de funcionalidad relacionada con proyectos modelados con Maven realmente sorprendente. De entrada reconoce un proyecto Maven como propio, es decir, no es necesario ejecutar mvn netbeans:netbeans (supongo que el plugin lo hará internamente pero para el usuario es transparente). Además ofrece de una forma cómoda la ejecución de las fases más típicas de maven (package, install, etc). En realidad ofrece lo mismo que Eclipse, pero a mi parecer lo hace de una forma más intuitiva y ágil.

Si ha esto le añadimos la funcionalidad ofrecida por SQE en NetBeans, tenemos un procedimiento potente para analizar el código de un proyecto maven. Por ahora el proyecto SQE esta en fase incubator, pero a priori parece bastante interesante. He probado su funcionamiento integrado en el IDE la verdad es que funciona bastante bien, y los reportes generados (Find Bugs, Checkstyle y PMD) estan muy bien organizados.

Apache Axis2 y Spring Framework

Desde WSO2 se esta haciendo un gran trabajo en cuanto a servicios web. Por lo pronto ofrecen de forma abierta un servidor de aplicaciones orientado a servicios desarrollados con Apache Axis2. Pero más interesante aún es la integración con otras tecnologías como Spring o Perl, de este último solo estan disponibles las librerias para clientes de servicios web.

En cuanto tenga un poco de tiempo probaré la integración con Spring y el depliegue en su Web Services Application Server.

JVM Profiling

Ultimamente he estado probando algunas herramientas de profiling a nivel de máquina virtual Java para aplicaciones J2EE.
Recopilando información me encontré con este listado del cual me quedé con InfraRED. Esta herramienta necesita una configuración manual para su correcto funcionamiento, en concreto hay que modificar catalina.sh (las pruebas la he realizado sobre Apache Tomcat 5.5.25).
InfraRED nos muestra bastante información de bajo nivel como sentencias SQL ejecutadas por la aplicación así como sus tiempos de retardo, además de la información relativa a cada uno de los threads lanzados en la JVM. También permite la monitorización de las peticiones HTTP realizadas por las aplicaciones.

En segundo lugar he probado Glassbox. La instalación de esta herramienta es mas sencilla ya que solo hay que desplegar un WAR en el contenedor y mediante una interfaz de configuración genera los ficheros *.sh necesarios.
Glassbox ofrece un conjunto de funcionalidades similar a las de InfraRED, sin embargo se centra en los posibles defectos de la aplicación monitorizada, de forma que si queremos visualizar los tiempos de una consultado SQL que funciona correctamente no podremos hacerlo.

Por último he probado YourKit Java Profiler. La verdad es que esta herramienta es la más completa, pero claro, como era de esperar… es de pago :(