Desarrollo de software en un régimen ágil con un enfoque de ingeniería del software

Trabajando en un régimen de metodología ágil

Rol del programador

Si eres programador y te encuentras trabajando en un proyecto de construcción de un producto software bajo una metodología ágil tienes que aprender a entregar desarrollo de software rápidamente, un programador tiene que aprender a tomar un requerimiento de usuario del sistema y hacer una entrega rápida del análisis, diseño y código. El código se puede entregar en tres formas:  

 Tipos de prototipos

  • Prototipo de usar y descartar (maqueta, simulación), aprendizaje y auto regulación del proyecto
  • Prototipo reutilizable (incremental), agregan nuevos requerimientos
  • Prototipo de código final (evolutivo), integración con el sistema final y se generan nuevas versiones

Una de las metodologías ágiles es el SCRUM, está guiado por una pila de requerimientos de donde se saca un conjunto de ellos y se los hace pasar por una etapa llamada Sprint, el Sprint tiene revisiones diarias y su duración es de 2 semanas en promedio.

Las metodologías ágiles tienen el objetivo de hacer entregas rápidas de software funcional al usuario del sistema. El programador debe adquirir la habilidad de crear software basado en los requerimientos de usuario.


Sistema Operativo – Memoria RAM física y memorias RAM virtual

Gestión de memoria RAM en los Sistemas Operativos


Paginación


La paginación permite que la memoria usada de un proceso no sea contigua, a un proceso se le asigna memoria física donde esté disponible.

La paginación evita el gran problema de acomodar trozos de memoria RAM física para alojar procesos de tamaño variable. De esta forma se simplifica el intercambio de páginas entre la RAM física y la memoria de almacenamiento auxiliar de disco fijo.

Permite intercambiar fragmento de códigos o datos que residen en la memoria principal y la memoria virtual, hay que encontrar espacio en el almacenamiento auxiliar del disco fijo para volcar páginas de la memoria RAM física.

Por sus ventajas la paginación es de uso común en muchos Sistemas Operativos.

Estructura de una memoria RAM de 32 Bits (32 bits son equivalente a una memoria RAM de 4 Giga Bytes)


00:00
Dirección de memoria 1
00:01
Dirección de memoria 2
..
..
..
..
FF:FF
Dirección de memoria  4.294.967.296

Los 4.294.967.296 de direcciones de una memoria RAM son divididos en segmentos, los segmentos son divididos en marcos, los marcos son divididos en páginas.

Segmentar una memoria RAM en segmentos, marcos y páginas


  • Una memoria RAM de 4GB se puede dividir en 65536 segmentos de 65536 direcciones
  • Un segmento se puede dividir en 256 marcos de 256 direcciones
  • Un marco se puede dividir en 16 páginas de 16 direcciones

Paginación


¿Qué es y cómo funciona la paginación?


La paginación es uno de los esquemas de manejo de memoria en donde un computador puede almacenar y recuperar datos de un dispositivo de almacenamiento secundario para su uso en la memoria principal. En el esquema de manejo de memoria de paginación, el sistema operativo recupera datos desde un dispositivo de almacenamiento secundario en bloques de un mismo tamaño llamados páginas. La principal ventaja de paginación sobre la segmentación de memoria es que permite al espacio de dirección física de un proceso ser no contiguo. Antes de la paginación, los sistemas debían poner programas en almacenamiento de forma contigua, lo que causaba varios problemas de almacenamiento y fragmentación.

Una de las dificultades de la paginación es que también produce fragmentación si el sistema no dispone suficiente memoria RAM física. Si el sistema dispone de suficiente memoria RAM física el mecanismo de paginación es muy eficiente y produce un incremento en la velocidad de ejecución de procesos por parte de la CPU.

Los procesos se dividen en páginas


Los sistemas operativos son los encargados de tomar un archivo ejecutable del disco fijo y dividir sus procesos en páginas de memoria RAM. Cada proceso tiene su propia tabla de páginas y es responsable el sistema operativo de gestionar la ejecución de cada página y de la tabla de páginas. Cada entrada de la tabla de páginas contiene el número de marco de la página correspondiente en la memoria principal. Puesto que sólo algunas de las páginas de un proceso pueden estar en la memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la página correspondiente está presente en la memoria principal o no. Si el bit indica que la página está en la memoria, la entrada incluye también el número de marco para esa página.

