Trabajo en Treehouse y he trabajado en nuestra plataforma de ejecución de código y he creado las herramientas que nuestros maestros usan para crear desafíos de código.
De hecho, ejecutamos su código. Protegemos cada solicitud que ingresamos, establecemos el contexto en el que le pedimos que escriba el código, ejecute su código y luego ejecute las pruebas unitarias que nuestro personal docente ha escrito para analizar su código. Hacemos esto en todos y cada uno de los idiomas que admitimos. La capa de orquestación está escrita en Ruby, y usamos Docker para sandboxing.
Por ejemplo, cuando trabajas en un Desafío de código de Python, haces clic en Enviar, tu código se envía a nuestro servidor, una aplicación Ruby establece un contexto de Python, ejecuta tu código de Python en él y luego ejecuta las pruebas unitarias del profesor en el contexto resultante para Busque los efectos secundarios adecuados. Python devuelve los resultados a nuestra aplicación Ruby, y esa aplicación devuelve los resultados al alumno.
- Vea Free Birds 2013 Megashare: ¿Por qué tantos sitios web hacen que una persona proporcione datos personales y complete cuestionarios antes de que pueda acceder al contenido de los sitios?
- Cómo alojar mi sitio web
- ¿Cuáles son algunos buenos ejemplos de combinación de contenido generado por el usuario en sitios web relacionados con viajes o vacaciones?
- ¿Cuáles son los mejores sitios web de noticias del mundo?
- ¿Qué es beeg?
Creamos estos desafíos en una aplicación web separada que serializa todos los detalles del Code Challenge y posteriormente los publica. Los maestros escriben el guión de prueba y también escriben pruebas de integración con posibles respuestas enviadas, si esperan que la respuesta pase o no el desafío, y con qué mensaje. Los maestros tratan de cubrir las formas más comunes en que un estudiante fallará el desafío para que reciban mensajes de error útiles. Ejecutamos todas estas pruebas contra todos los desafíos de código en vivo cuando es necesario para buscar regresiones, como cuando actualizamos las versiones del sistema operativo o movemos cuadros.
Como también respondió Justen Robertson, siempre que sea posible, probamos los resultados de su código, no el código en sí mismo. Esto evita la trampa de buscar una “forma correcta” para resolver el problema cuando todos sabemos que el software no es una búsqueda lineal. Solo analizamos el código en sí cuando trabajamos con un lenguaje compilado que puede fallar en la compilación, o cuando verificamos el uso adecuado de una función de lenguaje.
Hacer esto bien contra muchos idiomas y entornos diferentes es difícil . Sin embargo, creemos que los resultados valen la pena.