MIT OpenCourseWare


6.170 Curso práctico en Ingeniería de Software.

Página principal
¿Qué es OCW?
Ayuda
Feedback
Preguntas frecuentes
Glosario
 
 
Página principal del curso
Programa
Calendario
Material de clase
Trabajos
Exámenes
  Lecturas obligatorias
  Otras fuentes
  Prácticas
  Clases de repaso
Herramientas
  Proyectos

   MIT

   
 

Boletín S2: Herramientas

Contenidos

Consulte también la documentación del detector de invariantes Daikon.

Directorios

Debe crear un directorio llamado 6.170 dentro de su directorio home en Athena y dar permiso de lectura específicamente al personal del curso 6.170. Esto hará posible que el personal del curso 6.170 pueda ver y probar su código en Athena, sin que todos los usuarios de Athena tengan acceso a su código. (Dejar que alguien distinto a usted y al personal tenga permiso de lectura de su directorio ~/6.170 o de cualquier otro lugar en el que usted guarde su código del curso 6.170, constituye una violación de la política de colaboración). El nombre del grupo para el personal del curso 6.170 es system:6.170.
Athena% mkdir ~/6.170
Athena% fs sa ~/6.170 system:6.170 read
A continuación, debería crear los subdirectorios ~/6.170/ex1, ~/6.170/ex2, etc., para guardar los ejercicios. Si lleva a cabo estos pasos en el orden indicado, todos estos subdirectorios heredarán el conjunto de permisos apropiados automáticamente del directorio padre.

Si no sube su código al lugar apropiado, no podremos recoger sus series de ejercicios, su ayudante técnico (TA) se molestará y esto repercutirá en su calificación.

Aunque ejecute el código de la serie de ejercicios del curso 6.170 en su computadora, éste debe funcionar también en Athena, y debe colocar el código fuente y demás ficheros en Athena para poder probarlos y calificarlos.

Cuando comience a elaborar su proyecto final, le darán un directorio privado de grupo. Podrá entonces asignar los permisos oportunos para que los miembros de su grupo puedan tener acceso a sus ficheros. Más adelante se le facilitará más información al respecto.

Inicio

Cómo utilizar Java™

