Manual de Ingeniería de Software en la aplicación de la arquitectura MVC para el Desarrollo de Aplicaciones Web

1 Objetivos Generales:

Proveer al DCyT metodología para el desarrollo de aplicaciones web en la arquitectura MVC

2 Objetivos Específicos

test_Image

3 Integrantes

Carlos F. Batalla Ing. en Informatica de la Universidad Centroccidental Lisandro Alvarado con experiencia en desarrollo en los lenguajes de programación ABAP,C# y SQL para PostgreSQL y SQL Server. Experiencia en administración de sistemas Linux y ambientes de virtualización.
Fidel Palma Ingeniero Electrónico: Mención Comunicaciones. Especialista de Telecom, trabaja en el área de Redes y Telefonía IP, actualmente está encargado de gestionar la seguridad de redes y la conectividad entre sitios usando tecnología de Fortinet, Mikrotik y Ubiquiti. Actualmente adquiriendo responsabilidad en el área de gestión de servidores virtualizados con XenServer y Servicios Cloud, utilizando Docker y AWS.;
Yimi Rosendo Ingeniero en informática, Especialista en Gerencia de Telecomunicaciones, he trabajado más en el área de redes, he desarrollado pocas aplicaciones web, un sistema de control de estudio para una escuela de postgrado de la Universidad Militar Bolivariana y un sistema registro y control de personal militar, desarrollo con el servidor Apache, PHP, PHP MY ADMIN.
Ivan Puertas Ingeniero Electrónico mención control, trabajé en programación de PLC y sistemas SCADA. He sido docente de las siguientes cátedras: Sistemas de control, Laboratorio de Instrumentación Industrial, sistemas digitales I y II, y Electrónica. He trabajado también en el área de soporte técnico. Actualmente mi interés se centra en la elaboración de prototipos con la plataforma Arduino y en Phyton como lenguaje de desarrollo. Adicionalmente trabajo en otra área distinta de la ingeniería como docente Investigador en el área cultural, con una maestría en educación por parte de la Universidad Experimental Rómulo Gallegos, siendo facilitador y asesor en cursos de licenciatura y especialización.

4 Conceptos

MVC:

Es un patrón de arquitectura de software orientado a la modularización y medularización, que originalmente define 3 capas:

IDEs:

Entorno de Desarrollo Integrado, por sus siglas en inglés, es una aplicación que proporciona servicios que permiten facilitar el trabajo de desarrollo de software.
Usualmente el IDE consiste en un editor de código fuente, un compilador (o intérprete) y un depurador. Muchos IDE modernos cuentan también con un navegador de clases, buscador de objetos y un diagrama de jerarquía de clases, para desarrollo POO. Fuente: Wikipedia

Frontend:

Es la parte de un sitio web que interactúa con los usuarios, por eso se dice que está del lado del cliente. Fuente: Platzi.com

Backend:

 es la parte que se conecta con la base de datos y el servidor que utiliza dicho sitio web, esto es invisible para el usuario y allí decimos que funciona del lado del servidor. Fuente: Platzi.

An Object-Oriented Architectural Pattern

The Client-Server Architectural Pattern

Dominio:

DBMS:

Un sistema manejador de bases de datos o DataBase Management System (DBMS) son aplicaciones cuya función es servir de interfaz entre la base de datos, el usuario y las distintas aplicaciones utilizadas. Fuente: Clases

5 Consideraciones

aqui debe ir la definicion del lenguaje: Ingles

11/22/19, 09:03 *QUIERE DECIR* que todas las variables y entidades dentro de la codificación se definen *EN INGLÉS*

6 Escenario

Se debe desarrollar un sistema de registro académico, cuyos usuarios, según el contexto, podrán tener la condición de alumnos y/o profesores. El contexto será la materia en la que dicho usuario estara relacionado. Esta entidad estara representada en el sistema y tendra las propiedades y los estados de un aula real. El backend de dicho sistema será una API desarrollada en Nodejs.

6.1 Reglas De Negocio

REGLAS DE NEGOCIO DESCRIPCIÓN
Username: Solo se aceptarán caracteres numéricos correspodientes al nro. de cédula del usuario
Correo electrónico: Solo se aceptarán dominios gmail y ucla.edu.ve

7 Modelo

7.1 DB

aqui van las consideraciones al escoger un db. Como se ajusta al mvc

Escenario demostrativo PG

aqui vas a colocar escenario demostrativo en PG donde se hagan validaciones que preserven la integridad del modelo. Para esto, debes crear unas tablas y crear unos DOMAINS asociado a esas tablas, con algun sistema de control de estudio como cumlaude. debes incluir un MER de esas hipotetica DB para ilustrarlo mejor. Como en consideraciones, colocaste que el idioma es ingles, los nombres de las tablas seran en ingles.

