Capítulo 47 — Ensayo de fallo y recuperación
Mapa de la lección
Lección 47 publicada. Mapa, ejemplo, EX139.
flowchart TD
N0["Resultados de aprendizaje"]
N1["47.1 Guion"]
N2["47.2 Medidas"]
N3["47.3 Acciones correctivas"]
N4["Nota práctica"]
N5["47.1b Corrección sin culpables y recurrencia"]
N6["Nota de campo: el olor de cero tickets"]
N7["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX139"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["47.1 Guion"]
N2["47.2 Medidas"]
N3["47.3 Acciones correctivas"]
N4["Nota práctica"]
N5["47.1b Corrección sin culpables y recurrencia"]
N6["Nota de campo: el olor de cero tickets"]
N7["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX139"]
[Resultados de aprendizaje]
|
v
[47.1 Guion]
|
v
[47.2 Medidas]
|
v
[47.3 Acciones correctivas]
|
v
[Nota práctica]
|
v
[47.1b Corrección sin culpables y recurrencia]
|
v
[Nota de campo: el olor de cero tickets]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX139]
Resultados de aprendizaje
Usted podrá (1) realizar un ensayo de fallos guionizado; (2) medir el tiempo de recuperación; (3) registrar acciones correctivas.
47.1 Guion
Inyecte: archivo de lista de permitidos borrado; almacén de hallazgos detenido; desfase de reloj; reproducción de eventos duplicados; grafo plano en lugar del zonificado. Observe las denegaciones, las colas, las alertas y el fallo de la comprobación de alcanzabilidad. En el ensayo de fallos en banco de ABP, el equipo de Lena borró el archivo de lista de permitidos mientras se reproducía tráfico, después detuvo el almacén de hallazgos, desfasó el reloj de la copia de banco de PLC-A y reprodujo eventos duplicados. Por último, sustituyeron el grafo zonificado por uno plano. Los observadores registraron si se denegaban las escrituras, si los hallazgos se encolaban, si saltaban las alertas y si la comprobación de alcanzabilidad fallaba con el grafo plano. Cada inyección se ejecutó por separado antes de intentar cualquier combinación.
47.2 Medidas
Tiempo hasta denegar todas las escrituras tras la pérdida de la política; tiempo hasta la alerta; tiempo hasta la restauración; hallazgos perdidos (deberían ser 0 con la cola); la comprobación de alcanzabilidad del SIS sigue fallando de forma cerrada con un grafo erróneo. En ABP, el ensayo midió 45 segundos hasta denegar todas las escrituras tras borrar la lista de permitidos, frente a un objetivo de 30 segundos. Las alertas saltaron dentro del objetivo y no se perdió ningún hallazgo, porque los borradores se encolaron mientras el almacén de hallazgos estaba caído. La comprobación de alcanzabilidad falló correctamente al sustituir el grafo plano, mostrando SIS-B como alcanzable. Cada medida la registró un observador con un cronómetro y se contrastó con los registros, de modo que las cifras no dependían de la memoria de nadie.
47.3 Acciones correctivas
Cada incumplimiento en un simulacro del CNHP se convierte en un ticket con responsable y fecha límite, no solo en una diapositiva de lecciones aprendidas.
# Lab 27 - residual CUSUM vs band on batch reactor level (synthetic)
import random
def run(seed, atk, det, k=0.8, h=6.0):
rng=random.Random(seed); true=est=50.0; s=0.0; alarm=None
for t in range(500):
inflow=1.0+rng.gauss(0,0.05)+(0.08 if atk and t>=250 else 0)
true+=inflow-0.02*true
lvl=true+rng.gauss(0,0.3); fm=inflow+rng.gauss(0,0.02)
if atk and t>=250: lvl=50+rng.gauss(0,0.3)
if atk=="B" and t>=250: fm=1.0+rng.gauss(0,0.02)
est+=fm-0.02*est
hit=abs(lvl-50)>2.0 if det=="band" else False
if det=="cusum":
s=max(0.0,s+abs(lvl-est)-k); hit=s>h
if hit and alarm is None: alarm=t
return alarm
for det in ("band","cusum"):
fa=sum(run(i,None,det) is not None for i in range(60))
for atk in ("A","B"):
hits=[a-250 for a in (run(i,atk,det) for i in range(60)) if a is not None and a>=250]
print(f"{det} class{atk} FA={fa}/60 det={len(hits)}/60 mean_delay={sum(hits)/len(hits) if hits else float('nan'):.1f}")
Salida esperada:
band classA FA=0/60 det=0/60 mean_delay=nan
band classB FA=0/60 det=0/60 mean_delay=nan
cusum classA FA=0/60 det=60/60 mean_delay=24.8
cusum classB FA=0/60 det=0/60 mean_delay=nan
Caso sintético — Ashford Batch Plant. El ensayo mostró 45 s hasta denegar todas las escrituras; objetivo de 30 s: se acortó el intervalo de sondeo.
En ABP, el tiempo de denegación de 45 segundos se convirtió en un ticket para el responsable del monitor, con fecha límite. La corrección acortó el intervalo de comprobación de la política, y la inyección se repitió hasta cumplir el objetivo dos veces. El ticket se cerró solo después de la segunda ejecución satisfactoria, y la fecha del siguiente ensayo se reservó antes de que los observadores salieran de la sala.
47.4 Errores y límites
Los ensayos en ventanas de producción están prohibidos; use entornos sintéticos. Los ensayos de Lena en ABP se ejecutan en el entorno de banco con tráfico sintético, nunca durante una ventana de producción. Borrar la lista de permitidos en el monitor en vivo probaría la misma ruta de código, pero podría interrumpir las escrituras de ingeniería mientras un lote se ejecuta en R-101. La copia de banco de PLC-A y el tráfico reproducido de la línea troncal aportan la evidencia de tiempos necesaria. Las comprobaciones en producción tras una corrección son de solo lectura, como confirmar que la versión desplegada coincide con la probada en el banco.
Nota práctica
Celebre los tickets registrados: son el resultado. Un ensayo con cero tickets suele haberse saltado las inyecciones difíciles.
47.1b Corrección sin culpables y recurrencia
Los tickets correctivos nombran el monitor, el conducto o el runbook defectuoso, no al operador que siguió un mal procedimiento. Tras una corrección, repita la inyección que encontró la carencia. Cierre el ticket solo cuando la medida cumpla el SLO dos veces. Los observadores rotan para que nadie quede exento de forma permanente. Un ticket que nombra a una persona en lugar de un componente vuelve a su autor para que lo reformule antes de aceptarlo. Los observadores anotan tiempos y desviaciones; no arreglan nada en vivo. Sus tiempos se contrastan con los registros antes de fotografiar el marcador. Las fotos del marcador van al expediente.
Nota de campo: el olor de cero tickets
Un ensayo que produjo cero tickets se había saltado la inyección del grafo plano. Repetirlo con la inyección difícil generó tres tickets y endureció la barrera de alcanzabilidad del SIS. La inyección del grafo plano es ahora obligatoria en todos los ensayos.
Cada ticket correctivo enlaza el script de inyección y el valor medido que lo desencadenó.
Los observadores rotados reciben información sobre las medidas antes del ensayo, no durante él.
47.5 Ejemplo resuelto: ensayo de recuperación en el banco (ABP sintética)
El escenario del ensayo: la lógica de PLC-A se corrompe (simulado cargando un programa erróneo en el controlador de banco) durante un lote. Medidas: tiempo hasta detectar (alerta de cambio de programa, 35 s), tiempo hasta decidir (el jefe de turno elige la retención segura, 4 min), tiempo hasta restaurar la lógica verificada desde la copia de seguridad sin conexión (22 min) y tiempo hasta reanudar (41 min en total). El ensayo revela que el hash de la copia de seguridad nunca se había registrado, así que la verificación dependía de una comparación manual. Las acciones correctivas reciben responsables y fechas: registrar los hashes de las copias de seguridad, añadir un simulacro de restauración al calendario trimestral y hacer seguimiento de la recurrencia.
Ejercicios — capítulo 47
- EX139 — Inyección. Una inyección y el comportamiento seguro esperado. Rúbrica: 3 = ambos; 2 = solo la inyección; 1 = vaga; 0 = insegura.
- EX140 — Medida. Medida principal para la inyección de pérdida de la política. Rúbrica: 3 = tiempo hasta denegar las escrituras; 2 = disponibilidad vaga; 1 = intento mínimo; 0 = nada.
- EX141 — Acción. Convierta un resultado de 45 s en el título de un ticket correctivo. Rúbrica: 3 = específico; 2 = vago; 1 = intento mínimo; 0 = nada.
Síntesis del capítulo
Rómpalo a propósito; mida; abra tickets para las carencias.
Siga estudiando — capítulo 47 de 50
← Capítulo 46 (borrador) · Índice de capítulos del curso · Capítulo 48 (borrador) →