테스트에 리소스 할당

이게 뭐야



당신은 소프트웨어 시험 담당입니다. 소프트웨어는 4개의 모듈로 이루어져 있습니다.
또한 테스트는 A, B, C, D, E의 다섯 가지 범주로 나뉩니다.

자, 당신은 어떤 카테고리의 테스트를 어떤 비율로 할지 결정해야합니다.

정책



과거의 경험에서 모듈과 테스트의 상관 관계가 표 A에 주어진다고 가정한다.
이 때, 각 테스트를 백분율 $p$ 로 실시했을 때, 모듈 1 에서의 장해의 발견 확률은, $A_1 ​​\cdot p$ 로 구해지는 것으로 합니다.

데이터 작성



난수로 표 A를 만듭니다.

python3
import numpy as np, pandas as pd
from pulp import *
from ortoolpy import addvar, addvars
np.random.seed(4)
nm, nt = 4, 5 # モジュール数、テスト数
A = pd.DataFrame(np.maximum(np.random.normal
     (-0.05,0.2,(nt,nm)), np.zeros((nt,nm))),
     columns=['モジュール%d'%(i+1) for i in range(nm)],
     index=['テスト%s'%chr(i+65) for i in range(nt)])
print(A)



발견 확률
모듈 1
모듈 2
모듈 3
모듈 4




테스트 A
0.000000
0.049990
0.000000
0.088720


테스트 B
0.000000
0.000000
0.000000
0.069715


테스트 C
0.016450
0.000000
0.073734
0.000000


테스트 D
0.035014
0.016451
0.000000
0.020199


테스트 E
0.000000
0.259396
0.094668
0.000000



계산 그 1



전체 합계를 극대화하기 위해 파이썬으로 계산해 보겠습니다.

python3
m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
m += lpDot(A.sum(1),x) # 目的関数
m += lpSum(x) == 1
m.solve()
r = np.vectorize(value)(x)
print('%s 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
    r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
    print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.3541 最低 0.0000
テストAの作業量 0.0000
テストBの作業量 0.0000
テストCの作業量 0.0000
テストDの作業量 0.0000
テストEの作業量 1.0000

가장 효율적인 테스트 E만 하는 결과가 되었습니다.

검토



테스트 E에서는 모듈 1과 모듈 2의 장애를 발견할 수 없습니다.
품질 보증이란 어떤 최저 라인의 품질을 담보하는 것으로 생각됩니다.



'계산 그 1'에서는 붉은 분포와 같이 평균적인 품질이 올라가도록 테스트를 합니다만, 저품질이 될 가능성을 남기고 있습니다.
``계산 2''로서 파란색 분포와 같이 평균 품질을 높이는 대신 저품질을 피하는 테스트를 생각해 봅시다.

계산 2



모듈 당 품질의 최소값을 극대화하기 위해 계산해 봅시다.

python3
m = LpProblem(sense=LpMaximize) # 数理モデル
x = addvars(nt) # 変数(テストの割合)
y = addvar() # 変数(最低ライン)
m += y + lpDot(A.sum(1),x)*0.01 # 目的関数
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 総和 %.4f 最低 %.4f'%(LpStatus[m.status],
    r.dot(A.values).sum(), r.dot(A.values).min()))
for i,v in zip(A.index,r):
    print('%sの作業量 %.4f'%(i,v))
>>>
Optimal 総和 0.0948 最低 0.0237
テストAの作業量 0.1434
テストBの作業量 0.0000
テストCの作業量 0.2838
テストDの作業量 0.5435
テストEの作業量 0.0293

그 1과 비교해, 총화는 내려갔습니다만, 최저가 올랐습니다.

이 아이디어는 "조합 최적으로 게임 이론을 풀다"과 동일합니다.

이상

좋은 웹페이지 즐겨찾기