Cómo entregar una prueba técnica en GitHub: README, pruebas y decisiones de alcance

Entrega tu prueba técnica en GitHub con un README reproducible, pruebas y alcance claro. Compara un clon fallido y uno corregido, ligados a commits concretos.

Author: PracHub

Published: 10/11/2026

Cómo entregar una prueba técnica en GitHub: README, pruebas y decisiones de alcance

October 11, 2026

Quick Overview

Guía de entrega con un laboratorio original de inventario: el archivo fixtures/events.json existe localmente pero queda fuera del primer commit por una regla de exclusión. El clon falla con salida2; una revisión corregida incluye el dato y produce A=5/B=1 y diez tests correctos en un clon nuevo. Registra hashes, archivos seguidos y límites de alcance. Git local y CPython3.12.14; sin creación de repositorio GitHub, prueba de permisos remotos ni Actions.

Software EngineerFree

La aplicación funciona en tu carpeta y los tests pasan. Clonas el repositorio en otro directorio, ejecutas el mismo comando y falta el archivo de entrada. Los datos necesarios nunca formaron parte del commit, aunque estuvieran presentes en tu carpeta.

Para entregar una prueba técnica en GitHub, verifica lo que recibe la otra persona: archivos seguidos por Git, instrucciones reproducibles, resultados esperados y límites de lo implementado. Este artículo usa un mini proyecto descargable con una entrega incorrecta y otra corregida. Puedes preparar la defensa con las preguntas Software Engineer de PracHub.

Hechos oficiales: GitHub documenta README, archivos ignorados y detección de secretos; Python documenta el runner de pruebas. Informes de candidatos: los registros de PracHub sirven para practicar, sin predecir una evaluación. Observaciones propias: ejecutamos dos clones de un repositorio Git local. No creamos un repositorio GitHub ni probamos sus permisos, Actions o recepción por un evaluador. Confirma canal, privacidad, herramientas y plazo en tu invitación antes de enviar la entrega.

Un archivo presente en la carpeta local puede faltar en el clon si nunca estuvo incluido en el commit.

Confirma qué significa entregar en tu invitación

Un enlace a GitHub puede referirse a un repositorio, una rama, un commit o un pull request. No son objetos intercambiables. Identifica cuál pide el enunciado, si debes conservar un repositorio inicial y cómo se concede acceso. Si también existe un formulario de entrega, confirma si el enlace debe enviarse allí.

Respeta la visibilidad y los permisos que exige la invitación. Una tarea puede contener material que la empresa no autoriza a redistribuir. Comprueba las instrucciones antes de cambiar visibilidad o publicar datos, y utiliza entradas sintéticas en tus ejemplos. Este artículo no proporciona una política común a todos los procesos.

Identifica la revisión que vas a entregar para que sus resultados puedan reproducirse. Si entregas una rama que continúa cambiando, el enlace por sí solo no identifica qué versión comprobaste. Conserva el hash de la revisión y el recibo del canal indicado. Un commit local no demuestra que otra persona tenga acceso al repositorio remoto.

Confirma también el uso de documentación, herramientas de IA y código ajeno. Si se permite asistencia, mantén las atribuciones solicitadas y prepara una explicación de las decisiones. Que GitHub pueda alojar el proyecto no establece qué ayudas admite una evaluación concreta.

Reproduce el fallo que tu carpeta local oculta

Nuestro proyecto lee un JSON con stock A igual a 3 y B igual a 1. Procesa tres eventos: e1 retira dos unidades de A, e2 añade cuatro y el último repite e1 con el mismo contenido. La salida correcta es A igual a 5, B igual a 1, dos eventos aplicados y un duplicado omitido.

El archivo fixtures/events.json existe en la carpeta del autor. En la primera revisión añadimos por error fixtures/ a .gitignore. El comando local sigue funcionando, pero Git no incorpora ese archivo nuevo al commit. Al clonar esa revisión, el programa no encuentra la entrada y termina con código 2.

La corrección elimina esa regla e incorpora los datos sintéticos. Creamos otro commit, lo clonamos en un directorio distinto y ejecutamos las órdenes del README. La salida coincide y los diez tests pasan. delivery-checks.json conserva ambos hashes, los comandos y sus resultados ejecutados.

