Autor: juliocesar20200413 Página 103 de 141
Desarrollador web apasionado y gusto por la buena musica
1. ¿Qué significan las siglas MDB?
Message Driven Bean
2. ¿En qué consiste el funcionamiento de los MDB?
Este servicio funciona a través de colas de mensajes, que es donde los clientes envían sus peticiones, y estas colas son controladas por los Message Driven Beans, los cuales procesan los mensajes que hay en ellas y ejecutan ciertos servicios dependiendo del mensaje procesado.
3. ¿Cuál es el ciclo de vida de un MDB?
Para evitar errores de programación, un message-driven bean no puede ser ejecutado por más de un thread a la vez. Por esta razón y además por no guardar estados, el container puede crear un pool de este tipo de beans similar al existente para stateless session beans.
Debido a su naturaleza stateless el ciclo de vida de un message-driven es simple. Cuando el container desea agregar un nuevo message-driven bean al pool debe crear una nueva instancia, asignar el contexto para que obtenga parámetros de sistema y finalmente ejecutar el método ejbCreate(). Después el bean se encuentra en capacidad para recibir y procesar mensajes. Cuando el container decide reducir el número de instancias existentes invoca el método ejbRemove() terminando su ciclo de vida. Ver figura.
|
Figura 3.9: Ciclo de vida de un message-driven bean |
Debido a su reducido tiempo de vida y a la no persistencia de sus datos, un message-driven bean no sobrevive a fallas en el container o en el servidor, debiendo ser reinstanciado para continuar recibiendo mensajes luego de ésta.
4. ¿Cuál es la diferencia entre MDB y Beans Sesión?
La diferencia más visible entre beans controlados por mensajes y beans de sesión es que los clientes no tienen acceso a beans controlados por mensajes a través de interfaces. Las interfaces se describen en la sección de acceso de cliente Definición de Interfaces . A diferencia de un bean de sesión, un bean controlado por mensajes tiene sólo una clase de Bean.
En varios aspectos, un bean controlado por mensajes asemeja a un bean de sesión sin estado.
-
A instancias bean controlado por mensajes de retener ningún dato o el estado de conversación para un cliente específico.
-
Todas las instancias de un bean controlado por mensajes son equivalentes, permitiendo que el contenedor EJB para asignar un mensaje a cualquier instancia del bean controlado por mensajes. El recipiente puede agrupar estos casos para permitir flujos de mensajes que se procesan simultáneamente.
-
Un solo bean controlado por mensajes puede procesar mensajes de varios clientes.
5. ¿Cómo se usa un MDB?
Los beans de sesión le permiten enviar mensajes JMS y recibirlos de forma sincrónica, pero no de forma asíncrona. Para evitar la inmovilización de los recursos del servidor, no usar el bloqueo sincrónico recibe en un componente del lado del servidor, y en general los mensajes JMS no deben ser enviados o recibidos de forma sincrónica. Para recibir mensajes de forma asincrónica, utilice un bean controlado por mensajes.
6. ¿Cuáles son las características de los MDB?
Beans controlados por mensajes con las siguientes características:
· Ejecutan a la recepción de un mensaje único cliente.
· Se invoca de forma asincrónica.
· Ellos son relativamente de corta duración.
· Ellos no representan directamente los datos compartidos en la base de datos, pero pueden acceder y actualizar estos datos.
· Pueden ser consciente de transacción.
· Ellos son apátridas.
¿Qué es el middleware orientado a mensajes (MOM)?
Middleware orientado a mensajes (MOM) es software o hardware que soporta la infraestructura de envío y recepción de mensajes entre sistemas distribuidos. MOM permite a los módulos de aplicación que se distribuye a través de plataformas heterogéneas y reduce la complejidad del desarrollo de aplicaciones que abarcan múltiples sistemas operativos y protocolos de red. El middleware crea una capa de comunicaciones distribuida que aísla el desarrollador de la aplicación de los detalles del sistema operativo y varias interfaces de red. API que se extienden a través de diversas plataformas y redes suelen ser proporcionada por MOM.
MOM proporciona elementos de software que residen en todos los componentes se comunican de una arquitectura cliente / servidor y suelen admitir llamadas asíncronas entre las aplicaciones cliente y servidor. MOM reduce la participación de los desarrolladores de aplicaciones con la complejidad de la naturaleza maestro-esclavo del mecanismo cliente / servidor.
¿Cuál es el propósito principal o funciones de middleware orientado a mensajes?
MOM es principalmente middleware que facilita la comunicación entre las aplicaciones distribuidas. Mientras MOM admite mensajería síncrona y asíncrona, que está más estrechamente identificado con la mensajería asincrónica mediante colas. MOM envía mensajes de una aplicación a otra utilizando una cola como un paso intermedio. Mensajes del cliente se envían a una cola y permanecer allí hasta que son recuperados por la aplicación de servidor. La ventaja de este sistema es que el servidor de aplicaciones no necesita estar disponible cuando el mensaje es enviado, en su lugar, el servidor puede recuperar el mensaje en cualquier momento. Además, ya que los mensajes pueden ser recuperados de la cola en cualquier orden, MOM también puede facilitar la recuperación de mensajes utilizando esquemas de prioridad o de balanceo de carga. MOM también puede proporcionar un nivel de tolerancia a fallos utilizando colas persistentes que permiten que los mensajes se recuperó cuando el sistema falla.
De acuerdo con un octubre de 1996, artículo en InfoWorld por Julie Bort, “Queue Server es una opción popular para los procesos donde cada paso es dependiente de la anterior, es también muy adecuado para aplicaciones diseñadas para la comunicación de fondo donde hay interacción directa del usuario es involucrados “. Muchos otros analistas describen la importancia de MOM en el apoyo a las aplicaciones heredadas y los sistemas dispersos.
¿Cómo se diferencia de otro tipo de middleware?
Middleware es la amplia gama de servicios en capas entre las aplicaciones y un sistema operativo que proporcionan servicios especializados y la interoperabilidad entre las aplicaciones distribuidas. Por una variedad de razones, incluyendo el hecho de que el middleware es una categoría relativamente nueva de software, la funcionalidad de los diferentes tipos de middleware no está estandarizada. Por ejemplo, la función primaria de middleware de procesamiento de transacciones tiene que ver con el control, pero muchos de los productos de procesamiento de transacciones también incluyen servicios de comunicación. Proveedores de middleware añadir funciones de garantizar que sus productos interactuar con una variedad de hardware y software, y para ayudar a diferenciar su producto de los competidores.
Debido a que cada producto dentro de una categoría de middleware incluye una variedad de funciones y porque las funciones “estándar” dentro de cada categoría cambian rápidamente, las distinciones útiles entre los servicios de middleware son difíciles de encontrar. Sin embargo, la siguiente es una de las muchas maneras de clasificar los productos de middleware que hemos encontrado útil. Tenga en cuenta que esta no es una lista completa de servicios de middleware.
Presentación Prestaciones: Formas gerente, gerente de gráficos, enlazador hipermedia, y administrador de impresión.
Servicios: Comunicación Peer-to-peer de mensajería, llamada a procedimiento remoto, paso de mensajes, colas de mensajes, correo electrónico e intercambio electrónico de datos.
Servicios de Control: administrador de subprocesos, administrador de transacciones, corredor de los recursos, de grano fino petición del planificador y de grano grueso Programador de tareas.
Servicios de Información: servidor de directorio, gerente de registro, administrador de archivos, gestor de registro, el sistema de base de datos relacional orientada a objetos de base de datos del sistema y gestor de repositorio.
MOM se inscribe en el middleware de servicios de comunicación y por lo general incluye el paso de mensajes y colas de mensajes. Muchos productos también soportan llamadas a procedimientos remotos, así como servicios de directorio.
¿Cuál es la diferencia entre los servicios de comunicación Momand otros?
MOM admite mensajes y por lo tanto se ha diseñado principalmente para apoyar la comunicación diferida mientras peer-to-peer y las llamadas a procedimiento remoto (RPC) están diseñados para soportar la comunicación síncrona. En RPC, el servidor receptor debe estar disponible para aceptar mensajes enviados. Si el servidor es baja, el mensaje no se puede entregar en ese momento. MOM, por otro lado, puede enviar mensajes a los servidores que están abajo sin tener que volver a enviarlo. Mensajes en un sistema de MOM se colocan en una cola y recuperar siempre que el servidor lo solicite. Si el servidor está disponible en el momento en que se envía el mensaje es irrelevante.
Historia
Es miércoles por la mañana cuando un grupo de jóvenes se va a desayunar a la fonda de la esquina, y todos piden chocomilk con plátano y diferentes platillos, una vez terminado la alumna RUBI se va sin pagar el chocomilk, dejando a pagar a la Martina pero este no quiso pagar y le echo la culpa al joven guapo Julio, que pagara, este se enojo y enfureció se transformo en Súper Saiyajin uso el Jutso Clones de sombra y empezo a buscar a RUBI para ponerla a lavar platas en la fonda por que si no el paga.
Empieza a disfrutar esta épica aventura y no dejes que te atrape, véncelo aventándole bolitas de poder DESCARGALO Y VENCE PARA NO PAGAR EL CHOCOMILK
Los personajes y la historia son ficticios cualquier parecido con la realidad es mera coincidencia
CONTROLES:
Con las flechas se mueve y con el espacio dispara
Al parecer hay un ciclo infinito con windows vista y 7 , abran el admin de tareas, y terminen el proceso de javaw
DESCARGAR
Para obtener estadísticas necesitamos el numero de filas de una consulta, ejemplo, numero total de usuarios activos etc.
A continuación les dejo la función que obtiene el numero de filas de una consulta
Supongamos que el archivo se llama consulta.php y esta en la carpeta modelo
//LOS VALORES QUE PONDRIAMOS AQUI SERIA EL CAMPO Y LUEGO EL DATO CON EL QUE QUEREMOS COMPARAR
function datoBuscar($campo,$dato){
include ("configuracion.php");
$enlace = conectar_mysql($servidor,$usuario,$contra,$bd);
$alumnos = "SELECT $campo FROM vmlzj_comprofiler WHERE $campo='$dato'";
$resultado = mysql_query($alumnos,$enlace);
$numeroFilas = mysql_num_rows($resultado);
return $numeroFilas;
}
Para mandarlo llamar seria de la siguiente manera
<?php
include ("conexionmysql.php");
//SE INCLUYE EL ARCHIVO
include ("modelo/consultas.php");
$egreT = datoBuscar("campo","datoAcomparar");
?>
Les dejo también la función de conectar_mysql()
<?php
/*******************************************************************************************************************
* DESCRIPCION: ESTE ARCHIVO TIENE LA FUNCIONDE CONECTAR CON LA BASE DE DATOS. *
* PROGRAMADOR: *
* FECHA: 01/07/2012 *
********************************************************************************************************************/
function conectar_mysql($direccion,$usuario,$password,$basededatos)
{
global $enlace;
if(!($enlace=mysql_connect($direccion,$usuario,$password)))
{
echo " alert('error de conexion')";
exit();
}
if(!(mysql_select_db($basededatos,$enlace)))
{
echo " alert('error al conectar con la base de datos')";
exit();
}
return $enlace;
}
?>
BUEN DIA AMIGOS!!!! Estaba recordando los buenos tiempos de la secundaria cuando yo y mis amigos nos las pinteábamos para ir al MUNDONET “Ciber Cafe” de che ríos, para aventarnos una partidilla de Age Of Empirers.
Bueno a todo esto les quiero dejar algo que encontré entre mis respaldos de una vieja, de una vieja computadora que prendí y me trajo recuerdos :’), les dejo el pack de escenario con los cuales jugamos en línea allá en aquellos tiempos, espero y lo disfruten si es que aun las nuevas generaciones siguen jugando este espectacular juego.
A continuación viene la lista de escenarios
() jose i tincho.scx
(DD) Infantery Hell Blood V1.scx
(HG)CBAV11.scx
(HG)CBAV12.scx
(IGZ) CBAV12.scx
(IGZ) CBA V12.scx
(IGZ) CBAV12 (Con banderas).scx
(IGZ) CBAV12.scx
(IGZ) CBAV13.scx
(IGZ) CBA V12.scx
(IGZ) CBA V12.scx
(IGZ) CBA 13,5.scx
(IGZ) CBAV10.scx
(IGZ) CBAV12 .scx
(IGZ) CBAV12.scx
(IGZ) CBAV12_AOC.scx
(IGZ) CBAV13 .scx
(IGZ) CBAV13.scx
(IGZ) CBAV9.scx
(IGZ) Defend The Empire.scx
(IGZ) GwarzV2.scx
(IGZ) Path Blood Heroes.scx
(IGZ) Rambit CBG NoS AD.scx
(IGZ) Smosh V14.scx
(IGZ) Veteran BloodV6.scx
(IGZ) Veteran BloodV8.scx
(IGZ)CBAV12.scx
– UDP_PRISON_BREAK_.scx
– Path BlooD HerooeS -.scx
– °-°Gods Path Blood~Aldeano~Oficial°-°.sc
-┼-InfanteryHellBloodOficial-┼-.scx
11111111111.scx
=V= CBA.scx
@-+-Harry Potter III RPG version 1.3.scx
@-+-Harry Potter III RPG version 1.3a.scx
@–+–Harry Potter III RPG version 1·5.scx
@-Harry potter III RPG version 8.50-@.scx
Ancient – [TD]- new version Medios 2k.scx
Carrera de Obstaculos.scx
Castle Blood II Auto-vNBv3.scx
Castle Norte vs Sur.scx
Ciudades Divididas.scx
default0.scx
deStRuYe La MaLdiTa ToRRe _V_4.0.scx
dEStRuYe La MaLdIta ToRRe _V_4.0.scx
deStRuYe La MaLdIta ToRRe _V_4.0.scx
deStRuYe La MaLdIta ToRRe _V_4.0.scx
EXCALIBUR IV (Official).scx
Green Arabia.scx
Guerra del pacifico.scx
Infantery Hell Blood V1.scx
jose.scx
JOSE2.scx
KING MOVES Green Fix-vNBv3.scx
lol xd.scx
manu.scx
masacre_infinita.scx
Masakre Infinita v. Oficial. 5 min.scx
nomada.scx
Path Blood Heroes 4-8.scx
Path Blood Heroes 2008.scx
Path Blood Heroes 4-8.scx
PTO BlueSea v4,2.scx
PTO PolarExpress v5,1.scx
RAMBIT CB.scx
scenario.inf
Scenario.rar
Simpsons 3 RPG FIXED (USE THIS ONE).scx
Soldier Store- Platinum Pure (4 Players).s
SoldierStore(v2)NoHoRseS-vNBv3.scx
SUPER JUEGO 2009!!ORIJINAL.scx
TD ANCIENT 2K.scx
TD ANCIENT 4’3K.scx
TD ANCIENT 4-K.scx
Td Paris Ver 14 Fixter–C Hard! Beta.scx
Td Paris Ver 15 Fixter–C Ultra-H.scx
tincho.scx
Udaprey Pantanos Hard 5.2.scx
Udaprey Utopia Oficial 3v8 español 1,3.scx
Udaprey_Utopia_Oficial_3v8_español_1,3.scx
Uruk Hai TD V[SpX]28,3.scx
VeTeRaN BLooD ¬ PeRFeCTiON!!!.scx
warrior defence 2007 + recursos.scx
WORLD RISK (TheConquerors.es).scx
XERO TD 1500k -7 player game.scx
[E] World Risk 40 Wonders 2,5.scx
[IGZ] CBAV13.scx
[xxx]-Rambit-CB-Gold-Edition-[xxx].scx
_V23 [RPG]—WORLD Sha—-[AOC] V23_.scx
~~SIMPSONS RPG V3,0~~-vNBv3.scx
°-°Gods Path Blood~Aldeano~Oficial°.scx
»ÌÌ«Grave Blood Oficial V5»Ì.scx
DISFRUNTELO Y QUE TENGAN UN BUEN DIA
DESCARGAR
Hola amigos ya hemos podido guardar, modificar, eliminar y presentar datos de una base de datos por medio de HTML, PHP5 Y MySQL, pero ahora falta ver como hemos de presentar los datos gráficamente de manera que nos o les sea útil a nosotros o al encargado de cierto departamento y pueda tomar las decisiones correcta en base a la visualización de los datos que presentaremos, ahora les mostrare el código fuente con el cual podrán utilizar los datos de su tabla para generar graficas.
Primero les dejo el archivo de consultas.php que esta dentro de la carpeta modelo
<?php
//FUNCION PARA OBTERNER EL NUMERO TOTAL DE EGRESADOS TRABAJANDO
function egresadosTrabajando(){
$enlace = mysql_connect("localhost", "root", "");
mysql_select_db("sce", $enlace);
$alumnosTrabando = "SELECT * FROM vmlzj_comprofiler WHERE cb_empleado='si'";
$resultado = mysql_query($alumnosTrabando,$enlace);
$numeroFilas = mysql_num_rows($resultado);
return $numeroFilas;
}
//FUNCION PARA OBTENER DE LA TABLA EL NUMERO TOTAL DE EGRESADOS DESEMPLEADOS
function egresadosDesempleados(){
$enlace = mysql_connect("localhost", "root", "");
mysql_select_db("sce", $enlace);
$alumnosTrabando = "SELECT * FROM vmlzj_comprofiler WHERE cb_empleado='no'";
$resultado = mysql_query($alumnosTrabando,$enlace);
$numeroFilas = mysql_num_rows($resultado);
return $numeroFilas;
}
?>
Ahora les dejo el código que hace que pinte la grafica gAlumT.php
<?php
//MANDAMOS A LLAMAR LAS LIBRERIAS JPGRAPH
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_pie.php");
include ("jpgraph/jpgraph_pie3d.php");
//MANDAMOS LLAMAR LA LIBRERIA PARA USAR LAS FUNCIONES QUE NOS DARAN LOS DATOS
include ("modelo/consultas.php");
//USAMOS LAS FUNCIONES PARA ASIGNAR LOS VALORES
$egreT = egresadosTrabajando();
$egreD = egresadosDesempleados();
//AQUI VAN LOS DATOS ASIGNADOS
$data = array($egreT,$egreD);
$graph = new PieGraph(450,200,"auto");
$graph->img->SetAntiAliasing();
$graph->SetMarginColor('gray');
//$graph->SetShadow();
// Setup margin and titles
$graph->title->Set("Grafica de alumnos trabajando");
$p1 = new PiePlot3D($data);
$p1->SetSize(0.35);
$p1->SetCenter(0.5);
// Setup slice labels and move them into the plot
$p1->value->SetFont(FF_FONT1,FS_BOLD);
$p1->value->SetColor("black");
$p1->SetLabelPos(0.2);
$nombres=array("Egresados con trabajo","Egresados sin trabajo");
$p1->SetLegends($nombres);
// Explode all slices
$p1->ExplodeAll();
$graph->Add($p1);
$graph->Stroke();
?>
Les dejo la librería de JPGRAPH para que la puedan descargar, SALUDOS espero que les halla servidor
Actividad 1:
Validación
1. ¿Describe las razones por las cuales es necesaria la validación?
a. Costes de fallos de ejecución. Los costes y las consecuencias de los fallos de ejecución de los sistemas críticos son potencial mente mucho más grandes que para los sistemas no críticos. Pueden reducirse los riesgos de los fallos del sistema invirtiendo más en verificación y validación del sistema. Normalmente es más económico encontrar y eliminar defectos antes de que el sistema sea entregado que pagar por los consecuentes costes de accidentes o de un mal funcionamiento de los servicios del sistema.
b. Validación de los atributos de confiabilidad. Puede tenerse que hacer una demostración formal a los clientes de que el sistema satisface sus requerimientos especificados de confiabilidad (disponibilidad, fiabilidad, seguridad y protección). Para evaluar estas características de confiabilidad se requieren actividades específicas de V & V explicadas más adelante en este capítulo. En algunos casos, los reguladores externos, tales como autoridades de aviación nacionales, pueden tener que certificar que el sistema es seguro antes de que éste sea desplegado. Para obtener esta certificación, pueden tenerse que diseñar y llevar a cabo procedimientos de V & V especiales que recogen la evidencia sobre la confiabilidad del sistema.
2. Cuál es el proceso para medir la fiabilidad de un software
Pruebas estadísticas
a. Se comienza estudiando los sistemas existentes del mismo tipo para establecer un per- fil operacional. Un perfil operacional identifica las clases de entradas al sistema y la probabilidad de que estas entradas ocurran en un uso normal.
b. A continuación, se construye un conjunto de datos de prueba que reflejan el perfil operacional. Esto significa que se crean datos de prueba con la misma distribución de probabilidad que los datos de prueba para los sistemas que se han estudiado. Normalmente, se utiliza un generador de datos de prueba para soportar este proceso.
c. Se prueba el sistema utilizando estos datos y se contabiliza el número y tipo de fallos que ocurren. Los instantes en los que ocurren estos fallos también son registrados. Tal y como se indicó en el Capítulo 9, las unidades de tiempo que se elijan deberían ser adecuadas para la métrica de fiabilidad utilizada.
d. Después de que se ha observado un número de fallos significativos estadísticamente, se puede calcular la fiabilidad del software y obtener el valor adecuado de la métrica de fiabilidad.
3. Que es y porque es importante un perfil de operaciones
Consiste en la especificación de clases de entradas y la probabilidad de su ocurrencia. Cuando un nuevo sistema software reemplaza a un sistema existente manual o automatizado, es razonablemente fácil evaluar el patrón de uso probable del nuevo software. Éste debería corresponderse con el uso del sistema existente, con algunas adiciones para las nuevas funcionalidades que (presumiblemente) se incluyen en el nuevo software. Por ejemplo, puede especificarse un perfil operacional para sistemas de centralitas de telecomunicaciones debido a que las compañías de telecomunicaciones conocen los patrones de llamadas que estos sistemas tienen que manejar.
El perfil operacional del software es importante por que refleja cómo se utilizará éste en la práctica.
4. La dificultad para la construcción de un perfil operacional de un software nuevo ¿Es igual para uno que se creó para remplazar a otro?
NO por que cuando un sistema software es nuevo e innovador, es difícil anticipar cómo será utilizado y, por lo tanto, generar un perfil operacional preciso.
5. Cómo funciona el modelo de crecimiento de fiabilidad
Un modelo de crecimiento de fiabilidad es un modelo de cómo cambia la fiabilidad del sistema a lo largo del tiempo durante el proceso de pruebas. Para predecir la fiabilidad, el modelo conceptual de crecimiento de la fiabilidad debe ser traducido a un modelo matemático.
Aquí no se entra en este nivel de detalle, sino que simplemente se plantea el principio del crecimiento de la fiabilidad.
6. ¿Es garantía de que la fiabilidad mejorara en cada entrega después de corregir fallos? ¿Por qué?
SI, por que a medida que se descubren los fallos del sistema, los defectos subyacentes que provocan estos fallos son reparados para que la fiabilidad del sistema mejore durante las pruebas y depuración.
Aunque los defectos del software no siempre se reparan durante la depuración, y cuando se cambia un programa, a menudo se introducen nuevos defectos. La probabilidad de ocurrencia de estos defectos puede ser mayor que la probabilidad de ocurrencia del defecto que ha sido reparado. Por lo tanto, la fiabilidad del sistema a veces puede empeorar en una nueva entrega en lugar de mejorar.
Por lo tanto no es garantía
7. ¿Hasta cuando las pruebas y depuración deben continuar?
Las pruebas pueden detenerse cuando se alcance el nivel requerido de fiabilidad del sistema.
8. Ventajas de la predicción de la predicción a partir de un modelo
Planificación de las pruebas. Dado el calendario actual de pruebas, puede predecirse cuándo se completarán las pruebas. Si el final de las pruebas tiene lugar después de la fecha planificada de entrega del sistema, entonces puede tenerse que desplegar recursos adicionales para probar y depurar, y así acelerar la tasa de crecimiento de fiabilidad.
Negociaciones con el cliente. Algunas veces el modelo de fiabilidad muestra que el crecimiento de la fiabilidad es muy lento y que se requiere una cantidad de esfuerzo de pruebas desproporcionada para obtener un beneficio relativamente pequeño.
Puede merecer la pena renegociar los requerimientos de fiabilidad con el cliente. De forma alternativa, puede ocurrir que el modelo prediga que la fiabilidad requerida probablemente nunca será alcanzada. En este caso, se tendrán que renegociar con el cliente los requerimientos de la fiabilidad del sistema.
9. Tipos de revisiones propuestas por el autor para ser obligatorias y garantizar la seguridad de un sistema
1. revisión para corregir la función que se pretende;
2. revisión para una estructura comprensible y mantenible;
3. revisión para verificar que el algoritmo y el diseño de las estructuras de datos son consistentes con el comportamiento especificado;
4. revisión de la consistencia del código y del diseño del algoritmo y de las estructuras de datos;
5. revisión de la adecuación de los casos de prueba del sistema
10. En qué consiste la técnica más efectiva para demostrar la seguridad del sistema (contradicción)
La técnica más efectiva para demostrar la seguridad de un sistema es la demostración por contradicción. Se comienza suponiendo que se está en un estado no seguro, el cual ha sido identificado por un análisis de contingencias del sistema, y que puede ser alcanzado ejecutando el programa. Se describe un predicado que define este estado no seguro.
A continuación, se analiza el código de forma sistemática y se muestra que, para todos los caminos del programa que conducen a ese estado, la condición de terminación de estos caminos contradice el predicado no seguro.
Si éste es el caso, la suposición inicial de un estado inseguro es incorrecta.
Si se repite esto para todas las contingencias identificadas, entonces el software es seguro.
a. Ejemplo:
Como ejemplo, consideremos el código de la Figura 24.6, que podría ser parte de la implementación del sistema de suministro de insulina. Desarrollar un argumento de seguridad para este código implica demostrar que la dosis de insulina administrada nunca es mayor que algún nivel máximo establecido para cada individuo diabético. Por lo tanto, no es necesario probar que el sistema suministra la dosis correcta, sino simplemente que nunca suministra una sobredosis al paciente.
Para construir un argumento de seguridad, se identifica la precondición para el estado in- seguro que, en este caso, es que currentDose > maxDose. Después se demuestra que todos los caminos del programa conducen a una contradicción de esta aserción no segura. Si éste es el caso, la condición no segura no puede ser cierta. Por lo tanto, el sistema es seguro. Se pueden estructurar y presentar los argumentos de seguridad de forma gráfica tal y como se muestra en la Figura 24.7. Los argumentos de seguridad, según se refleja en la citada figura, son mucho más cortos que las verificaciones formales de sistemas. Primero se identifica todos los posibles caminos que conducen a! estado potencial mente inseguro. Se trabaja hacia atrás a partir de este estado no seguro y se considera la última asignación de todas las variables de estado en cada camino que conduce a él. Pueden omitirse los cálculos previos (como la sentencia if 1 en la Fi- gura 24.7) en el argumento de seguridad. En este ejemplo, todo lo que se necesita saber es el conjunto de posibles valores de currentDose inmediatamente antes de que el método administerlnsulin sea ejecutado. En el argumento de seguridad mostrado en la Figura 24.7, existen tres posibles caminos en el programa que conducen a la llamada al método administerlnsulin. Queremos demostrar que la cantidad de insulina suministrada nunca excede del valor de maxDose. Se consideran todos los posibles caminos hasta administerlnsulin:
Fuente: ingeniería del software lan Sommenville

