다음 편집기는 효율적인 테스트 사례 구성 알고리즘 쌍별 Python 구현 방법을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다.
열기:
테스트 과정에서는 이전에는 다중 매개변수 및 다중 값 상황에 맞게 테스트 케이스를 구성했습니다. 테스트 케이스를 정리하자면, 각 매개변수의 모든 값을 다른 매개변수의 값과 완전하게 조합하여 이를 프로덕트 메소드인 Python 스크립트로 구현하는 것을 의미합니다. itertools 모듈에서 Cartesian product method로 알려져 있습니다.
직교 분석 방법의 장점은 테스트 케이스 적용률이 100%라는 것입니다. 단점은 테스트 케이스 수가 많고 유스 케이스를 실행하는 데 소모되는 노동력이 크다는 것입니다.
Pairwise 알고리즘은 전통적인 직교 분석 방법의 최적화에서 파생되었으며, 그 이론은 수학적 통계에서 파생되었습니다. 솔직히 말해서 저는 수리통계에 관한 학술 논문을 이해할 수 없기 때문에 인터넷에서 그 기본적인 의미를 이해하기 위해 대중적이고 간단한 설명을 찾아볼 수밖에 없습니다.
인터넷상의 많은 사람들이 [운영 체제, 브라우저, 언어 환경]을 예로 사용합니다. 저도 같은 예를 사용합니다.
운영 체제: W(Windows), L(Linux), Mac(Mac) 브라우저: M (Firefox), O(Opera), IE; 언어 환경: C(중국어), E(영어)
직교 분석 방법에 따르면: 3x3x2=18 조합이 생성되며 테스트 케이스 적용 범위는 100%입니다.
Pairwise paired testcase 구성 방법은 9가지 조합 방법으로 압축할 수 있습니다. 따라서 테스트 케이스의 수가 적고, 확실히 놓친 테스트가 있을 것이라는 단점이 있다.
소개:
Pairwise 알고리즘의 핵심 개념
1. 테스트 사례 세트(각 사례는 [W, M, C]와 같은 3개의 매개변수 값으로 구성됨) 2개 요소의 각 조합은 3개의 조합(위치: [W,M][W,C][M,C])을 갖습니다.
2 이 첫 번째 테스트 세트를 사용하면 3개의 쌍 조합이 있습니다. 비교 원칙은 다음과 같습니다. [W, M]은 다른 그룹의 첫 번째 요소와만 비교되고, [W, C]는 다른 그룹의 두 번째 요소와만 비교됩니다. . . . ;
[W,M][W,C][M,C] 이 세 가지 요소는 나머지 유효한 그룹에서 동일한 위치의 요소에 나타납니다. 이 사례 그룹은 중복 사례로 간주되어 삭제될 수 있습니다.
명사 설명 : [유효그룹]은 삭제되지 않은 그룹과 비교되지 않은 그룹을 의미합니다. 예: 그룹 1과 3이 삭제되면 그룹 4와 비교할 유효 그룹은 그룹 2, 5, 6, 7...18입니다. 효과적인 그룹은 여기의 구덩이를 통과했습니다%>_
3. 마침내 페어링 알고리즘에 의해 계산된 최적의 테스트 케이스 세트인 테스트 케이스가 얻어집니다.
놀라운 학문적 증거
Pairwise는 1927년 L. L. Thurstone(1887년 5월 29일 – 1955년 9월 30일)에 의해 처음 제안되었습니다. 그는 미국의 정신통계학자이다. 페어와이즈(Pairwise) 역시 전통적인 직교분석 방법의 수학적 통계와 최적화를 기반으로 한 제품입니다.
Pairwise는 다음 두 가지 가정을 기반으로 합니다.
(1) 각 차원은 직교합니다. 즉, 각 차원은 서로 교차하지 않습니다.
(2) 수학적 통계 분석에 따르면 결점의 73%(단일 요인 35%, 이중 요인 38%)가 단일 요인 또는 2가지 요인의 상호 작용에 의해 발생합니다. 결함의 19%는 3가지 요소의 상호 작용으로 인해 발생합니다.
따라서 pairwise는 두 가지 요소 모두의 상호 작용으로 생성된 가장 비용 효율적인 사용 사례 세트를 기반으로 생성됩니다.
Text
1. Ideas
테스트 시나리오의 경우 테스트 조건을 입력하는 것부터 시작하여 pairwise 테스트 케이스를 생성하는 방법, Python 프로그래밍을 사용하는 아이디어는 다음과 같습니다.
1. allparams =[['M','O','P'],['W','L','I'],['C','E']] 변경은 다음의 전체 조합 처리를 수행합니다. 분석 방법으로 생성된 전체 테스트 케이스 세트의 정규 A 1차원 배열(len=N)을 생성하는 데카르트 곱
2. 전체 테스트 케이스 세트의 각 테스트 케이스는 두 개의 조합으로 분해됩니다. 전체 테스트 케이스 세트와 동일한 길이의 세트. 2차원 배열(1차원 len=N)
3. Python 버전의 pairwise 알고리즘을 사용하여 유효하지 않은 테스트 케이스 세트를 얻습니다. 효과적인 페어링 테스트 케이스
코드의 첫 번째와 두 번째 함수는 Python 자체 수학적 계산 라이브러리를 사용합니다. itertools로 작성된 코드의 세 번째 함수는 제가 생각해낸 코드입니다.
둘째, 코드로 바로 이동
# -*- coding: utf-8 -*- from datetime import * import random,os,copy,time import logging import itertools ''' #Author:Kuzaman #Time:2017-07-18 ''' class utils2 : #1、笛卡尔积 对参数分组全排列 def product(self,tuple1): newlist=[] for x in eval('itertools.product'+str(tuple(tuple1))): newlist.append(x) return newlist #2、对笛卡尔积处理后的二维原始数据进行N配对处理,得到Pairwise计算之前的数据 def get_pairslist(self,lista): pwlist = [] for i in lista: subtemplist = [] for sublista in itertools.combinations(i, 2): subtemplist.append(sublista) pwlist.append(subtemplist) return pwlist #3、进行Pirwise算法计算 def pairwise(self,listb): sublistlen = len(listb[1]) flag = [0]*sublistlen templistb = copy.deepcopy(listb) delmenu = [] holdmenu=[] self.pprint (listb) print ('--'*25) for lb in listb: for sublb in lb: for k in templistb: Xa = lb.index(sublb) Ya = listb.index(lb) if k != lb and sublb == k[Xa]: # print (sublb,'===>' ,k[Xa],'相等了。。。') flag[Xa] = 1 break else: # print (sublb,'===>' ,k[Xa],'不不不等了。。。') flag[Xa] = 0 # print ('下标%d,子元素 %s 双匹配对比结果flag:%s'%(listb.index(lb),lb,flag)) if 0 not in flag: num = listb.index(lb) delmenu.append(num) templistb.remove(lb) # print ('下标为%d行应删除,内容=%s,'%(num,lb)) # print ('delmenu:',delmenu) else: num2 = listb.index(lb) holdmenu.append(num2) # print ('下标为%d行应保留,内容=%s,'%(num2,lb)) # print('holdmenu=',holdmenu) # print ('***'*20) print ('保留元素列表:%s \n匹配重复元素列表:%s'%(holdmenu,delmenu)) return templistb def pwresult(self,slist,delmenu): for x in delmenu: slist.remove(slist[x]) return slist def pprint(self,list): for i in list: print ('line %d:'%(list.index(i)+1),i) if __name__ == '__main__': u2 = utils2() allparams=[['M','O','P'],['W','L','I'],['C','E']]#,'K'],[1,2,3],['Yes','No']] str = u2.product(allparams) strpc = u2.get_pairslist(str) finallist = u2.pairwise(strpc) print('最终保留测试用例个数:%d 个'%(len(finallist))) u2.pprint(finallist)
코드 해석:
세 번째 for 루프 코드 줄 39~48은 주로 감지할 요소와 같은 위치에 요소가 있습니다 동일
두 번째 for 루프 코드 라인 38~48, 테스트 케이스 세트에서 두 개를 쌍으로 구성하고 왼쪽에서 오른쪽으로 같은 위치에 있는 요소와 비교합니다
첫 번째 for 루프 코드 라인 37~48, 각 테스트 케이스 세트를 탐색합니다.
第50~58行代码,判断一组用例的两两配对在其他组同位置上从上到下都能找到相同元素,则将改无效Case从templistb中删除,保持templistb的有效性。
执行结果:
line 1: [('M', 'W'), ('M', 'C'), ('W', 'C')] <---第二个函数get_pairslist(self,lista)处理后的两两配对组合 line 2: [('M', 'W'), ('M', 'E'), ('W', 'E')] <---同第一行解释 line 3: [('M', 'L'), ('M', 'C'), ('L', 'C')] line 4: [('M', 'L'), ('M', 'E'), ('L', 'E')] line 5: [('M', 'I'), ('M', 'C'), ('I', 'C')] line 6: [('M', 'I'), ('M', 'E'), ('I', 'E')] line 7: [('O', 'W'), ('O', 'C'), ('W', 'C')] line 8: [('O', 'W'), ('O', 'E'), ('W', 'E')] line 9: [('O', 'L'), ('O', 'C'), ('L', 'C')] line 10: [('O', 'L'), ('O', 'E'), ('L', 'E')] line 11: [('O', 'I'), ('O', 'C'), ('I', 'C')] line 12: [('O', 'I'), ('O', 'E'), ('I', 'E')] line 13: [('P', 'W'), ('P', 'C'), ('W', 'C')] line 14: [('P', 'W'), ('P', 'E'), ('W', 'E')] line 15: [('P', 'L'), ('P', 'C'), ('L', 'C')] line 16: [('P', 'L'), ('P', 'E'), ('L', 'E')] line 17: [('P', 'I'), ('P', 'C'), ('I', 'C')] line 18: [('P', 'I'), ('P', 'E'), ('I', 'E')] <----同第一行解释 -------------------------------------------------- 保留元素列表:[1, 3, 4, 7, 9, 10, 12, 14, 17] <----有效用例在数组中下标 匹配重复元素列表:[0, 2, 5, 6, 8, 11, 13, 15, 16] <----被剔除的无效测试用例在数组中下标 最终保留测试用例个数:9 个 line 1: [('M', 'W'), ('M', 'E'), ('W', 'E')] line 2: [('M', 'L'), ('M', 'E'), ('L', 'E')] line 3: [('M', 'I'), ('M', 'C'), ('I', 'C')] line 4: [('O', 'W'), ('O', 'E'), ('W', 'E')] line 5: [('O', 'L'), ('O', 'E'), ('L', 'E')] line 6: [('O', 'I'), ('O', 'C'), ('I', 'C')] line 7: [('P', 'W'), ('P', 'C'), ('W', 'C')] line 8: [('P', 'L'), ('P', 'C'), ('L', 'C')] line 9: [('P', 'I'), ('P', 'E'), ('I', 'E')] [Finished in 0.2s]
三、代码核心内容白话解释
pairwise(self,listb)函数包含3层for循环,先画一个二维数组:
i[0] i[1] i[2] listb.index(i)=0 : [('M', 'W'), ('M', 'C'), ('W', 'C')] listb.index(i)=1 : [('M', 'W'), ('M', 'E'), ('W', 'E')] listb.index(i) : [('M', 'L'), ('M', 'C'), ('L', 'C')] listb.index(i) : [('M', 'L'), ('M', 'E'), ('L', 'E')] listb.index(i) : [('M', 'I'), ('M', 'C'), ('I', 'C')] listb.index(i) : [('M', 'I'), ('M', 'E'), ('I', 'E')] listb.index(i) : [('O', 'W'), ('O', 'E'), ('W', 'E')] listb.index(i) : [('O', 'L'), ('O', 'C'), ('L', 'C')] listb.index(i) : [('O', 'L'), ('O', 'E'), ('L', 'E')] listb.index(i) : [('O', 'I'), ('O', 'C'), ('I', 'C')] listb.index(i)=n : [('O', 'I'), ('O', 'E'), ('I', 'E')]
二维列表 listb ,其中的行(发音:hang,二声。横着的那排)从上到下就是第一层for循环 ;每一行中的i[0],i[1],i[2]就是第二层for循环从左至右;第三次for循环元素i[x]从上之下与有效组 templistb通位置元素的对比。
1、第n行的i[0]要和有效templistb的其他行的i[0]元素对比(第三for),如果有相等的,记录一个标识 如 flag1=True,如果没有相等的记录falg1=False;
2、直到第二for中的i[0],i[1],i[2]都进行对比后,会得到 [flag1,flag2,flag3 ],所有flag=True则该行为无效用例
3、第一for遍历全部组合,最终得到保留下来的有效templistb
见图:
完结篇
以上是自己编写的pairwise的全部内容,此算法共耗时3天:
第一天在确定这究竟是什么算法,看了很多学术文献,看不懂;
第二天开始写程序,for的嵌套循环设计耽误很久;
第三天程序成型,有执行结果,发现与参考文章结论不同,随后再仔细研读参考文章,发现掉坑里了。重新推翻代码按照正确思路,用1个小时完成最终结果。
本人做测试的,还不是专业的测试开发,写代码比较费劲,真正应了设计占70%,编码占30%的理。如果像基础在差点,逻辑在乱点,就只能用时间堆了。
위 내용은 Python이 조직 알고리즘을 쌍으로 구현하는 방법(효율적인 테스트 사례)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

파이썬은 자동화, 스크립팅 및 작업 관리가 탁월합니다. 1) 자동화 : 파일 백업은 OS 및 Shutil과 같은 표준 라이브러리를 통해 실현됩니다. 2) 스크립트 쓰기 : PSUTIL 라이브러리를 사용하여 시스템 리소스를 모니터링합니다. 3) 작업 관리 : 일정 라이브러리를 사용하여 작업을 예약하십시오. Python의 사용 편의성과 풍부한 라이브러리 지원으로 인해 이러한 영역에서 선호하는 도구가됩니다.

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
