¿Qué errores cometen sus usuarios y cómo puede actualizar su aplicación para manejarlos? [cerrado]

12

De hecho, esta pregunta trata sobre las precauciones que deben tomarse para mejorar la experiencia del usuario de calidad y reducir las llamadas de soporte evitables.

Maniero
fuente
2
Considere este título: "¿Qué errores cometen sus usuarios y cómo puede actualizar su aplicación para manejarlos?"
Peter Boughton

Respuestas:

25

La falta de una validación de entrada adecuada es una de esas cosas que tiende a llevar rápidamente a los usuarios a hacer cosas "malas" con su aplicación, cuando realmente debería ser manejada por el programador.

He visto aplicaciones heredadas donde los usuarios han sido capacitados para:

  • no ingresar apóstrofes en los nombres
  • no ingrese ningún símbolo que no sea a-z0-9,
  • asegúrese de que no haya espacios antes o después del texto que ingresaron
  • verifique que se ingrese una dirección de correo electrónico con el formato correcto en el emailcampo, de lo contrario, los correos posteriores a ese usuario usarán lo que esté en el campo y fallarán
  • asegúrese de que " http://" se coloca antes de las direcciones web

etcétera etcétera

Todos los problemas anteriores son los que deben ser manejados por un desarrollador de aplicaciones. Cuando su validación de entrada es esencialmente "asegúrese de que el usuario sepa en qué formato debe estar este campo y confíe en que lo que ha ingresado es correcto", entonces cosas inesperadas seguramente encontrarán su camino hacia la aplicación. Además de las obvias implicaciones de seguridad, los usuarios cometen errores. Como programadores, a menudo producimos nuestros mejores productos inclinándonos hacia atrás para asegurarnos de que el usuario no pueda equivocarse, ¡sin importar cuánto lo intenten!

ConroyP
fuente
Esto a menudo se pasa por alto ... ¡No puedo creer que todavía nos encontremos con estos problemas hoy! @
mpeterson
2
+1 porque lo he visto. PERO: una "dirección de correo electrónico formateada correctamente" es notoriamente difícil de validar fightingforalostcause.net/misc/2006/compare-email-regex.php asegúrese de saber lo que está haciendo. Si solo está tratando con el subconjunto de correos electrónicos que su empresa usa internamente, eso debería estar bien, de lo contrario, hay más complejidad de lo que la mayoría espera. Misma historia para el http://punto de validación. Como ejemplo, ASDFhace esto de una manera ingenua, y el resultado es que no puede alojar paquetes en dominios que usan https://.
Inaimathi el
Eso no funciona ... no acepta correos electrónicos con rutas explosivas (sí, sé a quién le importa, pero aún así, validar los correos electrónicos al RFC es difícil).
Spudd86
7

Una vez recibí una llamada de atención al cliente porque mi aplicación simplemente desapareció. Resultó que abrieron otra aplicación encima.

... Decidí no asegurarme de que no volviera a ocurrir, ya que fueron los analfabetos informáticos de los usuarios los que causaron el problema, no la aplicación. Cualquier cosa que podría haber hecho para solucionarlo habría llevado a una mala experiencia de usuario para los demás.

John MacIntyre
fuente
1
Envíe esta publicación a todos los desarrolladores que implementen una funcionalidad forzada de "mantenerse en la cima" en su aplicación. Incluso si el CEO lo solicita, deberíamos tener el derecho de decir "no".
7

Casi todos los programas que escribo se invocan estrictamente desde la línea de comandos. También he escrito algunas cosas más sofisticadas que comenzaron como interfaces CLI y rápidamente se convirtieron en algo más parecido a un shell que a cualquier otra cosa.

Entonces, solo puedo hablar por lo que sé. Aquí hay algunos problemas comunes con los programas de línea de comandos:

Demasiadas opciones

