Cómo lidiar con un proyecto de software de baja calidad que necesita ser evaluado [cerrado]

He evaluado un proyecto de software que ha sido creado por un consorcio de los mejores científicos en el campo. Sin embargo, el proyecto en sí no funciona realmente y solo se ha desarrollado como una prueba de concepto en lugar de un producto final (es decir, solo funciona con 2 o 3 escenarios).

Esta aplicación de software debe realizar 4 pasos para poder ejecutarse con éxito. Cada paso toma un archivo de entrada y produce un archivo de salida. El archivo de salida del paso anterior se utiliza como entrada en el paso actual. Inicialmente, comienza con 1 archivo. Este archivo se usa como entrada para el paso 1. Después del paso 1, se genera otro archivo. Llamemos al archivo de entrada general_input_filey al archivo de salida general_output_file. Cuando general_input_filese carga en la aplicación, general_output_filese debe producir. Ahora, tengo un archivo de entrada al que llamaré my_input_file. Espero que la aplicación produzca my_output_file. Sin embargo, la aplicación solo acepta specific_input_filey producirá unaspecific_output_file. Esto significa que solo funciona con 2 archivos que se han generado previamente. Ambos archivos existen en el proyecto. Cuando observo la parte del proyecto que debe procesar el general_input_file, hay una declaración que se ve así: si el nombre del archivo de entrada dado es igual a specific_input_file, entonces devuelve specific_output_file. Este es un archivo dentro del proyecto. De lo contrario, intente procesar generate_input_filey generar general_output_file. En este punto, el software se rompe. Se lanzan varias excepciones, y depurar y arreglar esto está más allá del trabajo que estoy haciendo.

La pregunta es: en el documento, ¿cómo aborda este tema? ¿Y cómo argumenta, en el documento, que la razón por la que no puede evaluar el software en un escenario diferente se debe a las limitaciones del software? ¿Cuál es la mejor redacción a utilizar, sin ser ofensivo para los autores?

"solo se ha desarrollado como una prueba de concepto en lugar de un producto final": este es normalmente el objetivo más alto de cualquier desarrollo de software que ocurre en la investigación. Eso en sí mismo no es un signo de "baja calidad", es por diseño, ya que la investigación no se lleva a cabo para producir productos comercializables en la mayoría de los casos. Y esto bien puede extenderse a sus observaciones sobre la calidad de la codificación, ya que la mantenibilidad o el máximo rendimiento no son necesariamente una prioridad.
No estoy seguro de que podamos responder a esta pregunta sin más contexto, ya que el nivel adecuado de desarrollo del software depende completamente de los objetivos asociados con el proyecto.
Parece que esto depende de al menos tres preguntas de las que no habla aquí: (1) ¿cuál es el objetivo/audiencia de su documento?, (2) ¿qué afirma el consorcio que puede hacer su implementación y cómo lo hace ? apilar?, y (3) ¿por qué es obvio, y por qué importa, que la codificación fue realizada por alguien sin experiencia? Para (2), si el proyecto afirma que el código puede transformar cualquier archivo de entrada en un archivo de salida correcto y no puede, esto es parte de (2); y para (3), espero que sea más que estilo; pero solo tu lo sabes
Todavía estoy confundido en cuanto a por qué esto es realmente importante para su artículo o por qué está escribiendo un artículo sobre la evaluación de un proyecto de software. ¿Podría ser que estés revisando el proyecto por pares de alguna manera? Si ya se ha publicado un artículo sobre el proyecto respectivo, sugiero escribir un comentario/respuesta a ese artículo, si la revista lo permite.

Respuestas (3)

Cuando observo la parte del proyecto que debe procesar el archivo de entrada general, hay una declaración que se ve así: si el nombre del archivo de entrada dado es igual a archivo de entrada específico, entonces devuelva archivo de salida específico. [...] De lo contrario, intente procesar generar_archivo_de_entrada y generar general_archivo_de_salida. En este punto, el software se rompe.