Observación ejecutadaRevisión incorrectaRevisión corregida
Archivo en carpeta del autorExisteExiste
Archivo seguido por GitFaltaIncluido
CLI desde clon limpioCódigo 2; error de entradaCódigo 0; A=5 y B=1
Tests desde clon corregidoNo ejecutadosDiez pasan

La comparación distingue una solución local de una entrega reproducible. No prueba otros sistemas operativos, una versión diferente de Python ni una instalación desde Internet. La ejecución registrada utiliza CPython 3.12.14 y Git local, sin dependencias externas.

Haz que el README permita reconocer el resultado correcto

Documentación oficial: GitHub presenta el README como un lugar para explicar el proyecto y cómo usarlo. En una entrega, traduce esa orientación en órdenes concretas y resultados observables. Un comando sin indicar desde dónde ejecutarlo puede funcionar en un directorio y fallar en otro.

El README del ejemplo declara Python 3.9 o posterior, ausencia de paquetes externos y ejecución desde la raíz. La versión realmente comprobada se registra aparte; no afirmamos haber probado cada versión admitida. Las dos órdenes principales son:

python3 inventory.py fixtures/events.json
python3 -m unittest -v

Explica qué debe verse: JSON con A=5, B=1, applied=2 y duplicates=1; después diez tests correctos. Un evaluador puede así distinguir un programa vacío, una ejecución parcial o una ruta equivocada sin reconstruir tu intención a partir del código.

Documenta también el fallo esperado. El CLI devuelve 2 y un mensaje en stderr ante un archivo ausente, JSON inválido o una infracción del contrato. No produce un JSON de éxito en esos casos. El programa no modifica el archivo original ni conserva estado tras finalizar.

Si tu prueba necesita instalación, base de datos o variables, explica esos pasos con valores de ejemplo seguros. No añadas instrucciones para servicios que no utilizas. En nuestro proyecto, .env.example aclara que no hacen falta credenciales ni variables; no oculta una configuración privada necesaria para arrancar.

Relaciona los tests con las decisiones de alcance

Documentación oficial: unittest permite organizar y ejecutar pruebas de Python. El runner no decide qué comportamiento importa. Elegimos diez tests que cubren la conciliación, preservación de entrada, errores del contrato y salidas del CLI; el número no representa un umbral de contratación.

El replay idéntico debe omitirse. Un mismo identificador con otro delta debe rechazarse. Un SKU desconocido y un delta booleano también fallan. Una retirada que deja stock negativo se rechaza en ese punto, aunque una reposición posterior pudiera compensarla: el orden del archivo forma parte de nuestro contrato.

Esas reglas deben aparecer en la explicación y en las pruebas. Si decidieras permitir stock negativo temporal, tendrías que cambiar la decisión, el código y su test. Un comentario como «mejorar validaciones» no permite identificar qué comportamiento se ha implementado realmente.

Las comprobaciones del CLI observan código de salida, stdout y stderr. Complementan las pruebas de la función: una función correcta no garantiza que el comando de la entrega lea el archivo adecuado o informe un fallo de manera reconocible.

No uses una captura verde como única prueba. Conserva el comando, la revisión y la salida que produjeron ese resultado. Tampoco añadas un porcentaje de cobertura que no has medido; aun medido, necesitaría una explicación de los riesgos que los tests sí ejercitan.

Comprueba qué archivos forman parte de la revisión

Documentación oficial: las reglas de archivos ignorados ayudan a excluir archivos de los commits, pero no dejan de seguir automáticamente uno que ya estaba incorporado. En nuestro fallo, la entrada era nueva: la regla impedía añadirla. Identifica cuál de esas situaciones estás investigando antes de cambiar la configuración.

La revisión corregida sigue siete archivos: README, programa, tests, reglas de exclusión, ejemplo de configuración sin secretos, decisiones y datos sintéticos. El clon contiene esos mismos bytes. Tras ejecutar programa y pruebas, git status --porcelain queda vacío; las cachés de Python están excluidas.

Un estado limpio tampoco significa que tu proyecto sea correcto. Solo describe la relación observada entre esa carpeta y Git. En el primer caso, la carpeta podía parecer preparada mientras el archivo ignorado permanecía fuera del commit. Por eso combinamos lista de archivos, clon y ejecución.

Revisa si una imagen, una migración o un archivo de datos depende de una ruta local fuera del commit. Si el proyecto necesita una imagen o una migración, debe formar parte del mecanismo documentado de preparación. Una ruta que apunta a tu escritorio no es un recurso portable para el evaluador.