A menos que esté escribiendo un compilador o un editor de línea, intente mantener las opciones limitadas a una pantalla llena en un búfer de cuadros de 80x25 cuando --helpo /?se pasa. Está perfectamente bien tener más opciones que eso, pero dividirlas en subcategorías. Por ejemplo

foo --help

foo --help option_name

No hay opciones largas

Es mucho más fácil recordar foo --attach_to [argument] --volatile --verboseque recordar foo -a [arg] -v +V. Esto no siempre es posible, pero en la mayoría de los casos, lo es.

Sin validación de entrada

Casi todas las plataformas tienen múltiples bibliotecas que se prueban, prueban y son verdaderas cuando se trata de analizar y validar argumentos. Casi todas las plataformas tienen un lexer probado, probado y verdadero que valida la entrada de una CLI. Use uno, el otro o ambos. Si su programa se divide por defecto o se divide por cero debido a algo que proporcionó un usuario, eso es vergonzoso.

Es posible que no necesite algo tan complejo como un lexer, tal vez solo pueda tokenizar la cadena si espera cosas en un cierto orden con ciertas cosas en ciertos lugares.

De hecho, recibí un informe de error una vez donde se esperaba un número entero y alguien escribía f*** my lifeentre comillas. No escribí ese programa, tuve la desgracia de heredarlo.

No hay perilla 'verbocity'

Permita que los usuarios experimentados descubran fácilmente cómo sacar mucho más ruido de su programa de lo que la mayoría de la gente toleraría, pero por defecto solo imprime cosas serias y críticas. No puedo decirte cuántas veces tuve que disparar stracesolo para darme cuenta de que algo falló porque funcionaba en una secuencia de archivos NULL.

También puede ajustar las aserciones para que desactivarlas a través de NDEBUG u otros medios aún resulte en algo impreso o registrado para que el usuario lo encuentre.

Hablando de archivos de registro, trate de asegurarse de que todo lo que coloque en ellos tenga sentido (al menos un poco) para alguien que no sea usted. Si el comienzo de cada entrada es una fecha de época UNIX, agravará la frustración de alguien que realmente quiera ayudarlo a reproducir el error.

Sin 'compañero de error' en modo de depuración

Muchos programas ofrecen algún tipo de interruptor de 'depuración' que ofrece una charla adicional sobre lo que está sucediendo con el programa, pero muy pocos ofrecen lo siguiente:

  • Una forma de enviar automáticamente un informe a través de HTTP / HTTPS y obtener algún tipo de número de referencia de servicio
  • Una forma de volcar información útil en un archivo que podría enviarse como un archivo adjunto a una solicitud de soporte

O tal vez le guste escuchar a las personas leer lo siguiente por teléfono:

Dice condición inesperada a cero ef oh cuatro cero oh ... OK, déjame leerte eso ...

Archivos de configuración demasiado complejos.

No justifique la necesidad de analizar una configuración como una excusa para obtener un montón de azúcar sintáctica. Intente utilizar un formato que la gente realmente conozca, incluso si eso significa trabajo adicional al analizar. Intento usar el formato de estilo INI siempre que sea posible. Te sorprendería lo que puedes lograr con un simple diccionario clave-> valor.

No hay archivos de configuración

No haga que las personas escriban scripts de shell o archivos por lotes solo para usar su programa, a menos que esté destinado a ser una herramienta para cualquiera de las tareas. Dame un medio para señalar un archivo que contenga mis opciones habituales y proporciona solo algunos argumentos adicionales.

No hay signos de 'piso mojado'

Si alguna característica podría causarle problemas al usuario (tal vez esté allí para usuarios avanzados), márquela claramente como tal. Además, si alguien ingresa u olvida algo, haga que el programa imprima un enlace muy amigable a la documentación en línea. Puede estar tratando con alguien que está usando su programa a través de KVM y no puede cortar y pegar.

Cuando sea posible, (esto coincide con la validación de entrada) use el apporach de Google:

¿Querías decir foo --bar FILENME, solo escribiste foo --bar

Ofrecer una salida de instrucciones destructivas

