CAPÍTULO Marco Teórico
Transcript of CAPÍTULO Marco Teórico
20
CAPÍTULO 2
Marco Teórico
21
2 Marco Teórico
2.1 Ingeniería de software
“El objetivo principal es convertir el desarrollo de software en un proceso formal,
con resultados predecibles, que permitan obtener un producto final de alta calidad y
satisfaga las necesidades y expectativas del cliente. La Ingeniería de Software es un
proceso intensivo de conocimiento, que abarca la captura de requerimientos, diseño,
desarrollo, prueba, implantación y mantenimiento. -Gacitúa (2003)” [1]
“Para muchas personas el software son solo programas de computadora, sin
embargo nos comenta que son todos aquellos documentos asociados a la
configuración de datos que se necesitan para hacer que estos programas operen de
manera adecuada. - Somerville (2005)”. [2]
Generalmente a partir de un complejo esquema de comunicación en el que
interactúan usuarios y desarrolladores, el usuario brinda una concepción de la
funcionalidad esperada y el desarrollador especifica esta funcionalidad a partir de esta
primera concepción mediante aproximaciones sucesivas. Este ambiente de interacción
motiva la búsqueda de estrategias robustas para garantizar que los requisitos del
usuario serán descubiertos con precisión y que además serán expresados en una
forma correcta y sin ambigüedad, que sea verificable, trazable y modificable. [3]
El término ingeniería del software empezó a usarse a finales de la década de
los sesenta, para expresar el área de conocimiento que se estaba desarrollando en
torno a las problemáticas que ofrecía el software. En esa época, el crecimiento
espectacular de la demanda de sistemas de computación cada vez más y más
complejos, asociado a la inmadurez del propio sector informático (totalmente ligado al
electrónico) y a la falta de métodos y recursos, provocó lo que se llamó la crisis del
software. Durante esa época muchos proyectos importantes superaban con creces los
presupuestos y fechas estimados. La crisis del software finalizó pues se comenzó a
progresar en los procesos de diseño y metodologías. [3]
22
2.2 Desarrollo de software.
El Proceso para el desarrollo de software, también denominado ciclo de vida del
desarrollo de software es una estructura aplicada al desarrollo de un producto de
software. Hay varios modelos a seguir para el establecimiento de un proceso para el
desarrollo de software, cada uno de los cuales describe un enfoque diferente para
diferentes actividades que tienen lugar durante el proceso. Algunos autores consideran
un modelo de ciclo de vida un término más general que un determinado proceso para
el desarrollo de software. [4]
Desarrollar un software significa construirlo simplemente mediante su
descripción. Está es una muy buena razón para considerar la actividad de desarrollo
de software como una ingeniería. En un nivel más general, la relación existente entre
un software y su entorno es clara ya que el software es introducido en el mundo de
modo de provocar ciertos efectos en el mismo. [4]
Aquellas partes del mundo que afectarán al software y que serán afectadas por
él será el Dominio de Aplicación. Es allí donde los usuarios o clientes observarán si el
desarrollo del software ha cumplido su propósito. [5]
Una de las mayores deficiencias en la práctica de construcción de software es
la poca atención que se presta a la discusión del problema. En general los
desarrolladores se centran en la solución dejando el problema inexplorado. El
problema a resolver debe ser deducido a partir de su solución. [6]
Esta aproximación orientada a la solución puede funcionar en campos donde
todos los problemas son bien conocidos, clasificados e investigados, donde la
innovación se ve en la detección de nuevas soluciones a viejos problemas. [6]
Pero el desarrollo de software no es un campo con tales características. La
versatilidad de las computadoras y su rápida evolución hace que exista un repertorio
de problemas en constante cambio y cuya solución software sea de enorme
importancia. [7]
23
2.3 Sistema de control
Es un conjunto de dispositivos encargados de administrar, ordenar, dirigir o
regular el comportamiento de otro sistema, con el fin de reducir las probabilidades de
fallo y obtener los resultados deseados. Por lo general, se usan sistemas de control
industrial en procesos de producción industriales para controlar equipos o máquinas.
Objetivos
Los sistemas de control deben conseguir los siguientes objetivos:
Ser estables y robustos frente a perturbaciones y errores en los modelos.
Ser eficiente según un criterio preestablecido evitando comportamientos
bruscos e irreales.
Necesidades de la supervisión de procesos
Limitaciones de la visualización de los sistemas de adquisición y control.
Control vs Monitoreo Del Proceso
Control software. Cierre de lazo de control.
Recoger, almacenar y visualizar información.
Minería de datos.
2.3.1Sistema
Conjunto de elementos unidos y en interacción. Un sistema no necesariamente
es físico y puede aplicarse a fenómenos abstractos y dinámicos, tales como los que
se encuentran en economía. Por tanto, la palabra sistema debe interpretarse como
una implicación de sistemas físicos, biológicos, económicos y similares. [7]
2.3.2 Control
Selección de las entradas de un sistema de manera que los estados o salidas
cambien de acuerdo a una manera deseada. Los elementos Son: [8]
Siempre existe para verificar el logro de los objetivos que se establecen en la
planeación.
Medición. Para controlar es imprescindible medir y cuantificar los resultados.
24
2.4 Proceso
Operación o desarrollo natural progresivamente continúo, marcado por una
serie de cambios graduales que se suceden uno al otro en una forma relativamente
fija y que conducen a un resultado o propósito determinados. Operación artificial o
voluntaria progresiva que consiste en una serie de acciones o movimientos
controlados, sistemáticamente dirigidos hacia un resultado o propósito determinados.
[9]
2.5 Estructuras de un programa
Un programa se va a dividir en 3 partes claramente diferenciadas: [10]
procesos de entrada
proceso de datos
procesos de salida
Todo programa está constituido por un conjunto de instrucciones capaces de
gestionar un conjunto de datos.
2.6 Puertos
En informática, un puerto es una interfaz a través de la cual se pueden enviar y
recibir los diferentes tipos de datos.
Son conectores integrados en tarjetas de expansión o en la tarjeta principal
"Motherboard" de la computadora; diseñados con formas y características electrónicas
especiales, utilizados para interconectar una gran gama de dispositivos externos con
la computadora, es decir, los periféricos. Varía la velocidad de transmisión de datos y
la forma física del puerto acorde al estándar y al momento tecnológico. [11]
2.7 Puertos COM
Un puerto COM es un puerto serial en una computadora, que es una ranura que
permite que los dispositivos periféricos como un ratón o un módem se conecten a la
computadora a través de un cable. Han sido reemplazados por los pequeños
25
conectores USB (Universal Serial Bus). Las computadoras más nuevas no tienen
puerto COM. En su lugar, se conectan con los periféricos a través del puerto USB.
2.8 Puertos USB
Por sus siglas en ingles “Universal Serial Bus” es una conexión mediante cables,
conectores para conectar, comunicar y proveer de alimentación eléctrica entre
computadoras, periféricos y dispositivos electrónicos.
El USB es utilizado como conexión estándar de periféricos como son los teclados,
ratones, memorias USB, escáneres, teléfonos móviles, impresoras etc.
Figura 4 Icono representativo de USB
26
2.9 Metodologías
“La metodología es el estudio, descripción, explicación y justificación de los
métodos y no los métodos en sí mismos. – KAPLAN”
Es un conjunto de técnicas o procedimientos específicos que se emplean en una
ciencia; que entenderla como descripción, explicación y justificación de los métodos
en general.
Una metodología de programación es un conjunto o sistema de métodos,
principios y reglas que permiten enfrentar de manera sistemática el desarrollo de un
programa que resuelve un problema algorítmico. Estas metodologías generalmente se
estructuran como una secuencia de pasos que parten de la definición del problema y
culminan con un programa que lo resuelve.
La metodología debe ajustarse a los objetivos, cada aproximación al desarrollo
de software está basada en unos objetivos, por lo tanto la metodología debe recoger
el aspecto filosófico de la aproximación deseada.
La metodología debe de cubrir todo el ciclo de desarrollo de software; investigación,
análisis de requerimientos y diseño. [12]
27
2.9.1 Modelo en Cascada
El modelo en cascada también conocido como Ciclo de vida del software es el
más básico de todos los modelos y han servido como bloque de construcción para los
demás paradigmas de ciclo de vida. Este modelo permite organización en el desarrollo
del software a través de sus características etapas, esto quiere decir que cuando se
esté llevando a cabo alguna tarea pertinente dentro de esa etapa, no se podrá avanzar
a la siguiente hasta terminar con todas las tareas especificadas. Lamentablemente el
uso de este modelo del desarrollo del software pone en jaque la integridad mientras se
construye el sistema, ya que si se falla en una etapa, se ve obligado a reiniciar
prácticamente el proceso de construcción. [13]
Etapas
Figura 5 Diagrama de etapas del modelo en cascada
28
2.9.2 Prototipos
Este modelo permite que todo el sistema se construyan rápidamente para así
poder comprender fácilmente y aclarar ciertos aspectos en lo que se aseguren que el
desarrollo, el usuario o el cliente estén de acuerdo en lo que se necesita así como
también plantear una solución para dicha necesidad y de esta manera poder minimizar
el riesgo y la incertidumbre en el desarrollo del sistema. El modelo Prototipos se
encarga del desarrollo de diseños para que puedan ser analizados a medida que
adhieran nuevas especificaciones. [14]
Este modelo se aplica cuando el cliente define los objetivos para el software sin
delimitar los requisitos de entrada y salida de datos.
Etapas
Figura 6 Diagrama de etapas de la metodología prototipos
29
2.9.3 Incremental
El modelo incremental combina elementos del modelo lineal secuencial con la
filosofía interactiva de construcción de prototipos, aplica secuencias lineales de forma
escalonada mientras progresa el tiempo en el calendario. Consiste en el desarrollo de
la arquitectura completa del sistema, seguido de sucesivos incrementos funcionales.
Cada incremento tiene su propio ciclo de vida y se basa en el anterior. [15]
Surgió como una forma de reducir la repetición del trabajo en el desarrollo de
sistema y dar la oportunidad de retrasar la toma de decisiones en los requisitos.
El modelo es de naturaleza interactiva brindando al final de cada incremento la
entrega de un producto operacional. Este modelo es particularmente útil cuando no se
cuenta con una colaboración de personal suficiente.
Figura 7 Diagrama de etapas del modelo incremental
30
2.10 Metodologías agiles
Las metodologías que se consideran ágiles cumplen con el manifiesto ágil que no es
más que una serie de principios que se agrupan en 4 valores: [16]
o Los individuos y su interacción, por encima de los procesos y las herramientas.
o El software que funciona, frente a la documentación exhaustiva.
o La colaboración con el cliente, por encima de la negociación contractual.
o La respuesta al cambio, por encima del seguimiento de un plan.
A continuación se muestran las metodologías agiles más usadas en el desarrollo de
software.
2.10.1 Scrum
Desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle. Define un
marco para la gestión de proyectos, que se ha utilizado con éxito durante los últimos
10 años. Está especialmente indicada para proyectos con un rápido cambio de
requisitos.
Características
o El desarrollo de software se realiza mediante iteraciones, denominadas sprints,
con una duración de 30 días. El resultado de cada sprint es un incremento
ejecutable que se muestra al cliente.
o Las reuniones a lo largo proyecto, entre ellas destaca la reunión diaria de 15
minutos del equipo de desarrollo para coordinación e integración.
Scrum es un proceso en el que se aplican un conjunto de buenas practica para el
trabajo colaborativo, en equipo y obtener resultados posibles de un proyecto; estas
prácticas se tienen que apoyar una tras otra y su selección tiene origen en un estado
de la manera de trabajar en equipo.
Es un marco de trabajo que nos proporciona una serie de herramientas y roles
para, de una forma iterativa, poder ver el progreso y los resultados de un proyecto.
31
En Scrum se realizan entregan parciales del producto final, por lo tanto, está
especialmente indica donde se necesitan obtener resultados pronto, donde los
requisitos son cambiantes o poco definidos, donde la innovación, la competitividad, la
flexibilidad y la productividad son fundamentales.
Scrum también se utiliza para resolver situaciones en que no se está entregando
al cliente lo que necesita, cuando las entregas se alargan demasiado, los costes se
disparan o la calidad no es aceptable, cuando se necesita capacidad de reacción ante
la competencia, cuando la moral de los equipos es baja y la rotación alta, cuando es
necesario identificar y solucionar ineficiencias sistemáticamente o cuando se quiere
trabajar utilizando un proceso especializado en el desarrollo de producto.
Figura 8 Diagrama de trabajo del método SCRUM
32
2.11 Análisis
El analista se pone en contacto con la empresa para ver cómo está conformada,
a que se dedica, saber todas las actividades que realiza en sí, conocer la empresa de
manera general para posteriormente ver cuáles son sus necesidades o requerimientos
que la empresa tiene en ese momento para poder realizar un análisis de la misma. [17]
2.12 Diseño
Aquí entran todo el diseño del sistema es decir las pantallas, base de datos,
todo esto debe de cumplir con ciertos estándares los cuales se toman en cuenta para
poder desarrollar el diseño con calidad y así poder ofrecer un diseño amigable en
cuestión de colores, tamaños de botones, cajas de texto, etc.
Para implementar el proceso de diseño de sistemas hay que tener siempre en
cuenta los efectos que pueda ocasionar el nuevo sistema sobre el entorno en el que
deba funcionar, adecuando los criterios de diseño a las características del mismo. En
este contexto está adquiriendo una importancia creciente la adaptación de todo
sistema-producto a las capacidades de las personas que van a utilizarlo, de forma que
su operación sea sencilla, cómoda, efectiva y eficiente.
De estas cuestiones se ocupa una disciplina, la ergonomía, que tiene por objeto
la optimización de los entornos hombre-máquina. Si bien en un principio estaba
centrada en los aspectos antropométricos de la relación hombre-máquina, en la
actualidad ha pasado a intervenir con fuerza en todos los procesos cognitivos (análisis,
de menús, formato de iconos, nombres de comandos, control de cursores, tiempos de
respuesta, manejo de errores, estructuras de datos, utilización de lenguaje natural, etc.
2.13 Pruebas
Es donde al sistema se pone a prueba como su palabra lo dice para así poder
saber cuáles son los posibles errores que se están generando del sistema y con ello
mejorarlo para eliminar todos los errores que se puedan presentar porque un programa
con menores errores mayor calidad puede llegar a tener.
33
2.14 Instalación
una vez realizado las pruebas correspondientes al sistema y haberlo corregido
totalmente se procede a la instalación del mismo ya en la empresa para su uso
correspondiente, todo con la finalidad de que los procesos se realicen de una manera
más eficiente eliminando costos, tiempo y esfuerzo dentro de la organización.
2.15 Herramientas.
Para el desarrollo de Secure Access se pretenden utilizar diferentes
herramientas. Existen diferentes lenguajes de programación c, c++, Java, c# etc. Para
este proyecto te opto por implementar el lenguaje c# por la cantidad de ventajas que
se obtienen.
Ventajas
Declaraciones en el espacio de nombres: al empezar a programar algo, se
puede definir una o más clases dentro de un mismo espacio de nombres.
Tipos de datos: en C# existe un rango más amplio y definido de tipos de datos
que los que se encuentran en C, C++ o Java.
Atributos: cada miembro de una clase tiene un atributo de acceso del tipo
público, protegido, interno, interno protegido y privado.
Propiedades: un objeto tiene intrínsecamente propiedades, y debido a que las
clases en C# pueden ser utilizadas como objetos, C# permite la declaración de
propiedades dentro de cualquier clase.
Inicializador: un inicializador es como una propiedad, con la diferencia de que
en lugar de un nombre de propiedad, un valor de índice entre corchetes se utiliza
en forma anónima para hacer referencia al miembro de una clase.
Control de versiones: C# permite mantener múltiples versiones de clases en
forma binaria, colocándolas en diferentes espacios de nombres. Esto permite
que versiones nuevas y anteriores de software puedan ejecutarse en forma
simultánea.
34
2.15.1 Lenguaje de programación C Sharp
Es un lenguaje de programación orientado a objetos desarrollado y
estandarizado por Microsoft como parte de su plataforma .NET, que después fue
aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es
uno de los lenguajes de programación diseñados para la infraestructura de lenguaje
común. [18]
Historia
Durante el desarrollo de la plataforma .NET, las bibliotecas de clases fueron
escritas originalmente usando un sistema de código gestionado llamado Simple
Managed C (SMC). En enero de 1999, Anders Hejlsberg formó un equipo con la misión
de desarrollar un nuevo lenguaje de programación llamado Cool (Lenguaje C orientado
a objetos). Este nombre tuvo que ser cambiado debido a problemas de marca,
pasando a llamarse C#.3 La biblioteca de clases de la plataforma .NET fue migrada
entonces al nuevo lenguaje. Hejlsberg lideró el proyecto de desarrollo de C#.
Anteriormente, ya había participado en el desarrollo de otros lenguajes como Turbo
Pascal, Delphi y J++. [18]
Microsoft Visual Studio es un entorno de desarrollo integrado (IDE, por sus
siglas en inglés) para sistemas operativos Windows. Soporta varios lenguajes de
programación tales como Visual C++, Visual C#, Visual J#, y Visual Basic .NET, al
igual que entornos de desarrollo web como ASP.NET. [18]
35
2.15.2 Visual Studio
Microsoft Visual Studio es un entorno de desarrollo integrado (IDE) de Microsoft.
Se utiliza para el desarrollo de programas para Microsoft Windows, así como los sitios
web, aplicaciones web y servicios web. Visual Studio utiliza plataformas de desarrollo
de software de Microsoft, tales como API de Windows, Windows Forms, Windows
Presentation Foundation, Windows Store y Microsoft Silverlight. [19]
Visual Studio incluye un editor de código de soporte así como código de
refactorización. El depurador funciona tanto como un depurador a nivel de fuente y un
depurador a nivel de máquina. Otras herramientas integradas incluyen un diseñador
de formularios para la construcción GUI aplicaciones, diseñador de páginas web,
diseño de clases y esquema de base de diseño. Acepta plug-ins que mejoran la
funcionalidad en casi todos los niveles, incluyendo la adición de soporte para el control
de origen los sistemas y la adición de nuevos conjuntos de herramientas como editores
y diseñadores visuales para lenguajes específicos de dominio o conjuntos de
herramientas para otros aspectos del ciclo de vida de desarrollo de software. [19]
Visual Studio es compatible con diferentes lenguajes de programación y permite
que el editor de código y el depurador sea compatible con casi cualquier lenguaje de
programación, siempre que exista un servicio específico del idioma. Construido en
idiomas incluyen C, C ++ y C ++ / CLI (a través de Visual C ++), VB.NET, C # a través
de Visual C #, y F # a partir de Visual Studio 2010. Soporte para otros idiomas como
M, Python, y Rubí entre otros está disponible a través de los servicios de idiomas
instalados por separado. También es compatible con XML / XSLT, HTML / XHTML,
Javascript y CSS. Java (y J #) se apoyaron en el pasado.[19]
Visual Studio permite a los desarrolladores crear aplicaciones, sitios y
aplicaciones web, así como servicios web en cualquier entorno que soporte la
plataforma .NET Así se pueden crear aplicaciones que se intercomuniquen entre
estaciones de trabajo, páginas web y dispositivos móviles.
Microsoft Visual Studio es una colección completa de herramientas y servicios
para desarrollar aplicaciones para equipos de escritorio, la Web, dispositivos y la nube.
Tanto si va a crear su primera aplicación para la Tienda Windows como si va a compilar
36
un sitio web compatible con los últimos exploradores, puede aprovechar los
conocimientos que ya tiene con el entorno de desarrollo vanguardista que ofrece Visual
Studio para lenguajes .NET, HTML/JavaScript y C++. Para aquellos equipos que
trabajen en varias plataformas, Visual Studio proporciona un entorno de colaboración
flexible que permite conectar con otras herramientas de desarrollo, como Eclipse y
Xcode. [19]
Tipos de Visual Studio
VISUAL STUDIO 6.0
VISUAL STUIDO .NET 2002
VISUAL STUDIO 2003
VISUAL STUDIO 2005
VISUAL STUDIO 2008
VISUAL STUDIO 2010
VISUAL STUDIO 2012
VISUAL STUDIO 2013
VISUAL STUDIO 2014
VISUAL STUDIO 2015
Figura 9 Logo de Visual Studio
37
2.15.3 DevExpress
DevExpress es un empresa de desarrollo de software fundada en 1998 con
sede en Glendale, California. DevExpress inicialmente comenzó a producir controles
de interfaz de usuario para Borland Delphi / C ++ Builder y ActiveX Controls para
Microsoft Visual Studio. Actualmente, DevExpress tiene productos dirigidos a los
desarrolladores que utilizan Delphi / C ++ Builder, Visual Studio y HTML5 / JavaScript
tecnologías. [20]
La línea de productos DevExpress incluye lo siguiente:
Windows Forms suscripción - interfaz de usuario para Windows Forms.
Suscripción ASP.NET - UI Controls para ASP.NET y ASP.NET MVC.
WPF subscription - UI Controls para Windows Presentation Foundation (WPF).
Silverlight suscripción - Controles de interfaz de usuario para Microsoft
Silverlight.
Ventanas Suscripción 8 XAML - UI Controls para Windows RT.
Informes suscripción -. Informes congregada y procesador de texto de software
de informes basada en Microsoft Visual Studio Desarrolladores
Document Server - .NET Framework para el procesamiento de archivos de XLS,
DOC, RTF, ZIP.
DevExtreme móvil - HTML5 y JavaScript basadas en aplicaciones que permite
generar aplicaciones nativas para smartphones y tablets (Windows Phone, iOS
y Android.)
CodeRush - Microsoft Visual Studio Add-ins.
Figura 10 Logo de DevExpress
38
2.15.4 MySQL
Es un sistema para la administración de bases de datos relacionales (RDBMS),
rápido y sólido. Las bases de datos permiten almacenar, buscar, ordenar y recuperar
datos de manera eficiente. El servidor de MySQL controla el acceso a los datos para
garantizar el uso simultáneo de varios usuarios, para proporcionar acceso a dichos
datos y para asegurarse de que sólo obtienen acceso a ellos los usuarios con
autorización. Por lo tanto MySQL, es un servidor multiusuario y de subprocesamiento
múltiple. Utiliza SQL (del inglés Structured Query Languaje, Lenguaje de Consulta
Estructurado), el lenguaje para la consulta de bases de datos utilizado mundialmente.
MySQL se distribuye bajo un sistema de licencias dual. Se puede utilizar bajo
una licencia de código abierto (GPL), que es gratuita mientras se cumplan las
condiciones de la misma. Si se desea distribuir una aplicación que no sea GPL y que
incluye MySQL, se puede adquirir una licencia comercial.
Figura 11 Logo de MySQL
39
2.15.5 Relevador
Es un dispositivo electromagnético. Funciona como un interruptor controlado
por un circuito eléctrico en el que, por medio de una bobina y un electroimán, se
acciona un juego de uno o varios contactos que permiten abrir o cerrar otros circuitos
eléctricos independientes. [21]
Funcionamiento
El electro imán hace girar la armadura verticalmente al ser alimentada, cerrando
los contactos dependiendo de si es N.A o N.C (normalmente abierto o normalmente
cerrado). Si se le aplica un voltaje a la bobina se genera un campo magnético, que
provoca que los contactos hagan una conexión. Estos contactos pueden ser
considerados como el interruptor, que permite que la corriente fluya entre los dos
puntos que cerraron el circuito. [21]
Figura 12 Diseño de un relevador electrónico
40
2.15.6 Cámara IP
Una Cámara IP (también conocidas como cámaras Web o de Red) son
videocámaras especialmente diseñadas para enviar las señales (video, y en algunos
casos audio) a través de Internet desde un explorador (por ejemplo el Internet Explorer)
o a través de concentrador (un HUB o un SWITCH) en una Red Local (LAN). [22]
En las cámaras IP pueden integrarse aplicaciones como detección de presencia
(incluso el envío de mail si detectan presencia), grabación de imágenes o secuencias
en equipos informáticos (tanto en una red local o en una red externa (WAN), de manera
que se pueda comprobar por qué ha saltado la detección de presencia y se graben
imágenes de lo sucedido. [22]
Figura 13 Cámara de video por IP