Según su descripción, parece que el código que está viendo está haciendo trampa al devolver una salida precalculada que se sabe que es correcta si la entrada coincide con una sola entrada de muestra que los autores incluyeron con su código (presumiblemente para demostrar su corrección y porque incluir una entrada de muestra para que se aceptara su trabajo). Para todas las instancias de entrada que no sean esta entrada de muestra, el código hace algo completamente diferente, lo que no produce resultados correctos .

Este tipo de comportamiento sin duda merecería una calificación reprobatoria en una tarea o examen de un curso de programación. Si se hiciera en el contexto de un producto comercial, un comportamiento similar justificaría la renuncia del director general y un escándalo multimillonario . Entonces, decir que el código es "de baja calidad" me parece tan eufemístico como para ser en sí mismo una declaración deshonesta. La forma en que lo describiría es: si los autores afirman que su código es correcto, entonces están mintiendo.

Ahora, podría discutir su pregunta real de cómo discutir esta situación en su artículo de seguimiento "sin ser ofensivo para los autores", pero honestamente, no veo el punto. En cambio, preguntaría, ¿ por qué querrías no ser ofensivo con los autores? No es solo que el algoritmo de los autores pueda estar equivocado y que su código sea de mala calidad; aparentemente están cometiendo un fraude académico al enviar un algoritmo incorrecto con un código modificado de manera deshonesta para que parezca que el algoritmo funciona. Estoy dispuesto a dejar un 3% de posibilidades de que se pueda proponer otra explicación más inocente, pero dada la descripción que ha proporcionado, realmente no puedo pensar en una. Estaré encantado de reconsiderarlo si proporciona un poco más de detalles sobre cómo los autores