Se preguntarán para que sirve una bitácora en en una Aplicación Web. Bueno les diré, es muy útil, ya que va guardando los movimientos de los usuarios y en caso de reclamo por parte de los usuarios de que el sistema que hemos desarrollado no funciona por que han perdido datos pero en realidad ellos los borraron por razones privadas, nosotros podremos defendernos con esta bitácora de movimientos que dirá a que hora se realizo cierta acción y quien la realizo ejemplo:
Como pueden ver se puede visualizar la acción realizada, el usuario al que se le hizo el cambio luego al usuario que realizo
el cambio, la fecha y hora en que se realizo la acción y valor anterior y el valor nuevo
A continuación les mostrare parte del código
Vista de la bitácora “bitacora.php”
<?php
function estado($edo){
if($edo==1){
return "Administrador";
}
else {
return "Usuario";
}
}
$eliminar = base_url()."imagenes/eliminar.fw.png";
$actualizar = base_url()."imagenes/modificar.png";
function estadoImg($edo){
$palomita = base_url()."imagenes/v.fw.png";
$x = base_url()."imagenes/eliminar.png";
if($edo==1){
return "<img src=".$palomita.">";
}
else{
return "<img src=".$x.">";
}
}
?>
<script type="text/javascript">
<!--
function confirmacion(id) {
var answer = confirm("Esta seguro que desea eliminar")
if (answer){
alert("Ha confirmado eliminar")
location.href="deleteUserId/"+id
}
else{
alert("Cancelado")
}
}
function actualizar(id) {
location.href="updateUserId/"+id
}
//-->
<?php echo $_SESSION['nombre'];?>
Bitacora
<div id="container">
<div id="body" align="center">
<table border="0" align="center">
<form id="b" name="b" action="index.php/welcome/buscarBitacora" method="POST"><label for="buscar">Buscar <input type= "text" id="buscar" name="buscar" > <input type="submit" id="arre" name="arre" value="buscar"
<table border="0" align="center" id="tabla">
<tr bgcolor="#7362ec" align="center">
Acción
Usuario administrado
Usuario administrador
Fecha
Valor Anterior
Valor nuevo
<?php
$colorfila=0;
if($users!=false){
foreach($users->result() as $row){
if ($colorfila==0){
$color= "#b5b5b5";
$colorfila=1;
}else{
$color="#f7f7f7";
$colorfila=0;
}
echo "<tr bgcolor='".$color."' align='center' ";?> onmouseover="this.style.backgroundColor='#E13300'"
onmouseout="this.style.backgroundColor=''"><?php
echo "".$row->accion." ";
echo "".$row->UsuarioAdministrado. " ";
echo "".$row->usuarioAdministrador." ";
echo "".$row->fecha." ";
echo "".$row->valor_anterior." ";
echo "".$row->valor_nuevo." ";
echo "";
}
}
?>
La parte del controlador “users.php”
//FUNCION GUARDAR BITACORA
public function guardarBitacora($id,$accion){
if(isset($_SESSION['usuario'])){
$datoAnterior="";
$datoNuevo="";
//Obteniendo los datos que se van a modificar
$nom_usu = $this->input->post('nom_usu');
$clave=sha1($this->input->post('psw'));
$login = $this->input->post('login');
$status = $this->input->post('status');
$acceso = $this->input->post('acceso');
$local = $this->input->post('local');
$ld_nacional = $this->input->post('ld_nacional');
$cel_ld = $this->input->post('cel_ld');
$cel_local = $this->input->post('cel_local');
$internacional = $this->input->post('internacional');
$br="
";
//Obterner los datos de la la base de datos
$datosDB=$this->usersModel->datosUsuario($id);
//Comparando login
if($login==@$datosDB->login){
$datoAnterior.="";
}
else{
$datoAnterior.="login:".$datosDB->login;
$datoNuevo.="login:".$login;
}
//Comparando nombre de usuario
if($nom_usu==$datosDB->nom_usu){
$datoAnterior.= "";
}
else{
$datoAnterior.=$br."nom_usu:".$datosDB->nom_usu;
$datoNuevo.=$br."login:".$nom_usu;
}
//Comparando nombre de password
if($clave==$datosDB->psw){
$datoAnterior.= "";
}
else{
$datoAnterior.=$br."psw:***";
$datoNuevo.=$br."login:???";
}
//Comparando status
if($status==$datosDB->status){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."status:".$datosDB->status;
$datoNuevo.=$br."status:".$status;
}
//Comparando acceso
if($acceso==$datosDB->acceso){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."acceso:".$datosDB->acceso;
$datoNuevo.=$br."acceso:".$acceso;
}
//Comparando llamadas locales
if($local==$datosDB->local){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."local:".$datosDB->local;
$datoNuevo.=$br."local:".$local;
}
//Comparando llamadas nacionales
if($ld_nacional==$datosDB->ld_nacional){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."ld_nacional:".$datosDB->ld_nacional;
$datoNuevo.=$br."ld_nacional:".$ld_nacional;
}
//Comparando llamadas cel_ld
if($cel_ld==$datosDB->cel_ld){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."cel_ld:".$datosDB->cel_ld;
$datoNuevo.=$br."cel_ld:".$cel_ld;
}
//Comparando llamadas cel_local
if($cel_local==$datosDB->cel_local){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."cel_local:".$datosDB->cel_local;
$datoNuevo.=$br."cel_local:".$cel_local;
}
if($internacional==$datosDB->internacional){
$datoAnterior.="";
}
else{
$datoAnterior.=$br."Internacional:".$datosDB->internacional;
$datoNuevo.=$br."internacional:".$internacional;
}
$dataBit = array(
"accion" => $accion,
"usuarioAdministrador" => $_SESSION["login"],
"usuarioAdministrado" => $login,
"valor_anterior" => $datoAnterior,
"valor_nuevo" => $datoNuevo
);
$this->usersModel->insertBitacora($dataBit);
}
}
Ahora la parte del modelo “usersmodels”
public function getBitacora(){
$data=$this->db->get('vistabitacora');
if($data->num_rows() >0){
return $data;
}else{
return false;
}
}
public function insertBitacora($data){
$this->db->insert('bitacora',$data);
}
function buscarBitacora($dato){
$this->db->select('accion');
$this->db->select('usuarioAdministrador');
$this->db->select('UsuarioAdministrado');
$this->db->select('valor_anterior');
$this->db->select('valor_nuevo');
$this->db->select('fecha');
$this->db->like('usuarioAdministrador',$dato);
$this->db->or_like('accion',$dato);
$this->db->or_like('usuarioAdministrado',$dato);
$this->db->or_like('valor_anterior',$dato);
$this->db->or_like('valor_nuevo',$dato);
$this->db->or_like('fecha',$dato);
$consul=$this->db->get('bitacora');
if($consul->num_rows() >0){
return $consul;
}else{
return false;
}
}
Archivo SQL
# SQL Manager 2010 for MySQL 4.5.1.3
# ---------------------------------------
# Host : localhost
# Port : 3306
# Database : asteriskcdrdb
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE `asteriskcdrdb`
CHARACTER SET 'latin1'
COLLATE 'latin1_swedish_ci';
USE `asteriskcdrdb`;
#
# Structure for the `bitacora` table :
#
CREATE TABLE `bitacora` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accion` varchar(20) DEFAULT NULL,
`usuarioAdministrador` varchar(20) DEFAULT NULL,
`usuarioAdministrado` varchar(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`valor_anterior` varchar(200) DEFAULT NULL,
`valor_nuevo` varchar(200) DEFAULT NULL,
`fecha` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=latin1 COMMENT='id-int(11)naccion-varchar(20)nusuario-varchar(20)nfecha-datenhora-timenvalor_anterior-varchar(20)nvalor_nuevo-varchar(20)';
#
# Structure for the `cdr` table :
#
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL DEFAULT '',
`src` varchar(80) NOT NULL DEFAULT '',
`dst` varchar(80) NOT NULL DEFAULT '',
`dcontext` varchar(80) NOT NULL DEFAULT '',
`channel` varchar(80) NOT NULL DEFAULT '',
`dstchannel` varchar(80) NOT NULL DEFAULT '',
`lastapp` varchar(80) NOT NULL DEFAULT '',
`lastdata` varchar(80) NOT NULL DEFAULT '',
`duration` int(11) NOT NULL DEFAULT '0',
`billsec` int(11) NOT NULL DEFAULT '0',
`disposition` varchar(45) NOT NULL DEFAULT '',
`amaflags` int(11) NOT NULL DEFAULT '0',
`accountcode` varchar(20) NOT NULL DEFAULT '',
`uniqueid` varchar(32) NOT NULL DEFAULT '',
`userfield` varchar(255) NOT NULL DEFAULT '',
KEY `IDX_UNIQUEID` (`uniqueid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
#
# Structure for the `user_control` table :
#
CREATE TABLE `user_control` (
`id_usu` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`status` int(1) unsigned NOT NULL DEFAULT '1',
`nom_usu` varchar(25) NOT NULL,
`login` varchar(4) NOT NULL DEFAULT '0000',
`psw` varchar(40) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`local` tinyint(4) NOT NULL DEFAULT '0',
`ld_nacional` tinyint(4) NOT NULL DEFAULT '0',
`cel_local` tinyint(4) NOT NULL DEFAULT '0',
`cel_ld` tinyint(4) NOT NULL DEFAULT '0',
`internacional` tinyint(4) NOT NULL DEFAULT '0',
`acceso` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_usu`),
UNIQUE KEY `login` (`login`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;
#
# Structure for the `usuarios` table :
#
CREATE TABLE `usuarios` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#
# Data for the `bitacora` table (LIMIT 0,500)
#
INSERT INTO `bitacora` (`id`, `accion`, `usuarioAdministrador`, `usuarioAdministrado`, `valor_anterior`, `valor_nuevo`, `fecha`) VALUES
(1,'CerrarSesion','45','',NULL,NULL,'2012-11-02 19:06:35'),
(2,'Acceso','00','',NULL,NULL,'2012-11-02 19:09:07'),
(3,'Actualización','00','00','
acceso:1','
acceso:0','2012-11-02 19:09:41'),
(4,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:09:45'),
(5,'Acceso','00','',NULL,NULL,'2012-11-02 19:09:52'),
(6,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:12:31'),
(7,'Acceso','00','',NULL,NULL,'2012-11-02 19:12:40'),
(8,'CerrarSesion','00','',NULL,NULL,'2012-11-02 19:13:27'),
(9,'Acceso','00','',NULL,NULL,'2012-11-02 19:13:34'),
(10,'Acceso','05','',NULL,NULL,'2012-11-05 09:33:09'),
(11,'CerrarSesion','05','',NULL,NULL,'2012-11-05 09:37:14'),
(12,'Acceso','05','',NULL,NULL,'2012-11-05 09:38:30'),
(13,'Actualización','05','0','login:05
nom_usu:Julio Cesar
status:1
acceso:1
local:1','login:
login:
status:
acceso:
local:','2012-11-06 16:51:42'),
(14,'Cambio de contraseña','05','',NULL,NULL,'2012-11-06 16:55:18'),
(15,'CerrarSesion','05','',NULL,NULL,'2012-11-06 16:55:24'),
(16,'Acceso','00','',NULL,NULL,'2012-11-06 16:58:49'),
(17,'Actualización','00','05','','','2012-11-06 16:59:29'),
(18,'Actualización','00','05','
psw:***
local:0','
login:???
local:1','2012-11-06 17:01:56'),
(19,'Actualización','00','05','
local:0','
local:1','2012-11-06 17:03:18'),
(20,'CerrarSesion','00','',NULL,NULL,'2012-11-06 17:03:29'),
(21,'Acceso','05','',NULL,NULL,'2012-11-06 17:03:34'),
(22,'Cambio de contraseña','05','',NULL,NULL,'2012-11-06 17:03:49'),
(23,'CerrarSesion','05','',NULL,NULL,'2012-11-06 17:03:54'),
(24,'Acceso','05','',NULL,NULL,'2012-11-06 17:04:01'),
(25,'Acceso','05','',NULL,NULL,'2012-11-07 07:00:08'),
(26,'Registro','05','10','login:
nom_usu:
psw:***
status:
acceso:
local:','login:10
login:Chicho
login:???
status:1
acceso:0
local:1','2012-11-07 07:01:00'),
(27,'Registro','05','0','
psw:***','
login:???','2012-11-07 07:03:42'),
(28,'Cambio de contraseña','05','',NULL,NULL,'2012-11-07 07:05:35'),
(29,'Cambio de contraseña','05','43',NULL,NULL,'2012-11-07 07:08:16'),
(30,'CerrarSesion','05','',NULL,NULL,'2012-11-07 07:13:31'),
(31,'Acceso','05','',NULL,NULL,'2012-11-07 07:17:14'),
(32,'Eliminacion','05','40','id_usu:40
nom_usu:Felipe
acceso:1
status:1
local:0
ld_nacional:0
cel_local:0
cel_ld:0
intenacional:0',NULL,'2012-11-07 07:17:59'),
(33,'Actualización','05','01','login:05
psw:***
acceso:1
local:0','login:01
login:???
acceso:0
local:1','2012-11-07 07:23:14'),
(34,'Actualización','05','11','login:01
local:0','login:11
local:1','2012-11-07 07:23:57'),
(35,'Actualización','05','01','
psw:***
local:0','
login:???
local:1','2012-11-07 07:26:04'),
(36,'Registro','05','21',NULL,NULL,'2012-11-07 07:41:53'),
(37,'CerrarSesion','05','',NULL,NULL,'2012-11-07 07:42:07'),
(38,'Acceso','21','',NULL,NULL,'2012-11-07 07:42:16'),
(39,'Cambio de contraseña','21','',NULL,NULL,'2012-11-07 07:42:36'),
(40,'CerrarSesion','21','',NULL,NULL,'2012-11-07 07:42:48'),
(41,'Acceso','21','',NULL,NULL,'2012-11-07 07:42:56'),
(42,'CerrarSesion','21','',NULL,NULL,'2012-11-07 07:43:35'),
(43,'Acceso','10','',NULL,NULL,'2012-11-10 17:13:47'),
(44,'CerrarSesion','10','',NULL,NULL,'2012-11-10 17:13:55'),
(45,'Acceso','06','',NULL,NULL,'2012-11-10 17:15:15'),
(46,'CerrarSesion','06','',NULL,NULL,'2012-11-10 17:16:21'),
(47,'Acceso','06','',NULL,NULL,'2012-11-10 17:16:32');
COMMIT;
#
# Data for the `cdr` table (LIMIT 0,500)
#
INSERT INTO `cdr` (`calldate`, `clid`, `src`, `dst`, `dcontext`, `channel`, `dstchannel`, `lastapp`, `lastdata`, `duration`, `billsec`, `disposition`, `amaflags`, `accountcode`, `uniqueid`, `userfield`) VALUES
('2012-09-03 19:52:50','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000000','SIP/100-00000001','Dial','SIP/100,"",tr',10,5,'ANSWERED',3,'','1346723570.0',''),
('2012-09-04 13:28:33','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000001','SIP/100-00000002','Congestion','10',5,0,'FAILED',3,'','1346786913.1',''),
('2012-09-04 13:29:08','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000004','SIP/100-00000005','Dial','SIP/100,"",tr',24,22,'ANSWERED',3,'','1346786948.4',''),
('2012-09-04 13:33:52','"Julian Garibaldi" ','100','100','from-internal','SIP/100-00000006','SIP/100-00000007','Congestion','10',5,0,'FAILED',3,'','1346787232.6',''),
('2012-09-04 13:35:36','"Julian Garibaldi" ','100','100','from-internal','SIP/100-0000000d','SIP/100-0000000e','Dial','SIP/100,"",tr',16,8,'ANSWERED',3,'','1346787336.13',''),
('2012-09-04 14:13:33','"Recepcion" ','300','300','personalizado','SIP/300-0000000f','SIP/300-00000010','Hangup','',30,0,'NO ANSWER',3,'','1346789613.15',''),
('2012-09-04 14:14:08','"Recepcion" ','300','300','personalizado','SIP/300-00000011','SIP/300-00000012','Dial','SIP/300,30,Tt',28,25,'ANSWERED',3,'','1346789648.17',''),
('2012-09-04 14:18:24','"Recepcion" ','300','300','personalizado','SIP/300-00000013','SIP/300-00000014','Dial','SIP/300,30,Tt',4,0,'NO ANSWER',3,'','1346789904.19','');
COMMIT;
#
# Data for the `user_control` table (LIMIT 0,500)
#
INSERT INTO `user_control` (`id_usu`, `status`, `nom_usu`, `login`, `psw`, `local`, `ld_nacional`, `cel_local`, `cel_ld`, `internacional`, `acceso`) VALUES
(36,0,'kakaroto','45','da39a3ee5e6b4b0d3255bfef95601890afd80709',0,0,1,1,0,0),
(38,1,'Julio Cesar','01','7c4a8d09ca3762af61e59520943dc26494f8941b',0,0,0,0,0,0),
(39,1,'Julian Garibaldi','06','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',0,1,1,1,1,1),
(41,1,'Chicho','10','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),
(42,0,'0','0','da39a3ee5e6b4b0d3255bfef95601890afd80709',0,0,0,0,0,0),
(43,1,'diane','11','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),
(45,1,'Mijail','43','4f62e47bd66b5ab1a8fa1e9508d53ae78e7dcfac',1,0,0,0,0,0),
(46,1,'xyz','21','dd5fef9c1c1da1394d6d34b248c51be2ad740840',1,0,0,0,0,0);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

