Revisión de producto: SNiFF+ para Linux

ArticleCategory: [Es gibt verschiedene Artikel Kategorien]

Software Development

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Guido Socher
en to es Javier Palacios

AboutTheAuthor:[Eine kleine Biographie über den Autor]

Guido es un fan de Linux desde hace tiempo. Su página sobre Linux puede encontrarse en www.oche.de/~bearix/g/.

Abstract:[Here you write a little summary]

SNiFF+ de takefive software es un entorno integrado de desarrollo disponible para Linux. Takefive ofrece una versión descargable gratuita en http://www.takefive.com/penguin. El software revisado aquí viene de un CD de demostración, y parece idéntico a la versión descargable. La restriccioón en ambas versiones es que tienen un límite de 200 ficheros. Esta revisión corresponde a la versión 3.2 de SNiFF+, y ha sido probada bajo Redhat Linux 6.0.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

¿Qué es SNiFF+ ?

SNiFF+ es un entorno integrado de desarrollo para los lenguajes C, C++, Java, IDL, Fortran77, Fortran90 y ADA. SNiFF+ te da la posibilidad de entender el código de forma gráfica. Los usuarios de otros sistemas operativos importantes posiblemente hayan usado entornos de desarrollo similares, por lo que estarán muy contentos de ver un entorno de estas características disponible para Linux.

SNiFF+ y los entornos de desarrollo integrados suelen ser útiles cuando se trabaja con códigos muy grandes y en aquellos casos en que es necesario realizar cambios a código que no ha sido completamente escrito por uno mismo. SNiFF+ soporta varias herramientas de control de versiones, como RCS, CVS, clearcase, etc... Esto lo hace ideal para equipos involucrados en grandes proyectos.

Instalaciónn

SNiFF+ para Linux viene con un script de instalación. Este script te lleva a un modo de diálogo. No tuve ningún problema al usarlo. SNiFF+ aún no está disponible en formatos empaquetados como rpm o deb, pero esto no es un problema, ya queSNiFF+ no se reparte por todo el arbol de directorios. El script instala todo bajo un único directorio (yo elegí /opt/sniff) y es por tanto muy sencillo de desinstalar con posterioridad. Debajo se muestra el comienzo del script de instalación con las diferentes plataformas UNIX para las que SNiFF+ está disponible.


 
                    SNiFF+ 3.2 installation procedure
              Copyright (c) 1993-1999 TakeFive Software GmbH.
                             All rights r eserved.
 
 Please select:
 
   [A]   Install SNiFF+ binaries
   [B]   Install GNU binaries
   [C]   Install FlexLM binaries
 
   [X]   Exit installation
 
 Your selection: a
 
 
 SNiFF+ can be installed for multiple platforms in one directory. It is also
 possible to install a SNiFF+ kit for a platform which is not the installation
 platform. Therefore, please select first the target platforms
 and then the installation platform.
 
 
 Enter the platform(s) for which you want to install SNiFF+:
 
 sunos       for Sun SPARC machines running SunOS4 (Solaris 1.x)
 solaris     for Sun SPARC machines running SunOS5 (Solaris 2.x)
 aix         for IBM Risc machines running AIX 4.x
 hpux        for HP 9000/7XX machines running HP-UX 10.x/11.x
 decalpha    for DEC/alpha machines running Digital UNIX 3.x/4.x
 irix        for SGI machines running IRIX 5.3 or later
 unixware    for PC's running SCO Unixware 7.x/2.x or OpenServer 5.x
 linux-glibc for PC's running Linux 2.x based on GNU glibc 2.1 (like RedHat 6.x)
 sinix       for SNI RM machines running Reliant Unix 5.4x
 
 Enter one name at a time (Leave empty to finish the selection).
 
 Target platform number 1 : linux-glibc
 Target platform number 2 :
 
 ....the script continues here with more questions.....

Uno de los errores que cometí durante la instalación fue en el diálogo que me permitía instalar "Vim 5.0 Vi Improved por Bram Moolenar". Puesto que ya lo tenía en mi disco duro, decidí no instalar Vim. Esto se mostró como un error, y me ví obligado a instalarlo más tarde. La versión de Vim que viene con SNiFF+ es especial. Tiene la capacidad de comunicarse con otras herramientas del entorno de desarrollo. Por tanto, si pretentes usar vi, has de instalar este Vim especial.