El kit de desarrollo de Java™ de Sun Microsystems (Sun Microsystems' Java™ Development Kit) (JDK) se encuentra disponible en Athena, y se puede utilizar para codificar las soluciones de la serie de ejercicios del curso 6.170. Antes de utilizar Java™ en Athena, debe llevar a cabo algunos pasos básicos de instalación.

Instalación inicial

Tendrá que adjuntar los directorios privados de Java™ y los del curso 6.170, además de fijar la variable de entorno CLASSPATH. Le facilitamos un script (conjunto de instrucciones) que editará sus ficheros de configuración ocultos, pero también puede optar por hacer los cambios manualmente.

Inicio

Cómo utilizar el script de ayuda

Escriba los siguientes comandos en el prompt de su Athena%

add 6.170
student-setup.pl

Si ve el mensaje "instalación de 6.170 completada", es que ha finalizado. Debe salir y entrar de nuevo para que se apliquen los cambios. Si aparece un mensaje de error, póngase en contacto con el personal del curso. (El mejor modo de obtener ayuda es pasarse por el despacho de los monitores de prácticas (LA) durante sus horas de consulta o pedir ayuda en el foro de consulta Zephyr 6.170).

Inicio

Instalación manual

En esta sección se describen los pasos necesarios para la instalación inicial. No es necesario leerla si ha utilizado el asistente de script que se ha mencionado arriba, pero le será útil si prefiere editar usted mismo o si quiere saber con exactitud qué cambios se han llevado a cabo.

Debe adjuntar los directorios privados del curso "6.170" y los de "Java". El directorio privado 6.170 contiene copias de boletines, librerías de código que utilizará cuando acabe sus series de problemas y código fuente para algunas librerías. El directorio privado de "java" contiene el compilador de Java™ javac y el intérprete de Java™java.

Para adjuntar estos directorios privados automáticamente cuando entre en Athena, añada las siguientes líneas a su fichero .environment:

add 6.170 add -f java_v1.3.0
Estas líneas tendrán efecto la próxima vez que entre en Athena. Para que se apliquen en la sesión actual, también puede escribirlas en el prompt de Athena. Una vez que haya adjuntado estos directorios privados, podrá acceder al del curso 6.170 a través del directorio /mit/6.170.

Antes de utilizar Java™, tendrá que fijar su variable de entorno CLASSPATH. Añada las siguientes líneas a su fichero .environment:

setenv CLASSPATHLIB `perl -e 'print join(":", @ARGV);' /mit/6.170/lib/*.jar` setenv CLASSPATH /mit/${USER}/6.170:${CLASSPATHLIB} setenv RTJAR /mit/java_v1.3.0/jre/lib/rt.jar

Explicaciones:

  • CLASSPATH: es la variable utilizada por Java™ cuando se buscan clases para compilar o ejecutar. Definimos esto para incluir todo el código del curso 6.170 que escriba (la parte /mit/$USER/6.170) además del código compilado que el personal le facilite. (${CLASSPATHLIB}).
  • CLASSPATHLIB: incluye librerías de clases que han sido proporcionadas para el curso 6.170. Java™ no las utiliza directamente, pero son útiles y es bueno que las tenga disponibles en su entorno. (Si está escribiendo la línea a mano, observe que las comillas externas son invertidas, las siguientes comillas internas son comillas simples y las comillas internas son dobles).
  • RTJAR: incluye las clases estándar de Java™ , tales como java.lang.Object. Normalmente no usará esta variable, pero puede que le haga falta si utiliza el compilador jikes, que es otro alternativo a javac.

Asegúrese de que edita correctamente. No podrá acceder a las clases que se han facilitado para el curso 6.170 si no fija su CLASSPATH adecuadamente.

Inicio

Cómo escribir y compilar el código

Para escribir el código en Java™, debe empezar editando un fichero fuente de Java™ . Normalmente, los nombres de los ficheros fuente de Java tienen una extensión ".java" . Los ficheros fuente son simplemente ficheros de texto, que se pueden crear y editar con Emacs o con su editor de texto favorito.

Debe compilar su código fuente antes de ejecutarlo. El compilador Javac se utiliza para transformar los programas de Java™ en bytecode, contenido en un fichero de clase. Los ficheros de clase se reconocen por su extensión .class. El bytecode de los ficheros de clase puede ejecutarse entonces mediante el intérprete de Java™ .

Puede encontrar a través de la página de documentación de Java™ de MIT (http://web.mit.edu/java/www/home.html) una amplia documentación en línea para javac, Java™ y otras herramientas del kit de desarrollo de Java (JDK).

Un programa de Java™ contiene uno o más paquetes, cada uno de los cuales define un grupo de abstracciones relacionadas. Cada paquete contiene una o más clases. Cada clase se crea desde un fichero fuente que lleva a cabo las abstracciones.

Al utilizar Java™c, se pueden compilar uno o más ficheros fuente como ficheros de clase para que los ejecute el intérprete. Al menos una de las clases resultantes debe definir un método llamado "main", que constituye el punto de partida para la ejecución del programa. Una vez compilados todos los ficheros fuente, el programa puede ejecutarse utilizando java, el intérprete de the Java™ . El ejecutar la siguiente línea

javac [options] file1.Java file2.Java...
generará los ficheros de clase file1.class, file2.class, etc., para cada fichero fuente especificado. Escriba "man   javac" en el prompt de Athena para obtener más información sobre las opciones de javac. Use prácticamente sin escepticón la opción -g,que proporcionará una salida de depuración mejorada.

Una vez que haya compilado su código fuente en ficheros de clase, puede ejecutarlo con el intérprete java de Java™ .  El comando

java options classname
ejecutará la clase indicada por classname. Esta clase debe existir en su actual CLASSPATH o de lo contrario, tendrá que usar la opción -classpath para especificar un CLASSPATH distinto. La clase que ejecute también debe contener el método "main" mencionado anteriormente. Si quiere ejecutar una clase que no se encuentre en el paquete por defecto, tendrá que especificar el nombre completo de la clase. Por ejemplo, utilice
java ps1.Test

para ejecutar el método principal de la clase Test en el paquete ps1. Para obtener una descripción completa de todas las opciones de Java, escribajava -help en el prompt de Athena.

Inicio

Sitios prácticos de Java™

Inicio

Cómo utilizar Emacs para editar el código en Java™

El personal del curso 6.170 ha preparado un conjunto de adaptaciones para Emacs para facilitar la edición del código en Java™. Para utilizar estas adaptaciones, debe añadir la siguiente línea a su fichero .emacs (o crear un fichero .emacs en su directorio home que contenga la siguiente línea, si todavía no tiene uno):
(load "/mit/6.170/etc/emacs/6170.el")
Esto dará lugar a los siguientes cambios:
  • Pulsar RET (intro) no sólo inserta una línea nueva sino que crea una indentación por defecto en la próxima línea. C-j sólo inserta una línea nueva.
  • Pulsar C-c C-c salva y compila el programa actual. Si no hay un makefile en el directorio actual, el comando por defecto ejecutado para los ficheros de Java™ es javac -g *.java.
  • Pulsar C-h f ejecuta jdk-lookup, que visualiza la documentación JDK (kit de desarrollo de Java) para un paquete, clase, método o campo de Java™.
  • Pulsar C-c C-r comenta la zona seleccionada, y pulsar C-u C-c C-r descomenta esta zona. (Puede seleccionar una zona en Emacs desplazándose hacia un extremo, pulsar C-SPC, y moverse hacia el otro extremo, o hacer un click en un extremo y arrastrar hasta el otro extremo).
  • Hacer clic con el botón central sobre el backtrace de una pila de Java™ le llevará al código del cuadro sobre el que ha pinchado.
  • La indentación por defecto se reduce a dos espacios por sangría.
  • En todas las funciones, y no sólo al editar ficheros de Java™, está permitido marcar la sintaxis (conocido por "encerrar la fuente", en la terminología de Emacs).
Si le interesan algunas de estas adaptaciones, añada la línea
(setq make-6170-changes nil)

a su fichero .emacs antes de cargarlo. Esto definirá todas las funciones pero no realizará ninguna adaptación. Si lo desea, puede echar un vistazo al fichero 6170.el y copiar las partes que encuentre más útiles.

Inicio

Cómo usar Java™doc y Six170Doclet para generar especificaciones

El kit de desarrollo de Java™ de Sun incluye Javadoc, una herramienta que crea especificaciones a partir de un código fuente anotado con comentarios especiales. Los comentarios pueden incluir "etiquetas" que van introducidas por una arroba (@).

Six170Doclet amplía a Java™doc para reconocer etiquetas adicionales del curso 6.170, además de todas las etiquetas aceptadas por Standard Doclet de Sun. (Six170Doclet funciona normalmente como preprocesador, creando un nuevo fichero de entrada que se puede leer directamente con Standard Doclet de Sun). Estas etiquetas adicionales declaran campos de especificación para las clases y cláusulas requires, modifies y effects para los métodos.

Además de añadir nuevas etiquetas, Six170Doclet deduce automáticamente los resúmenes de un método que falte y posee otras características que facilitan la escritura y lectura de las especificaciones, incluso al observar el propio código.

  • Algunas etiquetas ampliadas pertenecen a la información general de una clase; se utilizan para definir formalmente qué representa un Tipo de Datos Abstracto.
    @specfield name : T // text Indica que name es un campo de especificación abstracta de tipo T para la clase, y añade text como comentario si está presente.
    @derivedfield name : T // text Es lo mismo que specfield, excepto que éste también añade la propiedad "derivada" a la información de salida.
    @endspec Comunica a Java™doc que no hay más campos abstractos que documentar en la especificación.

Los campos derivados se pueden considerar funciones de un estado preexistente. Así, si una clase tuviera un specfield

@specfield n : integer

podríamos definir un campo derivado

@derivedfield pos : boolean // pos = true iff n > 0

A los campos derivados no se les permite mantener ningún tipo de información que pudiera no estar ya calculada en el estado actual del objeto. Por lo tanto, debe utilizar specfields para introducir nuevas variables de estado, y campos derivados para introducir funciones en esas variables de estado.

Los campos derivados no son obligatorios en las especificaciones, pero pueden reducir complejidad y redundancia.

  • Las otras etiquetas ampliadas pertenecen a la especificación de un método o procedimiento: definen las precondiciones del método, las poscondiciones, y los efectos secundarios.

@requires X Declara que X es una condición previa para el procedimiento
@modifies Y Declara que el procedimiento no modificará nada que esté fuera de Y siempre que X se mantenga
@effects Z Declara que si X se mantiene al comienzo del método, Z se mantendrá al final del mismo.

Después de ejecutar javadoc, debería comprobar la salida. Es posible que tenga que añadir saltos de línea (<br>) o saltos de párrafo (<p>) para mejorar la legibilidad. Por otra parte, si omite ciertas etiquetas (como @endspec), el texto posterior puede no aparecer en la salida. Finalmente, dado que gran parte del texto de los comentarios de Java™doc está insertado en un documento HTML, debe tener cuidado con las partes que se puedan interpretar como etiquetado HTML. Por ejemplo, si escribe

@effects Adds <x> and <y>

<x> y <y> serán interpretados en la salida como etiquetas HTML (y no se verán en un navegador).

Infórmenos sobre cualquier comportamiento extraño o cualquier queja sobre Six170Doclet y envíelo a rhlee@mit.edu ( en vez de a 6.170-staff@mit.edu).

Inicio

Foros de consulta del sistema Zephyr

Es posible que le interese apuntarse a diversas listas de consulta del sistema Zephyr relacionados con esta clase. Estas listas pueden resultar muy útiles, ya que actúan como complemento a las visitas que pueda hacer al monitor de prácticas dentro del horario establecido. El principal gforo de consulta se llama 6.170 y Zephyr le permite entrar en contacto con compañeros de clase y con los monitores de prácticas que estén de turno. (Los monitores de prácticas dan preferencia a los estudiantes que los visitan en persona durante el horario de las mismas, ya que éste es el mejor modo de comunicarse con ellos cualquiera que sea su duda. Sin embargo, también intentarán controlar la lista y facilitarán su ayuda a través de este sistema, si disponen del tiempo necesario).

Inicio

Aspectos prácticos

Para apuntarse, escriba

zctl add message 6.170 \*

Para escribir a la lista, escriba:

zwrite -i 6.170

Para borrarse escriba

zctl delete message 6.170 \*

Para salir solamente de la sesión actual, sustituya "unsub" por "delete" en la línea de arriba:

zctl unsub message 6.170 \*

Para obtener más información sobre zctl, escriba "man zctl" en el prompt de Athena o échele un vistazo a Inessential Zephyr (Tablón de procesamiento de información para el estudiante), disponible en línea.

Inicio

Directrices

La lista de consulta 6.170 está pensado exclusivamente para preguntas y respuestas relacionadas con las series de problemas y con Java™. Normalmente, los ayudantes técnicos (TA) y los monitores de prácticas (LA) se conectarán por lo general a la lista del curso 6.170 siempre que el ratio de señal a ruido permanezca alto. En algunas ocasiones responderemos a preguntas en las listas, particularmente si observamos confusión general o alguna respuesta que "no sea del todo correcta". Sin embargo, si tiene alguna pregunta para su ayudante técnico (TA), mejor envíele un e-mail. Además, no aseguramos que sea un miembro del personal quien responda a las preguntas de la lista. Para asegurarse de que le atienden, haga una visita a cualquier monitor de prácticas (LA) o ayudante técnico (TA) en horario de consulta o prácticas.

No todas las preguntas son adecuadas para la lista de consulta Zephyr. Entre estas se encuentran:

  • "Esta es mi solución. ¿Es la adecuada? ¿Es la acertada?"

    (Esto supera la política de no colaboración por difundir su solución. Mostrar más de 5 líneas de código en el foro constituye una violación de la política de colaboración en el sistema Zephyr ).

  • "¿Qué papel tiene de la función foo en el JDK (Kit de desarrollo de Java)?""¿Qué argumentos toma?"

    Estas preguntas muestran pruebas de pereza. En vez de esto, debería investigar la documentación de la API de JDK (kit de desarrollo de Java).

  • "¿Hay aIgún monitor de prácticas (LA) o ayudante técnico (TA) en línea?"

    En primer lugar, esta pregunta carece de relevancia: estar en línea no es lo mismo que estar de turno. En segundo lugar, incluso si un monitor de prácticas (LA) estuviese de turno, éste podría estar ayudando a otros estudiantes (especialmente a aquellos que asisten a las horas de consulta de las prácticas en persona).

    Debería pasarse por la consulta de un ayudante técnico (LA) o monitor de prácticas (TA) o bien simplemente debería poner su pregunta en la lista y esperar a que le respondan.

Si quiere hablar sobre temas relacionados con el curso 6.170 que no sean preguntas o respuestas específicas, tendrá que utilizar la lista de distribución 6.170.d. Por ejemplo, si quiere iniciar un debate sobre las ventajas estéticas de Java™, desea hablar sobre el maravilloso estilo de redacción de los autores de la serie de problemas o necesita expresar su frustración por el error que ha estado buscando durante dos horas, debe usar la lista 6.170.d y no la 6.170.

Los aspectos prácticos de la lista 6.170.d son idénticos a los de la 6.170, con la excepción de que hay que añadir un .d en el lugar clave de los ejemplos de arriba.

Inicio

Bitácora Zephyr

Puesto que la lista de consulta Zephyr suele tener bastante tráfico, el flujo constante de grupos de noticias puede resultar molesto. Además, algunos estudiantes pasan bastante tiempo DESCONECTADOS (¡!), y por tanto, no SEpueden beneficiar de los debates en tiempo real que tienen lugar en la lista.

El zlog 6.170 ofrece la solución a estos dos problemas. Registra cada mensaje enviado a la lista Zephyr del curso 6.170. De este modo, puede darse de baja de la lista de consulta y leer por separado, por su cuenta y a su ritmo, las conversaciones que otros están teniendo en ella. También puede revisar las conversaciones que tuvieron lugar mientras estaba desconectado. Normalmente resulta bastante útil echar un vistazo a este registro de mensajes y conversaciones antes de comenzar a hacer la serie de problemas, para comprobar si otros estudiantes han encontrado dudas comunes sobre el tiempo de ejecución de Java™, y para prepararlas de antemano.

Inicio

Cómo utilizar zlog

El zlog del curso 6.170 está guardado en el directorio privado zlog en Athena. Para acceder a él, en primer lugar, escriba en el prompt de Athena:


Athena% add zlog

El zlog del curso 6.170 se encuentra en el directorio /mit/zlog/6.170

El zlog es un fichero de texto como cualquier otro. Por tanto, pruebe a abrirlo con un explorador de texto cualquiera. Sin embargo, puede extenderse bastante, lo cual dificulta la navegación por los mensajes.

Por ello, es aconsejable que pruebe el comando tail como método alternativo a la lectura de zlog. El comando tail es semejante a los comandos cat y head de Unix, con la excepción de que en vez de comenzar al principio de un fichero y sacar por pantalla las líneas sucesivas, comienza en algún punto cercano al final del fichero y luego saca el resto del fichero en el terminal. De este modo no tendrá que desplazarse a través de las páginas de los grupos de noticias de Zephyr que vio la última vez que entró en el sistema: sólo verá las últimas enviadas.

Puede decirle a tail que comience desde un offset arbitrario desde el final o principio del fichero. La acción por defecto de

Athena% tail /mit/zlog/6.170

es imprimir las diez últimas líneas de zlog. Para que comience más atrás, pase la opción -number a tail, donde number es el número de líneas para imprimir en offset el punto de partida desde el final del fichero. Por tanto,

Athena% tail -50 /mit/zlog/6.170

saca las 50 últimas líneas de log.

Puede incluso tener a tail en espera, e imprimir nuevos mensajes a medida que van entrando, si no quiere mezclar las conversaciones del grupo de noticias 6.170 con sus conversaciones personales en Zephyr. Para hacer esto, utilice la opción -f tal y como se muestra en:

Athena% tail -f /mit/zlog/6.170

Para obtener más información sobre el comando tail, lea la página del manual que obtendrá escribiendo en el prompt de Athena:


Athena% man tail

Inicio

Cómo crear archivos PDF

Puede entregar diagramas (u otros trabajos que no estén escritos en código) electrónicamente en formato PDF. Puede pasar de PostScript a PDF ejecutando Adobe Acrobat Distiller, como se indica a continuación:

Athena% add acro
Athena% distill file.ps

y se crea un fichero.pdf

Por favor, tenga en cuenta que Adobe Acrobat Distiller solamente se encuentra disponible para las plataformas de Sun. Si esto supone un problema, puede optar por ejecutarlo en un servidor de marcado o puede también utilizar la función ps2pdf del directorio privado gnu.

Inicio

Visio®

Visio® 2000 se puede descargar como un fichero zip (comprimido). Nota: debe disponer de una dirección IP en MIT para descargar este fichero. Además, es bastante extenso. (224 MB). Por ello, contamos con algunas copias en CD para los estudiantes que tengan problemas para descargarlo. Visio® es un programa para dibujar diagramas que se puede utilizar para modelos de objeto y para diagramas de dependencia de módulos. Para obtener más información al respecto, consulte el sitio web de Visio® 2000

Si al instalar Visio® 2000 en una computadora con Windows 2000 aparece un mensaje de error similar a "Visio2000: Error Message: The Procedure Entry Point GBL Could Not Be Located in the Dynamic Link Library Vislib32.dll" ("Visio2000: Mensaje de error: El punto de entrada al procedimiento GBL no podría estar localizado en la librería de enlaces dinámicos Vislib32.dll"),
consulte la Ayuda de Microsoft).

Las plantillas de Visio® del curso 6.170 para Visio® v.5 están disponibles en ficheros zip (comprimidos). Utilícelas en sus OM (modelos de objeto) y en sus MDD (diagramas de dependencia de módulos). Después de la descarga y la descompresión, el directorio 6.170 debe colocarse en el subdirectorio Solutions de su instalación de Visio® .

Si está trabajando en Athena o no tiene ordenador con plataforma Windows, puede utilizar Dia® en vez de Visio®.

Inicio

Dia®

Si no tiene un ordenador con Microsoft Windows (y por tanto no puede ejecutar Visio®), hay un programa alternativo para dibujar diagramas, llamado "dia".

Si ha añadido el directorio privado 6.170 y está trabajando en un ordenador con plataforma Sun o Linux, entonces tendría que ser capaz de ejecutarlo al escribir

Athena% dia &

Dia® puede exportar sus diagramas como archivos postscript encapsulados, que puede luego convertir a pdf. O también puede imprimir los diagramas desde el propio Dia®.

Si tiene problemas al ejecutar dia, envíe un e-mail a pnkfelix@mit.edu (y no al personal del curso 6.170).

Si tiene problemas al utilizar Dia®, eche un vistazo a los siguientes enlaces:
Tutorial de Dia
Página principal del curso de Dia®

El curso 6.170 no ofrece respaldo oficial a Dia® (no pregunte a su ayudante técnico cómo utilizarlo; es muy posible que no lo sepa), pero es una alternativa a Visio®.

Inicio

CVS (Sistema de versiones concurrentes)

El CVS (Sistema de versión concurrente) permite que múltiples usuarios editen los mismos ficheros independientemente, trabajando sobre sus propias copias. Hay un "depósito" donde se guardan los ficheros principales. Cada usuario "comprueba" una copia de trabajo. Luego edita esa copia, "registra" o "compromete" sus cambios de nuevo en el depósito, y "actualiza" para incluir los cambios de otros en sus copias de trabajo. El CVS también realiza un seguimiento de las versiones antiguas de sus ficheros, de modo que puede comparar versiones o volver a una versión anterior si un cambio produce un error.

Los depósitos de un CVS contienen ficheros de texto tales como ficheros fuente (.Java™), Makefiles y alguna documentación. Los depósitos no deben contener ficheros compilados (.class) o generar ficheros de texto como la documentación de Java™doc. El depósito de su CVS debe contener solamente ficheros que no se puedan regenerar a partir de los otros ficheros del depósito.

Aquí tiene una lista típica con los pasos que hay que seguir para trabajar con un CVS:

  1. "Actualice" los ficheros que están ya revisados.
  2. Añada / edite un fichero.
  3. "Actualice" de nuevo para ver si los ficheros del depósito han guardado los cambios desde que usted comenzó a editarlos. Si ha sido así, los cambios se fusionarán en su copia de trabajo automáticamente.
  4. Si hay un "conflicto de fusión", en el cual dos cambios están reñidos el uno con el otro, decida manualmente qué cambio va a mantener.
  5. "Comprometa", o dicho de otro modo, "Registre" el fichero.

Cada usuario tendrá su propia copia de trabajo en algún sitio. Le aconsejamos que cree un grupo de directorios /mit/6.170/groups/seNNM/username .

Inicio

Programa de instalación

Instalación

Si está trabajando sobre Athena, añada esta línea a su fichero ~/.environment:

add gnu

Si trabaja desde casa con un ordenador Linux, es posible que ya tenga instalado el sistema CVS. Para ordenadores con plataforma Windows, descargue WinCVS de http://www.wincvs.org/ o una versión no gráfica de http://www.cvshome.org/; Échele también un vistazo a los consejos de Jeremy Nimmer sobre cómo hacer que un CVS funcione en un ordenador Windows. Para Macs, descárguese MacCVS de http://www.maccvs.org/.

Por favor, tenga en cuenta que sólo ofrecemos respaldo para la utilización de un sistema CVS en Athena.

Instalación por grupo

Hay dos pasos en la instalación de un sistema CVS. En primer lugar, se crea el depósito y se le añade un módulo. Luego, cada usuario revisa ese módulo.

Un "módulo" es un grupo de ficheros dentro de un sistema CVS. Probablemente sólo necesitará un módulo para el curso 6.170; llamémosle gb. Ejecute los siguientes comandos una vez por grupo:

setenv CVSROOT /mit/6.170/groups/seNNM/.cvs
cvs init
cd /mit/6.170/groups/seNNM
mkdir $USER; cd $USER
mkdir gb; cd gb
cvs import -m "Start" gb seNNM start
cd ..

(El flag -m denota un mensaje de registro, hablaremos más de esto más tarde. Los parámetros seNNM y start son arbitrarios, pero deben estar ahí para la ejecución del comando cvs import).

Instalación por usuario

Después de crear el depósito, cada usuario debe comprobar el módulo gb de su directorio de trabajo. En primer lugar, créese un directorio de trabajo y trasládelo a éste:

cd /mit/6.170/groups/seNNM
mkdir -p $USER; cd $USER

Luego, compruebe el módulo gb:

  • Comprobación local (desde Athena):
    cvs -d /mit/6.170/groups/seNNM/.cvs checkout gb
  • Comprobación remota (desde un ordenador distinto a Athena):
    setenv CVS_RSH ssh
    cvs -d :ext:USERNAME@Athena.dialup.mit.edu:/mit/6.170/groups/seNNM/.cvs checkout gb

Finalmente, cree un fichero ~/.cvsrc que contenga las siguientes dos líneas:

diff -u update -d -P

Eche un vistazo al manual para obtener más información sobre los ficheros ~/.cvsrc.

Inicio

Manejo básico

Cómo actualizar sus ficheros

Para actualizar su copia de trabajo con la revisión más reciente del depósito (pero guardando cualquier cambio que haya realizado en su copia local), utilice:

cvs update

El sistema CVS intentará fusionar los cambios que se hayan llevado a cabo desde el más reciente cvs update realizado por usted y por otros compañeros. Si algunos de sus cambios entra en conflicto con los de otros, cvs update le informará de ello, y el fichero fuente se cambiará para incluir ambas versiones de cualquier parte del conflicto (la suya y la del depósito), en este formato:

<<<<<<< nombre del fichero
SU VERSIÓN
  =======

  VERSIÓN del depósito
>>>>>>> número de revisión de la versión del depósito

Debe resolver el conflicto editando el fichero, quitando los marcadores, y dejando la versión del código que prefiera (o fusionándolos a mano). (Buscar "<<<" hasta que haya logrado resolver todos los conflictos es por lo general una buena idea). Una vez que haya resuelto todos los problemas, puede enviar sin miedo el fichero al depósito.

Tenga en cuenta que el sistema CVS funciona línea por línea, es decir, solamente sabe si se han hecho cambios, se ha añadido o se ha borrado una línea completa.

(cvs update muestra el estado de los ficheros de su directorio de trabajo que han cambiado o que son distintos al depósito, con un flag de una letra: "U" significa que ha sido reemplazado con la copia más reciente del depósito. "M" significa que su copia de trabajo es distinta a la última versión del depósito, y que la fusión ha tenido éxito. "C" significa que existen conflictos de fusión).

Cómo asignar, añadir y eliminar archivos

Para enviar al depósito un fichero editado por usted, utilice:

cvs commit -m "a log message" filename

Si omite el nombre del fichero, el sistema CVS enviará todos los ficheros al directorio actual. El mensaje es de registro y le permite llevar un control de los cambios sin necesidad de leer todo el código. Esto es muy práctico, y debe introducir siempre un mensaje de registro descriptivo; no debe poner algo como:" Algunos errores reparados". Si omite el flag -m, el sistema CVS le hará dejar un mensaje de registro.

Para añadir un fichero al depósito, use el comando:

cvs add filename

Para eliminar un fichero del depósito:

rm filename
cvs rm filename
cvs commit -m "Eliminado el fichero por tales motivos"

Estos comandos sólo indican el fichero que hay que añadir o borrar. Después de ejecutar cvs add o cvs rm, aún tendrá que hacer uso del comandocvs commit para realmente avisar al depósito de que ha habido un cambio.

Para mover o renombrar un fichero o directorio en el sistema CVS, debe eliminarlo de un lugar y añadirlo al sitio en el que lo quiera poner.

Cómo añadir y eliminar subdirectorios

Puede añadir un subdirectorio mediante los comandos:

mkdir dirname
cvs add dirname

el comando cvs add añade un subdirectorio rápidamente, sin necesidad de asignarlo.

Con el sistema CVS no puede eliminar un subdirectorio. (El comando cvs rm no se puede ejecutar sobre un directorio.) Lo mejor que puede hacer es utilizar rm y cvs rm para borrar todo lo de ese directorio, y luego ejecutar cvs update -P para deshacerse de cualquier subdirectorio vacío que haya quedado en su directorio de trabajo.

Cómo rastrear los cambios

Para observar el cambio de registro, que es una lista de mensajes que se utiliza cuando se comprueban los cambios, ejecute

cvs log filename

Para ver las diferencias entre la copia del directorio de trabajo y la copia más reciente del depósito:

cvs diff [filename]

Omita filename para poder ver las diferencias entre todos los ficheros. Ejecute el flag -r1.xx para compararlo con una revisión en concreto, y utilice dos flags -r flags para comparar dos versiones entre sí.

Inicio

Consejos y técnicas

CVS (Sistema de versiones concurrentes) en Emac

El sistema Emac ha incluido ayuda para un sistema CVS. Existen dos modos de llamar a los comandos de un sistema CVS desde un Emac: desde dentro de un buffer (memoria intermedia) que está visitando a un fichero o desde un buffer que enumera todos los ficheros modificados y le deja realizar operaciones en ellos.

Los comandos de un sistema CVS que llevan a cabo acciones desde un buffer que está visitando a un fichero se prefijan con C-x v. Los comandos más útiles son

C-x v =: vc-diff
Muestra las diferencias entre su copia de trabajo y la versión del depósito, como cvs diff.
C-x v =: vc-next-action
En la mayoría de los casos, este comando compromete los cambios que usted ha hecho, como cvs commit. Introducirá un mensaje de registro en un buffer especial y luego escribirá C-c C-c para asegurar realmente el fichero.
C-x v C-h: show VC bindings
Enumere todos los comandos comenzando por C-x v.

Puede utilizar, como alternativa, el paquete pcl-cvs para ejecutar los comandos del sistema CVS y navegar por la salida. El principal comando es:

M-x cvs-update RET
que ejecuta cvs update y coloca los resultados en un buffer *cvs* para que les pueda echar un vistazo. Después puede operar en cada línea utilizando comandos como los siguientes:
=: cvs-mode-diff
Muestra diferencias entre su copia de trabajo y la versión del depósito, como cvs diff.
f: cvs-mode-find-file
"Encuentra" (edita) el fichero en Emac.
c: cvs-mode-commit
Asegura sus cambios, como cvs commit. Introducirá un mensaje de registro en un buffer especial y luego escribirá C-c C-c para asegurar realmente el fichero.
g: cvs-update
Vuelve a ejecutar cvs update y actualiza el buffer actual (*cvs*) mostrando los nuevos resultados.
r: cvs-mode-remove
Borra el fichero y ejecuta cvs remove sobre él. Aún tiene que asegurar ese cambio.
m: cvs-mode-mark
Marca un fichero para indicar una operación posterior. Esto le permite operar sobre múltiples ficheros a la vez, y por ejemplo, puede asegurarlos simultáneamente con el mismo mensaje de registro. La mayoría de las funciones de un sistema cvs (asegurar, eliminar, etc.) operan sobre todos los ficheros marcados, o sobre el fichero bajo el cursor Emac ("señalando") si no hay ficheros marcados.
u: cvs-mode-unmark
Desmarca el fichero al momento.
h: cvs-mode-help
Ofrece una guía de ayuda (muy breve) sobre los comandos
 

Inicio

Cómo minimizar los conflictos de fusión

¡Un sistema CVS no sustituye a la tarea de administración del trabajo! La coordinación del trabajo es importante, incluso si trabaja individualmente. Si es posible, debe evitar trabajar con el mismo fichero al mismo tiempo. Si trabaja con el mismo fichero, hágalo sobre partes distintas. La modularización del código en múltiples ficheros hace normalmente que sea más fácil equiparar el trabajo. Siempre deber consultar las decisiones de diseño de gran importancia con sus compañeros, antes de llevarlas a cabo, sobre todo si se trata de interfaces que afectarán a su código.

¿Cuando debería comprometerse? Si se compromete frecuentemente sin haber hecho las pruebas apropiadas, es posible que introduzca errores en el depósito, que repercutirán en el trabajo de sus compañeros. No obstante, si rara vez se compromete, sus compañeros usarán código obsoleto, que hace que se despercidien esfuerzos y que surjan los conflictos de fusión.

No existe una regla estricta y rápida, pero una buena regla consiste en asegurarse de que todo al menos compila antes de que lo revise. No hay nada más molesto que tener que cerrar su código para compilar después de comprobar que alguien ha introducido cambios.

Otra buena regla (aunque esta es bastante más dúctil) consiste en la posibilidad de evitar dejar algo sin revisar cuando pare hasta el próximo día. Pueden pasar muchas cosas mientras no está codificando, y normalmente es mejor hacer su cambio dentro de un orden de trabajo, y comprobarlo antes de irse. Dado que la regla anterior (la de nunca comprobar código que no funciona) es más importante, ésta puede resultarle difícil de cumplir si está llevando a cabo grandes cambios. Por ello, suele ser buena idea abordar un problema en el momento, y así podrá acabar cada parte más rápidamente y mantener el depósito actualizado.

El coordinar sus esfuerzos con los de sus compañeros es, por supuesto, la verdadera clave para evitar problemas de fusión. De nuevo, ¡un CVS no sustituye a la tarea de administración del trabajo!

Inicio

Dificultades

Aquí le facilitamos algunos consejos para evitar problemas frecuentes que surgen con el uso del sistema CVS:

  • No edite el depósito manualmente. No está diseñado para que el manejo por humanos.

  • Trate de no realizar cambios drásticos a la vez. Esto reducirá los conflictos de fusión y es una buena costumbre en lo general.

  • Ejecute siempre el comando cvs update antes de editar un fichero. Es fácil que se le olvide. Si le ocurre, puede que acabe editando una versión obsoleta, lo que puede provocar serios problemas de fusión.

  • En caso de que otro miembro del grupo no haya revisado sus cambios y no esté disponible, es posible que quiera hacerlo usted por él. Puede hacer esto simplemente ejecutando cding en su directorio de trabajo y haciendo desde allí un cvs commit. Esto sería como último recurso. Además, antes de hacerlo, debería hacer un cvs diff para averiguar exactamente qué cambios han llevado a cabo, y si realmente quiere revisarlos.
  • Tenga cuidado con el tabulador. Las tabulaciones automáticas de Emac pueden tener un ancho distinto para alguna gente, y otros editores de texto pueden pueden tratar las tabulaciones de modo distinto, tanto en anchura, como en relación a si son tabulaciones (OK), espacios o ambas cosas. Todos los editores utilizados por sus compañeros deben compartir la misma convención para las tabulaciones. La razón para esto es (Esto se debe a) que un sistema CVS compara en base a líneas individuales, de modo que las diferencias en cuanto a tabulaciones pueden causar serios problemas de fusión. Este es simplemente un caso específico de "Hay que establecer una convención con respecto al formato del código".

Inicio

Más información

Un sistema CVS puede hacer muchas más cosas que no se mencionan en esta breve guía para principiantes. Por favor, si necesita más ayuda, lea la documentación.

Para leer el manual del sistema CVS en Athena, ejecute el comando info cvs. Otra forma de hacerlo desde Emac es, hacer do M-x info RET m cvs RET, donde M-x consiste en pulsar x mientras mantiene pulsada la tecla meta o de control o la tecla alt, RET es la tecla intro, y no necesita mantener los espacios. Ponga especial atención a las secciones "Cómo empezar un nuevo proyecto", y "Visión conjunta / Una sesión de muestra". Además, si alguno de los miembros de su grupo quiere trabajar desde casa, querrá leer la sección "depósito / depósitos remotos".

Inicio

Información Jurídica | Privacidad
Todo uso del sitio de MIT OpenCourseWare y sus materiales de curso queda sujeto a las condiciones y términos de uso detallados
en la sección sobre Información Jurídica
Contacta con nosotros: Usuarios | Empresas-Instituciones-Medios comunicación
Código Ético | Aviso Legal | Política de confidencialidad | Quiénes somos: Sala de Prensa