Estados de una página


Las páginas de un proceso tienen distintos estados, los estados son gestionados por la máquina de estados:

  • Disponible para ejecutar
  • Listo para ejecutar
  • En ejecución
  • Bloqueado y pronto para enviar a Listo para ejecutar
  • No está en ejecución

Tabla de paginación


En cada entrada de la tabla de paginación existe un bit de presencia, que está activado cuando la página se encuentra en memoria principal. Bit de modificado, advierte que la página ha sido Modificada desde que fue traída del disco, y por lo tanto deberá guardarse si es elegida para abandonar la memoria principal. Bit de accedido recientemente, usado en el algoritmo de reemplazo de páginas llamado Menos Usado Recientemente (LRU, least recently used). También hay otros bits indicando los permisos que tiene el proceso sobre la página (leer, escribir, ejecutar).

Las computadoras con poca memoria tienen el problema que marcan el bit LRU de todas las páginas en memoria RAM, es decir todas las páginas que están en memoria son usadas, en caso de tener que traer nuevas páginas desde el disco fijo no cabrán en la memoria RAM y el sistema operativo tendrá que desalojar de la memoria RAM página que son usadas. Se produce un ciclo vicioso de cargar y desalojar páginas de la memoria RAM con mucha frecuencia. Cada vez que el sistema operativo no encuentra una página en memoria RAM se produce un error de página.

Esquema de memoria física y lógica.


El método básico para implementar paginación consiste en dividir la memoria física en bloques de tamaño fijo llamados marcos y dividir la memoria lógica de marcos en bloques del mismo tamaño llamados páginas Cuando un proceso se va a ejecutar, sus páginas son cargadas en cualquier marco de la memoria de almacenamiento secundario. Un proceso es dividido en páginas y las páginas pueden ocupar marcos no contiguas. En caso que un proceso muy grande ocupara más de un marco los marcos pueden ser ubicados en segmentos de memora.

Hardware de paginación entre la CPU y la memoria RAM


El tamaño de página es definido por hardware. El tamaño de una página es típicamente una potencia de 2, variando entre 16B y 16 MB por página, dependiendo de la arquitectura del computador.



Esquema hardware de paginación con el CPU


Cualquier dirección generada por la CPU es divida en dos partes: un número de página (n) y un offset de página (d). El número de página es usado como índice en una tabla de página. La tabla de página contiene las direcciones base de cada página en la memoria física. Esta dirección base es combinada con el offset de página para definir la dirección de memoria física que es enviada a la CPU.

Página n




d (offset)





xx:xx
xx:x1…
xx:xd
xx:xf


El CPU tiene un reducido sistema de datos referente a un segmento o marco, el CPU tiene un número lógico de de página, n, y un número de desplazamiento, d, dentro de la página n.

Es necesario gestionar la traducción de los valores lógicos n y d a los valores físicos de una dirección física de memoria RAM, recordar que la memoria RAM se ha dividido en segmentos y marcos.

Tabla de página de memoria virtual


La tabla de página es una estructura de datos basada en los estados de unos bits, dichos bits marcan los estados de las páginas en el sistema de memoria virtual, el sistema operativo almacenar la relación entre una dirección virtual y las direcciones físicas.

Formas de paginación:

  • Paginar entre la memoria RAM física y el CPU
  • Paginar entre la memoria RAM física y la memoria RAM virtual en el disco fijo

La paginación entra la memoria RAM física y el CPU es muy rápida y depende de la calidad de los componentes hardware. Los CPU tienen memoria cache para guardar páginas, se producen fallos de páginas en la memoria cache del CPU si el CPU constantemente tiene que transferir páginas de la memoria cache a la RAM y de la RAM a la memoria cache del CPU.

La paginación entre la memoria RAM física y la memoria RAM virtual es muy lenta y depende de la eficiencia del disco fijo. Una computadora con poca memoria RAM física puede tener el problema de transferir páginas entre la memoria RAM física y la memoria RAN virtual constantemente, produciendo una degradación general del sistema.



