[PYTHON] Allocation de ressources aux tests

Qu'est-ce que c'est

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.

politique

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éation de données

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 Module 1 Module 2 Module 3 Module 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

Calcul partie 1

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é.

Considération

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.

image

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.

Calcul partie 2

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

Allocation de ressources aux tests
[Introduction à cx_Oracle] Présentation de cx_Oracle
Résumé de l'utilisation de pandas.DataFrame.loc
Etosetra lié à Pandas read_csv
Résumé de l'utilisation de pyenv-virtualenv
Défiez la tour de Hanoi avec récurrence
Afficher les différences json de manière facile à lire
Résumé de l'utilisation de csvkit
Supplément à l'explication de vscode