Vous êtes un testeur de logiciels. Le logiciel est composé de quatre modules. Les tests sont également divisés en cinq catégories: A, B, C, D et E.
Vous devez maintenant décider quelle catégorie de tests effectuer et à quel rythme.
D'après l'expérience passée, on suppose que la corrélation entre les modules et les tests est donnée dans le tableau A. A ce moment, lorsque chaque essai est effectué à un rapport de $ p $, la probabilité de détection de défaillance dans le module 1 doit être calculée par $ A_1 \ cdot p $.
Créez le tableau A avec des nombres aléatoires.
python3
import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 #Nombre de modules, nombre de tests
A = pd.DataFrame(np.maximum(np.random.normal
(-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
columns=['module%d'%(i+1) for i in range(nm)],
index=['tester%s'%chr(i+65) for i in range(nt)])
print(A)
Probabilité de découverte th> | Module 1 th> | Module 2 th> | Module 3 th> | Module 4 th> |
---|---|---|---|---|
Test A th> | 0.000000 | 0.049990 | 0.000000 | 0.088720 |
Test B th> | 0.000000 | 0.000000 | 0.000000 | 0.069715 |
Test C th> | 0.016450 | 0.000000 | 0.073734 | 0.000000 |
Test D th> | 0.035014 | 0.016451 | 0.000000 | 0.020199 |
Test E th> | 0.000000 | 0.259396 | 0.094668 | 0.000000 |
Calculons en Python pour maximiser la somme totale.
python3
m = LpProblem(sense=LpMaximize) #Modèle mathématique
x = addvars(nt) #variable(Pourcentage de test)
m += lpDot(A.sum(1),x) #Fonction objective
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%somme de s%.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('%Charge de travail de s%.4f'%(i,v))
>>>
Somme optimale 0.3541 Minimum 0.0000
Tester une charge de travail 0.0000
Charge de travail du test B 0.0000
Charge de travail du test C 0.0000
Charge de travail du test D 0.0000
Test E charge de travail 1.0000
Le résultat est que seul le test E le plus efficace est effectué.
Le test E ne trouve aucun échec dans le module 1 et le module 2. L'assurance qualité est considérée comme garantissant la qualité d'une certaine ligne minimale.
Dans "Calcul # 1", nous testons pour améliorer la qualité moyenne comme la distribution du rouge, mais nous avons toujours la possibilité d'une qualité médiocre. En tant que "Calcul # 2", considérez un test qui évite une qualité médiocre plutôt que d'augmenter la qualité moyenne comme dans la distribution bleue.
Calculons pour maximiser la qualité minimale par module.
python3
m = LpProblem(sense=LpMaximize) #Modèle mathématique
x = addvars(nt) #variable(Pourcentage de test)
y = addvar() #variable(Ligne la plus basse)
m += y + lpDot(A.sum(1),x)*0.01 #Fonction objective
m += lpSum(x) == 1
for j in range(nm):
m += y <= lpDot(A.ix[:,j],x)
m.solve()
r = np.vectorize(value)(x)
print('%somme de s%.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('%Charge de travail de s%.4f'%(i,v))
>>>
Somme optimale 0.0948 Minimum 0.0237
Tester une charge de travail 0.1434
Charge de travail du test B 0.0000
Charge de travail du test C 0.2838
Charge de travail du test D 0.5435
Test E charge de travail 0.0293
Comparé à la partie 1, le total était plus bas, mais le plus bas était plus élevé.
Cette idée est la même que "Résoudre la théorie des jeux avec une combinaison optimale".
c'est tout
Recommended Posts