Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TFG AlbertMestre
TFG AlbertMestre
Supervisor:
Autor: Carlos Tena Monfort
Albert Mestre Vicente Tutor académico:
Lledó Museros Cabedo
Palabras clave
Keywords
1. Introducción 5
2.1. Metodologı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3
3. Análisis y diseño del sistema 29
4. Implementación y pruebas 49
5. Conclusiones 59
6. Bibliografı́a 61
4
Capı́tulo 1
Introducción
Marie Claire es una empresa que lleva más de 100 años dedicándose a la industria textil. Por
lo que se refiere al departamento informático de la empresa, y mas concretamente a la sección
de desarrollo, actualmente se enfrenta a un proyecto muy grande de cambio en el sistema de
ERP, dentro del cual se incluye el proyecto que se va a describir a continuación. El proyecto
consiste en desarrollar un sistema que sirva de pasarela de unión entre el Sistema Estándar de
Gestión de Almacenes (SEGA) y el ERP de Microsoft Dynamics AX. Dentro de esta pasarela
se incluye un servicio web del lado de AX para recibir la comunicación.
El sistema de SEGA se encarga de optimizar la utilización del espacio fı́sico del almacén e
informar de forma rápida acerca de las cantidades y la localización de los productos almacenados.
Por otra parte Dynamics AX se encarga de gestionar la información y automatizar muchas de
las prácticas de negocio asociadas con los aspectos operativos o productivos de la empresa.
Durante muchos años en la empresa se utilizó un ERP llamado Movex para la gestión de
la información (inventario, ventas, producción, etc). Ya desde un inicio, el sistema de Movex se
implementó con varias deficiencias estructurales y de rendimiento que provocan muchos proble-
mas de funcionamiento y de pérdidas de la información, por tanto se ha decidido migrar toda
la funcionalidad al nuevo sistema ERP de Dynamics AX.
5
y Movex. Estos dos sistemas tienen un protocolo de comunicación basado en ficheros de texto
plano que se muestra en el Anexo A, donde se explica la codificación de la información de
los cambios en el almacén. El cambio de sistema tiene que ser transparente desde el punto de
vista de SEGA, es por eso que se tiene que mantener el sistema de comunicación que se usa
actualmente y construir la pasarela en función de ello.
Por otra parte, el sistema de Dynamics AX recibirá las comunicaciones a través de un servicio
web, el cual hay que crear e implementar en él los servicios necesarios para que pueda recibir
los mensajes que afectan al inventario de la empresa y confirmar si se han podido realizar las
acciones correctamente.
En este apartado se van a comentar los objetivos principales que se pretenden lograr con el
desarrollo del proyecto explicado en este documento. Además también se va a tratar el alcance
del proyecto en sus diferentes ámbitos.
El objetivo principal del proyecto es realizar la pasarela de comunicación que atrape los
mensajes provenientes de SEGA, los analice y los convierta en la información que necesite
Dynamics AX para ası́ mantener los dos sistemas comunicados y consistentes. Del mismo modo,
también tiene que entender los mensajes de AX y convertirlos al protocolo de comunicación
que entiende SEGA. Toda esta comunicación se tiene que realizar en un entorno a prueba
de fallos donde los posibles errores queden registrados y se notifique al encargado de manera
inmediata, por tanto será muy importante cuidar estos temas. Además, aunque la pasarela tenga
actualmente un objetivo muy concreto, se prevé que en un futuro se le añada funcionalidad para
otros ámbitos de la empresa, por tanto, el programa se tiene que desarrollar de manera que sea
fácil añadir estos cambios en un futuro.
Por lo que refiere al alcance del proyecto, se cree bien definido desde el inicio, y se puede
dividir en las secciones que se detallan a continuación.
El sistema ha de permitir leer los mensajes y entenderlos siguiendo la base del protocolo
de comunicación que se tiene implantado actualmente entre SEGA y Movex. Existen
distintos tipos de mensajes y cada uno de ellos se tienen que tratar de forma diferente y
concurrentemente para lograr la mayor eficiencia posible.
Junto con el sistema base habrá un servicio web en el lado de Dynamics AX que será
capaz de recibir la información que el sistema base extraiga de los mensajes, para luego
pasar esa información al ERP que se encargará de hacer las acciones pertinentes con dicha
6
información. Además el servicio web también tiene que contestar al sistema base con el
resultado de su ejecución y cualquier tipo de error que se haya podido generar.
Todo el sistema tiene que ser robusto y a prueba de fallos, por tanto, para evitar que se
pierda información en caso de que ocurra algo en mitad de la comunicación o durante la
ejecución de alguna orden en Dynamics AX, se tiene que crear un sistema de persistencia
que permita saber con seguridad qué parte de los mensajes se ha tratado y cuál no. Además
de eso, todos los errores producidos se tienen que documentar en algún sistema de log que
permita mantener un registro y notificar al responsable del sistema que se ha producido
un error.
La pasarela debe estar funcionando el mayor tiempo posible para no entorpecer el desa-
rrollo de la actividad de la empresa, por tanto se tiene que crear un sistema de watchdog
para controlar las caı́das del sistema y volver a encenderlo en caso de que eso ocurra.
Todo el sistema de comunicación se tiene que poder controlar desde una interfaz gráfica
que permita visualizar el estado de los mensajes que se han tratado o que se estén tratando
en ese momento. Además se tiene que poder encender o apagar ciertos servicios en función
de las necesidades. Junto con esto, la interfaz también tiene que permitir modificar los
parámetros de ejecución de las tareas, tales como los directorios desde donde obtiene los
mensajes, o la frecuencia en que se ejecutan cada uno de los servicios.
La gestión del inventario es un apartado muy importante en una empresa que se dedica a
la producción y venta de artı́culos, y está muy presente en muchos ámbitos de la empresa. Sin
embargo, como este sistema solo gestiona la comunicación entre el gestor del almacén y el ERP
de la empresa, su alcance organizativo está limitado. Por tanto, el sistema afecta principalmente
al departamento de inventario de la empresa, aunque sı́ que se le puede atribuir un poco de
implicación en los departamentos de producción y transporte ya que están muy relacionados
con la gestión del inventario, y por ende, con el sistema de pasarela.
El sistema se tiene que conectar principalmente con otros dos sistemas para poder desarrollar
su funcionalidad:
Por una parte, el sistema tendrá que comunicarse con el sistema de SEGA, que se encarga
de gestionar el almacén. Desde el punto de vista de la pasarela, SEGA es un sistema cerrado
con el cual solo se puede interactuar a través de sus mensajes de comunicación. Tanto a
los mensajes salientes como entrantes a SEGA, se accede a través de unos directorios
concretos a los que si que tiene acceso libre la pasarela de unión.
7
Por otra parte, el sistema tendrá que comunicarse con el ERP de Dynamics AX que
gestiona la información de la empresa. Esta comunicación sı́ que es más libre ya que
se tiene que desarrollar juntamente con la pasarela, por tanto se puede adaptar a las
necesidades del momento. Principalmente la comunicación se realizará a través de uno o
varios servicios web que estarán funcionando dentro del sistema de AX. Sin embargo, la
base de datos que utiliza AX también es accesible para la pasarela de unión, por tanto, si
la información que se necesita es simple, se puede leer directamente de la base de datos
sin necesidad de que AX la gestione.
8
Capı́tulo 2
2.1. Metodologı́a
En este apartado se van a explicar los diferentes motivos que se tuvieron en cuenta en el
momento de decidir que metodologı́a de desarrollo utilizar, además de argumentar las ventajas
que proporciona la metodologı́a utilizada frente a otras posibilidades.
También los requisitos del sistema están muy bien definidos y no se prevén cambios durante
su desarrollo, por tanto, es sencillo planificar su desarrollo con antelación y diseñar el sistema
sin que se tenga que modificar su diseño durante el desarrollo; y por último, el sistema no se va
a poder utilizar hasta que no esté toda su funcionalidad implementada y probada, por tanto,
no tiene sentido centrarse en desarrollar incrementos utilizables como consiguen las metodo-
logı́as ágiles. Parece más sencillo desarrollar y realizar una sola puesta en marcha cuando esté
completamente terminado.
Ahora bien, para la parte del desarrollo del sistema, se van a utilizar herramientas propias
de la metodologı́a ágil para compensar algunas de las carencias de la metodologı́a en cascada y
hacer el desarrollo del sistema mas cómodo. En concreto se va a utilizar un tablero kanban para
agilizar la distribución del trabajo y lograr un desarrollo más fluido.
Por otra parte, como la empresa no se dedica al desarrollo de productos software, el depar-
tamento de desarrollo informático es pequeño. Esto implica que no existe ninguna metodologı́a
de desarrollo muy compleja. En ese sentido, la empresa proporciona libertad para decidir cómo
se quiere planificar el desarrollo. El único punto destacable que se puede aplicar a este proyecto
sobre la metodologı́a de desarrollo en la empresa, son las reuniones que se realizan aproxima-
damente cada dos semanas y en las que participan los informáticos de la empresa y algunos
9
trabajadores que puedan estar interesados en algún producto informático. En estas reuniones se
discuten temas sobre si algún producto nuevo es necesario o no, o el resultado que esté logrando
otro producto, pero nunca se ha hablado sobre cómo se tiene que desarrollar el producto.
Por tanto, la elección de la metodologı́a de desarrollo que se sigue en este proyecto fue
completamente decisión propia, dentro de las posibilidades que la empresa permite. Siguiendo los
criterios expuestos anteriormente, se decidió por utilizar una metodologı́a en cascada, tal como
se mostrará en el apartado siguiente, aunque utilizando herramientas propias de las metodologı́a
ágiles por comodidad y utilidad.
2.2. Planificación
Al ser un proyecto desarrollado en una estancia de prácticas en empresa, a estas fases habrá
que añadir, una sección de aprendizaje, donde se aprenden los conceptos necesarios para el
desarrollo del producto en la empresa, y que se realizará durante el transcurso de la estancia.
El desglose de las tareas del proyecto, junto a su planificación temporal y sus dependencias
se puede ver en la Figura 2.1 (Inicio y propuesta técnica), en la Figura 2.2 (Requisitos, análisis
y diseño) y en la Figura 2.3 (Desarrollo y puesta en marcha).
Como podemos ver en la Figura 2.1, los primeros dı́as de la estancia se dedicaron a conocer la
empresa y su entorno de trabajo informático. Al ser esta una empresa conocida por el alumno
y utilizar un lenguaje de programación (C#) muy similar al utilizado durante el grado de
Ingenierı́a Informática, no fue necesario dedicar mucho tiempo. Se consideró suficiente con
dedicar la jornada de un dı́a de 4 horas.
Con esto también se tomó la decisión de que, en caso de necesitar realizar aprendizaje de
alguna tecnologı́a nueva para el alumno, se realizarı́a a lo largo del desarrollo de la estancia. Esto
fue ası́ porque no se preveı́an necesarias muchas lecciones y no tenı́a sentido dedicar muchas
horas inicialmente al no haber muchas tecnologı́as que necesitaran aprendizaje.
10
Figura 2.1: Diagrama de Gantt donde se muestra la planificación del inicio de las prácticas y el
desarrollo de la propuesta técnica. La duración se muestra en dı́as con jornadas de 4 horas al
dı́a
servirı́a para comprender completamente los objetivos del proyecto y su necesidad dentro de
la empresa. Este apartado se consideró muy importante ya que serı́a la base de conocimiento
a partir de la cual se empezarı́a a analizar y diseñar el proyecto, por tanto, se consideraron
necesarios 11 dı́as de 4 horas cada uno para su desarrollo.
Para lograr el desarrollo de la propuesta técnica, primeramente se dedicarı́an dos dı́as a poner
de acuerdo el proyecto y la metodologı́a de trabajo entre el alumno y el supervisor. Después de
eso, se dedicarı́an otros dos dı́as para que el alumno pudiese comprender los sistemas que serı́an
afectados por el nuevo sistema a desarrollar, lo cual permite identificar mejor el contexto y el
alcance del proyecto.
Finalmente, se emplearı́an siete dı́as para la planificación del proyecto como tal. Primera-
mente se estimaron las tareas que se debı́an realizar y su duración. Esto permitió realizar el
diagrama de Gantt que se muestra en las figuras nombrada en este apartado, además de servir
de base para redactar la propuesta técnica.
Con la propuesta técnica ya entregada, se pasarı́a al desarrollo técnico del proyecto. Para
este desarrollo se estimó una duración de 64 dı́as, ya que serı́a el grueso del proyecto y en lo
que se dedicarı́a más tiempo. (Los detalles de cada una de las fases del desarrollo se mostrarán
en los siguientes apartados de la memoria).
11
Figura 2.2: Diagrama de Gantt donde se muestra la planificación para el análisis y diseño del
sistema. La duración se muestra en dı́as con jornadas de 4 horas al dı́a
El primer paso serı́a definir los requisitos del proyecto de manera más técnica, mediante la
creación y documentación de los diagramas pertinentes. A esta tarea se dedicarı́an siete dı́as.
Se consideró suficiente con ese tiempo ya que mucha de la información necesaria ya se habı́a
obtenido durante las fases anteriores.
Con los requisitos ya definidos se pasarı́a al análisis del sistema, donde se estudiarı́an los
componentes necesarios para el desarrollo del sistema. Esta fase se consideró con más peso que
la anterior, ya que requerı́a de un mayor conocimiento del entorno, y por tanto se estimó su
duración en 13 dı́as. Durante esta fase se realizarı́an los diagramas propios de un análisis de
software, lo cual implicarı́a conocer mejor el entorno del sistema y permitirı́a concretar muchas
de las necesidades del sistema.
Una vez el análisis del sistema esté completado, se comenzarı́a con el diseño del sistema.
Aunque el diseño suele ser una tarea más costosa que el análisis, como muchas de las decisiones
importantes ya se habrı́an tomado durante la fase anterior, se consideró que con 14 dı́as seria
suficiente para terminar. Durante esta fase se documentarı́a la arquitectura del sistema y sus
interacciones con los demás sistemas afectados, además de documentar su resultado. Durante
esta fase también se diseñarı́an los test de integración que se utilizarı́an mas adelante en el
desarrollo.
El último paso para el desarrollo técnico del proyecto, serı́a realizar el desarrollo del sistema y
de las pruebas necesarias para asegurar su funcionamiento. Esta fase se consideró la mas costosa
12
Figura 2.3: Diagrama de Gantt donde se muestra la planificación para el desarrollo técnico y la
puesta en marcha del sistema. La duración se muestra en dı́as con jornadas de 4 horas al dı́a
e importante del proyecto y por tanto se le estimó una duración de 28 dı́as. Cabe destacar que,
como se verá en un apartado posterior, esta es la fase que mas se desvió de su plan inicial durante
el desarrollo. Otro factor que se tuvo en cuenta para dar una duración mayor a esta fase fue
que se preveı́a que se tendrı́a que dedicar algún tiempo para aprender algunas de las posibles
tecnologı́as nuevas para el alumno necesarias para el desarrollo, como puede ser la programación
en un ERP.
Para elegir el orden de implementación de las diferentes partes del sistema, se planteó desa-
rrollar primero la base del programa y dejar las comunicaciones con los otros sistemas para
cuando el sistema base ya estuviera terminado. La interfaz gráfica del programa se planteó
desarrollarse en paralelo al resto del sistema ya que al ser una interfaz simple, no requerirı́a de
mucho esfuerzo. Más detalles de la implementación se comentarán posteriormente en el apartado
de Implementación y pruebas.
La estimación de los recursos necesarios y los costes que pueda tener un proyecto es un
apartado muy importante en la planificación del desarrollo de software. Una mala estimación
de los costes puede llevar a que un proyecto no se considere viable aunque sı́ lo sea, o por el
contrario, que se estime menos costoso de lo real y no se pueda llegar a terminar por falta de
presupuesto. Por tanto, en este apartado se va a realizar un estudio sobre los costes del proyecto
según el modelo basado en puntos de casos de uso. Primeramente se comentará el porqué de
la elección de este modelo frente a posible alternativas, luego se realizará la estimación de los
costes siguiendo los criterios del modelo elegido, y finalmente se añadirá el coste de los recursos
necesarios para el desarrollo y los costes indirectos de la actividad a realizar.
Para la elección del modelo a seguir, se plantearon dos opciones, por un lado el modelo elegido
basado en puntos de casos de uso, y por otro lado el modelo de COCOMO. Ambos modelos
tienes sus ventajas y desventajas, sin embargo, el problema con el modelo de COCOMO para
este proyecto es que esta basado en proyecto históricos y en el número de lı́neas de código que
suelen tener proyectos similares. En el caso de este proyecto, al no ser una empresa que se
dedique explı́citamente al desarrollo de software, no se dispone de suficientes datos históricos
13
Tipo de
Descripción Peso
actor
Otro sistena externo, interactua con el sistema a desarrollar me-
Simple 1
diante una interfaz de programación definida y conocida
Otro sistema externo que interactúa a través de protocolo de co-
Medio 2
municación
Un usuario fı́sico que interactúa a través de una interfaz gráfica
Complejo 3
de usuario
Cuadro 2.1: Parámetros para calificar el peso de los casos de uso según sus interacciones
como referencia. En cambio, el modelo basado en puntos de casos de uso no requiere de datos
históricos, sino que basa sus cálculos en los casos de uso del sistema y sus actores, información
de la que sı́ se dispone.
Por tanto, para realizar la estimación del coste siguiendo el modelo basado en puntos de
casos de uso [1], primero se obtiene el cálculo de los puntos de casos de uso no ajustados
(UUCP, Unajusted Use Case Points). Consiste en calcular el peso tanto para actores (UAW,
Unajusted Actor Weights) como para casos de uso (UUCW, Unajusted Use Case Weights) y
sumar el resultado de UAW y UUCW. Los criterios para la asignación de pesos de los actores se
muestran en la Tabla 2.1. Los actores que se han detectado para este proyecto de desarrollo de
software se muestran a continuación (Una mayor explicación de los actores se puede encontrar
en el apartado de Diseño y Análisis):
SEGA Este actor es un sistema externo que se comunica con el sistema a desarrollar a
través de un protocolo de comunicación basado en ficheros de texto. Como es un protocolo
de comunicación muy concreto y no del todo intuitivo, se considera de Coste medio
Dynamics AX Este actor es un sistema externo que se comunica con el sistema a desa-
rrollar a través de un servicio web, lo cual es una interfaz de programación conocida y
definida. Por tanto, se considera de Coste bajo
Con estos valores ya podemos calcular el UAW nombrado anteriormente siguiendo la si-
guiente ecuación:
P(n−actores)
U AW = i=1 (cantidadT ipoActori ∗ peso)
El siguiente paso sera obtener los pesos de los casos de uso de este proyecto. Los criterios
para la asignación de pesos de los casos de uso se muestran en la tabla 2.2. Los casos de uso que
se han detectado para este proyecto de desarrollo de software se muestran a continuación (Una
mayor explicación de los casos de uso se puede encontrar en el apartado de Diseño y Análisis):
14
Tipo de caso de
Descripción Peso
uso
Simple El caso de uso contiene 3 o menos transacciones 5
Medio El caso de uso contiene entre 4 y 7 transacciones 10
Complejo El caso de uso contiene más de 7 transacciones 15
Cuadro 2.2: Parámetros para calificar el peso de los casos de uso según su número de transac-
ciones
3. El sistema ha de transmitir diariamente por la noche el stock total que tiene el almacén
de SEGA en ese momento. Esto implicará acceder a los directorios de SEGA para obtener
el mensaje y descomponer la información de dentro de ese mensaje según el protocolo de
comunicación, luego mandar las diferencias de stock a AX a través del servicio web para
generar una cabecera del diario de transferencias y las diferentes lı́neas. Un total de 3
transacciones que dan un caso de uso Simple.
15
programa para comprobar si se está ejecutando, acceder a un directorio para comprobar
si se ha generado el fichero de control y acceder al directorio con los ejecutables del sistema.
Un total de 3 transacciones que dan un caso de uso Simple.
7. El sistema debe notificar al encargado cualquier error crı́tico que se produzca durante su
ejecución, además de registrar la incidencia en algún log. Este caso de uso se ejecuta para
todos los demás. Esto implica acceder al sistema de correos de la empresa y al directorio
donde se encuentras los ficheros de log. Un total de 2 transacciones que dan un caso de
uso Simple.
8. El sistema debe permitir al encargado gestionar la ejecución de los servicios, desde en-
cenderlos y apagarlos hasta cambiar su configuración. Esto implica acceder al fichero de
configuración para cambiar los parámetros. Un total de 1 transacción que da un caso de
uso Simple.
Según los criterios expuestos anteriormente, se obtiene un total de 6 casos de uso simples y
2 casos de uso medios. Lo cual, aplicando la siguiente formula, significa un total de 50 puntos.
Por tanto, para obtener el UUCP, solamente tenemos que sumar los valores obtenidos según
la siguiente formula:
U U CP = U AW + U U CW
El siguiente paso es calcular los puntos de casos de uso (UCP, Use Case Points). Consiste en
realizar el producto de los puntos de casos de uso no ajustados, el peso de los factores técnicos
(TCF, Technical Factors) mostrados en la Tabla 2.3 y el peso de los factores ambientales (EF,
Enviroment Factors) mostrados en la Tabla 2.4, los cuales se ponderan respecto a las habilidades
y experiencias del grupo de trabajo. Para calcular los puntos, se deben considerar valores entre
0 y 5, donde: Irrelevante de 0 a 2, Medio de 3 a 4, Esencial 5.
Para el desarrollo del sistema de este documento, se han considerado los siguientes puntos
de factores técnicos:
T2: Al no ser una aplicación que se esté usando continuamente por usuarios no es necesaria
una respuesta inmediata, sin embargo, el programa tiene que ser eficiente en la ejecución
de sus servicios. Obtiene una puntuación de 2 puntos.
T3: El sistema no va a ser usado mucho por usuarios finales, solo en contadas ocasiones,
eso sı́, en el momento de ser usado deberı́a permitir trabajar cómodamente. Obtiene una
puntuación de 2 puntos.
16
Factor Descripción Peso
T1 Sistema distribuido 2
T2 Objetivos de rendimiento o tiempo de respuesta 2
T3 Eficiencia del usuario final 1
T4 Procesamiento interno complejo 1
T5 El código debe ser reutilizable 1
T6 Facilidad de instalación 0.5
T7 Facilidad de uso 0.5
T8 Portabilidad 2
T9 Facilidad de cambio 1
T10 Concurrencia 1
T11 Objetivos especiales de seguridad 1
T12 Acceso directo a terceras partes 1
T13 Es necesaria formación especı́fica 1
T5: Uno de los objetivos del proyecto es desarrollar un sistema que sea ampliable y
reutilizable, por tanto, este criterio es importante, aunque tampoco es completamente
esencial si algún componente resulta muy especı́fico. Obtiene una puntuación de 4 puntos.
T6: La instalación implicará dejar de utilizar otros sistemas, por tanto, requerirá de cierto
trabajo de adecuación. Esto puede complicar en parte la instalación del nuevo sistema.
Obtiene una puntuación de 3 puntos.
T7: El sistema solo va a ser utilizado por personal informático, por tanto no es necesaria
mucha facilidad de uso. Sin embargo, como seguramente se use en intervalos de tiempo
separados, es necesario que se pueda recordar su funcionamiento tras un tiempo sin usarse.
Obtiene una puntuación de 2 puntos.
T8: El sistema esta diseñado para ser usado en un servidor con el sistema operativo
Windows y no se tiene previsto modificar este criterio, por tanto, la portabilidad no es
muy necesaria. Obtiene una puntuación de 0 puntos.
T9: Uno de los criterios del sistema era que se pudiera ampliar fácilmente su funcionalidad
en un futuro. Aunque la nueva funcionalidad no deberı́a ser muy diferente de la inicial, si
que es un criterio muy importante su facilidad de cambio. Obtiene una puntuación de 4
puntos
T10: El sistema trabaja con servicios que funcionan de manera concurrente, aunque, como
ninguno de ellos se deberı́a comunicar entre sı́ ni compartir memoria local, la concurrencia
se facilita bastante. Obtiene una puntuación de 3 puntos.
17
Factor Descripción Peso
E1 Familiaridad con el modelo de proyecto 1.5
E2 Experiencia en la aplicación 0.5
E3 Experiencia en orientación a objetos 1
E4 Capacidades de análisis 0.5
E5 Motivación personal 1
E6 Estabilidad en los requerimientos 2
E7 Personal de medio tiempo -1
E8 Dificultad del lenguaje de programación -1
T12: El objetivo del sistema es prestar comunicación entre sistemas propios de la empresa,
por tanto, no hay ninguna tercera parte que tenga acceso directo. Obtiene una puntuación
de 0 puntos.
T13: El sistema está pensado para ser usado por usuarios informáticos especializados, y
al no tener una interfaz muy complicada, será suficiente con una explicación básica de su
funcionamiento. Obtiene una puntuación de 1 punto
Con los valores asignados ya se puede obtener el TCF según la siguiente formula:
Esto implica que el sistema obtiene un peso de factores técnicos total de 0,815.
El siguiente paso es calcular la puntuación que se otorga a los factores ambientales según
el criterio del equipo de desarrollo. Para el desarrollo del sistema de este documento, se han
considerado los siguientes puntos de factores ambientales:
E1: Se tiene experiencia teórica con este tipo de modelo de proyecto, en cambio, la expe-
riencia práctica no es del todo extensa. Obtiene una puntuación de 3 puntos.
E2: Se tiene experiencia en las aplicaciones de trabajo concurrente y en las que se basan en
comunicación entre sistemas, sin embargo, el ámbito de trabajo del software empresarial
es más desconocido. Obtiene una puntuación de 3 puntos.
E3: Los lenguajes orientados a objetos son principalmente en los que más experiencia se
tiene. Obtiene una puntuación de 5 puntos.
E4: La experiencia teórica sobre el análisis se considera extensa, sin embargo, en el ámbito
práctico se considera que todavı́a queda margen de mejora. Obtiene una puntuación de 3
puntos.
E5: Aunque no es un tipo de proyecto muy llamativo, al formar parte de un trabajo final
de grado y el primer proyecto real para una empresa, hay un nivel de motivación elevado.
Obtiene una puntuación de 4 puntos.
E6: Los requisitos parecen estables inicialmente, aunque no es del todo seguro que no se
pueda llegar a modificar alguno de ellos. Obtiene una puntuación de 4 puntos.
18
E7: Salvo en algunas ocasiones limitadas, el proyecto se desarrolla completamente en
jornadas de medio tiempo. Obtiene una puntuación de 4 puntos.
Esto implica que el sistema obtiene un peso de factores ambientales total de 0,785.
Con estos valores ya se puede calcular el tamaño del proyecto en casos de uso (UCP) de
acuerdo a la siguiente formula:
Este valor de 35,83 indica el tamaño del proyecto en puntos de casos de uso, para obtener
el coste en tiempo y monetario del proyecto, necesitamos calcular el esfuerzo en Horas-Persona,
de acuerdo a la siguiente formular.
Para el factor de productividad, se supone un valor de 20, tal y como recomienda el autor
del modelo Karner [1]. Esto genera un esfuerzo en horas-persona de 716 horas. Estas son las
horas de trabajo necesarias para el desarrollo, que equivalen a 18 semanas de trabajo, y como
se supone que se desarrolları́a por un solo programador, hay que multiplicar las horas necesarias
por el sueldo medio de un programador junior, que se estima en 1400eal mes. Esto provoca un
coste en recursos humanos de 6270e, que añadiendo impuestos del 20 % resultarı́a en un total
de 7524e.
A estos costes hay que añadir los gastos indirectos que se generan por el simple hecho de
estar trabajando, como podrı́an ser la luz o la tarifa de internet. Estos gastos indirectos se suelen
estimar un 20 % del coste total del proyecto, por tanto, el presupuesto del proyecto ascenderı́a
a 9.028e.
Si fuera necesario, a este presupuesto habrı́a que añadir el coste proporcional del hardware
necesario para su desarrollo, en el caso de este proyecto, no se requiere ya que todo lo necesario
ya esta en la empresa. Tanto el ordenador que se utiliza para el desarrollo como el servidor
donde funcionará el sistema ya se encontraba en la empresa, por tanto no es necesario ningún
prorrateo. Por lo que se refiere al software de desarrollo, se han utilizado software de uso libre
como el Visual Studio.
Hay que destacar que la estimación realizada da al proyecto una duración en horas-persona
de 716 horas, sin embargo, el proyecto se planificó para desarrollarse en 300 horas de estancia
en prácticas. Aunque puede parecer incongruente, hay que pensar que de esas 716 horas, parte
del trabajo ya lo realizó la empresa antes de iniciar la estancia en prácticas, como por ejemplo,
el analizar el problema y plantear una solución, la cual luego se desarrolları́a por el estudiante
19
ID Descripción del Riesgo Tipo de Riesgo
R01 Requisitos poco completos Riesgo del producto
Baja temporal del único desarrollador del
R02 Riesgo del proyecto
proyecto
Baja temporal del único supervisor del
R03 Riesgo del proyecto
proyecto
Falta de experiencia en el funcionamiento
R04 Riesgo del producto
del software ERP de una empresa
Entorno inestable en el ámbito informáti-
R05 Riesgo del proyecto
co de la empresa
R06 Diseño erróneo Riesgo del proyecto
R07 Situación económica de la empresa Riesgo del proyecto
Cambio del lugar de trabajo semanalmen-
R08 Riesgo del proyecto
te
en la estancia. También hay que comentar que, como se ve en el apartado de seguimiento del
proyecto, no se han podido completar las fases de desarrollo de los test de integración, y la
puesta en marcha. Completar estas fases que faltan aumentarı́a la duración real del proyecto,
lo cual harı́a que se acercara más a las estimaciones realizadas.
Magnitud: Variable según la fase en la que se detecten los problemas, baja si se resuelven
en el inicio o el análisis del diseño, alta si se detectan en la fase de desarrollo.
Descripción: Aunque los requisitos parecen estar muy claros inicialmente, no se puede estar
seguro de que al realizar el análisis del sistema algunas de esos requisitos se consideren inviables
o cambien parcialmente debido a nuevas consideraciones.
20
momento del cambio. Estas modificaciones serán menos costosas durante las dos primeras fases
del proyecto, pero pueden suponer modificaciones importantes durante las fases de Implemen-
tación y pruebas, pues no sólo cambiarı́a la documentación sino también el código fuente y los
ejecutables.
Indicadores: Durante algunas de las fases del proyecto surgen problemas logı́sticos que ni
el alumno ni el supervisor son capaces de resolver sin considerar de cambiar los requisitos del
sistema.
Descripción: En caso de que el alumno que está desarrollando el proyecto tuviera que
dejarlo temporalmente por problemas de salud o cualquier otro motivo, el proyecto quedarı́a
totalmente paralizado y la planificación perderı́a toda su utilidad.
Indicadores: Ninguno, al ser un riesgo por causas externas al proceso, se supone que es un
riesgo difı́cil de predecir.
Magnitud: Alta, ya que aunque no paraliza directamente el proyecto, sı́ que lo relentizarı́a
notablemente.
Descripción: Al ser el supervisor el único que comprende todo el conjunto del sistema del
ERP en el que se apoya el sistema a desarrollar, habrá muchas decisiones de integración que no
se podrán tomar por falta de información.
Impacto: Se tendrán que retrasar partes del desarrollo hasta que el supervisor vuelva a
estar disponible o si no se tendrá que tomar decisiones que posiblemente sean erróneas y se
tengan que cambiar posteriormente.
Indicadores: Ninguno, al ser un riesgo por causas externas al proceso, se supone que es un
riesgo difı́cil de predecir.
Descripción: Los programas ERP tienen su propia manera de funcionar muy enfocada a la
forma de funcionar de una empresa, y aunque su programación utiliza un lenguaje muy similar
al conocido por el alumno, hay varios conceptos de su funcionamiento, (como la forma que tiene
de guardar la información en la base de datos o como funcionan sus servicios web) que si no se
comprenden pueden entorpecer su desarrollo.
21
Impacto: La falta de experiencia provocarı́a un pequeño retraso en el desarrollo al tener
que perder algún tiempo en formarse o apoyarse en alguna guı́a especializada para comprender
mejor el funcionamiento.
Magnitud: Alta, ya que un cambio en algún otro ámbito de la empresa, por ejemplo el
departamento de producción, puede afectar al funcionamiento del almacén y por tanto, a la
pasarela de unión.
Impacto: Los posibles cambios que pudieran surgir afectarı́an a todas las fases del desarrollo
del proyecto, desde su análisis hasta su desarrollo, dependiendo del momento en el que se den.
Indicadores: En las reuniones que se realizan aproximadamente cada dos semanas y donde
surgen las propuestas de cambios en el sistema informático de la empresa, se pueden observar
los posibles cambios de los departamentos. Además, como esos cambios normalmente los realiza
el supervisor del proyecto, este puede mantener informado al alumno.
Magnitud: Medio, un diseño erróneo puede retrasar el proyecto a causa de tener que repetir
las fases de diseño y análisis, sin embargo, se puede modificar en cuanto se detecte el problema.
Descripción: Como el diseño se realiza en un etapa temprana del proyecto, es posible que
llegado el momento el alumno todavı́a no tenga un conocimiento adecuado de como funciona
el sistema completo, al ser el ámbito de una empresa grande desconocido para el. Esto podrı́a
implicar que el análisis se realizara con algunos errores que se tendrı́an que modificar e un futuro
durante otras fases.
Impacto: Si se detectan errores se tendrı́a que volver atrás en el desarrollo y modificar las
fases anteriores para reflejar los cambios realizados.
Indicadores: Los fallos en el diseño se deberı́an detectar en fases posteriores, sobre todo
durante la fase de diseño, al encontrar errores que se tiene que corregir para poder lograr el
desarrollo del proyecto.
22
Magnitud: Muy baja, una mala situación económica de la empresa podrı́a implicar una falta
de recursos necesarios para el desarrollo, como podrı́an ser licencias de programas necesarios
para desarrollar software.
Impacto: La falta de recursos económicos podrı́a implicar tener que utilizar otros programas
de uso libre, lo cual implicarı́a tener que aprender como funcionan. También podrı́a generar
recortes en el hardware utilizado, como es el servidor donde se supone que se va a implantar el
sistema.
Indicadores: En las reuniones quincenales es fácil que se comenten esos recortes. Sino los
propios compañeros de departamento deberı́an de comentar el problema si ocurre.
Magnitud: Baja, cambiar de lugar de trabajo puede suponer olvidos y un poco de baja de
productividad, pero en una medida reducida.
Impacto: La falta de comunicación y los cambios del entorno de trabajo pueden provocar
bajadas de rendimiento y tiempos muertos, pero de baja intensidad.
Indicadores: En los dı́as de después del cambio de localización se es menos productivo que
el dı́a anterior, o se aprecian muchos tiempos muertos a causa del cambio de lugar de trabajo.
Plan de prevención: Realización de varias reuniones con el supervisor del proyecto donde
se planteen la mayor cantidad de preguntas posibles sobre el futuro sistema para lograr la
mayor comprensión posible sobre el. En caso de que algún requisito cambiara, intentar reflejar
los cambios lo antes posible.
Plan de corrección: Intentar modificar los requisitos de manera que afecten lo menos
posible al sistema ya planteado. En caso de que los cambios generen una modificación mas
radical, realizar los cambios necesarios lo antes posible en el desarrollo.
23
Plan de prevención: Dentro de lo posible, intentar no hacer ninguna acción que compro-
meta la salud o que generen consecuencias que impidan continuar con el desarrollo del proyecto.
Plan de prevención: Como no se puede evitar este tipo de riesgo por su naturaleza, se
intentarı́a planificar con antelación el trabajo a realizar para un par de semanas en adelante,
ası́ en caso de fallo, se podrı́a seguir trabajando durante un tiempo.
Plan de corrección: Si se tiene planteado el trabajo para un par de semanas, no seria muy
grave la baja del supervisor. Si no es el caso, se intentarı́a realizar otra parte del proyecto que
no requiriera de la supervisión, como por ejemplo, el diseño de la interfaz gráfica, que es mas
libre al criterio del alumno.
Plan de prevención: Dentro de lo posible, intentar aislar lo más posible el diseño del siste-
ma para que no se vea afectado por los cambios del entorno. Si esto no es posible, se intentarı́a
estar lo más atento posible a los cambios para realizar las modificaciones lo antes posible incluso
prever algunos posibles cambios y diseñar el sistema acorde a las posibles modificaciones.
Plan de prevención: Conseguir todo el conocimiento posible sobre él funcionamiento tanto
del sistema futuro como de los sistemas a los que afecta para ası́ lograr el mejor diseño posible.
Plan de corrección: En caso de diseño erróneo, se realizarı́an los cambios de manera que
afectaran lo menos posible al sistema que ya este desarrollado, y se modificarı́a la documentación
anterior en consecuencia.
24
R07: Situación económica de la empresa
Plan de prevención: Obtener desde un principio las licencias y material necesario para el
desarrollo, para no depender ası́ de más recursos en un futuro.
Plan de corrección: En caso de necesitar algún recurso que no se pudiera permitir por la
empresa, se buscarı́an alternativas sin coste, o se intentarı́a adaptar a los recursos de los que se
dispone actualmente.
Plan de corrección: En caso de algún olvido se puede pedir ayuda a los compañeros de
departamento que estén trabajando en el otro lugar.
En esta sección se va a presentar el seguimiento del proyecto. También se van a comentar los
cambios que se produjeron en la planificación y el porqué de esos cambios. Para mostrar estos
cambios se van a mostrar el Gantt de seguimiento que se ve en la Figura 2.4 y la Figura 2.5. La
fase del desarrollo de la propuesta técnica no se muestra ya que es anterior a la planificación del
proyecto y, por tanto, no sufrió ninguna modificación. Por tanto, los cambios que se produjeron
durante la fase del desarrollo técnico del proyecto son los siguientes:
25
La tarea de diseñar la interfaz gráfica se redujo a un solo dı́a, dado que el sistema esta
enfocado a un usuario experimentado y además, dispone de pocas pantallas. El esfuerzo
para su diseño fue menor de lo esperado. En cuanto a los test de integración, la mitad
de ellos aproximadamente se supusieron para probar la integración con SEGA, pero como
SEGA no tiene un entorno de pruebas, la mitad del trabajo de esta tarea no se pudo
realizar y por tanto su duración se redujo.
26
Figura 2.4: Diagrama de Gantt de seguimiento donde se muestra la planificación de análisis y
diseño que se ha seguido realmente.La duración se muestra en dı́as con jornadas de 4 horas al
dı́a
27
28
Capı́tulo 3
En este capı́tulo se van a presentar los resultados de las fases de análisis y diseño del
sistema, que darán forma a la estructura del sistema y que sirven de guı́a para el desarrollo
y la implementación del sistema. Para eso, primeramente se van a definir los requisitos del
sistema.
• La frecuencia en la que se repite su ejecución o la hora del dı́a en la que se tiene que
ejecutar, en función del tipo de servicio que sea.
• El texto que representa la descripción del servicio.
• El directorio desde donde coger documentos, en caso de que el servicio lo requiera.
• El directorio donde depositar documentos creados, en caso de que el servicio lo re-
quiera.
• El directorio raı́z a partir del cual el servicio creará los documentos y directorios que
necesite para su ejecución.
29
sincronizados, la información de los movimientos se tiene que replicar de SEGA a AX,
leyendo los mensajes que SEGA genera y descodificando la información de acuerdo al
protocolo de comunicación concreto para, posteriormente, pasar la información a AX a
través de su servicio web. El desarrollo de la lógica del servicio web también se tiene que
desarrollar y se incluirı́a dentro de este requisito.
El gestor del almacén debe ser avisado cuando un envı́o de productos llegue al almacén.
Más concretamente cuando se espere recibir un conjunto de productos o materiales pro-
cedentes del almacén de producción situado en Villafranca. El movimiento de productos
entre almacenes lo realizan empleados de la empresa usando la funcionalidad que les pro-
porciona AX. Cuando un envı́o se genera en el sistema del ERP, se debe informar al
gestor de almacén con un fichero de comunicación que sigue el protocolo de comunicación
que tiene SEGA. Este requisito también incluye comprobar la confirmación de recepción
que SEGA genera cuando un envı́o esperado es recibido satisfactoriamente. Si el envı́o
llega correctamente se tiene que notificar a AX para que se cierre la transacción. En caso
contrario, se tiene que notificar del fallo o las cantidades perdidas a algún responsable.
El gestor del almacén debe ser notificado cuando haya un envı́o pendiente de preparación,
para que ası́ la gente que trabaja en el almacén pueda preparar la comanda. Para ello, el
sistema debe acceder regularmente a los envı́os pendientes y si encuentra alguno, se lo debe
notificar a SEGA para que este empiece la preparación. Cuando el envı́o ya este preparado
para expedir, SEGA genera un fichero que se utiliza para avisar a Dynamics AX de que
hay un envı́o a la espera de salir y necesita el albarán de envı́o y más información. Una
vez AX ya ha generado esa información, el envı́o es expedido y se completa la operación.
El sistema debe mantenerse en ejecución el mayor tiempo posible. Para lograr esto se
tiene que implementar un sistema que controle la ejecución y el estado de la pasarela.
En caso de que el sistema se cuelgue o se cierre de manera inesperada, se debe reiniciar
manteniendo el estado anterior. Además, se debe notificar al encargado del error sucedido
y las posibles causas. El error también debe quedar registrado en algún mecanismo de log
que tenga el sistema para estudiar la posible causa con más detenimiento en el futuro.
El sistema debe mantener la información de los posibles errores que se produzcan o ad-
vertencias que se generen en algún sistema de log. Además, si en algún momento algún
servicio ha sufrido alguna incidencia, se tiene que apreciar a simple vista para que el
supervisor lo vea fácilmente.
Dado que la funcionalidad del sistema se plantea ampliar en un futuro cercano, el pro-
grama debe desarrollarse con esto en mente, es decir, en caso de querer añadir nuevas
funcionalidades que en base sean similares a los servicios actuales, se debe de poder hacer
con poco esfuerzo.
30
Figura 3.1: Diagrama de casos de uso del sistema
31
A partir de los requisitos anteriormente mencionados, se puede obtener el diagrama de casos
de uso de la Figura 3.1, que nos muestra de manera simplificada la estructura del sistema final. A
continuación se van a presentar las especificaciones de cada uno de los casos de uso del sistema:
32
Actores secundarios: Ninguno
Relaciones: CU3, CU4, CU5, CU6, CU7
Precondición: Algún servicio tiene que estar activo
Condición fin éxito: El encargado del sistema es capaz de ver el estado y los
posibles errores.
Condición fin fracaso: El estado de algún servicio no se muestra correctamente o
algún error no se ha registrado.
Secuencia normal: El encargado comprueba la vista de los servicios en ejecución
y ve que uno de ellos tiene una advertencia, accede a la advertencia y comprueba de
que se trata. Una vez la resuelve, la marca como vista y el sistema deja de mostrarla.
Secuencia excepción: El encargado comprueba la vista de los servicios en ejecución
y ve que uno de ellos tiene una advertencia, accede a la advertencia y comprueba de
que se trata. El encargado decide no resolver la incidencia en ese momento y la deja
como estaba. El sistema sigue mostrando la advertencia.
Frecuencia esperada: Se va a consultar diariamente
Importancia: Máxima
Prioridad: Alta
Descripción: El sistema debe transmitir la información con todos los artı́culos que
tiene AX registrados(Maestro de artı́culos) a SEGA para que ası́ este puede registrar
los nuevos artı́culos que se den de alta. Esta acción se debe realizar diariamente
durante la noche.
Alcance: Empieza cuando llegue la hora del dia asignada y termina una vez que se
ha generado el fichero correctamente.
Nivel: Tarea principal
Actor principal: SEGA, AX
Actores secundarios: Ninguno
Relaciones: CU1, CU2
Precondición: El servicio debe estar encendido y sin errores graves.
Condición fin éxito: El fichero de comunicación se crea y se deposita correctamente,
y SEGA lo reconoce como correcto.
Condición fin fracaso: Durante la ejecución se produce algún error que impide
crear el fichero con la información.
Secuencia normal: El sistema obtiene la información que necesita de la base de
datos de AX y la vuelca en un fichero de texto siguiendo el protocolo de comunicación,
luego ese fichero se deja en el directorio de entrada de SEGA, donde este lo recoge
satisfactoriamente y se archiva una copia para consultas posteriores.
Secuencia excepción: Durante el transcurso de la tarea del servicio, se produce
una excepción, el servicio notifica ese error y, en caso de ser un error grave, se detiene
el servicio. Si solo se trata de una advertencia, el servicio salta esta tarea y espera a
que llegue el momento de la siguiente ejecución. Si parte del fichero se ha llegado a
generar, se archiva como erroneo para consultar posteriormente.
33
Frecuencia esperada: Se va a consultar diariamente
Importancia: Máxima
Prioridad: Alta
Descripción: El sistema debe transmitir durante la noche los artı́culos que tiene en
stock y las cantidades de estos en el almacén de SEGA para que se compare con el
de AX, ası́ los dos sistemas estén coordinados.
Alcance: Empieza cuando llegue la hora del dı́a asignada y termina una vez que se
ha generado el fichero correctamente.
Nivel: Tarea principal
Actor principal: SEGA, AX
Actores secundarios: Ninguno
Relaciones: CU1, CU2
34
Precondición: El servicio debe estar encendido y sin errores graves.
Condición fin éxito: El stock de AX se modifica y AX manda la respuesta de
confirmación.
Condición fin fracaso: Durante la ejecución se produce algún error que impide que
el stock se modifique correctamente.
Secuencia normal: El sistema obtiene la información que necesita del fichero de
comunicación que ha generado SEGA, con esa información busca las diferencias que
tengan ambos sistema y , a través del servicio web, hace que AX modifique su stock
hasta que los dos sistemas estén acorde. El sistema espera la respuesta de AX , una
vez llega la respuesta afirmativa se archiva el fichero y se termina la ejecución.
Secuencia excepción: El sistema obtiene la información que necesita del fichero
de comunicación que ha generado SEGA, con esa información busca las diferencias
que tengan ambos sistema y , a través del servicio web, hace que AX modifique su
stock hasta que los dos sistemas estén acorde. El sistema espera la respuesta de AX
La respuesta llega con un error que se ha producido durante el cambio de stock. Se
genera un error, se notifica al encargado y se archiva el mensaje como erróneo para
que el encargado pueda revisarlo posteriormente.
Frecuencia esperada: Aproximadamente cada 15 minutos.
Importancia: Máxima
Prioridad: Alta
Descripción: El sistema debe avisar a SEGA de que ha salido un camión con destino
de dejar productos en su almacén. El sistema también debe recoger la confirmación de
SEGA cuando la mercancı́a ha llega para avisar a AX que el envió se ha completado
correctamente.
Alcance: Empieza cuando se realiza un envı́o con destino el almacén de SEGA y
termina cuando SEGA confirma que se ha recibido la mercancı́a y se notifica a AX.
Nivel: Tarea principal
Actor principal: SEGA, AX
Actores secundarios: Ninguno
Relaciones: CU1, CU2
Precondición: El servicio debe estar encendido y sin errores graves.
Condición fin éxito: Se confirma que el envı́o ha llegado bien tanto en AX como
en SEGA.
Condición fin fracaso: Durante la ejecución se produce algún error que impide que
el transporte se confirme que ha llegado correctamente.
Secuencia normal: El sistema recoge la información del envı́o generado en AX y
lo transmite a SEGA mediante el fichero de comunicación, SEGA recoge ese fichero
y prepara su recibo. Posteriormente cuando el envı́o llega al almacén, SEGA genera
un fichero de confirmación, que se lee y se notifica a AX para que este cierre el envı́o
como satisfactorio y los ficheros de comunicación se archivan.
35
Secuencia excepción: El sistema recoge la información del envı́o generado en AX
y lo transmite a SEGA mediante el fichero de comunicación, SEGA recoge ese fichero
y prepara su recibo. Posteriormente cuando el envió llega al almacén, SEGA genera
un fichero indicando que el envı́o ha llegado con errores. Eso se notifica a AX para
que deje el envió en estado erróneo y se notifica al encargado, además, se archivan
los ficheros como erróneos.
Frecuencia esperada: Aproximadamente cada 15 minutos minutos.
Importancia: Máxima
Prioridad: Alta
7. Identificador: CU7.TrasmitirEnviosSalientesAlmacen.
Descripción: El sistema debe avisar a SEGA de que un envio se tene que preparar
y luego avisar a AX de que un envio ha sido preparado y se tiene que prepara su
albarán de envio.
Alcance: Empieza cuando se programa un envio de productos y acaba cuando se
realiza el albarán y se expede la mercancı́a.
Nivel: Tarea principal
Actor principal: SEGA, AX
Actores secundarios: Ninguno
Relaciones: CU1, CU2
Precondición: El servicio debe estar encendido y sin errores graves.
Condición fin éxito: El envio es expedido del almacén y se cierra la operación.
Condición fin fracaso: El envio no se puede preparar por falta de productos o falta
información para poder realizar el albarán de envio.
Secuencia normal: El sistema busca en la base de datos si hay algún envio pendien-
te, si lo hay se lo hay se lo notifica a SEGA a través de un fichero de comunicación
para que este empiece a preparar la comanda. Posteriormente cuando se haya ter-
minado de prepara se notifica al sistema a través de un fichero, y el sistema se lo
notifica a AX para que prepare el albarán de envio para que la comanda se pueda
expedir.
Secuencia excepción: El sistema busca en la base de datos si hay algún envio pen-
diente, si lo hay se lo hay se lo notifica a SEGA a través de un fichero de comunicación
para que este empiece a preparar la comanda. Posteriormente, SEGA informa de que
no hay suficientes productos para preparar la comanda y se cancela su preparación.
El sistema es informado de esta cancelación y este informa a AX para que tome
medidas al respecto.
Frecuencia esperada: Aproximadamente cada 15 minutos.
Importancia: Máxima
Prioridad: Alta
36
primera versión de la arquitectura del sistema mediante un diagrama de clases y se comentarán
las decisiones tomadas para resolver los requisitos del sistema.
Las tecnologı́as que se utilizarán para el desarrollo de este proyecto se tuvieron claras desde
el primer momento, principalmente por imposición de la empresa, ya que siempre han intentado
utilizar las mismas tecnologı́as para sus proyectos. Por tanto, las tecnologı́as utilizadas y sus
ventajas son las siguientes:
En la empresa se utiliza el gestor de base de datos de SQL Server, por tanto, para acceder
a la base de datos se utiliza el programa de SQL Server Manager Studio 2014. Dado el
gestor utilizado, este era el programa mas adecuado. Este gestor también esta mantenido
por Microsoft, por tanto, tiene muchas ventajas dado que los demás sistemas se mantienen
por la misma empresa.
Parte de la funcionalidad del sistema se tiene que programar dentro del sistema de Dy-
namics AX, principalmente dentro de un servicio web. Para desarrollar este servicio web
se utiliza una cuenta de desarrollo para acceder al sistema y se programa directamente
en el propio editor de AX. El lenguaje de programación que utiliza es X++. Como este
lenguaje también es propiedad de Microsoft, tiene facilidades para integrarse con C#.
Teniendo en cuenta los requisitos descritos anteriormente y las casos de uso del sistema, se ha
diseñado una primera versión de la arquitectura del programa, que se muestra en el diagrama de
clases de la Figura 3.2. En esta primera versión ya se han tomado algunas decisiones importantes
sobre el diseño, que se comentan a continuación:
37
Por una parte, en la estructura general del sistema, como un requisito es que fuera lo mas
modular y genérica posible para poder ampliar su funcionalidad en un futuro, se decidió
por diseñar un controlador que se encargue de agrupar las diferentes tareas y mandar su
ejecución cuando sea necesario. Este controlador también se encargarı́a de configurar las
tareas al arrancar el programa y de apagar o encender los servicios que ejecutan dichas
tareas. Aunque no se aprecia en el diagrama, cada tarea debe ejecutarse en una hebra
diferente al controlador para lograr paralelismo, por tanto, el controlador también deberá
encargarse de actualizar la vista dado que las otras hebras no pueden hacerlo. También
hay que comentar que desde el punto de vista del controlador, las diferentes tareas se ven
como un mismo tipo genérico.
Por lo que refiere a las comunicaciones del sistema con otros sistemas externos, se han
detectado tres posibilidades diferentes, y por tanto, se ha diseñado una clase para cada
tipo de comunicación. Por un lado tenemos la comunicación con la base de datos de AX.
Esta conexión seguro requerirá de algún tipo de información de conexión o algún driver.
Por otro lado tenemos la conexión con el servicio web de AX. Esta conexión seguro que
también requiere de algún tipo de información de conexión, además de una clase especı́fica
de mensaje para que se entiendan ambos sistemas. Finalmente, se han considerado los
directorios en los que se depositan o recogen los ficheros de SEGA como una comunicación
con un sistema externo, por tanto, también se ha diseñado una clase especı́fica para ello.
En cuanto al modelo del sistema, en un principio no parece ser necesarias muchas clases.
Por el momento solo se encontraron necesarias una clase para que el sistema se entienda con
el servicio web, y otra para mantener la información de los posibles errores o advertencias
encontradas durante la ejecución de las tareas.
38
Figura 3.2: Diagrama de clases obtenido en la fase de análisis
La estructura general del sistema sigue siendo la misma, solo que se han añadido más
componentes para completar los requisitos del sistema. A continuación se van a explicar los
diferentes añadidos de este nuevo diagrama y su explicación:
Empezando por el modelo de datos, que se ha separado entre los demás componentes
para lograr un diagrama mas legible, se han añadido más mensajes de comunicación con
el servicio web ya que solo con uno no se podı́an englobar todas las necesidades. En
concreto, se ha diseñado un mensaje para cambiar el stock de varios productos, para
ello era necesario un mensaje de cabecera que contiene información común a todos las
lı́neas, por ejemplo, el motivo del ajuste o la fecha, y también una lista de lı́neas donde
se enumeran todos los productos y las cantidades a modificar. Los otros dos mensajes se
utilizan para el caso de uso de realizar envı́os de productos. En concreto uno es necesario
para cerrar una ruta de picking, y el otro para realizar el albarán una vez se ha expedido la
mercancı́a. Para terminar, también se han añadido dos enumeraciones, una para controlar
el estado de las tareas para saber si han terminado o no y si han generado errores graves,
y otra para saber el tipo de errores que ha generado alguna tarea.
39
En los componentes de comunicaciones, se han añadido una interfaz para cada tipo de
comunicación. Aunque estas interfaces no son estrictamente necesarias ya que los medios
de comunicación no van a ser intercambiables ni extensibles para las tareas ya creadas,
sı́ que facilitan en enorme medida el poder realizar test unitarios y de integración en las
tareas, por eso se han añadido. Las diferentes tareas que lo necesiten referenciarán estas
interfaces a través de la inyección de dependencias por constructor.
En cuanto a las tareas del sistema, se han añadido todas las necesarias para cumplir con
los requisitos del sistema, a continuación se va a explicar cada una de ellas que misión
cumplen:
• Por una parte, la tarea que queda sin agrupar llamada Tarea Wathchdog sirve para
mantener este mismo sistema de watchdog. En concreto se encarga de crear regular-
mente un fichero de texto vacı́o en un directorio para que el sistema del watchdog
ajeno a este sepa que no se ha colgado. También comprueba la lista de procesos del
sistema y, en caso de que no este ejecutándose, ejecuta el watchdog. Esta funcio-
nalidad no se consideró que se utilizara como una tarea mas del sistema en la fase
de diseño, pero al profundizar mas en su funcionamiento se vió que es muy fácil
adaptarlo al funcionamiento de las tareas.
• La tarea llamada Tarea CambioInventario cumple con la funcionalidad del caso de
uso CU4.Trasmitir los movimientos de artı́culos.
• La tarea llamada Tarea AcualizarStock cumple con la funcionalidad del caso de uso
CU5.Trasmitir el stock actual.
• Las tareas llamada Tarea ConfirmacionEntrada y Tarea MovimientosAlmacen cum-
plen con la funcionalidad del caso de uso CU6.Trasmitir los envı́os entrantes al al-
macén. Como esta funcionalidad requiere de paso de información en los dos sentidos,
es más sencillo partir la funcionaldad en dos tareas distintas, una para cada sentido.
• Las tareas llamada Tarea ConfirmacionSalida y Tarea EnviosPendiente cumplen con
la funcionalidad del caso de uso CU7.TrasmitirEnviosSalientesAlmacen. Al igual que
con el caso de uso anterior, esta requiere de traspaso de información en los dos
sentidos y por eso también se divide en dos tareas.
• Finalmente, la tarea llamada Tarea MaestroArticulos cumplen con la funcionalidad
del caso de uso CU3.TransmitirMaestroArtı́culos.
Para completar el diseño del sistema y mostrar una visión mas detallada de las diferentes
secuencias y pasos de información del sistema, se van a mostrar una serie de diagramas de
secuencia UML que escenifican las diferentes tareas que ha de cumplir el sistema.
40
Figura 3.3: Diagrama de clases obtenido en la fase de diseño
41
Figura 3.5: Diagrama de la secuencia de confirmación de entrada al almacen
La secuencia de los maestros de artı́culos que se ve en la figura 3.8 muestra como se manda
a SEGA el maestro de artı́culos de AX para que registre los nuevos artı́culos
De todas las secuencias se puede destacar que todas se inician cuando el controlador llama
al método RealizarTarea pasando como parámetro una función de callback. Dado que las tareas
se ejecutan en hebras distintas, no pueden actualizar la interfaz gráfica directamente, y además
estar comprobando por parte del controlador constantemente si alguna tarea ha terminado no
serı́a eficiente. Por tanto, se optó por diseñar un mecanismo de observador-observable como este.
Ası́ pues, cuando una tarea termina su ejecución, utiliza el método que recibió como parámetro
para avisar de que ha terminado y cual ha sido el resultado. El controlador recibe esa información
y actualiza la vista según corresponda.
42
Figura 3.6: Diagrama de la secuencia de confirmación de salida del almacen
43
Figura 3.8: Diagrama de la secuencia del maestro de artı́culos
44
Figura 3.10: Diagrama de la secuencia de los envı́os pendientes
En esta sección se van a comentar las decisiones de diseño tomadas para las diferentes vistas
del sistema. También se va a mostrar un prototipo de las diferentes pantallas principales.
En la Figura 3.11 podemos ver la pantalla principal del sistema. Esta es la pantalla más
importante dado que será la que estará en primer plano la mayor parte del tiempo, por tanto,
es donde recaen la mayor parte de decisiones de diseño.
El objetivo principal de esta pantalla principal es que de un vistazo rápido sea fácil conocer
el estado del sistema, es decir, cuántos servicios estan encendidos y cuántos no, además de
si alguno de ellos tiene errores. Es por eso que se decidió diseñar el sistema con tonos grises
neutros, menos por los indicadores de la ejecución de los servicios y los indicadores de errores
que tienen colores mas llamativos.
También se intentó que desde la pantalla principal estuvieran disponibles todas las acciones
relacionadas con los servicios. Por eso desde la lista de servicios del panel central se pueden
realizar las acciones encender o apagar un servicio, forzar la ejecución de un servicio y acceder
a los ficheros que utiliza dicho servicio. Para cambiar la configuración de los diferentes servicios
sı́ que se diseñó otra pantalla que se puede acceder desde el menú superior y que se puede ver
en la figura 3.12.
También era necesario, por requisito de la empresa, que hubiera un log en tiempo real en
esta pantalla principal que mostrara los avances de la ejecución de las diferentes tareas. Este log
es separado del log de incidencias que se mostrará después. En este log principal solo aparecen
mensajes informativos, que principalmente sirven para conocer la ejecución de los servicios en
funcionamiento.
45
Figura 3.11: Interfaz principal del sistema donde se muestran los servicios en ejecución y su
estado
46
Figura 3.13: Interfaz que muestra el log con el registro de las incidencias del sistema
Finalmente, el log de incidencias que se muestra en la Figura 3.13, al que se puede acceder
desde el menú superior, y que registra las incidencias que ha ido generado el sistema, con la fecha
y hora de su aparición, y una traza del problema. Estas incidencias registradas están pensadas
para ser entendidas por el personal informático de la empresa, por tanto suelen ser bastante
técnicas. En el diseño de esta pantalla no hay nada que destacar dado que solo es necesaria la
lectura de estas incidencias.
47
48
Capı́tulo 4
Implementación y pruebas
El primer bloque a desarrollar sera la base del programa que permita programar tareas
mediante servicios que se ejecuten periódicamente. La razón para desarrollar este bloque con
independencia de las diferentes tareas que se van a desarrollar en los siguientes bloques, es para
favorecer la abstracción del código y lograr un sistema que sea mas fácilmente ampliable en el
futuro.
La interfaz gráfica del sistema también se va a desarrollar en este apartado, dado que las
tareas no tienen ninguna interfaz en especı́fico y el servicio web está en otro sistema, tiene más
sentido implementar las diferentes interfaces en este momento.
49
Por lo que refiere al sistema de watchdog, aunque se implemente como una tarea más del
sistema, su funcionalidad esta relacionada con el sistema base, por tanto, también se desarrollará
en esta fase.
Configuración del las tareas en el arranque. Nada más se inicia el sistema tiene
lugar el proceso de arrancar los diferentes servicios del sistema. Este proceso tiene varios
pasos. Primero el sistema lee la información de la configuración de las tareas de un fichero
xml. Esta configuración indica toda la información necesaria para configurar las tareas.
Después, según el identificador de cada tarea, el sistema instancia un tipo de tarea u otra.
Esta instancia no está directamente en el código del controlador, sino que se obtiene la
tarea ya instanciada a través de una clase Factory que instancia una tarea u otra en función
del parámetro identificador. Finalmente, cuando ya se tienen las clases tarea instanciadas
y configuradas, se añade su panel correspondiente a la vista del sistema y se guarda en una
lista para su futura ejecución. También, en caso de que algún servicio este programado
para que se ejecute directamente cuando arranque el sistema, este lo arranca.
El método de callback. Cuando llega el momento de ejecutar una tarea, el sistema crea
una nueva hebra de ejecución y manda ejecutar en ella la tarea concreta. La ejecución de
la tarea en una hebra diferente a la principal aporta varias ventajas, como por ejemplo
que el sistema no bloquee la interfaz gráfica a causa de operaciones costosas, o que se
puedan procesar varias tareas simultáneamente, sin embargo, también tiene sus inconve-
nientes. Una hebra secundaria no puede modificar directamente la vista, además, también
se necesita algún mecanismo especial para notificar cuando termina su ejecución. Para so-
lucionar este problema se optó por utilizar un método de callback. Concretamente, cuando
el programa principal llama al método EjecutarTarea de una tarea en concreto, le pasa
como argumento un método delegado que toma como argumento una string y una clase.
Cuando la tarea termine su ejecución o encuentre algo destacable que se deba notificar
para actualizar a la vista, llamara al método callback que ha recibido como argumento.
Este método callback se ejecutará en la hebra principal donde ya tiene acceso a todo lo
necesario.
Programación de las tareas. Para la ejecución cı́clica de las tareas se utiliza un timer.
Concretamente se utiliza un timer sin repetición que cuando llega a cero, ejecuta la tarea
y programa el siguiente timer. Tanto las tareas que se ejecutan cada cierto tiempo como
las tareas que se ejecutan a cierta hora del dı́a utilizan el mismo tipo de timer. Para
programar el timer, se comprueba el atributo que tiene la tarea, si se tiene que ejecutar
cada cierto tiempo, se programa un nuevo timer que tarde ese tiempo en accionarse. Si
se trata del tipo que se ejecuta a cierta hora del dı́a, se comprueba cuanto tiempo hay
de diferencia entre la hora actual y la hora de ejecución, y se programa el timer con la
diferencia de tiempo, ası́ se ejecutará a la hora correcta.
50
Para controlar los bloqueos del sistema de pasarela, se utiliza un sistema de hearthbeat.
Concretamente, el sistema principal utiliza una de las tareas para crear periódicamente
un fichero vacı́o en un directorio concreto. Por otra parte el sistema de watchdog busca si
existe ese fichero y si lo encuentra lo borra. En caso de no encontrarlo, el watchdog supone
que el sistema principal ha entrado en un estado de bloqueo y lo reinicia. La tarea del
sistema principal que crea el fichero, también se encarga de comprobar la lista de procesos
y ejecutar el watchdog en caso de que no esté ejecutándose. Esto es necesario dado que el
watchdog también podrı́a colgarse.
El sistema de log. Para mantener el log del sistema se utiliza una biblioteca o dll de
C# llamada NLog [2] que permite realizar esta función muy fácilmente. En concreto esta
biblioteca se encarga de crear los ficheros que mantienen la información y añadir lı́neas en
función de los mensajes que se quieran guardar. También se encarga de mandar un correo
electrónico al encargado cuando se produce un error grave que deba ser notificado. Esta
funcionalidad se utiliza principalmente en el método de callback nombrado anteriormente.
Cuando este método recibe una llamada producida por una excepción en la ejecución de
la tarea, la traza de esa excepción y un mensaje que lo resume se mandan a registrar
en el log. En caso de que el error se considere de máxima gravedad, también se notifica
mediante un correo electrónico.
El segundo bloque a desarrollar serán las diferentes tareas que cumplan con los requisitos
de comunicación del sistema. Estas tareas se programarán a partir de la funcionalidad aportada
por la pasarela programada en el bloque anterior.
Las secuencias que diferencian cada tarea ya se han explicado en los apartados de análisis
y diseño, por tanto, en este apartado se explicarán detalles de la implementación que, por lo
general, son comunes a todas las tareas.
Crear directorios. Todas las tareas utilizan directorios para crear los ficheros temporales
que después rellenan con información y depositan, o para mover los ficheros que más tarde
van a leer. La idea de utilizar directorios propios para cada tarea es para evitar posibles
problemas de I/O y por mas comodidad al no tener que preocuparse por si otras tareas
modifican los mismos ficheros. La idea es que estos directorios no se tengan que crear
manualmente, sino que el sistema los cree la primera vez que los necesite. Por tanto, todas
las tareas tienen un primer bloque de código nada mas empieza su ejecución en el cual
comprueban si tienen todos los directorios que vayan a usar, en caso contrario, los crean.
51
concreto de fichero o una tabla en concreto de la base de datos y eso no va a cambiar,
utilizar DataTables agiliza mucho el desarrollo.
Coger ficheros filtrando por nombre y antigüedad. Las tareas que necesitan leer los ficheros
de comunicación mandados por SEGA no los recogen de manera aleatoria, sino que siguen
un patrón. Según el protocolo de comunicación, cada mensaje esta identificado por su
nombre, en concreto, tiene un valor numérico único seguido de dos caracteres que indican
su tipo. Con esto, cada tarea busca entre todos los ficheros del directorio de entrada
aquellos que en su nombre contengan los carácteres que lo identifiquen como el tipo de
fichero que busca. En caso de haber mas de algún fichero, aunque esto es difı́cil que pase,
se cogerı́a aquel que tuviera una fecha de actualización mayor, es decir, el que llegó antes.
Encontrar errores. Si durante el desarrollo alguna tarea encontrase algún error, esta tiene
que notificárselo al controlador. Para la mayorı́a de errores que se generan es suficiente con
rodear el código con secuencias try/catch y, de encontrar algún error, avisar al controlador
con el método de callback. Sin embargo, los errores que se producen durante la ejecución en
el servicio web funcionan diferente. Aunque los errores se produzcan durante la ejecución
del servicio web, se tienen que notificar en la pasarela y no en el ERP. Esto se decidió ası́
para agrupar todos los errores que estén relacionados con el sistema. Por tanto, de darse
algún error en el servicio web, este contesta con un mensaje de error, el cual se recibe en
la tarea de la pasarela y se notifica al controlador.
Conexión sı́ncrona con el web service. Cuando alguna tarea manda información al servicio
web, se queda a la espera de que este le conteste. Esto es necesario porque en caso de
producirse algún error se tiene que notificar y, en caso de error grave, detener el servicio.
Esta conexión sı́ncrona supondrı́a un rendimiento bajo del sistema si no fuera porque cada
tarea funciona en una hebra distinta. Este es uno de los motivos principales por los que
se optó por ejecutar cada tarea en una hebra de ejecución.
El tercer y último bloque a desarrollar sera el servicio web que se encuentra en el sistema
de AX y que es necesario para que este pueda recibir información de la pasarela. Aunque
este servicio web no forme parte del sistema de pasarela, si que se va a comentar aquı́ su
implementación ya que es necesaria para el funcionamiento correcto del sistema.
Data contracs. Para el paso de información entre el servicio web y cualquier otro sistema
que quiera comunicarse con él, se utilizan los denominados Data Contracts. Estos Data
Contracts son clases de modelo que sirven como referencia tanto para el servicio web como
para el otro sistema. De esta forma, la pasarela puede instanciar estas clases y pasarlas
como argumento en las llamadas a los métodos del servicio web. Al utilizar ambos sistemas
las mismas clases, es muy fácil pasar la información. La respuesta del servidor también se
realiza utilizando estas mismas clases de Data Contracts. Todos los métodos del servicio
web responden con una clase respuesta que encapsula el resultado de sus operaciones.
Invent journals para cambiar stock. En los ERP el inventario se mantiene de forma
especial. El total de stock de un producto se resume en el total de transacciones que
se han realizado de ese producto, es decir, que el total de un producto es igual al total
52
de aumentos de stock de ese producto menos el total de disminuciones del mismo. Por
tanto, para aumentar o disminuir el stock no se puede modificar directamente el stock del
producto, sino que hay realizar lo que se llama un Journal Trans. Por ejemplo, cuando
el sistema de pasarela llama al método del servicio web para aumentar el stock de un
producto, el servicio web insertara una nueva fila en la tabla de la base de datos que
contiene los Journal Trans. Al insertar esa transacción, el resumen del stock total aumenta
consecuentemente.
En esta sección se van a comentar las medidas tomadas para comprobar que el sistema
desarrollado cumple con los requisitos deseados y que además lo hace dentro de unos parámetros
de calidad. También se comentarán los recursos que se han tenido para probar el sistema y los
resultados logrados.
Sin embargo, para simular las comunicaciones con SEGA, sı́ que se dispone de ficheros de
comunicación iguales a los que utiliza y que son copias de otros ficheros que anteriormente han
funcionado correctamente, por tanto, estos ficheros se utilizarán para probar las comunicaciones
con SEGA
53
los métodos del sistema ya que algunos de ellos tienen un funcionamiento muy trivial, y otros
dependen tanto de las comunicaciones con otros sistemas que su correcto funcionamiento ya se
comprobará explı́citamente en las pruebas de integración.
Lector de ficheros. Estos métodos son los encargados de descomponer la información de los
ficheros de comunicación procedentes de SEGA, y dejar su información en una DataTable
que luego devuelven. Para probar su funcionamiento, se dispone de dos ficheros de cada
tipo, uno que se sabe que esta formado correctamente y contiene información verı́dica, y
otro que tiene problemas concretos en su estructura.
Además de esos ficheros también se dispone de la DataTable exacta que debe generar cada
fichero. Por tanto, para probar su correcto funcionamiento se harán las siguientes pruebas
unitarias:
• Para cada tipo de mensaje se realiza un test diferente en el que se le pasa como
argumento el fichero correspondiente que contiene la información correcta. Tras lo
cual se comprueba que la tabla devuelta por el método corresponde exactamente con
la tabla que se sabe que es correcta.
• Para cada tipo de mensaje se realiza un test diferente en el que se le pasa como ar-
gumento el fichero correspondiente que contiene información mal formada. Se espera
que este método falle y devuelva un valor nulo. Por lo cual sabemos que no se ha
podido leer el fichero correctamente.
Como dato cabe indicar que no se comprueba que la información en sı́ sea correcta,
sino solamente que este bien formado el fichero según el protocolo de comunicación. La
responsabilidad de comprobar si la información es correcta corresponde a cada tarea.
Lector de la configuración de las tareas. Este método es el encargado de leer el fichero xml
en el que se encuentra la configuración de las tareas, y arrancar los servicios en función
de esa configuración.
Para probar el funcionamiento de este método se dispone de tres ficheros xml, uno de
ellos contiene información de configuracion de 7 tareas las cuales ya estan programadas y
funcionan correctamente. Por otro lado, el otro fichero que sı́ esta formado correctamente
como fichero xml, pero contiene información que no es correcta, como un identificador
que no corresponde a ninguna tarea y tiempos negativos. Y finalmente otro fichero de
configuracion que tiene una estructura errónea de fichero xml.
• Para la prueba con el fichero correcto, se le pasa al método como argumento para que
lo lea, tras lo cual, se comprueba que el número de tareas sea el correcto, que cada
tarea instanciada sea la correcta y que sus tiempos de ejecución sean los adecuados.
Esta información que se sabe que es la correcta se carga previamente en una lista.
• Para la prueba con el fichero bien formado pero con información errónea, se com-
prueba que el método no instancia ninguna tarea y lanza una excepción del tipo
ArgumentException. Si al realizarse la prueba se obtiene otra excepción o un valor
nulo, el método se considera erróneo.
• Para la prueba con el fichero mal formado, es decir que no tiene el número de atributos
esperados, se comprueba que el método nativo que lee el xml detecta que faltan
atributos al leer usando un esquema xml como referencia. Al encontrar ese error, el
método deberı́a lanzar una excepción del tipo InvalidOperationException.
54
Metodo comprobar si la tarea esta disponible. Este método es el encargado de, una vez el
timer que tiene asignado cada tarea termine, comprobar el estado de la tarea y, en caso de
que este disponible ejecutarla. También debe comprobar que si es una tarea que se tiene
que ejecutar a una hora del dı́a en concreto, sea la hora correcta
Para probar el funcionamiento de esta tarea se dispone de cinco tareas distintas ya ins-
tanciadas. Una de ellas esta totalmente disponible y sin errores,la segunda esta disponible
y tiene asignada una hora del dı́a, la cual es la hora actual, la otra se simula que todavı́a
esta ejecutando la iteración anterior, la cuarta está disponible pero generó errores graves
de ejecución y la última esta disponible pero no es la hora del dı́a que corresponde.
Creador de ficheros. Estos métodos son los encargados de, una vez que se dispone de la
información que se tiene que depositar en los ficheros de comunicación en una DataTable,
crear un fichero nuevo y volcar ahı́ la información.
Para probar este funcionamiento se dispone de tres ficheros de comunicación que se sabe
que son correctos, uno por cada tarea que tiene que escribir mensajes de comunicación.
Además también se tienen las DataTable que generan cada fichero en concreto. Además
de eso también se dispone de DataTable que tienen información con mala estructura, es
decir, que no tienen todos los campos que deberı́an.
• Para cada tipo de fichero se realiza un test diferente en el que se pasa como argumento
la DataTable. Tras lo cual se comprueba si el fichero que ha generado el método se
corresponde exactamente con el fichero que se sabe que es correcto. Si son iguales la
prueba se considera correcta.
• Para comprobar las DataTable mal formadas, estas se pasan como argumento al
método y se espera como resultado que lancen una excepción de ArgumentException
y que además no generen ningún tipo de fichero. Si esto ocurre se considera que la
prueba es correcta.
Como dato comentar que no se comprueba que la información en si sea correcta, sino
solamente que este bien formada la DataTable que contiene la información. La respon-
sabilidad de comprobar si la información es correcta corresponde a la tarea que llama al
método.
55
4.2.3. Pruebas integración
En las pruebas de integración se va a probar si las comunicaciones del sistema con los demás
sistemas y todos los procedimientos necesarios para llegar a esa comunicación dan como lugar
el resultado deseado. Lo ideal serı́a poder probar las comunicaciones tanto del sistema con AX
como con SEGA, sin embargo, como SEGA no tiene entorno de pruebas y su comunicación
termina en el momento que se deposita un fichero en su directorio, no es posible probar nada
de integración con sus sistema. En cambio, para la integración con AX si que se puede utilizar
su base de datos de desarrollo y comprobar los cambios reales que experimentarı́a el sistema.
Cambio de inventario. Esta tarea en la encargada de, una vez recibido un mensaje de
SEGA donde estan las últimas transacciones de inventario, avisar a AX para que ajuste
su stock, es decir, que el resumen de las cantidades de los productos aumente o disminuya
según corresponda. Para probar correctamente esta funcionalidad se suponen los siguientes
escenarios:
• Fichero correcto. Se dispone de un fichero que se sabe seguro que esta bien formado y
que tiene el objetivo de aumentar y disminuir varias veces el stock de dos productos
concretos. Para probar el correcto funcionamiento de la tarea, se inicia el servicio y
se deja ese fichero para su recolección por la tarea. Primero se comprueba el stock
actual de esos productos, como la base de datos es de un entorno de prueba que nadie
más utiliza se sabe que esos stock no van a cambiar durante la ejecución. Cuando
termina la ejecución de la tarea, se comprueba que el stock final es el correcto según
el fichero mandado.
• Fichero casi correcto. Se dispone un fichero con muchas lı́neas en la que una de ellas
tiene un problema grave en su estructura. Como la ejecución de todas las lı́neas tiene
que ser atómica, hay que comprobar que al final no se ha contabilizado ninguna lı́nea
y por tanto el stock de los productos del mensaje no ha cambiad. Para comprobar
esto se mira el stock ante de empezar, luego se deposita el mensaje, y cuando la tarea
termina su ejecución se vuelve a comprobar el stock.
• Fichero correcto pero comunicación caı́da. Como el sistema debe responder correc-
tamente a las caı́das de comunicaciones, se realiza una prueba en la que el servicio
web no esta disponible. Para simular este funcionamiento se va a utilizar una clase
mock o ”de prueba”que sustituye al servicio web. Para la ejecución del test se inyecta
primero la clase mock y luego se deposita un fichero de cambio de inventario correcto.
La clase mock esta configurada para que cuando se llame al método de comunicación
del servicio web, este conteste con un error de conexión. Tras la ejecución de la tarea
se comprueba que el sistema lanza la excepción correcta y se registra la incidencia
correctamente en el log.
Cerrado ruta de picking. Esta es la tarea encargada de, una vez que se ha completado una
ruta de picking, leer el mensaje del gestor del almacén que lo indica, y con la información
del mensaje avisar a AX para que cierre la ruta de picking y prepare el albarán de envı́o.
• Fichero correcto cierra ruta existente. Se dispone de un fichero que se sabe que es
correcto y que cierra la ruta de picking de un envı́o que se sabe que existe en el
entorno de pruebas. Para realizar la prueba primero se comprueba que el estado de
56
la ruta de picking del envı́o es correcto. Tras lo cual se deposita el fichero que cierra
esta ruta. Finalmente una vez termina la ejecución se comprueba que el estado de
la ruta de picking es cerrado y que la del envı́o es a la espera. Además también se
comprueba que el número de albarán generado es correcto.
• Fichero correcto pero ruta no existente. Se dispone de un fichero que se sabe que es
correcto y que cierra la ruta de picking de un envı́o que se sabe que no existe en el
entorno de pruebas. Para realizar la prueba primero se comprueba que de verdad esa
ruta de picking no existe. Luego se deposita el fichero y se espera que el sistema lance
la excepción esperada. Finalmente se comprueba que no se ha creado ninguna ruta
de picking nueva y que la incidencia se ha registrado correctamente en el sistema.
• Fichero incorrecto. Se dispone de un fichero que se sabe que no es correcto y que
no cierra ninguna ruta de picking. Para realizar la prueba se deposita el fichero con
errores y se espera a que el sistema lance una excepción de fichero incorrecto. Tras
lo cual también se comprueba que la incidencia se ha registrado correctamente.
57
58
Capı́tulo 5
Conclusiones
En este capı́tulo se van a relatar las diferentes conclusiones a las que se ha llegado con
el desarrollo de este proyecto. Estas conclusiones se van a agrupar en tres ámbitos diferentes.
Primero las conclusiones en el ámbito formativo sobre lo que he aprendido, luego en el ámbito
profesional y mi experiencia en la empresa, y finalmente, sobre el ámbito personal.
En cuanto al ámbito personal, este proyecto me ha servido para darme cuenta que dentro
del ámbito de la informática todavı́a me quedan muchas cosas que aprender. Del mismo
modo, también me he dado cuenta que todas esas cosas que me faltan por aprender se
pueden lograr con un poco de esfuerzo y ganas. También quiero añadir que me hubiera
gustado poder acabar completamente el desarrollo del sistema y poder implementarlo,
pero por motivos de la empresa no ha sido posible.
59
60
Capı́tulo 6
Bibliografı́a
[1] Gustav Karner. (1993) metrics for objectory. university of linköping, sweden.
[2] nlog-project. (05-06-2019) nlog para c#, biblioteca que gestiona el sistema de log y sus
ficheros. https://nlog-project.org/.
61
62
Anexo A
Documento Protocolo de
comunicación SEGA-MOVEX
63
Manual de Interfaces SEGA - MOVEX
Marie Claire S.A.
Edición: 1.0.13
Página 2 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Página 3 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Versión: 1.0.11Descripción:
• Inclusión de un nuevo valor en el Localización del MA para los
artículos del tipo ‘Picking Sin Sorter’
Elaborado por: Arseni Lago Fecha: 15/04/2005
Versión: 1.0.12Descripción:
• Inclusión de la descripción de los ficheros CP en el caso de pedidos
anulados
• Actualización de las condiciones para el envío de los ficheros CS
Elaborado por: Arseni Lago Fecha: 22/04/2005
Página 4 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Índice:
1 Introducción ......................................................................................................................... 6
2 Comunicación entre Movex y SEGA .................................................................................. 6
2.1 Convenciones de descripción de formatos ..................................................................... 7
2.2 Nomenclatura de los ficheros de interface ..................................................................... 8
2.3 Estructura de los ficheros de interface ........................................................................... 9
2.4 Protocolo de comunicación ............................................................................................. 9
2.4.1 Fichero de resultado de la importación ................................................................. 10
3 Descripción de los ficheros de interface ......................................................................... 11
3.1 Ficheros generados por Movex y enviados a SEGA .................................................... 12
3.1.1 Maestro de familias (‘MF’) ..................................................................................... 12
3.1.2 Maestro de artículos (‘MA’) .................................................................................... 13
3.1.3 Maestro de centros (‘MX’) ..................................................................................... 15
3.1.4 Aviso de entrega de orden de entrada (‘AE’) ........................................................ 16
3.1.5 Entregas a preparar (‘PS’) ..................................................................................... 17
3.2 Ficheros generados por SEGA y enviados a Movex .................................................... 21
3.2.1 Confirmación de entradas (‘CE’) ........................................................................... 21
3.2.2 Confirmación de entrega a cliente (‘CP’) ............................................................... 22
3.2.3 Expediciones (‘CS’) ............................................................................................... 23
3.2.4 Ajustes de stock (‘AS’) ........................................................................................... 24
3.2.5 Stock actual de artículos (‘SA’) .............................................................................. 25
3.2.6 Confirmación de mensaje (‘CF’) ............................................................................ 25
Página 5 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
1 Introducción
Este documento contiene la descripción del procedimiento de comunicación y del contenido de
la información intercambiada entre el sistema de gestión del almacén (SEGA) y los sistemas
de gestión comercial (Movex).
Movex envía a SEGA información sobre los artículos, familias, órdenes de compra, y pedidos;
mientras que SEGA envía a Movex información de la situación y movimientos de stock del
almacén (confirmación de entradas, confirmación de salidas, movimientos de stock, stock
actual, etc).
Movex SEGA
O:
I:
emisor
receptor
Página 6 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Para el envío de datos de SEGA a Movex, SEGA crea el fichero en el directorio O: y espera
que Movex lo recupere.
Movex SEGA
O:
receptor emisor
I:
• B: es un campo de tipo C1 en el que los únicos valores admisibles son ‘S’ y ‘N’ (booleano)
(‘S’ = True; ‘N’ = False).
• Los campos opcionales se informan con espacios si son alfabéticos, o con 0 si son
numéricos.
Página 7 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
• Tipo de sistema origen (C3): MVX, SGA. Movex prefija sus ficheros mediante MVX y
SEGA prefija los suyos con SGA. Estos prefijos son los sugeridos, aunque son
completamente parametrizables.
• Identificador del sistema origen (N4): cuando exista más de un sistema origen del mismo
tipo. En el caso normal de existir sólo uno, se pondrá 0001.
• Tipo de fichero (C2): identifica el tipo de contenido del fichero (tipo de mensaje, por
ejemplo: PS, CE, MA, etc.).
• Número de secuencia (N5): número secuencial para poder distinguir los ficheros del
mismo tipo que se envíen en el mismo minuto. Puede ser un correlativo que se reinicia al
alcanzar el valor 100000. Actualmente los ficheros enviados desde Movex a SEGA tienen
un correlativo de N4. En los ficheros enviados de SEGA a Movex el correlativo se interpreta
de la forma siguiente: SS###, donde SS son los segundos de la fecha y hora de
generación, y ### es el número de orden de un fichero dentro del segundo en que se ha
generado (empezando por 001).
• Extensión: .TXT
Página 8 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Dentro de un nivel, los registros se separan por <intro> (retorno de carro). Dentro de un registro
los campos (todos de longitud fija), se colocan seguidos, sin separadores.
Tabla Depende de
MA MF
AE MA
PS MA
Para cada fichero recibido e importado por SEGA, éste enviará a Movex una confirmación de
recepción (ver el parágrafo “Confirmación de mensaje (‘CF’)”), para poder asegurar que no se
pierden mensajes.
Página 9 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
En SEGA se mantendrá en los ficheros de log una traza de todos los ficheros enviados y
recibidos.
Si SEGA descarta una línea de detalle de un aviso de entrada o de una entrega a preparar,
entonces se descarta el aviso de entrada o la entrega a preparar completa.
Movex debe controlar que los ficheros enviados por SEGA son procesados correctamente.
FICHERO: I:\MVX0001AE999999999999999.txt
FECHA: 2001/02/21 16:32:40
---------------------------------------------------------------
Orden de compra [000000000000000999]: linea descartada, motivo [El articulo
[0000000978132] es de crossdocking y no tiene reparto, LA LINEA SE DESCARTA ],
registro [0000000978132000132S]
Orden de compra [000000000000000999]: linea descartada, motivo [El articulo
[0000000919739] es de crossdocking y no tiene reparto, LA LINEA SE DESCARTA ],
registro [0000000919739000133S]
---------------------------------------------------------------
Insertados: 1
Modificados: 0
Rechazados: 0
Total: 1
Página 10 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Página 11 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 12 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 13 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Página 14 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 15 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Restricciones de tratamiento:
Información transmitida
Página 16 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
(**): Número de línea de la orden de entrada en Movex: número de la orden de entrada (11) +
número de línea (6)
Restricciones de tratamiento:
Página 17 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 18 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Página 19 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
(*): Número Entrega: Tipo de Entrega según Movex + 00 + Identificador de Entrega a preparar
Página 20 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 21 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Cuando se anula un pedido (durante la selección de pedidos por no poderse servir algún
artículo, o después de la preparación por quedar todos sus contenedores vacíos), el fichero CP
generado tiene:
• ‘000000000000000000’, en el campo Identificador Bulto
• ‘FICT ‘, en el campo Código Tipo Bulto
• 0 en las cantidades servidas de los artículos
Información transmitida
Página 22 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Cuando se anula un pedido (durante la selección de pedidos por no poderse servir algún
artículo, o después de la preparación por quedar todos sus contenedores vacíos), después del
fichero CP (indicando las cantidades servidas a 0), ya no se envía el fichero CS.
Información transmitida
Página 23 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Página 24 de 25
Marie Claire S.A.
Manual de Interfaces SEGA-MOVEX
Información transmitida
Información transmitida
Página 25 de 25