7.1.1 Validaciones para proteger la Funcionalidad en el Modelo

7.1.1.2 Constraint:

especificacion tecnica de la creacion de la tabla y su constraint:

        CREATE TABLE tb_user (
          id serial PRIMARY KEY
          ,deleted SMALLINT 
          ,suspended SMALLINT
          ,username VARCHAR(30)
          ,firstname VARCHAR(100) not null
          ,lastname VARCHAR(100) not null
          ,email VARCHAR(100)
          ,CHECK (deleted <1)
          ,CHECK (suspended <1)  
        );
      
7.1.1.3 Trigger:

especificacion tecnica del trigger:

          CREATE  TRIGGER trValidaCorreo
          BEFORE INSERT ON tb_user
          FOR EACH ROW EXECUTE PROCEDURE validaCorreo();
      
          CREATE OR REPLACE FUNCTION validaCorreo() RETURNS trigger AS $$ 
          BEGIN 
           IF NEW.email ~* '^[A-Za-z0-9._%-]+@gmail.com+$' OR NEW.email ~* '^[A-Za-z0-9._%-]+@ucla.edu.ve+$' 
            THEN 
            ELSE RAISE EXCEPTION 'Solo son permitidos correos ucla.edu.ve o gmail.com'; 
           END IF; 
          RETURN NEW; 
          END; 
         $$ LANGUAGE plpgsql SECURITY DEFINER; 
    
7.1.1.4 Dominio:
        CREATE EXTENSION citext;
    
        CREATE DOMAIN dm_email AS citext
        CHECK(
           VALUE ~* '^[A-Za-z0-9._%-]+@gmail.com+$' 
           OR ~* '^[A-Za-z0-9._%-]+@ucla.edu.ve+$' 
           );
      
        CREATE TABLE tb_user (
          id serial primary key
          ,deleted smallint
          ,suspended smallint
          ,username varchar(30)
          ,firstname varchar(100) not null
          ,lastname varchar(100) not null
          ,email dm_email
        );
        
        db_lenguajesaltonivel_demo=# SELECT 'lenguajesdealtonivel@gmail.com'::dm_email;
        dm_email
        --------------------------------
        lenguajesdealtonivel@gmail.com
        (1 row)
      
        db_lenguajesaltonivel_demo=# SELECT 'lenguajesdealtonivel@gmail'::dm_email;
        ERROR:  value for domain dm_email violates check constraint "dm_email_check"
      
        INSERT INTO "db_lenguajesaltonivel_demo"."public"."tb_user" (
        deleted
        ,suspended
        ,username
        ,firstname
        ,lastname
        ,email 
        ) 
        VALUES 
        (
        0
        ,0
        ,'15598676'
        ,'Carlos'
        ,'Batalla'
        ,'carlos@.com'
        );
    
        ERROR:  value for domain dm_email violates check constraint "dm_email_check"
      

7.2 Framework

aqui van las consideraciones del framework

aqui van las consideraciones al escoger un db. Como se ajusta al mvc

        const pg = require('pg')
        const conString = "postgres://db_usr:pwd@serverName/db_lenguajesaltonivel_demo"
        pg.connect(conString, (err, client) => {
        client.query("SELECT * FROM tb_user", (err, res) => {
        //en res.rows esta el arreglo que contiene los regs. del query 
        })
        })
    

8 Controlador

9 Vista

4.5 Pruebas

En la etapa de /testing/ es importante apuntar a la automatización de las pruebas, ya que a medida que un sistema va a creciendo, se hará insostenible el /testing/ manual.

Es necesario entonces que utilizar un framework con el que hacer un código de automatización que sea estable, mantenible y reusable.

Características

Framework

Lenguajes

Integración

Comunidad

Documentación

Licencia

Actualizado

Ejemplos de Uso

Selenium

Java, C#, Ruby, Groovy, Perl, PHP, Python

-

Si

Si

Apache

Si

Ejecutar scripts que actúen como un usuario, para abrir ventanas e ingresar datos

Jmeter

Java, NodeJS, PHP, ASP.NET

-

Si

Si

Open source

Si

Pruebas de estrés

Junit

Java

-

Si

Si

CPL

Si

Probar los métodos de las clases, pasándo parámetros y confirmando que el resultado sea el esperado

REST Assured

Ruby, Groovy, Python, .Net

-

Si

Si

Apache

Si

Test que crean una interacción con el endpoint http

Spock

Java, Groovy

-

Si

Si

Apache

Si

Test orientados a BDD, alta compatibilidad por estar basado en Junit