SNiFF+ se puede instalar en cualquier parte. Por ello, es necesario hacer dos cosas después de completar la instalación:

  1. fijar la variable de entorno SNIFF_DIR al lugar en el que se ha instalado SNiFF+ (/opt/sniff en mi caso).
  2. ampliar el PATH para que incluya el directorio binario de SNIFF_DIR (/opt/sniff/bin en mi caso).
Según el shell que usemos, tendremos que editar /etc/profile y ~/.bashrc para bash o /etc/csh.cshrc y .tcshrc para tcsh o el que sea el fichero rc correspondiente a tu shell. Si no quieres editar los ficheros rc de tu shell, puedes usar este pequeño script que llamo startsniff:
#!/bin/sh
PATH="$PATH:/opt/sniff/bin"
export PATH
MANPATH="$MANPATH:/opt/sniff/man"
export MANPATH
SNIFF_DIR=/opt/sniff
export SNIFF_DIR
#start sniff now:
sniff

Documentación

tutorial in netscape SNiFF+ viene con un sistema de documentación en html bastante agradable. Parece existir la posibilidad de imprimir la documetación desde ficheros postscript, pero nunca sentí la necesidad de hacerlo, y la documentación en html es buena. Al arrancar SNiFF+ con el comando sniff aparece una pantalla de bienvenida. Esta pantalla nos da la posibilidad de ir directamente a la documentación específica para un lenguaje de programación. Al seleccionar este modo, se arranca netscape con el tutorial correspondiente. Un vistazo, aunque sea rápido, al tutorial es muy recomendable.

Principales componentes de SNiFF+

launcher El lanzador
Un proyecto es el principal elemento estructural de SNiFF+ para agrupar ficheros y directorios. Al arrancar sniff, te aparece una pequeña ventana de lanzamiento. A partir de ella puedes crear nuevos proyectos, y puedes revisar los ya existentes. Aquí es donde se suele empezar a trabajar, arrancando el editor de proyectos o el visualizador de símbolos.

launcher El editor de proyectos
Con el editor de proyectos puedes ver todos los ficheros de código que pertenecen a un proyecto. Puedes filtrar la lista, incluir/excluir subdirectorios, etc. También te muestra la información de versiones, y puedes añadir o quitar ficheros. Una característica muy agradable es que se puede buscar en la lista de nombres de fichero simplemente escribiendo el nombre del fichero. La función de búsqueda es incremental, buscando según se escribe, de forma similar al isearch de emacs.

launcher El visualizador de símbolos
El visualizador de símbolos es similar al editor de proyectos, excepto que lo que vemos son todos los símbolos y cuando se usan. A través de un click del botón derecho arrancamos el buscador de referencias (más abajo) y podemos ver cuando se referencia un símbolo, y a que símbolos referencia a su vez. Por ejemplo, que funciones usan una función o variable particulares.

El visualizador de clases
El visualizador de clases muestr los miembros definidos y heredados de una clase. Permite varias posibilidades de filtrado en base a la herencia, visibilidad o tipo de los miembros.

hierarchy El visualizador de jerarquías
El visualizador de jerarquías muestra las relaciones de herencia entre clases.

crossref El buscador de referencias (cross referencer)
Nos permite ver en qué lugares aparece un símbolo determinado (función, variable, etc.), es usado o que funciones y/o clases se refieren a él.

include El visualizador de includes
Para ver qué ficheros incluye un fichero .c, o cuando un fichero .h es usado.

edit El editor de codigo
Sniff viene ocn un agradable editor para el código. Resalta la sintaxis y permite saltar rápidamente entre funciones y clases. También permite llamar a otros programas, como el buscador de referencias, directamente desde el editor de código.
El editor es muy avanzado, aunque carece de la potencia de vim o emacs. Por otra parte, tanto vim como emacs requieren que los conozcas a fondo para usarlos realmente bien. El editor de código de sniff resulta una elección muy recomendable si no estas totalmente familiarizado con vim o emacs.