El objetivo es decirle al usuario por qué no funcionó y hacer que lo intente un par de veces más, mientras se asegura de que no haga nada potencialmente destructivo a menos que parezca que el usuario realmente quiere que lo haga. Permita un interruptor que apague "fastidiar", por ejemplo, -Yo de lo /Ycontrario permita una salida para alguien que simplemente tiene "dedos gordos".

Probablemente estoy olvidando algunos consejos. Trato esto con frecuencia, ya que es muy, muy difícil hacer que la interfaz de 'bajo nivel' sea algo lo suficientemente intuitiva para que la mayoría de las personas eviten cometer errores.

Tim Post
fuente
3

"¿Está seguro de que desea eliminar este archivo / registro? Sí / No". Hice clic en Sí y luego recibí una llamada que "por error" hizo clic en el botón rojo Eliminar y necesita esos datos de nuevo :)

Quamis
fuente
77
Por qué las "citas". ¿Estás sugiriendo que deliberadamente hicieron clic en sí, solo para poder llamarte por teléfono?
Peter Boughton
1
Se resuelve fácilmente mediante el uso de "eliminaciones suaves" que se pueden deshacer.
Robert Harvey
1
sí, se pueden deshacer, pero ¿por qué eliminarlo en primer lugar? Es por eso que puse esa advertencia allí, pidiéndoles que confirmen dos veces que quieren eliminarla :)
Quamis
2
@Quamis: los cuadros de diálogo se han vuelto tan molestos para muchos usuarios que simplemente hacen clic en Aceptar, Sí, lo que sea, solo para pasar por el cuadro de diálogo. Es por eso que muchos sistemas nuevos usan una eliminación suave sin confirmación, y le dan al usuario una forma de deshacer. La mayoría de los sistemas de correo ahora funcionan de esta manera, por ejemplo.
Robert Harvey
1
@Robert Harvey - Entiendo, y sí, esa es la razón específica por la que se tuvo que implementar una eliminación completa. Este ejemplo específico podría resolverse mediante el seguimiento de las políticas de retención, pero probablemente haya casos en los que las personas presionen "Eliminar" correctamente esperando que la consecuencia de esa operación sea una verdadera eliminación. Estoy a favor de la ruta de borrado suave, pero mi punto es que a veces no es una opción.
Inaimathi el
3

No creo que obtener ejemplos específicos de descanso / arreglo sea tan importante como darse cuenta de esto:

  • Los usuarios no leen su manual ni miran sus tutoriales. Aprenden su software a través de la exploración.

Si a través de esa exploración rompen algo, como programador es su trabajo advertirles del peligro o evitar que ocurra en primer lugar. No recuerdo dónde lo vi ahora, pero en el fondo de mi mente siempre trato de " hacer que hacer lo correcto sea fácil " para el usuario de mi software.

Si insiste en ejemplos:

  • El usuario pudo ingresar un nombre en minúscula que rompió el código de integración / fijo al realizar la validación de entrada
  • El usuario pudo hacer clic en el botón incorrecto después de realizar una acción / reparado mostrando solo los botones correctos.
  • El usuario pudo hacer X accidentalmente / reparado advirtiéndoles que están a punto de hacer X.

¿Ves a dónde va esto? :)

mpeterson
fuente
2
Las advertencias deben reservarse solo para las operaciones más destructivas, y debe evitar tener cualquiera de ellas, deshacer es MUCHO MUCHO MUCHO mejor, la gente ahora ha sido entrenada para hacer clic en 'Aceptar' sin siquiera leer el cuadro, ahora es memoria muscular, evite para cualquier operación que el usuario pueda hacer de forma regular para evitar este efecto.
Spudd86
3

Aquí hay uno que escuché esta semana. Un usuario solicita una función "enviarme una notificación cuando ocurra un evento". Bastante simple y el desarrollador sigue adelante y lo implementa. Claro, la primera pregunta debería haber sido "¿qué están tratando de abordar con esta notificación?". No voy a entrar en eso. Pocos días después, el usuario pasa por el desarrollador y pregunta "Recibí esta notificación. ¿Qué se supone que debo hacer con ella?".