Ejemplo de errores de paginación en la RAM física y virtual


En el siguiente ejemplo vemos una computadora con 1MB de memoria RAM y 1.3MB de memoria virtual y con graves problemas de paginación entre la memoria física RAM y la memoria virtual del disco fijo.

Intercambio, SWAPPING, de páginas entre la memoria RAM y la memoria Virtual


Si hay demasiados intercambios de páginas entra la RAM física y la RAM virtual se producen segmentación o fragmentación de la memoria RAM física. Los sistemas operativos tienen que trabajar demasiado desfragmentando la memoria RAM física. El objetivo de los sistemas operativos es mantener las páginas contiguas y no producir fragmentación de páginas por toda la memoria RAM física.

Degradación del sistema


  • Demasiado acceso al disco fijo, los disco fijos son dispositivos de entrada y salida muy lerdos
  • Fragmentación de memoria RAM, los sistemas operativos tienen que trabajar para desfragmentar la memoria RAM física
  • Fragmentación de memoria RAM virtual, los sistemas operativos tienen que trabajar para desfragmentar la memoria RAN virtual en el disco fijo
  • Tarea de desfragmentación del archivo de memoria virtual
  • Tarea de desfragmentación del direccionamiento de páginas virtuales en el archivo de memoria virtual

La única solución es comprar más memoria RAM física si un sistema es afectado severamente por la degradación de paginación de memoria RAM física y virtual


Introducción a las Tecnologías de la Información

Tecnologías de la Información - Fundamentos de las computadoras 


Ver este artículo en línea y en formato PDF
Enviar este artículo por correo: Código PDF-1704141234

Tecnología de la Información (TI, o más conocida como IT por su significado en inglés: Information Technology) es la aplicación de ordenadores y equipos de telecomunicación para almacenar, recuperar, transmitir y manipular datos, con frecuencia utilizado en el contexto de los negocios o empresarial. El término es comúnmente utilizado como sinónimo para las computadoras, y las redes de computadoras, pero también abarca otras tecnologías de distribución de información, tales como la televisión y los teléfonos. Múltiples industrias están asociadas con las tecnologías de la información, incluyendo hardware y software de computador, electrónica, semiconductores, internet, equipos de telecomunicación, e-commerce y servicios computacionales.

  • El álgebra de Boole se usa para resolver problemas de lógica deductiva y lógica de proposiciones.
  • Los circuitos lógicos están basados en el Álgebra de Boole.
  • Los circuitos electrónicos digitales están basados en los circuitos lógicos booleanos.
  • Las computadoras están construidas con circuitos electrónicos digitales. 

Tecnología de la Información TI

Frecuentemente los términos TI y TIC suelen ser confundidos en su uso. Es importante señalar la diferencia entre ambos: TI hace referencia a Tecnologías de la Información, mientras que TIC implica las Tecnologías de la Información y la Comunicación. Ambas sostienen una amplia relación, sin embargo, señalan áreas diferentes. El término TI es un término más amplio y abarca a las TIC, siendo éste un término que indica una subcategoría de aquel. "Las TI abarcan el dominio completo de la información, que incluye al hardware, al software, a los periféricos y a las redes. Un elemento cae dentro de la categoría de las TI cuando se usa con el propósito de almacenar, proteger, recuperar y procesar datos electrónicamente". Los humanos han estado almacenando, recuperando, manipulando y comunicando información desde que los sumerios en Mesopotamia desarrollaran la escritura cerca del 3000 a. C., pero el término tecnología de la información en su significado moderno hizo su primera aparición en 1958 en un artículo publicado en la revista Harvard Business Review; sus autores Harold J. Leavitt y Thomas L. Whisler comentaron que “la nueva tecnología no tiene aún un nombre establecido. Deberíamos llamarla tecnología de la información (TI)”. Su definición consistía en tres categorías: técnicas de procesamiento, la aplicación de métodos estadísticos y matemáticos para la toma de decisión, y la simulación del pensamiento de orden superior a través de programas computacionales. Basándose en la tecnología de almacenamiento y procesamiento empleada, es posible distinguir cuatro eras del desarrollo de TI: pre-mecánica (3000 a. C.-1450 d. C.), mecánica (1450-1840), electromecánica (1840-1940) y electrónica (1940-al presente). 


