En el gobierno federal se ha desarrollado o contratado el desarrollo de aplicaciones bajo estándares que han creado dependencias tecnológicas y económicas insostenibles. Es por ello que los presentes estándares se basan en software libre, alineando los desarrollos con estándares adoptados ampliamente en la industria; en este sentido, los objetivos que se pretenden alcanzar son:
Que el desarrollo de software en el ámbito de gobierno sea ágil.
Que los desarrollos sean aprovechados en todos los niveles de gobierno y que la portabilidad entre dependencias sea tersa.
Que los aplicativos sean modulares, de tal manera que, adaptar o incluso reemplazar partes de la funcionalidad, sea fácil.
Que los requerimientos de hardware sean lo más livianos posibles.
Que los aplicativos sean desarrollados con un enfoque en la interoperabilidad e intercambio de información entre Dependencias y Entidades para facilitar tanto la comunicación entre procesos, como la recolección de la misma a fin de generar reportes y efectuar análisis de datos para la toma de decisiones de alto nivel.
¶ Consideraciones generales |
|
---|---|
Se recomienda el uso de las siguientes tecnologías al realizar el diseño de las arquitecturas tecnológicas para el desarrollo de sistemas de información y aplicaciones. | |
CATEGORÍA | DESCRIPCIÓN |
Servidores WEB |
Nginx Apache |
Manejadores de bases de datos |
PostgreSQL MariaDB LMDB |
Lenguajes de programación |
Python Go1 Rust Perl Ruby Lua Objective C (Mac OS X) Swift Kotlin JavaScript2 tanto en el backend, con node.js, como en el frontend Scala. PHP |
Control de versiones. Para cualquier desarrollo se recomienda que se utilice un control de versiones, preferentemente en un repositorio Git. |
Git Mercurial Apache Subversion.
|
Uso de frameworks | Para agilizar el desarrollo se podrá utilizar un Framework WEB siempre y cuando se utilicen los lenguajes señalados y manejadores de bases de datos que se indican en la sección de Patrones de arquitecturas. |
Documentación |
El desarrollo de los sistemas deberá ir acompañado de la documentación indispensable que mantenga y enlace el diseño, la codificación y la calidad del software. Se deberán tener manuales de usuario, tanto para los usuarios finales, como para los administradores de sistemas. En caso de tener API que sean expuestas para ser consumidas por otros sistemas, se deberá contar con la documentación para hacer el consumo de manera correcta y segura. |
En los casos de Oracle, WebLogic, JMS y Java, se recomienda usarlos sólo cuando realmente se justifique o migrarlo, en caso de que no se justifique una reescritura, de la siguiente manera: De Oracle a PostgreSQL De WebLogic a Wildfly o Payara De JMS a Apache ActiveMQ o Apache ActiveMQ Artemis o Apache Qpid, y utilizar OpenJDK con OpenJ9. |
|
Independientemente del lenguaje de programación que se utilice, es indispensable que las Dependencias y Entidades incorporen buenas prácticas en los procesos de desarrollo de software con la finalidad de producir software de calidad, seguro y fiable; adicionalmente y de manera periódica, deberán incorporar la última versión y los parches de seguridad de los lenguajes de programación, frameworks, sistemas operativos, aplicativos y manejadores de bases de datos para garantizar mayor seguridad en su operación. |
Con la finalidad de establecer un marco de trabajo, se indica a continuación diversos modelos de arquitectura de software, como referencia para diseñar las aplicaciones típicas que se desarrollan y requieren en la Administración Pública Federal.
Es importante hacer notar que la naturaleza de un patrón de diseño es independiente de cualquier lenguaje de programación, no obstante lo anterior, se considera pertinente indicar, por cada patrón de diseño, una propuesta de los lenguajes de programación y otras herramientas que se sugiere emplear atendiendo a sus características, desempeño, aplicación y que muestran mejor adaptabilidad a cierto patrón de desarrollo.
Las Instituciones deberán evaluar las características de los lenguajes de programación y seleccionar los más apropiados para el patrón de desarrollo que sea conveniente implementar privilegiando que dicha elección contemple los estándares de desarrollo de software descritos en el presente documento y evitar la incorporación de una tecnología privativa.
1 También conocido como Golang.
2 También conocido como ECMASript.