Envío de mi biblioteca de primera clase. ¿Algún problema que deba tener en cuenta?

12

Soy un desarrollador web a punto de desbloquear el logro "Publicación de la biblioteca de primera clase" en mi carrera y estoy sudando balas (estuve toda la noche estresado). Me encantaría aprovechar la experiencia de la comunidad para ver si alguien tiene alguna sugerencia o recomendación para asegurarse de que esto sea lo más fácil posible. ¿Hay algún detalle o problema que deba tener en cuenta? ¿Hay algo especial en el proceso de construcción que pueda volver a morderme?

Aquí es donde estoy:

  • La biblioteca está probada y tiene una cobertura de código de aproximadamente 97%
  • La API está bien documentada y se han creado documentos xml para el soporte intellisense
  • Me aseguré de que los accesores de clase públicos / privados sean precisos y correctos. Lo mismo ocurre con todos los captadores / setters
  • El manejo de errores no es tan elegante como me gustaría, pero estoy en una fecha límite y he aceptado que es "tan bueno como va a ser" por ahora
  • Sin registro amigable. Debug.Writeline se usó extensamente ... Recientemente he aprendido que esto es un reflejo de mi inexperiencia :(

¡Tu consejo es muy apreciado!

La biblioteca se usará para generar informes. Sombrero estándar: se conecta a la base de datos de solo lectura, realiza cálculos, formatea y envía datos a la secuencia de respuesta.


Fui aprovechado como un recurso marginal para completar uno de los programadores que renunciaron, y esta tarea me fue dada como un proyecto de "cortar los dientes". La biblioteca de clases se lanzará para que otros programadores de la compañía la utilicen mientras escriben el código de producción.

Sr. JavaScript
fuente
2
¿Necesita detalles, lanzamiento cómo? Lanzamiento a la venta? ¿Lanzamiento de código abierto para compartir? ¿Liberar a un cliente por un contrato que tenga? ¿Liberar al resto de su organización de desarrollo como parte de un proyecto para su empleador a tiempo completo? ¿Lanzamiento como v1.0 de un nuevo producto a disponibilidad del cliente para su empleador a tiempo completo?
Jimmy Hoffa
@JimmyHoffa: respuestas agregadas a sus preguntas. Gracias por tomarse el tiempo!
Sr. JavaScript
1
Imagina que eres un usuario de la biblioteca sin saber cómo funciona. Úselo para construir algo. Cambiar / eliminar / agregar cosas según la experiencia. Luego publíquelo a usuarios reales y obtenga sus comentarios.
mike30
¿Quizás usar Sandcastle u otra biblioteca generadora de documentos para tener material de referencia fuera de línea (ish)?
Jesse C. Slicer
77
Relajarse. Tener incluso una sola prueba de unidad y una sola línea de documentación API ya eleva esta versión por encima del ~ 95% del código "lanzado para que otros programadores de la compañía lo usen", en mi experiencia.
Carson63000

Respuestas:

8

Bloquear la API

El arte de construir efectivamente una API tiene que ver tanto con la gestión de expectativas como con la estructura.

Cuando digo API me refiero específicamente a cómo se nombran las clases / métodos públicos / internos y cuál es su nivel de acceso (es decir, privado / público / interno).

Si le preocupa que el código no esté completamente listo para el horario estelar, siempre puede publicarlo inicialmente como beta.

Lanzamientos:

  • Beta (es decir, pre 1.0)

    • puede contener múltiples cambios de ruptura de API
    • puede faltar cambios de compatibilidad hacia atrás entre versiones
    • puede tener falta de esmalte
  • Oficial (1.0+)

    • API está bloqueada hasta la próxima versión principal
    • cualquier cambio introducido debería garantizar la compatibilidad con versiones anteriores
  • Menor (ex 1.1)

    • contener correcciones de errores y / o implementaciones de funciones
    • puede agregarse pero no quitarse de la API definida

Si crees que la API necesita ser reforzada, libérala por un tiempo como beta. Eso indica que está disponible para su uso, pero no debe usarse para producción y / o código de misión crítica.

Muchas personas tratan los esquemas de versiones numeradas como lavado de cerdos, pero cuando se usan de manera efectiva, se pueden usar para proporcionar cierto margen de maniobra hasta que se resuelva la estructura.

Sus suposiciones sobre cómo se usará están equivocadas

No importa qué tan bien esté diseñado algo, las personas encontrarán una manera de abusar o crear un uso alternativo.

Una forma de manejar esto es bloquear la mayor parte de la implementación posible usando accesores (es decir, privados / públicos / internos), pero ninguna cantidad de diseño o ingeniería le dará tanta información como liberar el código a los usuarios.

Realmente no importa cuán 'perfecto' creas que puede llegar a ser tu código, tus usuarios probarán que no lo es.

Yo diría que esta es la razón principal por la que siempre es mejor usar una base de código existente en lugar de hacer una reescritura completa. En el mejor de los casos, una reescritura completa recortará la hinchazón, pero existe una alta probabilidad de que la nueva base de código contenga tantos (y posiblemente más) errores como la base de código original.

En su caso, está endureciendo la batalla desde cero, por lo que bien podría comenzar.


Parece que tienes el resto de tus bases cubiertas. La documentación de la API es vital y las pruebas serán buenas para garantizar la estabilidad cuando se realicen cambios en el futuro.

La implementación de un esquema de registro consistente será importante antes de que el código se publique para producción porque necesitará una forma de habilitar / deshabilitar / filtrar los registros de forma global. Por cierto, en la mayoría de los casos, el registro solo implica importar una biblioteca y cambiar las llamadas de salida de Debug.WriteLine () a algo como Logging.Debug (), Logging.Info (), Logging.Error (). El registrador en sí solo proporciona una implementación estándar para la configuración, el filtrado y una gama más amplia de esquemas de salida (por ejemplo, archivos, consola, etc.).

Aparte de eso, buscaría sacar el código y usarlo. Aunque solo sea por un pequeño número de usuarios para comenzar.

Evan Plaice
fuente
1
+1 Re: registro: recomiendo TraceSource . No introduce dependencias externas, ya que forma parte de las bibliotecas principales de .NET y permite a los usuarios adjuntar escuchas y configurar el seguimiento tanto a través del código como a través de los archivos app.config.
Dan Lyons
4

Estas son dos cosas que encuentro son clave para lanzar software:

  • Sepa exactamente lo que ha lanzado
  • Gestionar expectativas

Desea poder regresar y corregir errores que ha lanzado y quiere que la gente entienda qué problema resolverá su código.

Saber lo que has lanzado

Asegúrese de tenerlo correctamente versionado y firmado (si corresponde). Use su control de origen para etiquetar \ etiquetar el código asociado con la versión lanzada oficialmente. Esto lo ayudará a identificar errores más fácilmente, ya que puede volver exactamente al código fuente que lanzó. También ayudará en el futuro cuando pueda tener algunas versiones lanzadas diferentes.

Intente hacer que la última versión sea fácil de obtener y actualizar. Si se trata de un instalador, o simplemente ponerlo en un recurso compartido común depende de quién \ cuándo \ con qué frecuencia se enviará.

Asegúrese de que alguien revise su versión final, incluida la documentación. Es muy fácil ponerse nervioso o entusiasmado por lanzar software y perderse algo.

Gestión de expectativas

Documente las limitaciones y hágalas razonablemente obvias para los desarrolladores. Es bueno que los hayas encontrado. Las personas a menudo son más comprensivas si conocen las limitaciones de su software, especialmente si tiene un plan para solucionarlas.

Documente cómo le gustaría recibir comentarios, buenos o malos. Como se trata de un proyecto interno, si todos tienen acceso a un sistema común de seguimiento de errores, pídales que presenten errores en el proyecto correspondiente.

En el futuro, evite cambiar la API si es posible, esto es lo único que tiene el potencial de molestar a sus clientes. Recuerde que las excepciones también son parte de la API, aunque en C # no son parte de la documentación del método. Se puede ser posible mejorar las excepciones que son lanzadas en una fecha posterior, pero se necesita hablar con los usuarios finales y ver qué impacto tendrá.

Steve
fuente
0

Tengo una lista de verificación para implementaciones que pueden resultarle útiles. Hago desarrollo de escritorio pero algo de esto debería traducirse. Aquí hay algo de eso:

General:

  • Realice comprobaciones nulas para los parámetros de función que no deberían ser nulos. Esto me ayuda a fallar temprano.
  • Eliminar comentarios innecesarios y archivos comentados. Estos causan trabajo futuro.
  • Busque cualquier comentario "// TODO". A veces dejo notas para mí. A veces me olvido de ellos.
  • Ejecute una prueba de mi código utilizando la base de datos de producción cuando sea posible. Esto ayuda a garantizar que tenga todos los cambios de mi base de datos en el servidor de producción.
  • Poner en registro abundante. Especialmente para un despliegue inicial. De hecho, guardo el registro para el final porque mi código generalmente está gelificado en este momento. No quieres estar en una situación en la que tienes un accidente y te dices a ti mismo "Si supiera cuál es el valor de X en este momento". Intenta planificar con anticipación.
  • Intente ajustar las llamadas de la biblioteca de terceros en Fachadas. Esto facilita el cambio de bibliotecas en el futuro y proporciona una lista de verificación de lo que necesita de una biblioteca.

.Net específico:

  • Asegúrese de llamar a Dispose () en objetos desechables. Utilizo Code Analysis o FxCop para ayudar a encontrar casos de esto.
  • Asegúrese de desenganchar todos los controladores de eventos correctamente. Esto evita pérdidas de memoria.
usuario2023861
fuente