[PYTHON] Zuweisung von Ressourcen zum Testen

Was ist das

Sie sind ein Software-Tester. Die Software besteht aus vier Modulen. Die Tests sind auch in fünf Kategorien unterteilt: A, B, C, D und E.

Jetzt müssen Sie entscheiden, welche Kategorie von Tests mit welcher Geschwindigkeit durchgeführt werden soll.

Politik

Aus früheren Erfahrungen wird angenommen, dass die Korrelation zwischen Modulen und Tests in Tabelle A angegeben ist. Zu diesem Zeitpunkt, wenn jeder Test in einem Verhältnis von $ p $ durchgeführt wird, wird die Fehlererkennungswahrscheinlichkeit in Modul 1 mit $ A_1 \ cdot p $ berechnet.

Datenerstellung

Machen Sie Tabelle A mit Zufallszahlen.

python3


import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 #Anzahl der Module, Anzahl der Tests
A = pd.DataFrame(np.maximum(np.random.normal
     (-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
     columns=['Modul%d'%(i+1) for i in range(nm)],
     index=['Prüfung%s'%chr(i+65) for i in range(nt)])
print(A)
Entdeckungswahrscheinlichkeit Modul 1 Modul 2 Modul 3 Modul 4
Test A 0.000000 0.049990 0.000000 0.088720
Test B 0.000000 0.000000 0.000000 0.069715
Test C 0.016450 0.000000 0.073734 0.000000
Test D 0.035014 0.016451 0.000000 0.020199
Test E 0.000000 0.259396 0.094668 0.000000

Berechnungsteil 1

Berechnen wir in Python, um die Gesamtsumme zu maximieren.

python3


m = LpProblem(sense=LpMaximize) #Mathematisches Modell
x = addvars(nt) #Variable(Testprozentsatz)
m += lpDot(A.sum(1),x) #Zielfunktion
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s Summe%.4f Minimum%.4f'%(LpStatus[m.status],
    r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
    print('%Arbeitsbelastung von s%.4f'%(i,v))
>>>
Optimale Summe 0.3541 Minimum 0.0000
Test A Workload 0.0000
Test B Workload 0.0000
Test C Workload 0.0000
Test D Workload 0.0000
Test E Workload 1.0000

Das Ergebnis ist, dass nur der effizienteste Test E durchgeführt wird.

Erwägung

Test E kann keine Fehler in Modul 1 und Modul 2 finden. Qualitätssicherung garantiert die Qualität einer bestimmten Mindestlinie.

image

In "Berechnung Nr. 1" testen wir, um die durchschnittliche Qualität wie die Verteilung von Rot zu verbessern, aber wir haben immer noch die Möglichkeit einer geringen Qualität. Betrachten Sie als "Berechnung Nr. 2" einen Test, bei dem eine geringe Qualität vermieden wird, anstatt die durchschnittliche Qualität wie in der blauen Verteilung zu erhöhen.

Berechnungsteil 2

Berechnen wir, um die Mindestqualität pro Modul zu maximieren.

python3


m = LpProblem(sense=LpMaximize) #Mathematisches Modell
x = addvars(nt) #Variable(Testprozentsatz)
y = addvar() #Variable(Niedrigste Linie)
m += y + lpDot(A.sum(1),x)*0.01 #Zielfunktion
m += lpSum(x) == 1
for j in range(nm):
    m += y <= lpDot(A.ix[:,j],x)
m.solve()
r = np.vectorize(value)(x)
print('%s Summe%.4f Minimum%.4f'%(LpStatus[m.status],
    r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
    print('%Arbeitsbelastung von s%.4f'%(i,v))
>>>
Optimale Summe 0.0948 Minimum 0.0237
Test A Workload 0.1434
Test B Workload 0.0000
Test C Workload 0.2838
Test D Workload 0.5435
Test E Workload 0.0293

Im Vergleich zu Teil 1 war die Gesamtzahl niedriger, aber die niedrigste höher.

Diese Idee ist dieselbe wie "Spieltheorie mit optimaler Kombination lösen".

das ist alles

Recommended Posts

Zuweisung von Ressourcen zum Testen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Etosetra im Zusammenhang mit Pandas read_csv
Zusammenfassung der Verwendung von pyenv-virtualenv
Fordern Sie den Turm von Hanoi mit Wiederholung heraus
Zeigen Sie json-Unterschiede auf einfach zu lesende Weise an
Zusammenfassung der Verwendung von csvkit
Ergänzung zur Erklärung von vscode