Trabajando con dominios de difusión en una red de computadoras

Práctica de laboratorio con dominios de difusión en una red


 Configurar el Sistema Operativo de Red para crear cuatro dominios de difusión en una red de ocho computadoras. El objetivo de crear dominios de difusión es administrar el tráfico en el cableado estructurado de la red de computadoras, y hacer un mejor uso del ancho de banda disponible. Es tarea del administrador de la red realizar los trabajos necesarios para garantizar una correcta gestión de los recursos disponible. 

El diseño de redes de clases (classful) sirvió durante la expansión de internet, sin embargo este diseño no era escalable y frente a una gran expansión de las redes en la década de los noventa, el sistema de espacio de direcciones de clases fue reemplazado por una arquitectura de redes sin clases llamadas Classless Inter-Domain Routing (CIDR), en el año 1993. CIDR está basada en redes de longitud de máscara de subred variable (variable-length subnet masking VLSM) que permite asignar redes de longitud de prefijo arbitrario. Permitiendo una distribución de direcciones más fina y granulada, calculando las direcciones necesarias y "desperdiciando" las mínimas posibles. Para dividir una red de clase C en cuatro sus redes, es necesario usar una VLSM que pueda crear cuatro grupos de computadoras en el octeto de los host. 

Usar Mascara de Sub Red de Longitud Variable, (VLSM)

  • 00000000 = 0 
  • 10000000 = 128 
  • 11000000 = 192 <== 4 grupos de 64 computadoras 
  • 11100000 = 224 
  • 11110000 = 240 
  • 11111000 = 248 
  • 11111100 = 252 
  • 11111110 = 254 
  • 11111111 = 255 

Ej:
  • IP=192.168.1.x 
  • MascaraClaseC=255.255.255.192 
  • IP=192.168.1.x/26 

Características:
  • Redes = 2^24 = 16.777.216 
  • SubRedes = 2^2 = 4 
  • Puestos por subred = 2^6 = 64 

Armar la siguiente red de computadoras en Packet Tracer



Documentar la red



Dominio de difusión 1 en la subred 1
  • PC0 
  • PC1 

Dominio de difusión 2 en la subred 2
  • PC6 
  • PC7 

Dominio de difusión 3 en la subred 3
  • PC4 
  • PC5 

Dominio de difusión 4 en la subred 4
  • PC2 
  • PC3 

Verificar la red con el comando ping

  • No es posible hacer ping entre los dominios de difusión 
  • Es posible hacer ping entre las computadoras que están en un único dominio de difusión
  • Hacer ping de broadcast a los IP 192.168.1.63 - 192.168.1.127 - 192.168.1.191 y 192.168.1.255 y verificar que no hay inundación de paquetes entre dominios de difusión
Para saber más sobre dominios de difusión ver los siguientes artículos:

Diseño de Interfaz Gráfica de Usuario con el lenguaje Java

Diseño de interfaz gráfica de usuario en el desarrollo de software


En el desarrollo de un producto software el diseño de la interfaz gráfica de usuario tiene un rol muy importante en el momento de establecer una  buena comunicación con el cliente y usuario del sistema a construir. En un proceso de construcción de software moderno es necesario incluir al usuario del sistema en el proceso constructivo. En un proceso de desarrollo tradicional se consideraba solamente la realimentación entre las fases de desarrollo. Hay muchos modelos llamados ciclos de vida del desarrollo de software que no incluyen al usuario durante todo el proceso de desarrollo y tienen una mirada muy técnica, tecnológica, basada en normas, estándares  y herramientas CASE.

Proceso constructivo tradicional de un producto software


Diseño de Interfaz de usuario


El diseño de interfaces de usuarios en el proceso de desarrollo de software brinda una oportunidad muy buena para establecer en cada fase del desarrollo una comunicación que ayude a mejorar la calidad del producto software que se está construyendo.

Proceso constructivo moderno de desarrollo de un producto software basado en el diseño de la interfaz para usuario