Aquellos que no quieren usar nada que no sea vim o emacs también pueden usar estos editores con SNiFF+. Si quieres usar vim tendrás que instalar la versión especial que viene con SNiFF+, que incluye compilados algunos protocolos de comunicación que permiten a vim y a SNiFF+ comunicarse entre ellos. Para usar emacs no necesitas instalar nada especial. El emacs que viene con la mayor parte de las distribuciones de Linux debería funcionarte.

shell El shell de sniff
The shell window is mainly used during a compile run. You can see the error messages from the compiler in that window. To jump to an error in the source code you highlight the line of the error message in the shell and then you select Edit->Show Error. This takes you in the source editor to the line where the error happened. This shell window is otherwise very simple. See also further down for a description of problems that I had with this shell window.

Otras herramientas
SNiFF+ includes also a couple of other programs which I have not used yet. These are Documentation editor, DiffMerge and Configuration Manager. DiffMerge seems to be merge tool to merge in changes from a branch and Configuration Manager seems to be a program to create and manage branches.

Los inconvenientes 

SNiFF+ ha sido portado a Linux, y esto se hace evidente en múltiples ocasiones. Afortunadamente, soporta los atajos habituales como Crtl-a (para ir al principio de la línea), Crtl-e (ir al final), Crtl-k (borrar hasta el final), etc... Pero no permite copiar y pegar usando el ratón. Bajo Unix suele disponerse de un ratón de tres botones, seleccionándose texto con el botón izquierdo y pegándolo con el botón central. Bajo Linux esto funciona con todos los programas y resulta realmente molesto que no lo haga con SNiFF+. En su lugar, el cortado y pegado se hace con una combinación de letras que parece proceder de MS-Windows.
Por lo demas SNiFF+ es un buen producto, pero su incapacidad de cortar y pegar con el ratón no paraba de molestarme cada vez que lo usaba. Si tuviera que sugerir una mejora prioritaria para SNiFF+ sería ésta.

Habitualmente uso colores en el prompt del shell, y tengo definido una alias para convertir ls en ls --color=tty. Los xterm normales de linux, gnome-term, kvt, etc. soportan estos colores:
shell
El shell que viene con sniff no lo hace, y el aspecto resulta ligeramente cómico:
shell
Afortunadamente no es complicado de solventar, aunque sería mucho más apropiado que sniff soportara los códigos de color ANSI color codes. Para fijar esto la solución más fácil es comprobar que $TERM es igual a etterm (el nombre del terminal sniff), eliminar el alias de ls y no usar colores en el promp.
Los usuarios de emacs probablemente sepan que el shell de emacs tiene el mismo problema, y tengan algún arreglo en sus .bashrc o .tcshrc. Aquí hay un trozo de código que los usuarios de tcsh pueden colocar en su .tcshrc:

if ($?TERM) then
     # switch off color prompt for emacs and sniff
     if ("$TERM" == "dumb" || "$TERM" == "etterm") then
         # a color free prompt:
         set prompt='\n%n@%m[%d,%T]\n(%~) %# '
         alias cwdcmd '/bin/ls -F'
         alias ls '/bin/ls -F'
     endif
endif
Los usuarios de bash pueden usar:
# switch off color prompt for emacs and sniff
if [ "$TERM" = "etterm" -o "$TERM" = "dumb" ]; then
        PS1="[\u@\h \W]\\$ "
        alias ls="/bin/ls -F"
fi

Otro problema de shell de sniff es el nombre del teminal. etterm no era conocido para mi /etc/termcap. Esto producía el mensaje 'etterm': unknown terminal type.

Conclusión

SNiFF+ 3.2 es un buen producto. Proporciona la visualización y el comfort que uno espera de un entorno integrado de desarrollo. Además, SNiFF+ se mostró muy estable sobre mi Redhat 6.0. Lo he usado durante 3 semanas antes de escribir este artículo, y nunca se colgó. Las herramientas están hechas para un uso habitual, y con excepción del molesto problema del copiar/pegar todas sus partes eran fáciles de usar. Personalmente, no comprendo que este software esté disponible para tantos sistemas Unix sin soportar un simple copiado/pegado usando los botones del ratón.