Es difícil entender cuál es su afirmación real sobre el código. La página del proyecto es la siguiente: tienen un montón de entregables donde discuten el enfoque que adoptan en este proyecto y presentan algunos ejemplos (¿basados ​​en sus escenarios?). Otra parte del proyecto presenta el código de este proyecto (o al menos algunos componentes del proyecto). Existe la posibilidad de que el código esté desactualizado (es decir, es posible que no se publique la última versión). Este proyecto finalizó hace un par de años, y un proyecto de seguimiento comenzó este año (espero que se basen o amplíen este proyecto)
Bueno, la cláusula if que describió que hace coincidir una salida específica con un archivo de entrada de muestra específico suena deshonesta por naturaleza. Pero obviamente nos faltan muchos detalles, por lo que es difícil decir algo más sustancial.
"Parece que el código que está viendo está haciendo trampa al devolver una salida precalculada que se sabe que es correcta": al principio, también lo pensé; pero tenga en cuenta que según la pregunta, este es solo uno de los cuatro pasos. Por lo tanto, también es posible que la transformación real de ese archivo esté fuera de lugar y que el software de prueba de concepto solo esté destinado a demostrar (por ejemplo, hacia personas que no son expertos en informática que no harían el salto conceptual de, digamos, "abrir un documento de conjunto de datos específico de la aplicación" para "abrir un archivo de Word") que se puede cargar un formato de archivo dado. Por lo tanto, no está claro que esto sea un fraude.
@ORMapper bueno, sí, no está 100% claro, como dije, necesitaríamos muchos más detalles para llegar a una conclusión autorizada. Pero existen investigadores holgazanes y deshonestos, y personalmente he visto ejemplos de artículos que intentan salirse con la suya con afirmaciones descaradamente deshonestas de este tipo. Entonces, la opinión anterior representa mi mejor suposición de lo que está sucediendo en función de la información disponible. Por supuesto, OP debe tener mucho cuidado y asegurarse de tener confianza (y posiblemente consultar a un colega que pueda analizar la situación en detalle) sobre cualquier afirmación que haga acusando a los autores de deshonestidad o incompetencia.
@ORMapper Debo agregar que una prueba de cláusula if para ver si la entrada coincide con una entrada conocida con la que los investigadores "esperan" que se pruebe su código es una gran bandera roja en mi opinión. Es completamente análogo a lo que hizo la gente de Volkswagen en el reciente escándalo. También he leído en alguna parte acerca de ciertos fabricantes de chips que hacen esto para que sus chips parezcan funcionar bien en las pruebas comparativas, y probablemente encontré un comportamiento similar en muchos otros contextos. Por lo tanto, este comportamiento cae directamente en la categoría de "jugar con el sistema". Nuevamente, honestamente no puedo pensar en una explicación inocua.
Aquí hay información sobre hacer trampa en las pruebas de evaluación comparativa de chips: bgr.com/2013/11/27/samsung-benchmark-cheating-banned-htc
@DanRomik: Estoy de acuerdo en que es una señal de alerta, pero puedo pensar fácilmente en una explicación inocua. El tema de la investigación puede ser, por ejemplo, un algoritmo específico para procesar ciertos datos o extraer alguna información. Se podría requerir que la entrada para este algoritmo (aunque solo sea por razones de implementación simple) esté en un formato X personalizado específico. Para la gente de CS, podría ser obvio que los documentos de Excel se pueden convertir a ese formato, si alguien escribe un convertidor. Sin embargo, para las personas no técnicas, las conexiones de este tipo a menudo no son evidentes. No están satisfechos si...
... ven el prototipo abrir y procesar un archivo en formato X y se les dice que se puede escribir un convertidor para procesar documentos de Excel. Por lo general, no tienen ningún concepto de la complejidad (o la falta de ella) de una transformación entre datos de estructura equivalente. Por tonto que parezca, quieren ver cómo se selecciona y procesa un documento de Excel. En consecuencia, a menos que uno quiera dedicar tiempo a discusiones sobre temas irrelevantes, como formatos de archivo concretos, el prototipo se adaptará adecuadamente para una demostración cuyo objetivo real es mostrar el flujo de trabajo y el algoritmo central.
@ORMapper Pensé más sobre esto. Es un punto sutil y casi me tienes allí, pero no estoy de acuerdo con que esto sea "inocuo". Si entiendo correctamente, está diciendo que está bien afirmar deshonestamente que su código incluye un convertidor de Excel a formato X que funciona para satisfacer un requisito estúpido de un árbitro o editor, para que su trabajo sea aceptado. Bueno, en realidad, no. Un investigador honesto no mentiría de esa manera, ni siquiera para burlar a un árbitro tonto o incompetente. Una vez más, volvemos a mi punto de que la cláusula if es simplemente deshonesta. Así que: mantén la mente abierta, pero inténtalo de nuevo...
@DanRomik: Estoy diciendo que está bien describir un flujo de trabajo concreto en el que se podría usar una contribución, y que una demostración de este flujo de trabajo no requiere una aplicación completamente implementada. Puede continuar y afirmar que a la audiencia de la demostración se le debe decir explícitamente qué se implementa y qué no, pero creo que no está comprendiendo a su audiencia con eso. Para una audiencia sin el conocimiento previo adecuado, los comentarios sobre partes del sistema que son maquetas solo agregarán confusión y desdibujarán el mensaje real de la demostración. Y para que quede claro: yo estaba...
... no tanto pensando en los árbitros y en conseguir que se acepten los trabajos, sino en los representantes de las agencias de financiación (que a menudo solo tienen antecedentes financieros/administrativos y necesitan ser explicados y mostrados en los resultados de la investigación (desde la perspectiva del dominio) en términos sencillos ), u otras audiencias que no están tan interesadas en el "¿cómo funciona?", y más en el "¿qué hacen esos universitarios con nuestro dinero? ¿Sirve de alguna manera para el mundo real, incluso para personas que no tienen un doctorado en el dominio?"

