³Desarrollo de un sistema ERP en la nube y encriptación de ...
Transcript of ³Desarrollo de un sistema ERP en la nube y encriptación de ...
UNIVERSIDAD POLITÉCNICA DE SINALOA
PROGRAMA ACADÉMICO DE INGENIERÍA EN INFORMÁTICA
Tesina
“Desarrollo de un sistema ERP en la nube y encriptación de sus datos para empresas
tecnológicas”
Autor:
Conrado Antonio Carrillo Rosales
Asesor:
M.S.I Rosa Karina González Trigueros
Asesor OR:
Ing. Ramón Israel Sánchez Cevallos
Mazatlán, Sinaloa 15 de Diciembre de 2016
1
2
3
4
5
Agradecimientos
Quiero agradecer a mis padres por haberme apoyado en todo
momento a lo largo de mi camino hasta el día de hoy, siendo ellos la razón de
querer ser alguien en la vida que sea capaz de desarrollar y llevar a cabo proyectos
personales de manera autónoma, a mis profesores que me ayudaron a resolver
cada una de mis dudas y por fomentarme una buena educación profesional.
También deseo agradecer a aquellas personas que perdí a lo largo de
mi camino como estudiante, ya que fueron por mucho tiempo mi motivo para querer
superarlos día con día y que hoy, aunque ya no estén más a mi lado, siguen
queriéndome hacer alguien competitivo.
6
Índice de contenido
Índice de figuras .......................................................................................................... 9
Índice de tablas ......................................................................................................... 11
Resumen ................................................................................................................... 12
Abstract ..................................................................................................................... 13
Introducción ............................................................................................................... 14
Capítulo I ................................................................................................................... 15
1.1 Planteamiento del problema ................................................................................ 16
1.2 Hipótesis .............................................................................................................. 17
1.3 Objetivos ............................................................................................................. 17
1.3.1 General ......................................................................................................... 17
1.3.2 Particulares ................................................................................................... 17
1.4 Importancia y/o Justificación del estudio ............................................................. 18
1.5 Limitaciones del estudio ...................................................................................... 19
1.6 Preguntas de investigación ................................................................................. 19
Capítulo II .................................................................................................................. 20
2.1 Introducción ......................................................................................................... 21
2.2 Descripción y análisis de investigaciones relacionadas ...................................... 22
2.2.1 Servidores y sitios web ................................................................................. 26
2.2.2 Bases de datos ............................................................................................. 27
2.2.3 MySQL .......................................................................................................... 28
2.2.4 Oracle Database ........................................................................................... 30
2.2.5 Encriptación de datos .................................................................................... 32
2.2.6 MD5 (Message-Digest Algorithm 5) .............................................................. 32
7
2.2.7 DES (Data Encryption Standard): ................................................................. 33
2.2.8 FrontEnd: ...................................................................................................... 34
2.2.9 HTML: ........................................................................................................... 34
2.2.10 CSS: ............................................................................................................ 35
2.2.11 JavaScript: .................................................................................................. 36
2.2.12 BackEnd ...................................................................................................... 37
2.2.13 PHP: ............................................................................................................ 38
2.2.14 Git ............................................................................................................... 41
2.2.15 Estándar de programación. ......................................................................... 42
2.2.16 Estándar de programación PSR-2 .............................................................. 42
2.2.17 Documentación ........................................................................................... 44
2.2.18 Diagramas de flujo: ..................................................................................... 44
2.2.19 Diccionario de datos: ................................................................................... 45
2.2.20 Modelado de datos: ..................................................................................... 46
Capítulo III ................................................................................................................. 48
3.1 Introducción ......................................................................................................... 49
3.2 Herramientas ....................................................................................................... 50
3.2.1 Materialize (Framework CSS): ...................................................................... 50
3.2.2 Laravel (Framework de PHP): ....................................................................... 51
3.2.3 jQuery (Librería de JavaScript): .................................................................... 52
3.2.4 Sublime Text ................................................................................................. 53
3.2.5 SQLyog ......................................................................................................... 54
3.2.6 Hostinger ....................................................................................................... 55
3.2.7FileZilla ........................................................................................................... 56
3.3 Procedimiento ..................................................................................................... 57
8
3.3.1 Subida de archivos al servidor por medio de FTP (FileZilla) ......................... 57
3.3.2 Validación de formularios .............................................................................. 58
3.3.3 Encriptamiento de datos ............................................................................... 61
3.3.4 Respaldo de proyectos con git ...................................................................... 66
Capítulo IV................................................................................................................. 73
4.1 Introducción ......................................................................................................... 74
4.2 Análisis de Datos ................................................................................................. 75
4.2.1 Capacitaciones .............................................................................................. 77
4.2.2 Futuras modificaciones ................................................................................. 77
4.2.3 Respaldo de base de datos .......................................................................... 78
Capítulo V.................................................................................................................. 79
5.1 Conclusiones ....................................................................................................... 80
5.2 Recomendaciones y/o sugerencias ..................................................................... 81
Definición de términos ............................................................................................... 82
Referencias Bibliográficas ......................................................................................... 84
9
Índice de figuras
FIGURA 1 VISTA BÁSICA DE UN SISTEMA “BOM” .............................................................. 22
FIGURA 2 REGISTRO DE MATERIALES EN UN SISTEMA “IMC” ............................................ 23
FIGURA 3 VISTA PARA GESTIONAR LOS MATERIALES DE UN SISTEMA “MRP” ...................... 24
FIGURA 4 LOGO DEL PAQUETE MICROSOFT OFFICE ........................................................ 25
FIGURA 5 DIAGRAMA BÁSICO DE LA RELACIÓN CLIENTE SERVIDOR .................................... 26
FIGURA 6 LOGO DEL SISTEMA GESTOR DE BASE DE DATOS MYSQL .................................. 28
FIGURA 7 LOGO DEL SISTEMA GESTOR DE BASE DE DATOS ORACLE DATABASE ................. 30
FIGURA 8 LOGO DE HTML5 .......................................................................................... 34
FIGURA 9 LOGO DE CSS3 ............................................................................................ 35
FIGURA 10 LOGO NO OFICIAL DE JAVASCRIPT ................................................................ 36
FIGURA 11 LOGO DE PHP ............................................................................................ 38
FIGURA 12 LOGO DE GIT .............................................................................................. 41
FIGURA 13 EJEMPLO DE CÓDIGO BAJO EL ESTÁNDAR PSR-2 ........................................... 43
FIGURA 14 EJEMPLO DE UN DIAGRAMA DE FLUJO ............................................................ 44
FIGURA 15 EJEMPLO DE UN DICCIONARIO DE DATOS. ...................................................... 45
FIGURA 16 EJEMPLO DE UN MODELADO DE DATOS .......................................................... 46
FIGURA 17 LOGO DE CSS3 .......................................................................................... 50
FIGURA 18 LOGO DEL FRAMEWORK LARAVEL ................................................................. 51
FIGURA 19 LOGO DE LA LIBRERÍA JQUERY ..................................................................... 52
FIGURA 20 LOGO DE SUBLIME TEXT .............................................................................. 53
FIGURA 21 LOGO DE SQLYOG ...................................................................................... 54
FIGURA 22 LOGO DE HOSTINGER .................................................................................. 55
FIGURA 23 LOGO DE FILEZILLA ..................................................................................... 56
FIGURA 24 CONFIGURACIÓN DE CONEXIÓN POR MEDIO DE FTP ....................................... 57
FIGURA 25 SUBIDA DE ARCHIVOS MEDIANTE FILEZILLA .................................................... 57
FIGURA 26 EJEMPLO DE UN FORMULARIO BÁSICO CON MATERIALIZE ................................ 58
FIGURA 27 EJEMPLO DE CÓDIGO PARA UN FORMULARIO BÁSICO USANDO MATERIALIZE ...... 59
FIGURA 28 EJEMPLO DE CÓDIGO PARA LA VALIDACIÓN DE UN FORMULARIO CON JQUERY ... 59
FIGURA 29 MENSAJE DE ERROR EN UN FORMULARIO ....................................................... 60
10
FIGURA 30 EFECTO VISUAL SOBRE ERROR EN EL FORMULARIO ........................................ 60
FIGURA 31ENCRIPTAMIENTO DE DATOS USANDO AES_ENCRYPT ................................. 61
FIGURA 32 DESENCRIPTAMIENTO DE DATOS USANDO AES_DECRYPT ........................... 61
FIGURA 33 COMPARACIÓN DE TEXTO PLANO Y ENCRIPTADO ............................................ 62
FIGURA 34 INSERCIÓN DE DATOS ENCRIPTADOS CON LARAVEL ........................................ 63
FIGURA 35 EXTRACCIÓN DE DATOS CON LARAVEL .......................................................... 63
FIGURA 36 FUNCIÓN DE UN MODELO DE LARAVEL ........................................................... 64
FIGURA 37 MANEJO DE DATOS DE UNA VISTA DE LARAVEL ............................................... 64
FIGURA 38 VISTA PARA EL USUARIO FINAL ...................................................................... 65
FIGURA 39 INICIALIZAR UN REPOSITORIO CON GIT ........................................................... 66
FIGURA 40 AGREGANDO ARCHIVOS AL “STAGING INDEX” CON EL COMANDO “ADD”.............. 67
FIGURA 41 EJEMPLO DE UN MENSAJE DESCRIBIENDO EL COMMIT ..................................... 68
FIGURA 42 REMOVIENDO UN ARCHIVO DEL STAGING INDEX .............................................. 69
FIGURA 43 DETALLES Y MENSAJES DE COMMIT MEDIANTE EL COMANDO LOG ..................... 70
FIGURA 44 CREACIÓN DE UNA RAMA CON EL COMANDO “BRANCH” .................................... 70
FIGURA 45 VER RAMAS CREADAS .................................................................................. 71
FIGURA 46 CAMBIAR ENTRE RAMAS ............................................................................... 71
FIGURA 47 RECUPERACIÓN DE VERSIONES ANTERIORES ................................................. 72
11
Índice de tablas
TABLA 1 VENTAJAS Y DESVENTAJAS DE MYSQL ............................................................. 29
TABLA 2 VENTAJAS Y DESVENTAJAS DE ORACLE DATABASE ............................................ 31
12
Resumen
En la presente tesina se podrá observar cómo desarrollar un sistema
ERP para empresas que se dedican al desarrollo de tecnologías de comunicación,
para poder ser utilizado desde un servidor web, siendo estos de gran utilidad dentro
de una empresa, ya que ayuda a la administración de sus diversos recursos
internos. Tal es la importancia de un sistema de este tipo que cubra sus
necesidades que resulta esencial y lógico el incluir medidas de seguridad en éste,
como el encriptamiento de datos a través de algoritmos modernos y potentes,
dejando de lado aquellos que resultan antiguos y altamente vulnerables, además
del uso de librerías y/o frameworks de diversos lenguajes de programación web
que brindan de forma predeterminada seguridad, garantizando al usuario final
conformidad de saber que los datos que manipula el sistema no podrán ser vistos
por personas no autorizadas.
Palabras clave: Sistema ERP, encriptamiento de datos, librerías y frameworks.
13
Abstract
In this thesis, it will explain how to develop an ERP system for
companies that develops communication technologies, for be used from a web
server, being these systems very useful within a company, because it helps to
manage different internal resources. The importance of this kind of system that
meets the needs of a company is so that is essential includes security measure
inside of it, like data encryption through stronger and modern algorithms, putting
away those that are elder and highly vulnerable, in addition of the use of libraries
and frameworks of many web programming languages that provides security,
ensuring compliance to the end user allowing him to know that the data handled by
the system won’t be seen by unauthorized persons.
Key words: ERP System, data encryption, libraries and frameworks.
14
Introducción
En esta tesina se muestra cómo llevar a cabo el desarrollo de un
sistema ERP para aquellas empresas que trabajen con tecnologías de
comunicación, utilizando lenguajes de programación web. La razón de ser de este
tipo de sistemas es mejorar las tareas diarias que se llevan a cabo de forma interna
en una empresa, permitiendo a sus empleados tener acceso a este desde cualquier
computadora o dispositivo móvil, llevando a cabo procesos administrativos como lo
son el control de control de proyectos y el inventario del equipo con el que se
trabaja, siendo este de vital importancia puesto que llevar un control sobre los
dispositivos y materiales que son usados por los empleados es necesario para tener
un registro de las tareas diarias que se realizan en la empresa. Es importante
también que se permita un control financiero, a través del registro de gastos de
proyecto, para poder determinar costos de una forma precisa.
Como bien se sabe, el mundo de la informática es enorme, y sigue creciendo día
con día. Los desarrolladores web deben de ser capaces de dominar el
autoaprendizaje, ya que día con día surgen nuevas tecnologías que se dedican a las
distintas partes y/o ramas de la informática. Es por ello que se mostrarán las
herramientas que al momento de la creación de este documento son las mejores
para desarrollar proyectos complejos, desde lenguajes de programación, pasando
por la documentación de un sistema hasta llegar a los métodos más populares y
seguros para el encriptamiento de datos, característica que debe de estar
fuertemente presente en la actualidad en los ERP.
Por último se encontrarán algunas sugerencias que pueden seguir tanto un líder de
proyecto, empresario y sobretodo desarrolladores para que puedan guiarse en el
diseño de sistemas ERP.
15
Capítulo I
Antecedentes y
planteamiento del
problema
16
1.1 Planteamiento del problema
México es un país que ha avanzado tecnológicamente en los últimos
años, estando actualmente en el puesto 63 en cuanto a la adaptación de
tecnología, avanzando 13 lugares con respecto al año 2012 [1], lo que significa que
se han ido desarrollando empresas que se dediquen a la innovación y al desarrollo
de la tecnología cada vez a un ritmo más acelerado.
En cada una de estas empresas existen tareas que son distintas entre cada
empresa, debido a que cada una de ellas cuenta con necesidades y normas
diferentes que las distinguen de las demás, independientemente del giro que estas
tengan. En ocasiones resulta tardado o incluso complicado manejar todos los
recursos que una empresa pueda tener, desde recursos financieros como
materiales y humanos, por lo que la creación de sistemas que faciliten la
administración de estos recursos resulta una necesidad más que vital para el
manejo de una empresa.
Para ayudar a la correcta administración de recursos, la implementación de un
sistema ERP personalizado en base a las necesidades de la misma resulta ser una
solución viable, debido a que estos ayudan a agilizar tareas básicas de la empresa
a través del control de sus proyectos y recursos internos, teniendo a la mano
reportes de gastos y permitiendo integridad y seguridad en los datos que el sistema
administrará con la ayuda de frameworks y librerías basadas en tecnologías web
17
1.2 Hipótesis
Un sistema ERP basado en tecnologías web mejora el rendimiento de
la administración de recursos de una empresa, acortando el tiempo en que se
realizan registros de proyectos y tareas, a la vez que proporciona seguridad
protegiendo los datos que maneja y permitiendo a todos aquellos usuarios
autorizados a acceder al sistema puedan entrar desde cualquier plataforma que
cuente con una conexión a internet.
1.3 Objetivos
1.3.1 General
Permitir un control óptimo de las actividades que realiza la empresa y
de sus distintos recursos de forma interna a través de tecnología web que permitan
seguridad e integridad de sus datos privados.
1.3.2 Particulares
Mejorar la administración de recursos humanos, materiales y
económicos
Asegurar la privacidad de la información interna de la empresa.
Reducir el tiempo en que se almacenan registros de proyectos.
Permitir un control estricto sobre la consulta de información
empresarial a los empleados de la institución.
18
1.4 Importancia y/o Justificación del estudio
Las empresas aunque tengan un mismo giro, es decir, que lleven a
cabo sus actividades empresariales sobre un mismo sector, tienen necesidades
distintas entre ellas. Existen muchas razones para que esto suceda, como el número
de trabajadores, si su capital proviene de gobierno, etc.
El desarrollar sistemas ERP no es algo nuevo, su origen es de la década de los 60
[2], sin embargo, no todos los sistemas llevan consigo medidas de seguridad que
garanticen la integridad de datos del sistema.
El desarrollo de algoritmos informáticos que permitan manipular textos planos para
que se conviertan en datos ilegibles tampoco es algo novedoso, ya que se han
implementado desde los años 70 [3]. Los sistemas que se desarrollan en México
comúnmente omiten la inclusión de este tipo de algoritmos, dejando de lado su
importancia.
Actualmente deben de considerarse estas medidas de seguridad, por lo que se
deben investigar qué algoritmos de encriptamiento son los más potentes para ser
implementados en una base de datos.
Pero, ¿Por qué es importante usar este tipo de medidas en estos sistemas? La razón
es que resulta prescindible proteger la información confidencial de una empresa
para evitar robo de datos de recursos materiales, de empleados e incluso de los
clientes de la empresa, pasando también por la privacidad de su información
financiera.
19
1.5 Limitaciones del estudio
Los sistemas ERP deben manejar niveles de usuario, es decir, que
cuente con diferentes tipos de permisos para todas las personas que contarán con
acceso a los datos que éste manipula, es decir, el sistema debe contar con
restricciones que validen qué tipo de información será visible para un tipo de usuario.
Un ejemplo práctico es contar con una cuenta de administrador que pueda manipular
los permisos de otros usuarios y contar con registros que graben la actividad de cada
usuario en el sistema.
Para el tema de esta tesina, se explicará cómo desarrollar un sistema ERP usando
tecnologías bajo licencias tipo OSL (Open Source License) y GNU/GPL (General
Public License), ya que nos ofrece la posibilidad de utilizar dichas tecnologías sin
ningún coste o restricción [4] [5].
1.6 Preguntas de investigación
1. ¿Qué tecnologías de desarrollo web son lo suficientemente fuertes y
extensas para cubrir las necesidades de la creación de un sistema tipo ERP?
2. ¿En qué medida son confiables los algoritmos de encriptamiento de datos?
3. ¿Es posible mantener conectado en todo momento un sistema basado en
tecnologías web?
20
Capítulo II
Marco referencial y
marco teórico
21
2.1 Introducción
Como bien es sabido, la historia del surgimiento de la informática es
enorme, existen muchos sucesos interesantes que pueden rescatarse en cada año
hasta el día de hoy. En este segundo capítulo se tomarán algunas de las maneras en
la cual las empresas resolvían sus necesidades administrativas, ya sea para
gestionar sus recursos materiales y humanos, bienes empresariales o simplemente
procesos internos. Toda esta información estará relacionada a antes de la llegada de
los sistemas tipo ERP como tal y la implementación de algoritmos especializados en
proteger los datos que este maneja.
Cabe recordar que conforme pasen los años, la forma en que se desarrollan estos
sistemas cambiará, así como cambiaron las tecnologías y metodologías que se
empleaban antes hasta llegar hoy en la actualidad.
Para tema de esta tesina en particular, solo se describirán las tecnologías que se
emplean en el mundo del desarrollo web, pasando por bases de datos, frameworks,
librerías hasta estándares de programación.
22
2.2 Descripción y análisis de investigaciones relacionadas
A pesar de que los sistemas ERP llevan casi 70 años siendo usados [2]
no es ninguna novedad el hecho de que se utilicen herramientas para la gestión de
recursos y tareas internas de una empresa. Una de las primeras formas en las que
las empresas tecnológicas empezaron a llevar registros para la administración de
recursos materiales internos de forma digital fueron los sistemas “BOM” cuyas siglas
significan Bills Of Materials (Por su traducción al inglés “Lista de Materiales”)
Figura 1 Vista básica de un sistema “BOM”
Fuente:
http://calculatelca.com/static-content/software/impact-estimator/help-files/reports/table_billOfMaterials.html
Estos sistemas surgieron alrededor de la década de los 60 y aunque eran en su
momento muy populares entre las compañías, fue en esta época en la que se
empezaron a contratar servicios de desarrolladores con el fin de adaptarlo a las
necesidades únicas de cada compañía. [6].
23
Posteriormente se emplearon los sistemas llamados IMC cuyas siglas significan
Inventory Management Control. Estos sistemas se emplearon junto con bases de
datos un poco más complejas que a su vez, podían ser modificadas hasta cierto
punto por parte de la empresa en función a sus necesidades. [2].
Figura 2 Registro de materiales en un sistema “IMC”
Fuente:
http://www.compusultsystems.com/fassetrack/fassetrack-ics
En la década de los 70 surgen los sistemas MRP, cuyas siglas significan
management resource planning (por su traducción al inglés “administración de la
planeación de recursos”). Estos sistemas eran distintos a los usados en décadas
anteriores, ya que estos eran capaces de controlar no solo dónde y cómo se usaban
los materiales de una empresa, sino además, de prever cuándo iban a ser
necesitados y en qué cantidad [7].
Concretamente este sistema trataba de cubrir 3 necesidades básicas [8]:
Asegurar materiales y productos que estén disponibles para la producción y
entrega de clientes.
Mantener los niveles de inventario adecuados para la operación.
.Planear las actividades de manufactura, horarios de entrega y actividades de
compra de recursos.
24
Figura 3 Vista para gestionar los materiales de un sistema “MRP”
Fuente: http://www.eflowsys.com/ERP/ERP/asp/features.asp
Es por esta razón que los sistemas MRP son considerados como los antecesores
más directos de los sistemas ERP, aunque estos se enfocaban más que nada en la
planificación y el control de la producción.
En la década de los 80 los sistemas MRP evolucionaron para poder adaptarse a las
necesidades que, por el pasar de los años, habían surgido, ya que en aquel entonces
ya no bastaba solo con gestionar recursos materiales, sino también otros aspectos
que habían surgido en cada una de las empresas [9].
Es así como surgió el sistema MRP-ll, cuyo fin era el administrar cómodamente
cuestiones de financiamientos del coste de mano de obra, logística, clientes, etc. [10]
Estos sistemas se convirtieron en una herramienta de alta prioridad para medianas y
grandes empresas, ya que permitían almacenar grandes cantidades de información
gracias al uso de bases de datos tales como MySQL y Oracle, dejando de lado
aquellas bases de datos basadas en registros.
Fue a partir de la década de los años 90 donde se empezaron a utilizar los sistemas
ERP tal y como los conocemos en la actualidad. Compañías como Sage, [11] se
dedicaron al desarrollo de este tipo de sistemas, siendo los suyos uno de los más
vendidos, puesto que fue en estos años cuando se dio el “boom” de la era
informática.
25
Cabe destacar que, además de todos estos sistemas que se han estado
mencionando a lo largo de este capítulo, el uso de herramientas de ofimática tales
como Microsoft Excel y Word, han sido empleadas desde los años 90, debido a su
facilidad y poco uso de recursos que se necesitaban para ser ejecutados en los
ordenadores de las empresas de aquella época [12].
Figura 4 Logo del paquete Microsoft Office
Fuente: https://www.office.com/
Programas con bases de datos Access fueron empleados para crear software que se
encargara de la administración de recursos empresariales, en especial aquellos que
eran escritos en el lenguaje de programación C#, debido a la compatibilidad entre
ambas herramientas, puesto que el desarrollador de ambas fue la compañía
Microsoft [13]
Fue alrededor de los años 90 en que el software se volvió cada vez más comercial
para las empresas, por lo que, en pleno boom de la informática, los desarrolladores
de aquella época se vieron forzados a crear algoritmos que se encargaran de
proteger los datos que se almacenaban en una base de datos, esto con el fin de
atraer mayores clientes y convencerlos de que sus productos eran los más confiables
del mercado en aquella época.
26
2.2.1 Servidores y sitios web
Un servidor, como la misma palabra indica, es un ordenador o máquina
informática que está al “servicio” de otras máquinas, ordenadores o personas
llamadas clientes y que le suministran a estos, todo tipo de información [14].
Figura 5 Diagrama básico de la relación cliente servidor
Fuente: https://es.wikipedia.org/wiki/Cliente-servidor
Por regla general, las máquinas servidoras suelen ser algo más potentes que un
ordenador normal. Sobre todo suelen tener más capacidad tanto de almacenamiento
de información como de memoria principal, ya que tienen que dar servicio a muchos
clientes. Pero como todo, también depende de las necesidades, ya que es posible
tener un servidor de menores prestaciones si se pretende tener pocos clientes
conectados, o si los servicios que se solicitan en el servidor no requieren una gran
capacidad servidora.
Generalmente se utilizan los servidores web para servir de sitios web. Un sitio web
es un conjunto de páginas web desarrolladas en código HTML, relacionadas a un
dominio de Internet el cual se puede visualizar en la World Wide Web (www)
mediante los navegadores web o también llamados browser como ser Chrome,
Firefox, Edge, Opera entre otros [15].
Para fin de esta tesina, se hará uso de un servidor web para poder hacer referencia a
la programación en la nube, es decir, el poder contar con un sistema ERP en internet
de tal forma que pueda ser gestionado por sus usuarios finales desde cualquier parte
del mundo a través de un dispositivo con conexión a internet.
27
2.2.2 Bases de datos
Conforme surgieron nuevos lenguajes de programación y sistemas
operativos, también se vio en la necesidad de crear nuevos motores gestores de
bases de datos.
Una base de datos o banco de datos es un conjunto de datos pertenecientes a un
mismo contexto y almacenados sistemáticamente para su posterior uso.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la
electrónica, la mayoría de las bases de datos están en formato digital, siendo este un
componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de
soluciones al problema del almacenamiento de datos.
Existen programas denominados sistemas gestores de bases de datos, abreviado
SGBD (en inglés Database Management System o DBMS), que permiten almacenar
y posteriormente acceder a los datos de forma rápida y estructurada. [16]
Las propiedades de estos DBMS, así como su utilización y administración, se
estudian y emplean dentro del ámbito de la informática comúnmente para el
desarrollo de aplicaciones en una cantidad enorme de lenguajes de programación
que se encargue de manejar información y poder ser gestionada por los usuarios
finales de dicha aplicación.
Las aplicaciones más usuales son para la gestión de empresas e instituciones
públicas; También son ampliamente utilizadas en entornos científicos con el objeto
de almacenar la información experimental.
Los denominados sistemas gestores de bases de datos más populares son MySQL y
Oracle, y desde la década de los 70 han estado sujetos a cambios, incorporando
nuevos algoritmos de búsqueda, inserción de datos, consultas, etc. [17].
A continuación, se presenta un breve resumen de la historia de los motores de bases
de datos mencionados anteriormente:
28
2.2.3 MySQL
MySQL es un sistema de gestión de bases de datos relacional
desarrollado bajo licencia dual GPL/Licencia comercial por Oracle Corporation y está
considerada como la base datos open source más popular del mundo, y una de las
más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para
entornos de desarrollo web.
Figura 6 Logo del sistema gestor de base de datos MySQL
Fuente: https://www.mysql.com/
MySQL fue inicialmente desarrollado por MySQL AB (empresa fundada por David
Axmark, Allan Larsson y Michael Widenius). MySQL A.B. fue adquirida por Sun
Microsystems en 2008, y ésta a su vez fue comprada por Oracle Corporation en
2010, la cual ya era dueña desde 2005 de Innobase Oy, empresa finlandesa
desarrolladora del motor InnoDB para MySQL.
MySQL es muy utilizado en aplicaciones web, como Joomla, Wordpress, Drupal o
phpBB, en plataformas (Linux/Windows-Apache-MySQL-PHP/Perl/Python), y por
herramientas de seguimiento de errores como Bugzilla. Su popularidad como
aplicación web está muy ligada a PHP, que a menudo aparece en combinación con
MySQL.
29
MySQL es una base de datos muy rápida en la lectura cuando utiliza el motor no
transaccional MyISAM, pero puede provocar problemas de integridad en entornos de
alta concurrencia en la modificación. En aplicaciones web hay baja concurrencia en
la modificación de datos y en cambio el entorno es intensivo en lectura de datos, lo
que hace a MySQL ideal para este tipo de aplicaciones.
Algunas de las características significativas que distinguen MySQL de otros sistemas
gestores de bases de datos son los siguientes:
- Permite la creación de tablas temporales.
- Es compatible con casi todos los lenguajes de programación.
- Tiene compatibilidad con Windows, Mac OS y Linux.
- Ofrece un sistema de contraseñas y privilegios seguro mediante verificación
basada en el host y el tráfico de contraseñas está cifrado al conectarse a un
servidor.
- Replicación de base de datos.
- Uso de claves foráneas
- Uso de transacciones para seguridad de datos
- Permite buscar por cualquier campo de una tabla.
Tabla 1 Ventajas y desventajas de MySQL
Ventajas Desventajas
- Es un software open source, por lo que cualquier
persona puede modificar su código fuente.
- Alto rendimiento en las operaciones.
- No necesita de muchos recursos para funcionar.
-Soporta gran variedad de Sistemas Operativos
- Es ideal para acceder bases de datos en internet
datos en Internet
- Permite el uso de triggers, funciones, vistas y
procedimientos almacenados
- Algunas funcionalidades de
MySQL no están
documentadas.
-No es del todo intuitivo como
otros sistemas gestores de
bases de datos.
Fuente: https://mysqldaniel.wordpress.com/ventajas-y-desventajas/
30
2.2.4 Oracle Database
Oracle Database es un sistema de gestión de base de datos de tipo
objeto-relacional (ORDBMS, por el acrónimo en inglés de Object-Relational Data
Base Management System), desarrollado por Oracle Corporation.
Se considera a Oracle Database como uno de los sistemas de bases de datos más
completos, destacando: soporte de transacciones, estabilidad, escalabilidad, y
soporte multiplataforma.
Figura 7 Logo del sistema gestor de base de datos Oracle Database
Fuente: https://learningdatabase.wordpress.com/category/taller-de-base-de-datos/
En la actualidad, Oracle (Nasdaq: ORCL) todavía encabeza la lista. La tecnología
Oracle se encuentra prácticamente en todas las industrias alrededor del mundo y en
las oficinas de 98 de las 100 empresas Fortune 100. Oracle es la primera compañía
de software que desarrolla e implementa software para empresas cien por ciento
activado por Internet a través de toda su línea de productos: base de datos,
aplicaciones comerciales y herramientas de desarrollo de aplicaciones y soporte de
decisiones. Oracle es el proveedor mundial líder de software para administración de
información, y la segunda empresa de software [18].
La primera versión “real” del sistema de gestión de bases de datos relacionales
Oracle fue Oracle 2. Este sistema admitía sólo las características básicas de SQL, y
estaba escrito en un lenguaje ensamblador.
31
Al año siguiente, y durante los próximos 10 años más o menos, Oracle Corporation
lanzó actualizaciones a su base de datos buque insignia. Probablemente una de las
razones por las que el sistema de gestión de bases de datos relacionales de Oracle
ha logrado permanecer en la cima sea gracias a sus actualizaciones de productos
que están estrechamente vinculados a los cambios en el mercado.
Palabras de moda de bases de datos tales como “escalable”, “programable”,
“distribuida”, y “portátil” también están vinculadas a la liberación de Oracle. Por
ejemplo, en 1985 se añadió soporte para un modelo cliente-servidor a la espera de
una aceptación cada vez mayor de la comunicación por red.
A medida que Internet allanó el camino para la era digital, el sistema de gestión de
bases de datos relacionales de Oracle se ha actualizado para incluir una máquina
virtual Java nativa (JVM) [19].
Algunas de las ventajas y desventajas de este sistema de gestión de base de datos
son:
Tabla 2 Ventajas y desventajas de Oracle Database
Ventajas Desventajas
- Comprime los datos en una red para
mejorar el rendimiento de consultas.
- Compatible con cualquier plataforma.
- Está orientado para bases de datos en
internet.
- Permite el almacenamiento de cualquier
tipo de dato.
- Permite la creación de triggers y
procedimientos almacenados.
- Tiene una licencia muy costosa.
- Generalmente sus versiones no son
estables hasta meses e incluso años
después de haber sido lanzadas.
- La mala instalación del software de
Oracle en un servidor puede provocar
un bajo rendimiento.
Fuente: http://oraclebddepn.blogspot.mx/2013/05/ventajas-y-desventajas.html
32
2.2.5 Encriptación de datos
Encriptación es el proceso mediante el cual cierta información o texto
sin formato es cifrado de forma que el resultado sea ilegible a menos que se
conozcan los datos necesarios para su interpretación. Es una medida de seguridad
utilizada para que al momento de almacenar o transmitir información sensible ésta no
pueda ser obtenida con facilidad por terceros.
Opcionalmente puede existir además un proceso de desencriptación a través del cual
la información puede ser interpretada de nuevo a su estado original, aunque existen
métodos de encriptación que no pueden ser revertidos.
Algunos de los usos más comunes de la encriptación son el almacenamiento y
transmisión de información sensible como contraseñas, números de identificación
legal, números de tarjetas de crédito, reportes administrativo-contables y
conversaciones privadas, entre otros.
Como es deducible, en sistemas complejos como los ERP, sistemas de tiempo real o
sistemas que hagan uso de la comunicación de datos, es de vital importancia
asegurar que la Información viaje segura, manteniendo su autenticidad, integridad,
confidencialidad y el no repudio de la misma entre otros aspectos [20].
Desde el surgimiento de las bases de datos, se han desarrollado distintos algoritmos
para el encriptamiento de datos, a continuación se muestra una breve descripción de
aquellos que son comúnmente más usados al momento de proteger datos sensibles
de un sistema debido a su fuerte seguridad y alto rendimiento en las operaciones que
realiza:
2.2.6 MD5 (Message-Digest Algorithm 5)
Es un algoritmo de reducción criptográfico de 128 bits ampliamente
usado. Uno de sus usos más comunes es el de comprobar que algún archivo no
haya sido modificado o para cifrar datos sencillos como urls, ids, etc. Una cualidad de
este algoritmo es que no es posible revertir el proceso de cifrado [21].
33
2.2.7 DES (Data Encryption Standard):
Es un algoritmo de cifrado, para ocultar información, escogido como un
estándar FIPS en los Estados Unidos en 1976, y cuyo uso se ha propagado
ampliamente por todo el mundo. El algoritmo fue controvertido al principio, con
algunos elementos de diseño clasificados, una longitud de clave relativamente corta,
y las continuas sospechas sobre la existencia de alguna puerta trasera para la
National Security Agency (NSA) [22].
Algoritmos como MD5 y DES se volvieron obsoletos e insuficientes para brindar
seguridad a los datos que manejaban los sistemas administrativos, por lo que
surgieron algoritmos fuertemente seguros como AES (Advanced Encription Standard)
que poco a poco fueron implementados en las bases de datos de estos sistemas,
debido a que esta nueva generación de algoritmos empleaban “palabras clave” para
encriptar textos y guardarlos ilegiblemente para cualquier usuario que no conociera
dicha palabra para poder revertir el proceso de encriptamiento [23].
Es así pues, que en esta tesina se hace énfasis sobre el uso de algoritmos fuertes y
confiables que, a pesar de haber sido desarrollados en décadas anteriores, han ido
mejorando o improvisando la forma en la que estos operan y su compatibilidad con
las diferentes bases de datos, en este caso MySQL.
La razón de implementar el algoritmo AES (Advanced Encriptation Standar) es
principalmente la seguridad que esta ofrece al desarrollador ya que incluye funciones
que solo necesitan ser llamadas a través de ciertos parámetros para poder proteger
datos y convertirlos en algo ilegible para cualquier persona que intente perturbar la
seguridad del sistema o filtrar información empresarial [24].
El uso de un lenguaje de programación web fuerte y extenso se vuelve indispensable
para la creación de un sistema que sea capaz de manejar integridad y seguridad en
sus datos, independientemente del tipo de base de datos que se implemente en el
mismo. La programación web se puede dividir en dos partes:
34
2.2.8 FrontEnd:
Se encarga de emplear aquellas tecnologías que corren del lado del
cliente, es decir, todas aquellas herramientas que corren del lado del navegador web.
A continuación se describirán los lenguajes que implementa esta parte del desarrollo
web:
2.2.9 HTML:
Es un lenguaje de marcado que se utiliza para el desarrollo de páginas
de Internet. Se trata de la sigla que corresponde a HyperText Markup Language, es
decir, Lenguaje de Marcas de Hipertexto, que podría ser traducido como Lenguaje de
Formato de Documentos para Hipertexto. Actualmente HTML 5 es la versión
estándar que es compatible con la mayoría de los navegadores más usados
incluyendo algunas versiones antiguas de Internet Explorer [25].
Figura 8 Logo de HTML5
Fuente: https://www.w3.org/html/logo/
HTML se encarga de desarrollar una descripción sobre los contenidos que aparecen
como textos y sobre su estructura, complementando dicho texto con diversos objetos
tales como fotografías, animaciones, etc. [26].
Este lenguaje se ha utilizado desde la década de los 90 y fue empleado en los
primeros proyectos ERP que surgieron en aquellos años.
35
2.2.10 CSS:
Es un lenguaje utilizado en la presentación de documentos HTML, por
lo que puede decirse que el lenguaje CSS sirve para organizar la presentación y
aspecto de un sitio web. Este lenguaje es principalmente utilizado por parte de los
navegadores web de internet y por los programadores web informáticos para elegir
multitud de opciones de presentación como colores, tipos y tamaños de letra, etc.
Actualmente CSS3 es la versión estándar y mayormente compatible por la mayoría
de los navegadores, sin embargo, muchos de los navegadores tales como Chrome y
Opera añaden un paquete de propiedades CSS adicionales que no son compatibles
con los demás navegadores [27].
Figura 9 Logo de CSS3
Fuente: http://wpguru.co.uk/2014/03/how-to-replace-and-add-html-text-elements-with-css/
CSS está diseñado principalmente para marcar la separación del contenido del
documento y la forma de presentación de este, características tales como las capas
(en inglés layouts), los colores y las fuentes. Esta separación busca mejorar la
accesibilidad del documento, proveer más flexibilidad y control en la especificación
de características presentacionales, permitir que varios documentos HTML
compartan un mismo estilo usando una sola hoja de estilos separada en un archivo
CSS, y reducir la complejidad y la repetición de código en la estructura del
documento.
36
2.2.11 JavaScript:
Es un lenguaje de programación, que se utiliza principalmente del lado
del cliente, es decir, se ejecuta del lado del ordenador del usuario y no en el servidor
del sitio web, permitiendo crear efectos atractivos y dinámicos en las páginas web.
Los navegadores modernos interpretan el código JavaScript integrado en las páginas
web [28].
Figura 10 Logo no oficial de JavaScript
Fuente: http://www.lslutnfra.com/curso-javascript
Todos los navegadores modernos interpretan el código JavaScript integrado en las
páginas web. Para interactuar con una página web se provee al lenguaje JavaScript
de una implementación del Document Object Model (DOM) [29].
DOM es simplemente una interfaz que proporciona los elementos que representan
una página web. A través del DOM, los programas pueden acceder y modificar el
contenido, estructura y estilo de los documentos HTML y XML, que es para lo que se
diseñó principalmente.
Generalmente la persona encargada del FrontEnd, se dedica solo a estas tres
tecnologías, debido a que se encarga de estilizar la página de tal manera que la ésta
pueda quedar cómoda para la persona que la ve, preferentemente esta persona
debe de conocer técnicas de “User Experience”, técnicas que consisten en dar una
experiencia de usuario ergonómica y satisfactoria.
37
Así mismo debe de saber de diseño de Interacción para que sepa colocar las cosas
de tal manera que el usuario las pueda ubicar de manera rápida, intuitiva y cómoda
de navegar, existen muchas tecnologías relacionadas a estos tres lenguajes que se
utilizan en el FrontEnd, los ejemplos anteriormente mencionados no son más que los
lenguajes y frameworks más comunes usados para esta parte de desarrollo.
2.2.12 BackEnd
Se encarga de emplear tecnologías que se encuentran del lado del
servidor, las más comunes suelen ser lenguajes como PHP, Python, .Net, y Java, sin
embargo, para fines de esta tesina, solo se pondrá PHP como ejemplo de tecnología
funcional para el diseño de BackEnd.
El programador de BackEnd es aquel que se encarga de interactuar con bases de
datos, verificar manejos de sesiones de usuarios, montar la página en un servidor, y
desde este “proporcionar” todas las vistas que el FrontEnd crea [30].
En otras palabras, este se encarga más que nada de la manipulación de los datos,
que en muchas ocasiones suele ser lo más tedioso dependiendo del sitio o sistema
que se esté desarrollando.
Sin embargo, un BackEnd no sirve de mucho si no existe un FrontEnd de por medio
que se haya encargado de que la página luzca estética e intuitiva, por lo que el
programador de BackEnd normalmente debe de conocer bases de datos,
frameworks y librerías que le permitan desenvolverse mejor en la manera en la que
sirve las páginas, ya que este lado del desarrollo web es quien se va a encargar de
que todos los datos que llegan desde el FrontEnd lleguen a una base de datos, por
tanto, debe de conocer un poco de seguridad, para mantener los datos cuidados y
tratar de protegerse de todo tipo de inyecciones que se puedan tratar de hacer al
servidor para que no sea vulnerable, así mismo, se encarga de crear API’s [31] para
que sus datos puedan consumirse de manera cómoda para el FrontEnd y que pueda
mejorar la experiencia del usuario, teniendo en cuenta los cuidados necesarios que
debe considerar para que su servidor pueda mantenerse seguro.
38
A continuación se dará una breve descripción de un ejemplo de tecnología y su
respectivo framework empleada en el BackEnd:
2.2.13 PHP:
PHP es el acrónimo recursivo de PHP Hypertext Preprocessor, siendo
este un lenguaje de código abierto muy popular especialmente adecuado para el
desarrollo web y que puede ser incrustado en HTML [32].
Figura 11 Logo de PHP
Fuente: https://www.quora.com/What-font-is-the-php-logo
Descrito de una forma más extensa, consiste en un lenguaje de programación de uso
general de código del lado del servidor, originalmente diseñado para el desarrollo
web de contenido dinámico. Fue uno de los primeros lenguajes de programación del
lado del servidor que se podían incorporar directamente en el documento HTML en
lugar de llamar a un archivo externo que procese los datos [33].
Desde su surgimiento, se volvió altamente popular entre los desarrolladores,
especialmente aquellos que realizaban sistemas en la nube debido a su facilidad de
implementación y excelente documentación.
Con el desarrollo de sistemas ERP siempre se tienen que manejar múltiples
tecnologías que, en su conjunto, permitan a los usuarios finales de estos poder
manejar información a la cual se tiene permiso y acceder al sistema desde cualquier
dispositivo electrónico, con la condición única de que este cuente con acceso a
internet y un navegador web.
39
Lenguajes como PHP y JavaScript son compatibles con los modelos de base de
datos actuales, convirtiéndolos en candidatos ideales para servir como intermediarios
de un ERP.
Ahora que ya se ha explicado un poco sobre la historia de los ERP, sus bases de
datos y las tecnologías bajo las que se desarrollan, es necesario abordar algunos
temas que resultan importantes para proyectos de este estilo. Generalmente, los
sistemas ERP son complejos, extensos, desarrollados por un equipo de trabajo y, lo
más común, suelen estar sujetos a cambios, tanto en la etapa desarrollo como en su
faceta de implementación, es decir, cuando un sistema ya está siendo usado de
manera convencional, las necesidades de la empresa suelen cambiar, esto, como ya
se ha explicado anteriormente, es debido a múltiples factores como el número de
empleados y/o clientes, el surgimiento de nuevos departamentos en la empresa o la
creación de un nuevo producto y/o servicio que pretende ser vendido.
Con todo lo anterior dicho cabe preguntarse:
1.- ¿Qué tipo de servidores deben ser considerados como opción viable al momento
de implementar sistemas en la nube?
2.- ¿Qué tipos de ataques y/o fallas sufren los servidores web?
3.- ¿Qué herramientas son las más eficientes para crear respaldos de proyectos tan
grandes como un ERP?
4.- ¿Es importante documentar un proyecto?
5.- ¿Qué nomenclatura debe de ser implementada en el código?
Todas estas preguntas serán respondidas en las siguientes páginas de este capítulo
con la finalidad de entender la complejidad y la importancia de contar con
herramientas que nos faciliten el desarrollo de proyectos tan extensos.
Como desarrolladores, no solo es importante crear algoritmos que resuelvan un
40
problema, sino también se debe de contar con respaldos de seguridad de nuestros
proyectos en caso de algún imprevisto.
Por ejemplo si se está trabajando subiendo los cambios de un proyecto a un servidor
online, se corre el riesgo de que este sufra algún tipo de fallo. A continuación se
enlistan los más comunes junto con una breve descripción:
- Ataques de autenticación:
Este tipo de ataque tiene como objetivo engañar al sistema de la víctima para
ingresar al mismo. Generalmente este engaño se realiza tomando las
sesiones ya establecidas por la víctima u obteniendo su nombre de usuario y
contraseña [34].
- Denial of Service (Dos):
Los protocolos existentes actualmente fueron diseñados para ser hechos en
una comunidad abierta y con una relación de confianza mutua. La realidad
indica que es más fácil desorganizar el funcionamiento de un sistema que
acceder al mismo; así los ataques de Negación de Servicio tienen como
objetivo saturar los recursos de la víctima de forma tal que se inhabilita los
servicios brindados por la misma [35].
- Modificación (daño): la modificación o daño se puede dar como:
Alteración o corrompimiento de datos: Esta categoría se refiere a la
modificación desautorizada de los datos o el software instalado en el sistema
víctima (incluyendo borrado de archivos).
Borrado de Huellas: El borrado de huellas es una de las tareas más
importantes que debe realizar el intruso después de ingresar en un sistema,
ya que, si se detecta su ingreso, el administrador buscará como conseguir
"tapar el hueco" de seguridad, evitar ataques futuros e incluso rastrear al
atacante.
41
2.2.14 Git
Con tantas posibles formas de atacar un servidor online, el desarrollo
de proyectos pueden verse retrasadas de manera indefinidas bloqueando el acceso
a archivos o corrompiendo sus archivos por lo que es importante el manejo de las
herramientas que nos ayudan a la creación de respaldos, la más popular entre los
programadores (sin importar su rama) es Git.
Git es un software de control de versiones diseñado por Linus Torvalds, pensando en
la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones o
programas cuando éstas tienen un gran número de archivos de código fuente. [36]
Figura 12 Logo de Git
Fuente: https://git-scm.com/downloads/logos
Su historia, como muchas de las grandes cosas en esta vida, comenzó con un poco
de destrucción creativa y encendida polémica. El núcleo de Linux es un proyecto de
software de código abierto con un alcance bastante grande.
Durante la mayor parte del mantenimiento del núcleo de Linux, los cambios en el
software se pasaron en forma de parches y archivos. En 2002, el proyecto del núcleo
de Linux empezó a usar un DVCS propietario llamado BitKeeper.
42
Algunos de los objetivos del nuevo sistema fueron los siguientes:
- Velocidad
- Diseño sencillo
- Fuerte apoyo al desarrollo no lineal (miles de ramas paralelas)
- Completamente distribuido
- Capaz de manejar grandes proyectos (como el núcleo de Linux) de manera
eficiente (velocidad y tamaño de los datos)
Desde su nacimiento en 2005, Git ha evolucionado y madurado para ser fácil de usar
y aún conservar estas cualidades iniciales. Es tremendamente rápido, muy eficiente
con grandes proyectos, y tiene un increíble sistema de ramificación (branching) para
desarrollo no lineal [37].
2.2.15 Estándar de programación.
Es importante como desarrollador, independientemente de la rama en la
que te desempeñes, contar con un estándar de programación, es decir, un estilo en
escribir código. A día de hoy existe una gran cantidad de estándares, como simple
motivo de ejemplo se describirá uno de los más populares en el mundo del desarrollo
web:
2.2.16 Estándar de programación PSR-2
Este estándar está orientado a dar formato al código PHP. Su objetivo
es reducir la dificultad cuando se lee código de diferentes autores.
Algunas de las reglas que deben seguirse son [38]:
43
- El código debe usar 4 espacios como indentación, no tabuladores
- No debe haber espacios en blanco al final de las líneas que no estén vacías.
- Pueden añadirse líneas en blanco para mejorar la lectura del código y para
indicar bloques de código que estén relacionados.
- No debe haber más de una sentencia por línea.
- Las llaves de apertura de las clases deben ir en la línea siguiente, y las llaves
de cierre deben ir en la línea siguiente al cuerpo de la clase.
- En la lista de argumentos no debe haber un espacio antes de cada coma y
debe haber un espacio después de cada coma.
Figura 13 Ejemplo de código bajo el estándar PSR-2
Fuente: https://github.com/jatubio/5minutos_laravel/wiki/Estandares-de-programacion.-PSR-2
44
2.2.17 Documentación
Aprender a documentar un proyecto es uno de las fases más
importantes en el desarrollo del mismo, debido a que este será el primer elemento al
que recurran futuros desarrolladores del proyecto con el fin de entender la
funcionalidad de este y poder observar los elementos, librerías, estándares de
programación y bases de datos empleadas. Las formas más comunes de
documentar son las siguientes:
2.2.18 Diagramas de flujo:
El diagrama de flujo o diagrama de actividades es la representación
gráfica del algoritmo o proceso. Se utiliza en disciplinas como programación para
fines de documentación o para dar paso a la creación de pseudocódigo y código.
En Lenguaje Unificado de Modelado (UML), un diagrama de actividades representa
los flujos de trabajo paso a paso de negocio y operacionales de los componentes en
un sistema. Un diagrama de actividades muestra el flujo de control general.
Figura 14 Ejemplo de un diagrama de flujo
Fuente: https://es.wikipedia.org/wiki/Diagrama_de_flujo#/media/File:DiagramaFlujoLampara.svg
45
2.2.19 Diccionario de datos:
Un diccionario de datos es un conjunto de metadatos que contiene las
características lógicas y puntuales de los datos que se van a utilizar en el sistema
que se programa, incluyendo nombre, descripción, alias, contenido y organización.
Es un catálogo, un depósito, de los elementos en un sistema. Como su nombre lo
sugiere, estos elementos se centran alrededor de los datos y la forma en que están
estructurados para satisfacer los requerimientos de los usuarios y las necesidades de
la organización. En un diccionario de datos se encuentra la lista de todos los
elementos que forman parte del flujo de datos en todo el sistema. Los elementos más
importantes son flujos de datos, almacenes de datos y procesos. El diccionario
guarda los detalles y descripciones de todos estos elementos [39].
Figura 15 Ejemplo de un diccionario de datos.
Si los analistas desean conocer cuántos caracteres abarca un determinado dato o
qué otros nombres recibe en distintas partes del sistema, o dónde se utiliza,
encontrarán las respuestas en un diccionario de datos desarrollado en forma
apropiada [40].
El diccionario se desarrolla durante el análisis de flujo de datos y auxilia a los
analistas que participan en la determinación de los requerimientos de sistemas.
46
2.2.20 Modelado de datos:
El modelado de datos es el proceso de documentar un diseño de
sistema de software complejo como un diagrama de fácil comprensión, usando texto
y símbolos para representar la forma en que los datos necesitan fluir. El diagrama se
puede utilizar como un mapa para la construcción de un nuevo software o para la
reingeniería de una aplicación antigua [41].
Figura 16 Ejemplo de un modelado de datos
Fuente: https://inventario-symfony.kenai.com/
Un modelo de datos puede ser pensado como un diagrama de flujo que ilustra las
relaciones entre los datos. A pesar de que la captura de todas las posibles relaciones
en un modelo de datos puede consumir mucho tiempo, es un paso importante que no
debería ser apresurado.
Los modelos de datos físicos, lógicos y conceptuales bien documentados permiten
que las partes interesadas identifiquen errores y hagan cambios antes de que
cualquier código de programación se haya escrito.
47
En resumen, la rama de la programación web abarca una gran cantidad de
lenguajes, tecnologías y estándares, lo que la hace una gran opción al momento de
querer desarrollar proyectos tan amplios como los ERP. Es importante como
desarrolladores aprender a usar herramientas que nos permitan crear soluciones a
través del desarrollo web.
Una de las grandes ventajas de desarrollar estos sistemas con este tipo de
programación es que no se tiene la necesidad de instalar ningún programa adicional,
o realizar configuraciones en las computadoras de los usuarios (lado del cliente),
debido a que solo es necesario el contar con un navegador web para poder visualizar
el sistema y el contar con una conexión a internet.
48
Capítulo III
Metodología
49
3.1 Introducción
En este tercer capítulo se describirán los pasos necesarios a seguir y
cómo emplear algunas herramientas que utilizan tecnologías descritas en el capítulo
anterior para el desarrollo de un sistema ERP.
Además, se pondrán ejemplos algunas imágenes de cómo deberían de lucir las
vistas más comunes en este tipo de proyectos, pasando también ejemplos de
consultas de datos encriptados, cómo poder respaldar el proyecto para cambios
futuros y como documentar de forma correcta las funciones principales básicas del
ERP.
Es importante que destacar que cada una de estas herramientas es completamente
compatible entre ellas, independientemente de las funciones que se manejen.
Los ejemplos presentados de los pasos que deben seguirse en este capítulo varían
poco o nada entre versiones y además las herramientas presentadas emplean
licencias GPL y Open Source, por lo que no se necesita comprar el código y permite
a los desarrolladores modificar sus funciones de forma personalizada con la única
condición de que éste no intente comercializar con dicho código.
Se hará énfasis también en las dos caras del desarrollo web: FrontEnd y BackEnd.
Cada lado cuenta con herramientas y procedimientos distintos, y cada programador
debe ser capaz de poder dominar ambas partes, por ejemplo, si un desarrollador de
FrontEnd desea manejar los datos de un servidor, éste debe saber exactamente
cómo manejarlos para poder mostrárselos al usuario final de manera elegante e
intuitiva.
50
3.2 Herramientas
A continuación se describirán las herramientas necesarias para el
desarrollo de un sistema ERP, pasando por librerías y frameworks, hasta software
gratuito bajo el uso de licencias GPL:
3.2.1 Materialize (Framework CSS):
Es un Framework CSS que te permite crear sitios y aplicaciones web
con los principios básicos que google ha ido implementando, es decir, hacer uso de
diseños elegantes, diseños responsivos y el empleo de nuevas tecnologías para dar
una presentación altamente agradable al usuario final [42].
La versión estándar contiene CSS y JavaScript y trae los CSS listos para trabajar.
Figura 17 Logo de CSS3
Fuente: http://materializecss.com/
El framework incluye múltiples componentes:
Grids: el framework emplea diseño responsive grid, manejando 3 tamaños de
pantalla estándar: pequeñas hasta 600px, medianas hasta 992px y grandes,
mayores de 992px [43].
Algunas de las ventajas de emplear Materialize son [44]:
- Admite la compatibilidad de CSS entre múltiples navegadores.
- Agiliza el proceso de desarrollo de un sitio web.
- Permite el diseño responsivo.
51
3.2.2 Laravel (Framework de PHP):
Es un framework de código abierto para desarrollar aplicaciones y
servicios web con PHP 5. Su filosofía es desarrollar código PHP de forma elegante y
simple, evitando el "código espagueti", es decir, aquel código que resulta complejo e
incomprensible de leer.
Fue creado en 2011 y tiene una gran influencia de frameworks como Ruby on Rails,
Sinatra y ASP.NET MVC [45].
Figura 18 Logo del framework Laravel
Fuente: https://laravel.com/
Laravel, propone una forma de desarrollar aplicaciones web de un modo mucho más
ágil. En este framework opcionalmente podemos usar el patrón de diseño MVC
(Modelo-Vista-Controlador) tradicional, donde al igual que otros frameworks PHP, el
controlador es programado como una clase.
El patrón de diseño MVC propone la construcción de tres componentes distintos que
son el modelo, la vista y el controlador, es decir, por un lado define componentes
para la representación de la información, y por otro lado para la interacción del
usuario [46].
Para tema de esta tesina, se utilizará la metodología que ofrece este framework para
el desarrollo de las vistas del sistema, consultas de bases de datos, etc.
52
3.2.3 jQuery (Librería de JavaScript):
Es una librería creada inicialmente por John Resig, que permite
simplificar la manera de interactuar con los documentos HTML, manipular el árbol
DOM, manejar eventos en una página web, desarrollar animaciones y agregar
interacción con la técnica Asynchronous Javascript and XML (AJAX) [47], es decir,
JavaScript y XML Asíncrono a páginas web, la cual consiste básicamente en
intercambiar información entre el servidor y el cliente (navegador) sin necesidad de
recargar la página.
jQuery es la biblioteca de JavaScript más utilizada a nivel mundial por su gran
facilidad de uso y su excelente documentación de sus funciones y plugins.
Figura 19 Logo de la librería jQuery
Fuente: http://jquery.com/
jQuery es software libre y de código abierto, posee un doble licenciamiento bajo la
Licencia MIT y la Licencia Pública General de GNU, permitiendo su uso en proyectos
libres y privados [48].
jQuery, al igual que otras bibliotecas, ofrece una serie de funcionalidades basadas en
JavaScript que de otra manera requerirían de mucho más código, es decir, con las
funciones propias de esta biblioteca se logran grandes resultados en menos tiempo y
espacio.
La característica principal de la biblioteca es que permite cambiar el contenido de
una página web sin necesidad de recargarla, mediante la manipulación del árbol
DOM y peticiones AJAX.
53
3.2.4 Sublime Text
Sublime Text es un editor de texto y editor de código fuente está escrito
en C++ y Python para los plugins. Desarrollado originalmente como una extensión de
Vim, con el tiempo fue creando una identidad propia, por esto aún conserva un modo
de edición tipo vi llamado Vintage mode [49].
Figura 20 Logo de Sublime Text
Fuente: https://www.sublimetext.com/
Algunas de las características que lo diferencian del resto de editores de texto son:
- Minimapa: consiste en una previsualización de la estructura del código.
- Multicursor: Crea cursores con los que podemos escribir texto de forma arbitraria en
diferentes posiciones del archivo.
- Soporte nativo para infinidad de lenguajes: Soporta de forma nativa 43 lenguajes de
programación y texto plano.
- Búsqueda Dinámica: Se puede hacer búsqueda de expresiones regulares o por
archivos, proyectos, directorios, una conjunción de ellos o todo a la vez.
- Auto completado y marcado de llaves: Se puede ir a la llave que cierra o abre un
bloque de una forma sencilla.
Para tema de esta tesina, se empleará este editor de texto para el desarrollo de
código del sistema.
54
3.2.5 SQLyog
SQLyog es una excelente interfaz gráfica diseñada especialmente para
trabajar de forma más rápida y cómoda con el servidor de base de datos MySQL. El
programa está orientado a usuarios que ya tienen ciertos conocimientos de SQL y
necesitan un intérprete gráfico sin excesivas florituras, ágil y funcional [50].
Permite administrar usuarios y permisos, y realizar múltiples peticiones a base de
datos. También permite insertar fácilmente, mediante plantillas, peticiones que
realices con frecuencia, como por ejemplo creación de tablas. Otras opciones son la
exportación de datos en formato CSV, HTML y XML, la optimización de bases de
datos, la posibilidad de guardar scripts de SQL como favoritos [51].
Figura 21 Logo de SQLyog
Fuente: https://codigosimportantes.blogspot.mx/2012/09/sqlyog.html
El uso de esta herramienta es indispensable para poder realizar consultas a la base
de datos a la que se conecta el sistema ERP, y aunque existen muchas otras
interfaces para manejar bases de datos MySQL, SQLyog resulta la mejor entre
todas, debido a que es una herramienta gratuita y permite conectarse a un servidor a
través de una conexión personalizada.
55
3.2.6 Hostinger
Es una empresa que ofrece servicios de hosting en distintos niveles,
permitiendo contratar planes gratuitos y empresariales en plazos anuales.
En sus servicios, entrega un espacio de 2GB y transferencia de hasta 1000GB lo que
lo convierte en una excelente opción para comenzar mantener un sitio, aplicaciones y
sistemas web grandes.
Figura 22 Logo de Hostinger
Fuente: https://www.hostinger.mx/
Su principal particularidad es que con la opción gratuita puedes alojar ilimitado
número de sitios web con el mismo espacio y transferencia de forma mensual [52].
Hostinger admite una gran cantidad de tecnologías y lenguajes en diferentes
versiones como PHP, MySQL, Python, Java, tecnologías de Intel, etc. Además,
contiene una gran variedad de herramientas y opciones que facilitan el trabajo de los
desarrolladores web como los administradores de archivos, subida de archivos por
medio de FTP, respaldo de bases de datos programados y muchas otras
herramientas más [53].
A pesar de que existen muchos otros servicios de hosting, ninguno muestra tanta
flexibilidad como éste, por lo que resulta conveniente para hospedar los archivos de
un sistema ERP.
56
3.2.7FileZilla
FileZilla es un cliente FTP multiplataforma de código abierto y software
libre, licenciado bajo la Licencia Pública General de GNU. Soporta los protocolos
FTP, SFTP y FTP sobre SSL/TLS (FTPS). [54]
Figura 23 Logo de FileZilla
Fuente: https://filezilla-project.org/translations.php
Para el desarrollo de un proyecto ERP en la nube es necesario contar con una
herramienta que permita administrar los recursos de un servidor online, esto con la
finalidad de actualizar archivos en tiempo real y agregar nuevas funcionalidades al
sistema.
Algunas de sus características más destacables de FileZilla son [55]:
- Permite a un usuario crear una lista de sitios FTP o SFTP4 (estableciendo una
conexión cifrada que utiliza el protocolo SSH) con sus datos de conexión, como el
número de puerto a usar, o si se utiliza inicio de sesión normal o anónima.
- Cola de transferencia: situada en la parte inferior de la ventana, muestra en tiempo
real el estado de cada transferencia activa o en cola.
Vista de archivo y carpeta: Los usuarios pueden navegar por las carpetas, ver y
alterar sus contenidos tanto en la máquina local como en la remota, utilizando una
interfaz de tipo árbol de exploración.
57
3.3 Procedimiento
3.3.1 Subida de archivos al servidor por medio de FTP (FileZilla)
Como se ha ido mencionando a lo largo de la tesina, el subir archivos a
un servidor online es sumamente importante, para realizar esta acción se necesita
hacer uso del software FileZilla. Primeramente se necesita configurar una conexión al
servidor al cuál deseamos acceder, para ello, se necesita proporcionar la información
que se muestra a continuación:
Figura 24 Configuración de conexión por medio de FTP
Fuente: https://filezilla-project.org/
El siguiente paso es pulsar el botón de conexión rápida e inmediatamente se
mostrarán en pantalla los archivos que se encuentran actualmente en el servidor,
además de una pequeña sección donde se muestren los archivos del ordenador en
el que se encuentra ejecutándose FileZilla actualmente.
Ahora, para subir uno o varios archivos al servidor, solo se necesita seleccionar los
elementos deseados a mover, pulsar clic derecho y seleccionar la opción que diga
“subir”, tal y como se muestra a continuación:
Figura 25 Subida de archivos mediante FileZilla
Fuente: https://filezilla-project.org/
Así de sencillo es poder subir archivos a un servidor mediante el software FileZilla,
cada vez que se requieran hacer cambios al proyecto, basta con seguir los pasos
anteriormente descritos independientemente del tipo de archivo que sea.
58
3.3.2 Validación de formularios
La integridad de datos es uno de los factores más importantes en un
sistema, ya que los datos que este maneja son la fuente con la que éste trabaja. Si
no se tiene cuidado de que los datos ingresados sean correctos, es decir, que
correspondan a lo que realmente se espera recibir, se producirán errores tarde o
temprano. Por ejemplo si un formulario pide que se ingrese un correo electrónico,
entonces el sistema debe ser capaz de revisar el dato capturado por el usuario para
comprobar que realmente se introdujo un correo válido, cumpliendo con un formato
que cumpla con las características de un correo. A tema de ejemplo de esta tesina,
se muestra a continuación los pasos a seguir para la validación de un email.
Primeramente se debe crear un formulario para la entrada de datos, para ello se hará
uso de HTML y CSS con la ayuda del framework Materialize, la figura siguiente
muestra la estructura de un formulario sencillo:
Figura 26 Ejemplo de un formulario básico con Materialize
Fuente: Propio
Un ejemplo de código HTML para un formulario se muestra en la siguiente figura:
59
Figura 27 Ejemplo de código para un formulario básico usando Materialize
Fuente: Propio
Una vez se obtiene el diseño de un formulario, el siguiente paso es, como se
mencionó anteriormente, validar que sus datos sean correctos. Para ello se hará uso
de la librería jQuery, empleando su sintáxis para comprobar la veracidad de los datos
introducidos en el formulario, en este caso un email. En la siguiente figura se puede
observar un ejemplo de código para realizar dicha acción.
Figura 28 Ejemplo de código para la validación de un formulario con jQuery
Fuente: Propio
60
El código anterior utiliza una expresión regular llamada “regExprEmail”, la cual
consiste en una cadena que valida el texto introducido para el email. Al pulsar el
botón de enviar verifica que el dato sea correcto, de ser así los datos se envían
satisfactoriamente al servidor, caso contrario se le notificará al usuario un error
pidiendo que corrija el email, tal y como se muestra en la siguiente figura.
Figura 29 Mensaje de error en un formulario
Fuente: Propio
Además del mensaje de error, el código mostrado en la figura 28 añade efectos
sobre el formulario para notificar al usuario el campo que debe de corregir para poder
continuar, tal y como se muestra en la siguiente figura:
Figura 30 Efecto visual sobre error en el formulario
Fuente: Propio
Como se puede apreciar, resulta bastante sencillo poder cuidar la integridad de los
datos de un sistema a través de estas herramientas, sin mencionar que el código
resultante es mínimo e intuitivo por los programadores.
61
3.3.3 Encriptamiento de datos
Una vez se haya verificado que los datos enviados al servidor mediante
formularios o cualquier otro método de entrada del sistema, es necesario protegerlos
con el uso de algoritmos de encriptamiento de datos. Regularmente los únicos datos
que utilizan estos algoritmos son contraseñas e información financiera, sin embargo,
los métodos empleados son completamente obsoletos. Para el desarrollo de un
sistema ERP es importante emplear algoritmos fuertes y actualizados que brinden
seguridad a los mismos, para ejemplo de esta tesina, se muestra la forma de
encriptar un correo electrónico empleando las funciones AES_DECRYPT y
AES_ENCRYPT, ambas nativas de MySQL, tal y como puede observarse en las
siguientes figuras:
Figura 31 Encriptamiento de datos usando AES_ENCRYPT
Fuente: Propio
Como puede apreciarse en la figura anterior, la función AES_ENCRYPT recibe dos
argumentos, siendo el primero el texto a “encriptar” y el segundo una palabra clave,
la cual se encarga de convertir dicha cadena a una serie de caracteres ilegibles para
cualquier persona que tenga acceso visual al texto resultante en cuestión.
Para poder revertir el proceso, se emplea la función AES_DECRYPT, la cual recibe
los mismos parámetros que su función opuesta. Un ejemplo de su uso se muestra a
continuación.
Figura 32 Desencriptamiento de datos usando AES_DECRYPT
Fuente: Propio
62
Un factor sumamente importante de aclarar es que para poder desencriptar una
cadena mediante la función AES_DECRYPT, la palabra clave debe ser exactamente
la misma que se empleó para encriptar el texto, en caso contrario, el resultado será
un texto vacío o sin sentido, quedando el dato ilegible.
Un ejemplo de una cadena encriptada mediante la función AES_ENCRYPT puede
ser apreciada en la siguiente figura, mostrando la cadena desencriptada y
encriptada:
Figura 33 Comparación de texto plano y encriptado
Fuente: Propio
Como puede observarse en la figura anterior, el texto encriptado usualmente es 2 e
incluso hasta 3 veces más grande que el texto original, esto es debido a que los
caracteres empleados para encriptar tienen un mayor espacio en memoria que los
introducidos originalmente.
Cabe destacar que mientras más extensa sea la palabra clave o más difícil de
adivinar más seguro resultará el encriptamiento de datos, pues que, como se dijo
anteriormente, solo con la palabra clave es posible volver a desencriptar los datos de
forma que sean legible para cualquier persona.
Para implementar las siguientes funciones en el framework de Laravel, es necesario
crear una función que sea capaz de enviar y extraer el contenido de la base de datos
cada que vez que el usuario así lo requiera.
En las siguientes imágenes se muestran las funciones adaptadas a la sintaxis de
Laravel:
63
Figura 34 Inserción de datos encriptados con Laravel
Fuente: Propio
En la función mostrada en la figura anterior puede apreciarse que se hace el uso de
la función AES_ENCRYPT, sin embargo, por temas de seguridad, también se hace el
uso del método de “bindeo” de datos con un arreglo, esto consiste en proteger una
consulta de MySQL contra la inyección de código, es decir, que no se permita poner
código SQL malintencionado que haga operaciones no deseadas como borrar una
tabla, cambiar registros, e incluso eliminar la base de datos completa.
En la siguiente figura se muestra cómo extraer los datos desencriptados a través de
Laravel:
Figura 35 Extracción de datos con Laravel
Fuente: Propio
La anterior figura muestra claramente el uso del estilo de programación Modelo Vista
Controlador, ya que la función que se observa se encuentra en un archivo
Controlador que a su vez manda a llamar una función de otro archivo (Modelo), para
posteriormente almacenar el resultado de la función en una variable, en este caso
“usuarios” para finalmente mandar dicha variable a la vista que se muestra en la ruta
“Administrador/Usuarios/Permisos”.
64
Un ejemplo de una función de un modelo de Laravel puede ser apreciado en la
siguiente figura:
Figura 36 Función de un modelo de Laravel
Fuente: Propio
Finalmente solo queda mostrar los datos a la vista del usuario, esto puede ser
logrado a través de múltiples formas, las más comunes son tablas y listas. En las
siguientes dos figuras puede observarse cómo manejar los datos en una vista de
Laravel y cómo se muestran al usuario Final.
Figura 37 Manejo de datos de una vista de Laravel
Fuente: Propio
65
Figura 38 Vista para el usuario final
Fuente: Propio
Siguiendo este procedimiento, es posible crear múltiples vistas al usuario
permitiéndole manejar los datos del sistema a través de algoritmos, funciones y
métodos que nos ofrece Laravel, Materialize y MySQL en conjunto.
Cabe aclarar que aunque Laravel maneja diversas formas de obtener datos, la forma
que se muestra en esta tesina es tan solo un ejemplo de muchos, la razón de
mostrar esta en específico es debido a su seguridad e integridad de datos, ya que
evita los fallos más comunes en un sistema como la inyección de código SQL,
introducción de datos erróneos, etc.
66
3.3.4 Respaldo de proyectos con git
Mantener respaldos de un proyecto tan extenso como un ERP es
siempre importante, las razones, como ya han sido mencionadas anteriormente,
pueden ser debido a que los fallos de servidores son muy comunes, retrasando el
desarrollo de un proyecto o porque múltiples programadores trabajan en conjunto
para el desarrollo del mismo sistema.
A continuación se explicará cómo utilizar la herramienta git para poder realizar
versiones del proyecto, a fin de evitar problemas futuros.
Al usar git, el primer paso a seguir siempre será la creación de un repositorio, en la
siguiente figura puede apreciarse el comando “init” para inicializar un repositorio
vacío.
Figura 39 Inicializar un repositorio con git
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Como se observa en el código de la figura anterior, es necesario posicionarse o crear
una carpeta nueva en donde se requiera que esté el repositorio, y ejecutando el
comando “init” automáticamente se creará una nueva carpeta con la extensión “.git”.
Esta carpeta se mantendrá oculta si se utiliza cualquier sistema operativo de Linux,
sin embargo, si se utiliza un sistema operativo de Windows o de Mac OS X, es muy
probable que se mantenga visible, por lo que es recomendable no modificar ni mover
la carpeta, debido a que el más mínimo cambio a su contenido de forma manual de
parte del usuario podría dejar inutilizable dicha carpeta.
67
Una vez creado el repositorio de trabajo (es importante recordar que el repositorio de
trabajo se crea en la misma ruta donde se ha ejecutado el comando “init”) se debe
empezar a trabajar como normalmente se haría en cualquier proyecto, ya sea
añadiendo código o realizando cambios. Por ejemplo, si se tuvieran varios archivos
que se desean subir al repositorio de trabajo para guardarlos se deben agregarlos al
“staging index”, el cual es un área temporal donde se añaden archivos cuyos
cambios se requieren ser guardados posteriormente en el repositorio de trabajo.
Para agregar un archivo al “staging index” se utiliza el comando “add” seguido del
nombre del archivo que se desea agregar. La siguiente figura muestra un ejemplo de
dicho comando.
Figura 40 Agregando archivos al “staging index” con el comando “add”
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Como puede apreciarse en la imagen, también se puede hacer uso del comando
“status” con el fin de poder ver los archivos que se encuentran actualmente en el
“staging index” para ser agregados posteriormente al repositorio de trabajo.
68
Una vez que se agregan los archivos al “staging index” es necesario ejecutar el
comando “commit” para poder guardar los archivos en el repositorio de trabajo, e
inmediatamente se abrirá el editor de texto predeterminado del sistema operativo en
el que se esté trabajando actualmente, esto con la finalidad de que se guarde un
mensaje que describa dicho commit y que en un futuro cualquier persona que desee
ver los detalles del mismo pueda saber de forma rápida en qué consisten los
cambios y el autor que lo realizó. En las siguientes dos figuras se aprecia un ejemplo
del uso del comando git seguido de un ejemplo de un mensaje de la acción en un
editor de texto.
Figura 41 Ejemplo de un mensaje describiendo el commit
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Una vez realizado un commit, es posible acceder a ellos para ser trabajados, pero en
ocasiones, suele suceder que se agregan archivos al “staging index” de forma
errónea, por ejemplo cuando se agrega un archivo que ha sido movido a otra carpeta
o porque simplemente el archivo dejó de ser importante para el proyecto en sí y no
es necesario enviarlo en un commit, por lo que para remover un archivo del “staging
index” es necesario ejecutar el comando “reset HEAD” seguido del nombre del
archivo a remover.
69
En la siguiente imagen se muestra un ejemplo de este comando.
Figura 42 Removiendo un archivo del staging index
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Como puede observarse en la figura anterior, se hace uso del comando “status” para
corroborar que el archivo “main.c” ha sido descartado del staging index, por lo que en
el siguiente commit dicho archivo no se guardará en el repositorio de trabajo.
Una vez realizado un commit, se pueden ver los cambios que ha estado teniendo el
repositorio de trabajo empleando el comando “log”.
Una vez ejecutado el comando, se mostrarán todos los commit realizados en el
repositorio de trabajo junto con sus mensajes. En la siguiente figura puede
observarse un ejemplo de lo mencionado anteriormente.
70
Figura 43 Detalles y mensajes de commit mediante el comando log
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
El principal flujo de trabajo de Git son las ramas. Una rama es una línea de desarrollo
donde un commit sigue al anterior, que sigue a un commit anterior y así hasta que se
llame a un commit que sigue al primer commit de todos.
Las ramas resultan convenientes cuando varios programadores se encuentran
desarrollando un mismo proyecto, ya que si estos se encuentran trabajando en la
misma rama, habría conflictos al momento de realizar commits, puesto que estarían
modificando los mismos archivos (lo cual no es correcto) [56].
Para crear una nueva rama se ejecuta el comando “branch” seguido del nombre de la
rama. En la siguiente figura se aprecia el uso de este comando.
Figura 44 Creación de una rama con el comando “branch”
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
71
Para ver todas las ramas creadas de un repositorio simplemente se usa el mismo
comando sin especificar un nombre tal y como se muestra en la siguiente figura.
Figura 45 Ver ramas creadas
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Para cambiar de una rama a otra se utiliza el comando “checkout” seguido del
nombre de la rama a la que se desea cambiar.
Figura 46 Cambiar entre ramas
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Una vez realizados los cambios necesarios a dos ramas, es conveniente fusionar los
cambios en las ramas, por lo que se accede a la rama de destino para finalmente
ejecutar el comando “merge” indicando la rama de origen de la cual se quieren
mezclar datos.
72
Por último, si por alguna razón se realizaron cambios en el proyecto que provocaron
bugs o cambios que se mandaron en un commit y se desea volver a alguna versión
anterior en el sistema es necesario utilizar el comando “checkout” seguido del código
o etiqueta del commit, esto lleva a una versión anterior del proyecto y permite
trabajar con esta normalmente. La siguiente figura muestra un ejemplo de la acción
descrita anteriormente.
Figura 47 Recuperación de versiones anteriores
Fuente: https://www.youtube.com/watch?v=QGKTdL7GG24
Con este último paso se concluye el procedimiento en que un proyecto puede ser
respaldado por uno o más desarrolladores conservando múltiples versiones y ramas
que pueden ser modificadas o recuperadas por estos mismos en cualquier momento.
73
Capítulo IV
Resultados
74
4.1 Introducción
En este penúltimo capítulo se hablará acerca de los resultados que se
obtienen al implementar un sistema ERP de forma exitosa siguiendo la metodología
descrita en páginas anteriores, mencionando además las acciones que deben
realizarse una vez implementado el sistema para su correcto desempeño en las
empresas.
Es importante tener en cuenta que los requisitos de un sistema siempre varían en la
etapa de desarrollo, por lo que los resultados esperados al principio del análisis de
requerimientos en la mayoría de los casos serán distintos a los obtenidos en la etapa
de la implementación del sistema.
Las capacitaciones también deben de tomarse en cuenta a la hora de entregar un
sistema al cliente, ya que esta puede ser el paso final para que el uso de un sistema
ERP sea todo un éxito en las empresas, ya que, cómo se ha mencionado en
capítulos anteriores, los empleados son los usuarios finales de un sistema.
Por último también se mencionan varios puntos que destacan las ventajas y
beneficios que puede tener un sistema ERP, tales como aumentar la competitividad
empresarial, contar con un registro de materiales, contar con la administración de
recursos financieros, etc.
Las empresas que no cuentan con estas herramientas de forma interna, pueden ver
desacelerado su crecimiento debido a que, en el caso de empresas pequeñas, no se
cuenta con suficiente personal como para administrar tantas tareas en tan poco
tiempo.
75
4.2 Análisis de Datos
La implementación de un sistema ERP en las empresas con un giro
tecnológico conlleva a grandes ventajas. Por ejemplo, si una empresa comienza a
crecer de forma que pasa de pequeña empresa (lo equivalente a tener entre 11 y 50
empleados) a ser una mediana empresa (entre 51 y 200 empleados) [57] es evidente
que los métodos y herramientas tradicionales (por ejemplo las herramientas
ofimáticas como Word y Excel) para el manejo de todo tipo de recursos
empresariales se vuelve insuficiente, debido a que no se cuenta en si con una base
de datos para el respaldo de información personal de la empresa [58].
Al tener un sistema personalizado acorde a sus necesidades, no solo se cuenta con
dicha base de datos que resguarde su información, si no que a su vez ésta se
encuentra de forma disponible en la nube las 24 horas, por lo que cualquier
empleado que tenga acceso a dicho sistema puede manejar y dar de alta datos al
ERP.
Por ejemplo, si un cliente que se encuentra fuera del país trabajando bajo un
proyecto y se viera obligado a dar de alta el reporte de sus gastos estando allá, si se
cuenta con un módulo de reporte de gastos el empleado podría acceder fácilmente
desde cualquier plataforma de su gusto, ya sea su computadora personal, Tablet o
incluso su teléfono móvil, por lo que estaría al corriente día con día registrando los
gastos correspondientes de su estancia en el extranjero.
Las ventajas más destacables de contar con un sistema ERP se enlistan a
continuación:
1. Un ERP aporta mayor eficiencia
Al tener todas las operaciones de la empresa contenidas en un mismo sistema, es
posible obtener importantes mejoras en eficiencia automatizando tareas
administrativas. Los procesos operativos de cualquier empresa llevan siempre
asociados la generación de documentos como reportes, gráficas, etc. además de la
necesaria ejecución de los procedimientos que garantizan una colaboración fluida.
76
Un buen ERP ha de ser capaz de automatizar parte de esos procesos y ayudar a
mejorar la seguridad de los mismos. Además, evitan la inserción de datos duplicados
y los errores asociados, ahorrando una gran cantidad de horas de trabajo. Por otro
lado, el disponer de un único depósito de datos fácilmente accesible reduce el
esfuerzo necesario para acceder a la información [59].
2. Mayor control y trazabilidad
Un ERP es básicamente un sistema transaccional, esto significa que se encarga de
recoger y reflejar una gran cantidad de cambios que tienen lugar en la organización
como consecuencia de su actividad. Esto permite tener un mayor control sobre todas
las operaciones realizadas de forma interna.
3. Un ERP aumenta la capacidad operativa
Una mejora interna en la eficiencia empresarial puede ser utilizada para atender a
más clientes, fabricar más productos u ofrecer más servicios, según sea el giro de la
empresa. Esto depende de la estrategia u orientación de la misma, pero es siempre
un paso imprescindible para todas las organizaciones que quieren crecer.
En resumen, son muchos los beneficios en la implementación de un ERP, tal como la
reducción del tiempo en que se administra la información privada, contar con un
historial de actividades internas e información financiera.
Finalmente solo cabe mencionar que el sistema ERP en cuestión se encuentra
abierto a poder integrar nuevas funcionalidades conforme crece la empresa y/o
institución debido a que, como se crean bajo tecnologías web y herramientas de
creación de versiones del proyecto como git, es fácil integral nuevas funcionalidades
por parte de los autores originales del sistema u otros programadores que trabajen
en este.
77
4.2.1 Capacitaciones
Concluido con el desarrollo y la implementación del sistema, lo
siguiente es dar capacitaciones a todos aquellos empleados que harán uso del
mismo. Aunque el sistema sea intuitivo y se encuentre validado para preservar la
integridad de sus datos, es importante dar una formación a los usuarios finales y
crear documentación tal como manuales de usuario y guías técnicas.
Cuando se implementa un Sistema ERP, inevitablemente se afectará a todas las
áreas de la empresa, desde administración hasta producción, pasando por recursos
humanos, financieros y marketing [60].
Las capacitaciones regularmente abarcan un periodo de 2 a 4 semanas,
dependiendo de la complejidad de cada uno de los módulos, teniendo una duración
de al menos 1 hora por día.
En el mundo de la informática es muy común ver la colaboración como método de
trabajo. Llevar esto a la empresa mediante el ERP, hacer que el usuario se
identifique con su tarea, que se sienta seguro, que sepa que tiene el apoyo de la
empresa proveedora del sistema, que es escuchado (aunque no siempre sugiera
algo útil) , necesariamente va a contribuir con un éxito de la implementación menos
accidentada.
4.2.2 Futuras modificaciones
No obstante cabe recalcar que se tiene que tener en cuenta que en un
futuro puede llegar otro programador a modificar el sistema, por lo que es importante
dejar dos versiones de este: una para desarrollo, la cual consiste en documentar por
medio de comentarios en cada archivo del sistema (únicamente aquellos que son
programados desde cero como el caso de vistas, controladores y modelos), crear
diagramas de flujo, diagramas de entidad relación y diccionario de datos.
78
La segunda versión del sistema es la comercial, la cual consiste en comprimir en
una sola única línea de código los archivos de JavaScript, HTML y CSS, con el fin
de reducir el tiempo de carga del sistema.
4.2.3 Respaldo de base de datos
Una base de datos de un ERP puede ser poblada fácilmente en
cuestión de meses, por lo que el rendimiento en el manejo de datos del sistema se
ve afectado siempre negativamente, tardando más en el cargado de registros o la
modificación de datos.
Es por ello que es necesario contar con copias de seguridad de la base de datos
cada cierto tiempo, siendo lo recomendable al menos una vez a la semana. Sin
embargo, el restablecimiento de una base de datos desde cero, debe de darse al
menos una vez al año, guardando copias de los registros, ya que a final de cuentas
sirven de historial y resulta información valiosa para la empresa. Si no se
restableciera una base de datos de forma regular, el sistema terminaría con un muy
bajo rendimiento, independientemente del tipo de servidor o hosting que se tenga
contratado para el ERP.
79
Capítulo V
Discusión
80
5.1 Conclusiones
Como se pudo observar a lo largo de toda esta tesina, se puede
apreciar que el uso de un sistema ERP conlleva una gran cantidad de procesos para
poder llevarse a cabo correctamente, empezando por reunir los requerimientos que
deberá cumplir el sistema para que la empresa pueda aprovechar el uso de esta
herramienta tan poderosa.
Cada día más y más compañías empiezan a ver el poder de internet, por lo que
resulta interesante que surja un gran mercado al que pueden orientarse los
desarrolladores, debido a la gran cantidad de oportunidades que puede existir en
cada una de estas empresas, independientemente de si son pequeñas o medianas.
Como desarrolladores, es indispensable que se pueda tener gusto por el
autoaprendizaje, ya que el mundo de la informática es extremadamente amplio, y
actualmente surgen nuevas metodologías, librerías, frameworks y programas que
son más competentes que sus antecesores por lo que mantenerse actualizado al día
es sin duda un factor importante que distingue a un buen programador de los demás.
Saber escuchar al cliente también es importante. Planear entrevistas o reuniones
para conocer sus necesidades para que formen parte de los requerimientos de un
sistema que pueda solucionar y cubrir las actividades y recursos que se emplean a
diario en los distintos departamentos de una empresa.
81
5.2 Recomendaciones y/o sugerencias
- Conocer y dominar las herramientas necesarias para el desarrollo web.
- Contar con medidas de seguridad para el manejo de versiones de un proyecto.
- Seguir un estándar de programación durante todo el periodo de desarrollo del
sistema.
- Entregar avances del desarrollo del proyecto al cliente cada cierto periodo de
tiempo no mayor a 2 semanas para que éste pueda determinar si su progreso es el
deseado.
- Adquirir un servicio de hosting para la implementación del sistema.
- Contar con un plan de emergencia en caso de que el servidor que hospeda el
sistema ERP sufra de fallos o ataques, al tratarse de un servicio externo de la
empresa, esta no tiene el control sobre su rendimiento en la nube.
- Manejar funciones nativas a nivel base de datos para el encriptamiento de datos.
- Realizar documentación del sistema ERP.
- Otorgar cursos de capacitación a los usuarios finales del sistema.
- Manejar dos versiones del sistema ERP: Versión de desarrollo y versión de
producción.
82
Definición de términos
Sistema ERP: Son aquellos sistemas que integran y manejan negocios,
compañías y/o empresas asociados con las operaciones de producción y
servicios y que permiten la administración de sus recursos.
Lenguaje de programación web: Es un lenguaje formal que se utiliza para
desarrollar aplicaciones que se ejecutan desde servidores localizados en el
internet.
Proceso administrativo: Es un conjunto de fases o etapas sucesivas a
través de las cuales se efectúa la administración, mismas que se
interrelacionan y forman un proceso integral.
Encriptamiento: Es una medida de seguridad que se emplea para transferir
o almacenar datos de forma que sean solo legibles a través de ciertos
procedimientos.
Librería: Es un conjunto de implementaciones funcionales, codificadas en un
lenguaje de programación, que ofrece una interfaz bien definida para la
funcionalidad que se invoca.
Framework: Es un conjunto estandarizado de conceptos, prácticas y criterios
para enfocar un tipo de problemática particular que sirve como referencia,
para enfrentar y resolver nuevos problemas de índole similar.
Laravel: Es un framework de código abierto para desarrollar aplicaciones y
servicios web con PHP 5. Su filosofía es desarrollar código PHP de forma
elegante y simple, evitando el "código espagueti". Fue creado en 2011 y tiene
una gran influencia de frameworks como Ruby on Rails, Sinatra y ASP.NET
MVC.
Internet: Es la unión de todas las redes y computadoras distribuidas por todo
el mundo, siendo una red global en la que se conjuntan todas las redes que
utilizan protocolos TCP/IP y que son compatibles entre sí.
83
Integridad de datos: Se refiere a la forma de almacenar datos de forma
correcta y comprobar que cada uno de estos sean válidos, por ejemplo, si un
correo electrónico está bien escrito, o si un número de teléfono no contiene
caracteres no permitidos como letras.
Algoritmo: Conjunto ordenado de operaciones sistemáticas que permite
hacer un cálculo y hallar la solución de un tipo de problemas.
Informática: Conjunto de conocimientos técnicos que se ocupan del
tratamiento automático de la información por medio de computadoras.
84
Referencias Bibliográficas
[1] Mexired, «http://www.mexired.com,» 20 Marzo 2015. [En línea]. Available:
http://www.mexired.com/blog/el-avance-tecnologico-en-mexico. [Último acceso: 12 Octubre
2016].
[2] Dataprix, «http://www.dataprix.com,» 12 Marzo 2014. [En línea]. Available:
http://www.dataprix.com/articulo/erp/cual-origen-erp-invento-militar-software-
imprescindible-las-empresas. [Último acceso: 08 Octubre 2016].
[3] Wikipedia, «https://es.wikipedia.org,» 12 Octubre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Criptograf%C3%ADa. [Último acceso: 15 Octubre 2016].
[4] L. Rosen, «http://rosenlaw.com,» 08 Enero 2007. [En línea]. Available:
http://rosenlaw.com/OSL3.0-explained.htm. [Último acceso: 12 Octubre 2016].
[5] B. D. Software, «http://web.archive.org,» 2015 Noviembre 23. [En línea]. Available:
http://web.archive.org/web/20130717084243/http://osrc.blackducksoftware.com/data/licens
es/index.php. [Último acceso: 13 Octubre 2016].
[6] P. R. Croll, «http://www.crosstalkonline.org,» 05 Abril 2011. [En línea]. Available:
http://static1.1.sqspcdn.com/static/f/702523/17039817/1331310005287/201203-
Croll.pdf?token=acTfdr9%2BKBInAN6QGz%2Fl9DgX7n0%3D. [Último acceso: 27 10 2016].
[7] F. R. Jacobs, 06 Diciembre 2006. [En línea]. Available:
http://orennahum.dyndns.org/PDFs/ERP/Enterprise%20resource%20planning%20(ERP)%20-
%20A%20brief%20history.pdf. [Último acceso: 20 10 2016].
[8] U. A. D. NORESTE, «http://www.monografias.com/,» Monografías.com, 23 Marzo 2007. [En
línea]. Available: http://www.monografias.com/trabajos23/planeacion-
requerimientos/planeacion-requerimientos.shtml. [Último acceso: 18 10 2016].
[9] G. Martínez, «http://es.slideshare.net/Gabitamv/mrp-y-mrp-ii,» 12 Octubre 2013. [En línea].
Available: http://es.slideshare.net/Gabitamv/mrp-y-mrp-ii. [Último acceso: 12 10 2016].
[10] M. D. W. y. B. P. J. NARASIMHAM Seetharama L., «Planeación de la producción y control de
inventarios,» de Qué es MRP II, Planificación de los Recursos de Manufactura, Chicago,
GestioPolis, 2001, p. 431.
[11] Sage, «http://www.sage.es,» 12 Noviembre 2000. [En línea]. Available:
http://www.sage.es/cabecera/sobre-sage/la-empresa. [Último acceso: 25 Octubre 2016].
85
[12] http://www.thocp.net, «http://www.thocp.net,» 14 Marzo 2013. [En línea]. Available:
http://www.thocp.net/companies/microsoft/microsoft_company_part2.htm. [Último acceso:
28 Octubre 2016].
[13] Wikipedia, «https://es.wikipedia.org,» 22 Noviembre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Microsoft_Access. [Último acceso: 2016 Noviembre 23].
[14] M. Sierra, «http://www.aprenderaprogramar.com,» 12 Marzo 2015. [En línea]. Available:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=542:
que-es-un-servidor-y-cuales-son-los-principales-tipos-de-servidores-proxydns-webftppop3-y-
smtp-dhcp&catid=57:herramientas-informaticas&Itemid=179. [Último acceso: 20 Noviembre
2016].
[15] L. Pairuna., «http://www.codedimension.com.ar,» 2016 Abril 13. [En línea]. Available:
http://www.codedimension.com.ar/noticias-sobre-tecnologia/noticias/-que-es-y-para-que-
sirve-un-sitio-web-/1. [Último acceso: 2016 Noviembre 21].
[16] D. Mozilla, «http://www.dmoz.org,» 08 Enero 2015. [En línea]. Available:
http://www.dmoz.org/Computers/Data_Formats/Database/. [Último acceso: 10 Noviembre
2016].
[17] U. P. d. Valencia, «http://histinf.blogs.upv.es,» 04 Enero 2011. [En línea]. Available:
http://histinf.blogs.upv.es/2011/01/04/historia-de-las-bases-de-datos/. [Último acceso: 23
Noviembre 2016].
[18] Wikipedia, «https://es.wikipedia.org,» 27 Abril 2007. [En línea]. Available:
https://es.wikipedia.org/wiki/Oracle_Database. [Último acceso: 16 Noviembre 2016].
[19] U. Blogs, «https://basededatosunounivia.wordpress.com/,» 13 Marzo 2015. [En línea].
Available: https://basededatosunounivia.wordpress.com/2015/03/13/oracle-vs-mysql-vs-sql-
server-una-comparacion-. [Último acceso: 28 Noviembre 2016].
[20] Gabriel, «http://encripdedatos.blogspot.mx/,» 20 Septiembre 2007. [En línea]. Available:
http://encripdedatos.blogspot.mx/. [Último acceso: 19 Noviembre 2016].
[21] M. T. Abzug, «http://userpages.umbc.edu,» 02 Diciembre 2000. [En línea]. Available:
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html. [Último acceso: 20 Noviembre
2016].
[22] J. Gilmore, «http://web.archive.org,» 1999 18 Enero. [En línea]. Available:
http://web.archive.org/web/20010818144309/www.eff.org/Privacy/Crypto_misc/DESCracker/
. [Último acceso: 22 Noviembre 2016].
86
[23] J. W. &. Sons, APPLIED CRYPTOGRAPHY, Nueva York: 2nd Edition Bruce Schneier, 1996.
[24] Redeszone, «http://www.redeszone.net,» 04 Noviembre 2010. [En línea]. Available:
http://www.redeszone.net/2010/11/04/criptografia-algoritmos-de-cifrado-de-clave-
simetrica/. [Último acceso: 24 10 2016].
[25] S. L. Mora, «http://desarrolloweb.dlsi.ua.es,» 12 Julio 2012. [En línea]. Available:
http://desarrolloweb.dlsi.ua.es/cursos/2012/nuevos-estandares-desarrollo-sitios-
web/compatibilidad-. [Último acceso: 16 Noviembre 2016].
[26] J. P. P. y. A. Gardey, «http://definicion.de,» 12 Octubre 2012. [En línea]. Available:
http://definicion.de/html/. [Último acceso: 19 Noviembre 2016].
[27] D. R. Baral, «http://stackoverflow.com,» 15 Octubre 2015. [En línea]. Available:
http://stackoverflow.com/questions/18083056/css-what-are-moz-and-webkit. [Último acceso:
21 Noviembre 2016].
[28] E. González, «http://aprenderaprogramar.com,» 13 Enero 2016. [En línea]. Available:
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=590:ique-
es-y-para-que-. [Último acceso: 15 Noviembre 2016].
[29] Wikipedia, «https://es.wikipedia.org,» 20 Octubre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Document_Object_Model. [Último acceso: 24 Noviembre 2016].
[30] I. A. Diaz, «http://serprogramador.es,» 12 Abril 2014. [En línea]. Available:
http://serprogramador.es/que-es-frontend-y-backend-en-la-programacion-web/. [Último
acceso: 23 Noviembre 2016].
[31] M. Merino, «http://www.ticbeat.com,» 2014 Julio 12. [En línea]. Available:
http://www.ticbeat.com/tecnologias/que-es-una-api-para-que-sirve/. [Último acceso: 2016
Noviembre 21].
[32] PHP, «http://php.net,» 09 Octubre 2008. [En línea]. Available: http://php.net/manual/es/intro-
whatis.php. [Último acceso: 12 Noviembre 2016].
[33] W. Archive, «http://web.archive.org,» 26 Febrero 2006. [En línea]. Available:
http://web.archive.org/web/20071030180009/http://es2.php.net/history. [Último acceso: 02
Noviembre 2016].
[34] W. Archive, «http://web.archive.org,» 13 Marzo 2009. [En línea]. Available:
http://web.archive.org/web/20090313075416/http://professional-
hacker.org/temporal/ataquemitm.htm. [Último acceso: 20 Noviembre 2016].
87
[35] M. Rouse, «http://searchsecurity.techtarget.com,» 23 Mayo 2013. [En línea]. Available:
http://searchsecurity.techtarget.com/definition/distributed-denial-of-service-attack. [Último
acceso: 19 Octubre 2015].
[36] Wikipedia, «https://es.wikipedia.org,» 18 Noviembre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Git. [Último acceso: 09 Octubre 2016].
[37] Git, «https://git-scm.com/,» 27 Febrero 2014. [En línea]. Available: https://git-scm.com/about.
[Último acceso: 20 Octubre 2016].
[38] J. A. Tubio, «https://github.com,» 23 Mayo 2015. [En línea]. Available:
https://github.com/jatubio/5minutos_laravel/wiki/Estandares-de-programacion.-PSR-2.
[Último acceso: 26 Octubre 2016].
[39] Wikipedia, «https://es.wikipedia.org,» 13 Octubre 2015. [En línea]. Available:
https://es.wikipedia.org/wiki/Diccionario_de_datos. [Último acceso: 03 Noviembre 2016].
[40] D. G. H. Robles, «http://katyygaby.blogspot.mx,» 10 Enero 2012. [En línea]. Available:
http://katyygaby.blogspot.mx/p/diccionario-de-datos.html. [Último acceso: 20 Octubre 2016].
[41] M. Rose, «http://searchdatacenter.techtarget.com,» 14 Abril 2009. [En línea]. Available:
http://searchdatacenter.techtarget.com/es/definicion/Modelado-de-datos. [Último acceso: 12
Noviembre 2016].
[42] «http://www.vbote.com/,» 02 Diciembre 2014. [En línea]. Available:
http://www.vbote.com/vbote-solutions-academy-blog/130-materialize-el-framework-con-
principios-de-. [Último acceso: 10 Octubre 2016].
[43] A. C. A. M. K. L. Alvin Wang, «http://materializecss.com/,» 20 Octubre 2016. [En línea].
Available: http://materializecss.com/about.html. [Último acceso: 02 Noviembre 2016].
[44] A. Informativa, «http://blog.aulaformativa.com,» 11 Agosto 2014. [En línea]. Available:
http://blog.aulaformativa.com/principales-ventajas-y-desventajas-de-emplear-una-
framework-css/. [Último acceso: 16 Octubre 2016].
[45] Patricio, «http://desarrollandowebsdinamicas.blogspot.mx,» 21 Marzo 2013. [En línea].
Available: http://desarrollandowebsdinamicas.blogspot.mx/2013/03/que-es-laravel.html.
[Último acceso: 06 Noviembre 2016].
[46] Wikipedia, «https://es.wikipedia.org,» 14 Octubre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador. [Último
acceso: 30 Octubre 2016].
88
[47] E. F. Cases, «http://www.ibrugor.com,» 31 Octubre 2013. [En línea]. Available:
http://www.ibrugor.com/blog/que-es-ajax-para-que-sirve/. [Último acceso: 04 Noviembre
2016].
[48] jQuery, «http://jquery.com/,» 26 Septiembre 2015. [En línea]. Available: http://jquery.com/.
[Último acceso: 16 Noviembre 2016].
[49] Wikipedia, «https://es.wikipedia.org,» 27 Septiembre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Sublime_Text. [Último acceso: 07 Noviembre 2016].
[50] Softonic, «https://sqlyog-community-edition.softonic.com,» 10 Noviembre 2015. [En línea].
Available: https://sqlyog-community-edition.softonic.com/descargar. [Último acceso: 25
Octubre 2016].
[51] Webyog, «https://www.ecured.cu,» 21 Enero 2014. [En línea]. Available:
https://www.ecured.cu/SQLyog. [Último acceso: 24 Noviembre 2016].
[52] G. Oliveira, «http://www.gianoliveira.com,» 11 Octubre 2013. [En línea]. Available:
http://www.gianoliveira.com/hosting-gratis.html. [Último acceso: 18 Noviembre 2016].
[53] Hostinger, «https://www.hostinger.mx/,» 14 Septiembre 2015. [En línea]. Available:
https://www.hostinger.mx/. [Último acceso: 13 Noviembre 2016].
[54] FileZilla, «https://filezilla-project.org,» 12 Enero 2014. [En línea]. Available: https://filezilla-
project.org/translations.php. [Último acceso: 16 Noviembre 2016].
[55] Wikipedia, «https://es.wikipedia.org,» 24 Octubre 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/FileZilla. [Último acceso: 09 Octubre 2016].
[56] R. Dudler, «http://rogerdudler.github.io,» 29 Julio 2015. [En línea]. Available:
http://rogerdudler.github.io/git-guide/index.es.html. [Último acceso: 28 Octubre 2016].
[57] INEGI, «http://www.inegi.org.mx/,» 17 Julio 2009. [En línea]. Available:
http://www.inegi.org.mx/est/contenidos/espanol/proyectos/censos/ce2009/pdf/RD09-
resumen.pdf. [Último acceso: 14 Noviembre 2016].
[58] Rashid, «http://www.yourerpsoftware.com,» 23 Abril 2009. [En línea]. Available:
http://www.yourerpsoftware.com/content/27-ventajas-e-inconvenientes-de-los-sistemas-erp.
[Último acceso: 18 Noviembre 2016].
[59] O. Golive, «http://onegolive.com/,» 29 Agosto 2015. [En línea]. Available:
http://onegolive.com/es/faq/guia-practica-sobre-erp/ventajas-de-un-erp. [Último acceso: 17
Noviembre 2016].
89
[60] E. ERP, «http://www.evaluandoerp.com,» 11 Noviembre 2008. [En línea]. Available:
http://www.evaluandoerp.com/capacitacion-en-el-uso-del-erp-una-clave-vital-para-el-exito-
de-la-implementacion/. [Último acceso: 10 Noviembre 2016].