Contribución al Proyecto
Gracias por tu interés en contribuir al Sistema Gateway Agrícola. Esta guía te ayudará a participar en el desarrollo del proyecto.
Cómo Contribuir
Reportar Problemas
Buscar Issues Existentes: - Revisar si el problema ya está reportado - Verificar si hay una solución en progreso
Crear un Issue Detallado: - Usar el template de issue correspondiente - Incluir información del sistema - Proporcionar logs de error - Describir pasos para reproducir
Información Requerida: - Versión del firmware - Hardware utilizado - Configuración actual - Logs completos
Proponer Mejoras
Discutir la Idea: - Crear un issue para discutir la mejora - Obtener feedback de la comunidad - Definir alcance y prioridad
Crear una Propuesta: - Documentar la funcionalidad - Diseñar la implementación - Considerar impacto en rendimiento
Implementar: - Seguir las guías de desarrollo - Escribir tests unitarios - Actualizar documentación
Enviar Pull Requests
Fork del Repositorio: - Crear un fork del proyecto - Clonar tu fork localmente
Crear una Rama: - Usar nombres descriptivos - Seguir convenciones de nomenclatura
Desarrollar: - Seguir estándares de código - Escribir tests - Actualizar documentación
Enviar PR: - Usar template de pull request - Describir cambios realizados - Incluir tests y documentación
Estándares de Código
Formato de Código
Indentación: - Usar 2 espacios para indentación - No usar tabs
Nomenclatura: - Clases: PascalCase (ej: NodeIdentity) - Métodos: camelCase (ej: getNodeID()) - Constantes: UPPER_SNAKE_CASE (ej: MAX_NODES) - Variables: camelCase (ej: nodeID)
Comentarios: - Usar comentarios descriptivos - Documentar funciones complejas - Incluir ejemplos cuando sea necesario
Ejemplo de Código: .. code-block:: cpp
Estructura de Archivos
Organización: - Un archivo por clase - Headers en include/ - Implementación en src/ - Tests en test/
Nombres de Archivos: - Usar snake_case - Ser descriptivos - Incluir extensión apropiada
Ejemplo: .. code-block:: text
src/ ├── main_gateway.ino ├── node_identity.h ├── node_identity.cpp ├── radio_manager.h ├── radio_manager.cpp └── config.h
Convenciones de Git
Mensajes de Commit: - Usar formato convencional - Ser descriptivo y conciso - Incluir tipo de cambio
Ejemplos: .. code-block:: text
feat: agregar soporte para RTC DS1302 fix: corregir timeout en comunicación LoRa docs: actualizar documentación de instalación test: agregar tests para NodeIdentity refactor: optimizar gestión de memoria
Ramas: - main: código estable - develop: desarrollo activo - feature/*: nuevas funcionalidades - fix/*: correcciones de bugs - docs/*: documentación
Testing
Tests Unitarios
Cobertura: - Tests para todas las clases - Cobertura de casos edge - Tests de integración
Estructura: - Un test por clase - Tests independientes - Setup y teardown apropiados
Ejemplo: .. code-block:: cpp
#include <unity.h> #include «node_identity.h»
- void setUp(void) {
// Setup antes de cada test
}
- void tearDown(void) {
// Cleanup después de cada test
}
- void test_getNodeID_returns_valid_id(void) {
NodeIdentity identity; uint8_t nodeID = identity.getNodeID(); TEST_ASSERT_GREATER_THAN(0, nodeID); TEST_ASSERT_LESS_THAN(255, nodeID);
}
- int main(void) {
UNITY_BEGIN(); RUN_TEST(test_getNodeID_returns_valid_id); return UNITY_END();
}
Tests de Integración
Hardware: - Tests con hardware real - Simulación cuando sea posible - Validación de comunicación
Red: - Tests de comunicación LoRa - Validación de protocolo - Tests de rendimiento
Documentación
Estándares de Documentación
Comentarios de Código: - Usar formato Doxygen - Documentar parámetros y retornos - Incluir ejemplos de uso
Documentación de Usuario: - Guías paso a paso - Ejemplos prácticos - Screenshots cuando sea necesario
Documentación Técnica: - Arquitectura del sistema - Diagramas de flujo - Especificaciones técnicas
Ejemplo de Documentación: .. code-block:: cpp
- /**
@class NodeIdentity
@brief Gestiona identificación única de nodos
Esta clase genera un identificador único basado en la dirección MAC
del hardware, con protección contra colisiones mediante lista negra.
@example
NodeIdentity identity;
uint8_t nodeID = identity.getNodeID();
Serial.printf(«Node ID: %dn», nodeID);
*/
class NodeIdentity { public:
};
Proceso de Review
Criterios de Aceptación
Funcionalidad: - Código funciona correctamente - Tests pasan - No introduce regresiones
Calidad: - Sigue estándares de código - Documentación actualizada - Performance aceptable
Seguridad: - No introduce vulnerabilidades - Manejo seguro de datos - Validación apropiada
Proceso de Review
Automático: - Tests automáticos - Análisis de código estático - Verificación de formato
Manual: - Review de código por pares - Verificación de funcionalidad - Validación de documentación
Aprobación: - Al menos 2 aprobaciones - Todos los tests pasan - Documentación actualizada
Comunicación
Canales de Comunicación
Issues de GitHub: - Reportar problemas - Proponer mejoras - Discutir implementación
Discussions: - Preguntas generales - Compartir experiencias - Solicitar ayuda
Email: - Contacto directo - Asuntos privados - Coordinación de desarrollo
Código de Conducta
Respeto: - Ser respetuoso con otros - Escuchar diferentes opiniones - Construir sobre ideas de otros
Colaboración: - Ayudar a otros desarrolladores - Compartir conocimiento - Mentorear nuevos contribuidores
Profesionalismo: - Mantener comunicación profesional - Ser constructivo en feedback - Reconocer contribuciones
Reconocimiento
Contribuidores
Tipos de Contribución: - Código - Documentación - Testing - Diseño - Ideas
Reconocimiento: - Lista de contribuidores - Mención en releases - Agradecimientos en documentación
Incentivos: - Badges de contribuidor - Acceso a features beta - Participación en decisiones
Para comenzar a contribuir:
Leer la Documentación: - Guías de instalación - Estándares de código - Proceso de desarrollo
Explorar el Código: - Entender la arquitectura - Revisar issues abiertos - Identificar áreas de mejora
Empezar Pequeño: - Corregir bugs simples - Mejorar documentación - Agregar tests
Contactar: - Crear un issue - Unirse a discussions - Solicitar mentoría
¡Gracias por contribuir al Sistema Gateway Agrícola!