IS06 Programación Por Pares
IS06 Programación Por Pares
IS06 Programación Por Pares
EJERCICIO UNO
Juego para enseñar programación por pares
Este juego se basa en el juego llamado perfección (Perfection Game). Para jugarlo se
necesita una computadora personal con un teclado, un mouse, las herramientas de
desarrollo .NET Framework instaladas, suficiente sillas y espacio para que todos los
desarrolladores pueden sentarse y ver la pantalla. Con más de dos las personas, se sugiere
usar un proyector de modo que todos los participantes pueden ver lo que se está haciendo.
Existen dos roles en este juego: programador y soporte. Cada persona se turna para ser el
programador, mientras que todos los demás toman el papel de soporte.
3. Cada soporte califica la función de 0 a 10, 10 es el valor más alto y 0 el más bajo. Por
cada punto menor de 10, el soporte debe recomendar alguna forma para que sea 10.
a. El soporte después que dé su calificación, dice como quiere que el código se escriba.
b. El soporte manifiesta lo que haría para conseguir un 10.
5. Después que todos han tenido un turno de ser programador, puede repetir el ciclo,
pero esta vez el programador comienza con el código que él o ella escribió antes y
trata de mejorarlo por un par de minutos para levantar la calificación.
Ejemplo
Aquí está un turno del ejemplo entre dos de los programadores en nuestro equipo Javier y
Norma.
1
Javier: Yo comienzo. Voy a escribir una función que incrementa una variable
privada hasta que alcanza cierto valor y entonces lo reinicio.
Norma: De acuerdo.
Norma: Le doy un 5 de 10. Me gusta, por ser conciso, por el nombre de la clase,
porque el método es claro y el código es fácil de leer. Para conseguir 10,
el nombre de la variable de enteros debería ser significativo; var no
significa mucho para mí. La variable de enteros se debe inicializar en
alguna parte. Los números límite y reinicio, 500 y 0, deben ser variables o
constantes para facilitar las modificaciones. Usted debería escribir una
prueba para probarlo. Si tiene todo lo expuesto le doy una calificación de
10 sobre 10.
2
• Recuerde agradecer siempre al soporte por las observaciones. Esto ayuda a
mejorar el producto.
EJERCICIO DOS
ejercicio paso a paso para sentir la programación extrema
En este ejercicio, usted se enfoca la programación extrema y no se preocupe por las
otras prácticas. El objetivo es ayudar a los dos (programador y soporte), como escribir
código como un par.
Para hacer este ejercicio, se necesita una computadora personal con un teclado, un
ratón, las herramientas de desarrollo.NET Framework instaladas, dos sillas, suficiente
espacio para que los desarrolladores puedan sentarse delante de la computadora
personal y ver la pantalla, y una copia de este ejercicio.
Comience con uno controlando la computadora (el conductor) y el otro con una copia del
ejercicio (el navegador). El navegador va a guiar al conductor a desarrollar el código. En
ciertos puntos se cambiarán los papeles. Es importante turnar en el momento no
después. Mientras está en el papel de navegador, trate de no mostrar a su socio el código
escrito del ejercicio. Debe intentar comunicar verbalmente lo que se necesite hacer.
Puede dibujar diagramas y como último recurso lee la línea de código para teclearse. Si
en cualquier punto se siente inseguro de lo que ha hecho, es hora de compilar y probar.
Usted debe ser capaz de compilar y correr el programa después de cada paso.
Siguiendo con el tema, va a desarrollar un protector de pantalla (screen saver) competo:
según el código del archivo “02 Pair programming.pdf”, “Exercise 2-2: Step-by-Step
Exercise to Get a Feel for Pair Programming”, pagina 5.
4. Edite el método Main para que use parámetros. Para que Windows lance un protector
de pantalla. Puede ayudar si hace un dibujo para su socio (en una pizarra o un pedazo
de papel).
Argumento Significado
/c Muestra la configuración de la pantalla
3
/s Activa el protector de pantalla
/p Realiza una pre visualización del protector de pantalla
static void Main(string[] args)
{
if (args.Length > 0)
{
// config
if (args[0].ToLower().Trim().Substring(0,2) == "/c")
{ }
// saver
else if (args[0].ToLower() == "/s")
{ }
// preview
else if (args[0].ToLower() == "/p")
{ }
}
else
{ }
}
6. Regrese al método Main, invoque a este método con los argumentos por defecto.
static void Main(string[] args)
{
if (args.Length > 0)
{
if (args[0].ToLower().Trim().Substring(0,2) == "/c")
{ }
else if (args[0].ToLower() == "/s")
{
SaverForm.LaunchSaver();
}
else if (args[0].ToLower() == "/p")
{ }
4
}
else
{
SaverForm.LaunchSaver();
}
}
9. Configure para que ocupe toda la pantalla, responda al mouse y los eventos del
teclado para cerrarlo. En la vista de diseño de SaverForm, configura la propiedad de
FormBorderStyle en None.
10. Cree un manejador de eventos para el evento Load del formulario. Haga doble clic
sobre el formulario en la vista de diseño. En este método ponga los límites de la
pantalla, oculte el cursor y muestre el formulario encima de los otros formularios.
private void SaverForm_Load(object sender, System.EventArgs e)
{
Bounds = Screen.AllScreens[screenID].Bounds;
Cursor.Hide();
TopMost = true;
}
11. En este método Load, se puede añadir el código del manejador de eventos del ratón
y del teclado. Se quiere manejar esos eventos para decidir cuándo finalizar la
ejecución del protector de pantalla. Se comienza añadiendo el manejador de eventos
del ratón, llamado SaverForm_MouseEvent. En Visual Studio.NET, al digitar
MouseMove += y presionar la tecla TAB se genera el esqueleto del manejador.
private void SaverForm_Load(object sender, System.EventArgs e)
{
...
MouseMove +=new MouseEventHandler(SaverForm_MouseEvent);
}
Cuando la aplicación corre por primera vez, la ubicación del ratón se obtendrá a través
el evento de movimiento del mouse, así la primera vez sólo necesitamos capturar la
posición del mouse en una variable miembro. Después de eso, si se mueve el mouse
se cerrará la aplicación.
private Point initialMousePt;
private void SaverForm_MouseEvent(object sender, MouseEventArgs e)
{
if (!initialMousePt.IsEmpty)
{
if (initialMousePt != new Point(e.X, e.Y))
5
Close();
}
initialMousePt = new Point(e.X, e.Y);
}
12. Se puede usar este mismo manejador de evento para el evento mouse down que
ocurre cuando el usuario hace clic. Añádalo en el método load. Luego cambie el
método MouseEvent para cerrar el protector de pantalla cuando se haga un clic.
private void SaverForm_Load(object sender,
System.EventArgs e)
{
...
MouseMove +=new MouseEventHandler(SaverForm_MouseEvent);
MouseDown +=new MouseEventHandler(SaverForm_MouseEvent);
}
6
14. Compile y corra el programa. Comienza a trabajar como un protector de pantalla.
Renombre la extensión de EXE a SCR. Ahora se tiene un protector de pantalla básico.
17. En el método para el evento Paint, añada código para dibujar el texto “eXtreme .NET”
en el centro de la pantalla. Use el método TranslateTransform para desplazar el texto
al centro de la pantalla.
Añada el namespace System.Drawing.Drawing2D a esta clase, esto es necesario para
usar el tipo enumerado MatrixOrder. La línea a añadir en el lugar de los using es:
using System.Drawing.Drawing2D;
7
RectangleF rect = new RectangleF(
0 - size.Width/2,
0 - size.Height/2,
size.Width,
size.Height);
18. Añada el control Timer al formulario (debe estar en el modo diseño) y use el evento
timer para volver a dibujar la pantalla de modo que se pueda obtener cierta animación
de texto. El control Timer se puede arrastrar de la caja de herramientas al formulario
y luego hacer doble clic sobre el Timer para generar el método que manejara el evento.
Asegúrese que la propiedad Enabled del Timer este en true para lanzar los eventos.
gc.ScaleTransform(scale,
scale, MatrixOrder.Append);
gc.TranslateTransform(screenCenter.X,
screenCenter.Y,
MatrixOrder.Append);
...
}
8
private void timer1_Tick(object sender,
System.EventArgs e)
{
scale+= scaleChange;
if (scale < 1)
{
scaleChange = 0.1F;
}
if (scale > 20)
{
scaleChange = -0.1F;
}
Invalidate();
}
21. Compile y corra el programa. Puede disminuir el valor de la propiedad de Interval del
Timer para hacer una animación más visible.
23. Use el modulo para manejar la memoria intermedia del Framework .NET para quitar
el parpadeo. Añada algunos movimientos de texto. Antes de añadir la memoria
intermedia a la clase Form, necesita configurar el formulario para usar el estilo
WMPaint, el estilo UserPaint y el estilo DoubleBuffer.
public SaverForm(int screen)
{
InitializeComponent();
screenID = screen;
this.SetStyle(
ControlStyles.AllPaintingInWmPaint|
ControlStyles.UserPaint|
ControlStyles.DoubleBuffer, true);
}
24. Añada la rotación de texto de modo que al girar crezca y se encoja. Para ello usara
dos variables miembros para el ángulo actual del texto y los grados que de cambiar el
Angulo. Puede modificar el método del evento Tick del Timer. En el método del evento
Paint se usa el método RotateTransform para rotar el texto alrededor de su origen.
private float angle = 0;
private float angleChange = 5;
9
Graphics gc = e.Graphics;
gc.RotateTransform(angle, MatrixOrder.Append);
gc.ScaleTransform(scale,
scale, MatrixOrder.Append);
...
}
25. Compile y corra el programa. La animación podría parecer muy lento. Pruébelo como
protector de pantalla, renombrando la extensión de EXE a SCR.
Este ejercicio provee la comprensión de con qué frecuencia se debe cambiar los papeles y
cuán importante es para ambos que cada uno se involucre con el código que se está
desarrollando. La programación por pares no es divertida si usted está mirando escribir
código a otra persona. Asimismo, tiene muy poco valor si esto ocurre durante una sesión
de programación por pares.
En la programación por pares ambos desarrolladores deberían estar enfocados en la tarea
y ambos orientados a mejorar el código.
10
EJERCICIO TRES
Ejercicios para que dos desarrolladores trabajen juntos
Las tareas siguientes son para que pueda trabajar junto con su socio y trate de desarrollar
las ampliaciones del protector de pantalla. Durante el ejercicio, asegúrese que usted cambie
los roles a menudo; se sugiere cambiar cada diez minutos.
11