La forma menos ofensiva de indicar que intentaste usar system-X (y no funcionó) es decir algo como

También intentamos procesar nuestros datos usando system-X [1023], pero no pudimos hacerlo con éxito debido a errores de tiempo de ejecución.

Eso evita atribuir culpabilidad alguna, al mismo tiempo que se reconoce la existencia del proyecto. Supongo que hay una gran posibilidad de que al menos uno de los científicos asociados con system-X sea un revisor de su artículo. Si el sistema no funciona, todavía han recibido una cita. Si hay una versión más nueva del software que funciona, puede obtener un comentario útil.

También puede intentar enviar un correo electrónico a los autores para ver si hay una forma de evitar el error o si hay una versión de software más reciente. Incluir el registro de excepciones como archivo adjunto y evitar mencionar haber mirado detrás de la cortina puede ser diplomático.

¿Necesita funcionar?

Sé que la pregunta es extraña, pero los investigadores no son ingenieros de software. Si el objetivo del proyecto es crear una pieza de software completamente funcional, entonces la baja calidad del software es preocupante. Por otro lado, si el objetivo del proyecto es idear nuevas formas de hacer las cosas, entonces este software es un prototipo, una prueba de concepto, como mencionaste, entonces trabajar en algunos casos es una hazaña notable.

Una vez que se realiza la prueba de concepto, los ingenieros de software pueden venir y convertir esto en un producto, que es un software completamente funcional. No hagas que los investigadores hagan el trabajo de ingenieros, son malos en eso :). A cada uno lo suyo.

Entender el contexto para entender los resultados..

No creo que esto aborde la pregunta de OP. No pregunta si necesita ser crítico con el software que está evaluando, sino cómo ser crítico sin ofender a nadie.
"No hagas que los investigadores hagan el trabajo de ingenieros, son malos en eso": la segunda parte de esta afirmación me parece falsa como regla general, e incluso un poco ofensiva (dado que al menos en CS aplicado, una parte significativa de las personas cambia a la industria como desarrolladores profesionales justo después de recibir su doctorado). Gran parte del código de investigación no es de baja calidad (cuando se compara con el código de productos comercializables) porque sus desarrolladores no puedan hacerlo mejor, sino porque las prioridades en el desarrollo son simplemente muy diferentes.
@ORMapper Escribir código es muy diferente a desarrollar un software completamente funcional. Y eso requiere experiencia y un conjunto de habilidades más amplio que solo una buena habilidad de programación. Puedes pasar de la academia a la industria y viceversa, por supuesto, pero no serás un senior en nada. Ambos problemas son más complicados que eso y necesitan experiencia. Más que eso, un software adecuado necesita documentación, casos de uso, etc. Para un investigador, eso sería una pérdida de tiempo colosal, mejor empleado escribiendo artículos...
@FábioDias: Muy bien, entonces quisiste decir algo así como "No hagas que los investigadores hagan el trabajo de los ingenieros, a veces no tienen experiencia en eso (similar a los ingenieros que comenzaron a trabajar hace solo uno o dos años)". Tal como está, primero leí su declaración más como "No haga que los investigadores hagan el trabajo de los ingenieros, son irremediablemente incompetentes en eso (similar a los cocineros o jardineros a quienes se les pide que desarrollen un software)", de ahí mi ligero desacuerdo.
@ORMapper, sí... Llamémoslo un intento desafortunado e incompetente de ser divertido :)
Personalmente, ORMapper, encuentro bastante ofensiva su réplica de que los investigadores son "como ingenieros que solo comenzaron a trabajar hace uno o dos años". Este tipo de pensamiento hace que la ingeniería de software parezca un tema menor y más trivial, cuando en realidad tiene muchas más partes móviles para considerar, como mencionó Fabio. Creo que si más investigadores reconocieran su incapacidad para escribir código utilizable, el mundo sería un lugar mejor, ¡y yo soy un investigador!