stringtranslate.com

Código difícil

La codificación rígida (también codificación fija o codificación fija ) es la práctica de desarrollo de software de incrustar datos directamente en el código fuente de un programa u otro objeto ejecutable, en lugar de obtener los datos de fuentes externas o generarlos en tiempo de ejecución .

Por lo general, los datos codificados solo se pueden modificar editando el código fuente y recompilando el ejecutable, aunque se pueden cambiar en la memoria o en el disco usando un depurador o un editor hexadecimal .

Los datos codificados son más adecuados para piezas de información que no cambian, como constantes físicas , números de versión y elementos de texto estáticos.

Los datos codificados por software, por otro lado, codifican información arbitraria a través de la entrada del usuario , archivos de texto , archivos INI , respuestas del servidor HTTP, archivos de configuración, macros de preprocesador, constantes externas, bases de datos, argumentos de línea de comandos y se determinan en tiempo de ejecución.

Descripción general

La codificación rígida requiere que el código fuente del programa se cambie cada vez que cambian los datos de entrada o el formato deseado, cuando podría ser más conveniente para el usuario final cambiar los detalles por algún medio fuera del programa. [1]

A menudo se requiere codificación rígida, pero también se puede considerar un antipatrón . [2] Es posible que los programadores no tengan una solución de interfaz de usuario dinámica para el usuario final, pero aun así deben ofrecer la función o lanzar el programa. Esto suele ser temporal pero resuelve, a corto plazo, la presión para entregar el código. Posteriormente, se realiza codificación suave para permitir que un usuario pase parámetros que le brinden al usuario final una forma de modificar los resultados.

El término "codificado" se utilizó inicialmente como una analogía con los circuitos cableados, y pretendía transmitir la inflexibilidad que resulta de su uso en el diseño e implementación de software. En el contexto de entornos de desarrollo colaborativo extensibles en tiempo de ejecución , como los MUD , la codificación rígida también se refiere al desarrollo del motor central del sistema responsable de las tareas de bajo nivel y la ejecución de scripts , a diferencia de la codificación suave, que consiste en desarrollar los scripts de alto nivel que se ejecutan. interpretado por el sistema en tiempo de ejecución , con valores de fuentes externas, como archivos de texto , archivos INI , macros de preprocesador , constantes externas, bases de datos , argumentos de línea de comandos , respuestas del servidor HTTP , archivos de configuración y entradas del usuario . En este caso, el término no es peyorativo y se refiere al desarrollo general, en lugar de incorporar específicamente datos de resultados.

Codificación y puertas traseras

La codificación de credenciales es una forma popular de crear una puerta trasera . Las credenciales codificadas generalmente no son visibles en los archivos de configuración ni en la salida de los comandos de enumeración de cuentas y los usuarios no pueden cambiarlas ni omitirlas fácilmente. Si se descubre, un usuario podría desactivar dicha puerta trasera modificando y reconstruyendo el programa a partir de su código fuente ( si el código fuente está disponible públicamente ), descompilando o aplicando ingeniería inversa al software , editando directamente el código binario del programa o instituyendo un sistema de integridad. Verificación (como firmas digitales, anti-manipulación y anti-trampas ) para evitar el acceso inesperado, pero tales acciones a menudo están prohibidas por un acuerdo de licencia de usuario final .

Codificación y DRM

Como medida de gestión de derechos digitales , los desarrolladores de software pueden codificar un número de serie único directamente en un programa. O es común codificar una clave pública , creando el DRM para el cual es inviable crear un keygen.

En el caso opuesto, un cracker de software puede codificar un número de serie válido para el programa o incluso evitar que el ejecutable lo solicite al usuario, permitiendo que se redistribuyan copias no autorizadas sin la necesidad de ingresar un número válido, compartiendo así el mismo. clave para cada copia, si una ha sido codificada.

Ruta de instalación fija