Trata los secretos y la privacidad como requisitos de la entrega

Documentación oficial: GitHub describe la detección de secretos como una protección frente a credenciales expuestas, incluida la revisión del historial. La disponibilidad y la configuración de funciones dependen del repositorio. No afirmamos haber ejecutado un escaneo GitHub sobre este laboratorio.

No incluyas contraseñas, tokens, cookies ni datos personales para facilitar la demostración. Usa datos sintéticos y describe cómo proporcionar una configuración cuando sea necesaria. Una plantilla debe mostrar nombres y formatos, sin contener una credencial que haya funcionado realmente.

Añadir .env a .gitignore no revoca un secreto ya publicado ni borra su historial. Si detectas una exposición real, atiende la credencial afectada con el responsable y el procedimiento correspondiente; cambiar únicamente el último archivo no demuestra que el acceso anterior haya desaparecido.

Nuestro paquete no contiene secretos y no utiliza autenticación. Esa afirmación describe los archivos creados para el ejercicio, no una certificación de seguridad ni una prueba de permisos remotos. No confundas la privacidad de un repositorio con autorización para compartir material de la evaluación.

Vincula la evidencia al commit que vas a enviar

La revisión verificada comienza por 88837ba; el hash completo está en COMMIT.txt. En el laboratorio comprobamos que HEAD del clon coincide con ese hash antes de ejecutar. Los resultados corresponden así a una revisión identificable, en lugar de una mezcla entre archivos guardados y cambios pendientes.

El archivo delivery-checks.json conserva el hash defectuoso y el corregido, los comandos, salidas y lista seguida por Git. Es un recibo externo del experimento. No forma parte del propio commit probado, igual que COMMIT.txt; documentar esa distinción evita fingir que un commit contiene una evidencia generada después de crearlo.

El ZIP portable incorpora los siete archivos seguidos y esos dos recibos. No incluye .git, credenciales ni una dirección de repositorio remoto. Puedes ejecutar el proyecto descomprimido, pero repetir la historia de commits requeriría crear tu propio repositorio; el paquete no pretende ser una copia del historial.

El commit local 88837ba incluye el archivo de datos; un clon limpio produce A igual a 5 y B igual a 1 y supera diez tests.

Para una entrega real, verifica el enlace y el acceso mediante el mecanismo permitido. Anota a quién corresponde revisar y qué canal confirma la recepción. No consideres que el evaluador recibió la prueba solo porque tú puedes abrir tu propia cuenta.

Defiende una decisión sin convertir una limitación en una función

Nuestro registro de alcance elige JSON local y estado en memoria para concentrarse en la entrega. La deduplicación por identificador dura una ejecución. No implementa reservas, backorders, retención durable, varios procesos ni un servicio de inventario desplegado.

En una conversación, puedes explicar por qué esa frontera hizo posible una reproducción pequeña. También debes aceptar qué requisito la invalidaría. Si el enunciado exige reanudar después de un reinicio, la tabla en memoria no cumple; escribir «añadir persistencia después» no transforma ese requisito obligatorio en opcional.

Distingue un requisito no implementado de una ampliación propuesta. Para cada pendiente, indica la consecuencia y el siguiente cambio que comprobarías. «No admite escrituras concurrentes» permite discutir una prueba y un almacenamiento; «es escalable» sin otra evidencia oculta una garantía que todavía no has construido.

Estas preguntas verificadas sirven para ensayar cambios de contrato y su defensa. Son registros de práctica, no tareas anunciadas para un proceso concreto.

Pregunta PracHub verificadaDecisión que puedes defender
Implement inventory allocation with backordersQué cambia si la falta de stock genera una asignación pendiente.
Design scalable inventory system and avoid racesPor qué un proceso secuencial no demuestra ausencia de carreras.
Design an inventory systemDónde termina el CLI y empieza un servicio con almacenamiento.
Design matrix-operations HTTP service and test strategyQué evidencia añadirías al convertir el programa en una API.
Design an Extensible Expense Rule EngineCómo documentar una nueva regla sin ocultarla entre detalles del framework.

Continúa con las preguntas Software Engineer. Elige una modificación, escribe qué resultado cambiaría y qué test lo demostraría. Antes de enviar tu propia prueba, vuelve al commit exacto y sigue sus instrucciones desde otra carpeta: la entrega debe sostener la explicación que has preparado.

Sources and Further Reading


Comments (0)