Muchas metodologías orientadas a la gestión de proyectos de construcción de productos software tienen un conjunto de principios que las caracterizan. El conjunto de principios se centran en el cliente.

Los métodos ágiles promueven los siguientes principios y valores


  • Valores: http://agilemanifesto.org/iso/es/manifesto.html
    • Individuos e interacciones sobre procesos y herramientas
    • Software funcionando sobre documentación extensiva
    • Colaboración con el cliente sobre negociación contractual
    • Respuesta ante el cambio sobre seguir un plan (Los clientes cambian los requerimientos)

  • Principios: http://agilemanifesto.org/iso/es/principles.html
    • Satisfacer al cliente mediante la entrega temprana y continua de software con valor.
    • Aceptar que los requisitos cambian, aprovechar el cambio para proporcionar ventaja competitiva al cliente.
    • Entregas de productos software al cliente que sea funcional en tiempos cortos.
    • El cliente y usuarios trabajamos juntos de forma cotidiana durante todo el proyecto.
    • Los proyectos se desarrollan con clientes, usuarios y equipos de desarrollo motivados.
    • Clientes, usuarios y equipos  de desarrollo se comunican verbalmente y cara a cara. El software funcionando y probado por el cliente es la medida principal de progreso.
    • Los procesos Ágiles promueven el desarrollo sostenible, continuo e indefinido. Los  desarrolladores, usuarios y cliente trabajan de forma continua.
    • La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad.
    • La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, son esenciales.
    • Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-organizados.
    • A intervalos regulares el equipo reflexiona sobre cómo ser más efectivo para a continuación ajustar y perfeccionar su comportamiento en consecuencia.

El método RUP promueve los siguientes principios

  • Principios: https://es.wikipedia.org/wiki/Proceso_Unificado_Racional
    • Adaptar el proceso
      • El proceso deberá adaptarse a las necesidades del cliente ya que es muy importante interactuar con él.
    • Equilibrar prioridades
      • Los requisitos de los diversos participantes pueden ser diferentes, contradictorios o disputarse recursos limitados.
    • Demostrar valor iterativamente
      • Los proyectos se entregan al cliente, aunque sea de un modo interno, en etapas iteradas.
    • Colaboración entre equipos
      • El desarrollo de software no lo hace una única persona sino múltiples equipos.
    • Enfocarse en la calidad
      • El control de calidad no debe realizarse al final de cada iteración, sino en todos los aspectos de la producción, entregas funcionales y continuas al cliente.
    • Elevar el nivel de abstracción (Usar representaciones visuales para el cliente, usuarios y desarrolladores)
      • Este principio dominante motiva el uso de conceptos reutilizables tales como patrones de diseño del software, lenguajes 4GL o esquemas (frameworks) por nombrar algunos. Estos se pueden acompañar por las representaciones visuales de la arquitectura, por ejemplo con UML (Lenguaje Unificado de Modelado), GUI (Interfaz Gráfica de Usuario).

Conclusión


Las interfaces gráficas de usuarios irrumpieron en la sociedad en la década de los 90’ del siglo pasado, tienen más de 30 años de crecimiento y de desarrollo de ingeniería informática. Deben ser valorizadas dentro del proceso de desarrollo de software tradicional y unir a dicho proceso las metodologías modernas de gestión de proyectos.

Sinergia de procesos en busca de la calidad del producto software

  • Ingeniería del software (cascada, espiral, prototipo, etc.)
    • Interfaces gráficas de usuario, GUI (Valorizar el diseño de GUI como herramienta de comunicación con el cliente)
  • Proceso de construcción de software ágil (SCRUM, KANBAN, XP, etc.)
  • Procesos de construcción de software modernos RUP
  • Procesos de modelados de software modernos UML
  • Uso de herramientas CASE modernas que brinden soporte a todo el ciclo de vida del desarrollo de software
    • JDeveloper 12g de Oracle
  • Otras tecnologías …
Descargar artículo en formato PDF, código PDF-1703049345 => Ir a descargas
Descargar artículo en formato PDF, código PDF-1703049345 => Ir a descargas


FIN del artículo.