Si un programa de Windows está programado para asumir que siempre está instalado en C:\Program Files\Appname y alguien intenta instalarlo en una unidad diferente por razones organizativas o de espacio, es posible que no se instale o no se ejecute después de la instalación. Es posible que este problema no se identifique en el proceso de prueba, ya que el usuario promedio instala en la unidad y el directorio predeterminados y es posible que las pruebas no incluyan la opción de cambiar el directorio de instalación. Sin embargo, es recomendable que los programadores y desarrolladores no arreglen la ruta de instalación de un programa, ya que la ruta de instalación predeterminada depende del sistema operativo, la versión del sistema operativo y las decisiones del administrador del sistema . Por ejemplo, muchas instalaciones de Microsoft Windows utilizan la unidad C: como disco duro principal , pero esto no está garantizado.

Hubo un problema similar con los microprocesadores de las primeras computadoras, que iniciaban la ejecución en una dirección fija en la memoria.

Disco de inicio

Algunos programas " protegidos contra copia " buscan un archivo particular en un disquete o unidad flash al iniciarse para verificar que no sean copias no autorizadas. Si se reemplaza la computadora por una máquina más nueva, que no tiene una unidad de disquete, el programa que ahora la requiere no se podrá ejecutar porque no se puede insertar el disquete.

Este último ejemplo muestra por qué la codificación rígida puede resultar poco práctica incluso cuando en ese momento parece que funcionaría completamente. En las décadas de 1980 y 1990, la gran mayoría de las PC estaban equipadas con al menos una unidad de disquete, pero las unidades de disquete dejaron de utilizarse posteriormente. Un programa codificado de esa manera hace 15 años podría enfrentar problemas si no se actualiza.

carpetas especiales

Algunos sistemas operativos Windows tienen las llamadas Carpetas Especiales que organizan los archivos de forma lógica en el disco duro. Hay problemas que pueden surgir relacionados con la codificación rígida:

Ruta del perfil

Algunos programas de Windows codifican la ruta del perfil en ubicaciones definidas por el desarrollador, como . Esta es la ruta para la gran mayoría de Windows 2000 o superior, pero provocaría un error si el perfil se almacena en una red o se reubica de otro modo. La forma correcta de obtenerlo es llamar a la función o resolver la variable de entorno. Otra suposición que suelen hacer los desarrolladores es suponer que el perfil está ubicado en un disco duro local.C:\Documents and Settings\UsernameGetUserProfileDirectory%userprofile%

Ruta de la carpeta Mis documentos

Algunos programas de Windows codifican la ruta My Documentscomo ProfilePath\My Documents. Estos programas funcionarían en máquinas que ejecutan la versión en inglés, pero en versiones localizadas de Windows esta carpeta normalmente tiene un nombre diferente. Por ejemplo, en las versiones italianas la My Documentscarpeta se llama Documenti . My DocumentsTambién es posible que se haya reubicado utilizando la redirección de carpetas en la política de grupo en Windows 2000 o superior. La forma correcta de obtenerlo es llamar a la SHGetFolderPathfunción.

Solución

Una referencia indirecta, como una variable dentro del programa llamada "Nombre de archivo", podría expandirse accediendo a una ventana de diálogo "buscar archivo", y no sería necesario cambiar el código del programa si el archivo se moviera.

La codificación rígida es especialmente problemática a la hora de preparar el software para su traducción a otros idiomas.

En muchos casos, un único valor codificado, como el tamaño de una matriz, puede aparecer varias veces dentro del código fuente de un programa. Este sería un número mágico . Esto comúnmente puede causar un error en el programa si se modifican algunas de las apariencias del valor, pero no todas. Un error de este tipo es difícil de encontrar y puede permanecer en el programa durante mucho tiempo. Puede ocurrir un problema similar si se usa el mismo valor codificado para más de un valor de parámetro, por ejemplo, una matriz de 6 elementos y una longitud mínima de cadena de entrada de 6. Un programador puede cambiar por error todas las instancias del valor (a menudo usando un función de búsqueda y reemplazo del editor) sin verificar el código para ver cómo se usa cada instancia. Ambas situaciones se evitan definiendo constantes , que asocian nombres con los valores, y utilizando los nombres de las constantes para cada aparición dentro del código.