Recordé este cómic de Dilbert y le sugerí al desarrollador "escribir una aplicación para averiguar qué debe hacer el usuario con esa notificación".

Como dijo mpeterson, el usuario es muy competitivo en su área de especialización. Simplemente no piensan como un desarrollador o diseñador de software.

James
fuente
2

No creo que los usuarios sean estúpidos. No quieren usar tu o ningún programa en absoluto. Todo lo que quieren es hacer sus cosas. Ayúdelos y evite que les ocurra daño en el camino.

LennyProgrammers
fuente
1
No entiendes la pregunta. Repites lo que escribí en otras palabras. Esta no es una respuesta a la pregunta. ¿Qué prácticas podemos hacer para evitar daños?
Maniero
1
Entiendo bien la pregunta, gracias. La pregunta incluye algo que no es cierto: "el usuario es estúpido".
LennyProgrammers
1
No, no lo ha hecho. Es tu incomprendido. ¡Tu cotización no existe!
Maniero
1
Ok, la gente no hace cosas estúpidas, el mundo es perfecto :-) Esta es mi inferencia sobre estas opiniones.
Maniero
1
Sin resentimientos, ¿de acuerdo? ;)
LennyProgrammers
1

Tener una buena interfaz de usuario y proporcionar una experiencia de aprendizaje adecuada contribuye en gran medida a evitar que los usuarios hagan cosas malas.

  • Las buenas interfaces de usuario deben ser sin fricción.

    En lugar de abrir un cuadro de diálogo (una operación costosa y que los usuarios ignoran después de un tiempo) para confirmar una eliminación, realizar la eliminación y ofrecer una forma de deshacer.

  • Las buenas interfaces de usuario deben ser reconocibles.

    Aunque la cinta en Microsoft Office recibe muchas críticas porque obliga a los antiguos usuarios de Word a cambiar sus formas, la cinta es un ejemplo brillante de cómo puede hacer que una interfaz sea reconocible (es decir, fácil de descubrir).

  • Las buenas interfaces de usuario, como un buen código, deberían explicarse por sí mismas.

    Nadie lee el manual. El único manual que hice que mis usuarios leyeran fue una presentación de PowerPoint que contenía tutoriales paso a paso del software. He visto esto hecho con herramientas de video como Camtasia, pero los PowerPoints son mejores porque puedes voltear fácilmente hacia adelante y hacia atrás a través de los pasos.

Robert Harvey
fuente
-1

El usuario no comete errores. Los errores recaen en el programador que no pudo crear una interfaz utilizable.

¡Haz las pruebas de usabilidad con cada lanzamiento!

Arcturus
fuente
2
Cuando vivía con mis padres, mi padre me preguntó por qué se desconectaba de Internet cada vez que revisaba su correo electrónico (sí, esto era en la Edad de Piedra cuando habíamos marcado, soy así de viejo ). Le pedí que me mostrara, ¿adivina lo que vi? Cuando apareció el cuadro de diálogo Enviar y recibir de Outlook Express, se marcó la opción de desconectarse después de enviar y recibir. Creo que todo está en el usuario ...
JohnL
3
Realmente no John ... Si los programadores de perspectivas hubieran pensado esto, no habrían colocado ese CheckBox allí ni le habrían dado una etiqueta más significativa. Tu padre no es un idiota: esta característica no fue pensada o pasó por pruebas de usabilidad. ¡El software no está aquí para hacernos sentir estúpidos! :)
Arcturus
1
-1: Los usuarios hacen errores maquillaje, aunque pudieran ser evitados con cosas como mejor etiquetado. El punto es que esta pregunta es sobre cuestiones específicas que tienen soluciones específicas. Simplemente decir "probarlo" es simplemente una mala respuesta.
Maxpm