Un caso importante de codificación rígida es cuando las cadenas se colocan directamente en el archivo, lo que obliga a los traductores a editar el código fuente para traducir un programa. (Existe una herramienta llamada gettextque permite dejar cadenas en los archivos, pero permite a los traductores traducirlas sin cambiar el código fuente; efectivamente descodifica las cadenas).

Codificación dura en competiciones

En competiciones de informática como la Olimpiada Internacional de Informática , los concursantes deben escribir un programa con un patrón de entrada y salida específico de acuerdo con los requisitos de las preguntas.

En casos excepcionales en los que el número posible de entradas sea lo suficientemente pequeño, un concursante podría considerar utilizar un enfoque que asigne todas las entradas posibles a sus salidas correctas. Este programa se consideraría una solución codificada en lugar de algorítmica (aunque el programa codificado podría ser el resultado de un programa algorítmico).

Codificación suave

Softcoding es un término de codificación informática que se refiere a la obtención de un valor o función de algún recurso externo, como archivos de texto , archivos INI , macros de preprocesador , constantes externas, archivos de configuración , argumentos de línea de comandos , bases de datos, entradas del usuario, respuestas del servidor HTTP. Es lo opuesto a hardcoding , que se refiere a codificar valores y funciones en el código fuente.

Práctica de programación

Evitar la codificación estricta de valores comúnmente alterados es una buena práctica de programación. Los usuarios del software deberían poder personalizarlo según sus necesidades, dentro de lo razonable, sin tener que editar el código fuente del programa. De manera similar, los programadores cuidadosos evitan los números mágicos en su código para mejorar su legibilidad y ayudar en el mantenimiento. Por lo general, estas prácticas no se denominan codificación suave .

El término se utiliza generalmente cuando la codificación suave se convierte en un antipatrón . Abstraer demasiados valores y características puede introducir más complejidad y problemas de mantenimiento que los que se experimentarían al cambiar el código cuando sea necesario. La codificación suave, en este sentido, apareció en un artículo en The Daily WTF . [3]

Problemas potenciales

En el extremo, los programas con codificación suave desarrollan sus propios lenguajes de programación mal diseñados e implementados, y archivos de configuración que requieren habilidades de programación avanzadas para editarlos. Esto puede conducir a la producción de utilidades para ayudar a configurar el programa original, y estas utilidades a menudo terminan siendo ellas mismas "codificadas en software".

El límite entre la configurabilidad adecuada y la codificación suave problemática cambia con el estilo y la naturaleza de un programa. Los programas de código cerrado deben ser muy configurables, ya que el usuario final no tiene acceso al código fuente para realizar cambios. El software interno y el software con distribución limitada pueden ser menos configurables, ya que distribuir copias alteradas es más sencillo. Las aplicaciones web personalizadas suelen ser mejores con una capacidad de configuración limitada, ya que alterar los scripts rara vez es más difícil que alterar un archivo de configuración.

Para evitar la codificación suave, considere el valor para el usuario final de cualquier flexibilidad adicional que brinde y compárelo con la mayor complejidad y los costos de mantenimiento continuo relacionados que implica la capacidad de configuración adicional.

Lograr flexibilidad

Existen varios patrones de diseño legítimos para lograr la flexibilidad que la codificación suave intenta proporcionar. Una aplicación que requiera más flexibilidad de la apropiada para un archivo de configuración puede beneficiarse de la incorporación de un lenguaje de secuencias de comandos . En muchos casos, el diseño apropiado es un lenguaje de dominio específico integrado en un lenguaje de programación establecido. Otro enfoque es trasladar la mayor parte de la funcionalidad de una aplicación a una biblioteca, proporcionando una API para escribir aplicaciones relacionadas rápidamente.

Ver también

Referencias

  1. ^ Elfriede Dustin (2002). Pruebas de software eficaces: 50 formas específicas de mejorar sus pruebas. Profesional de Addison-Wesley. págs.188–. ISBN 978-0-201-79429-8.
  2. ^ Tanya Janca (14 de octubre de 2020). Alice y Bob aprenden seguridad de aplicaciones. Wiley. págs.15–. ISBN 978-1-119-68740-5.
  3. ^ Codificación suave de The Daily WTF