소프트웨어 건설 노트] [읽기 3 : 테스트

테스트

파티션으로 테스트 케이스를 선택

그림 삽입 설명 여기

  • 파티션의 경계를 포함
  • 두 극단 partion을 취재하기위한
    • 전체 데카르트 제품
    • 각 부분을 커버

JUnit을 가진 자동화 된 단위 테스트

+ @Test(注释)
+ assertEquals(expected result,actual result)
+ assertTrue()
+ assertFalse()
  • 귀하의 테스트 전략을 문서화
    • 방법 명령그림 삽입 설명 여기
    • 테스트 전략
      그림 삽입 설명 여기
  • 블랙 박스와 유리 상자 테스트
    • 블랙 박스 테스트 :이 기능에 대한 실제 코드를 보지 않고 partiton하여 코드를 테스트합니다.
    • 유리 박스 테스트 : 함수가 실제로 어떻게 구현되는지에 대한 지식의 코드베이스를 테스트합니다.
  • 적용 범위
    • 문 적용 : 몇 가지 테스트 케이스에 의해 운영되는 모든 문은 무엇입니까?
    • 지점 범위 : 프로그램의 모든 경우 또는 잠시 문, 둘 다 진실하고 몇 가지 테스트 케이스로 촬영 잘못된 방향인가?
    • Path coverage:is every possible combination or branches——every path through the program——taken by some test case?
    • A good coverage tool for Eclipse is EclEmma,green:be tested red:not be tested,yellow:always be wrong.
  • Unit Testing vs. Integration Testing,and Stubs
    • unit test:test a single module in isolation
    • integration test:test a combination of modules,or even the entire program.
    • A stub is often called a mock object.Stubs are an important technique when building large systems.
  • Automated Testing and Regression Testing
    • Automated Testing:running the tests and checking their results automatically.(But you have to come up with good test cases yourself.)
    • Regression Testing:It’s very important when you modify your code.Run all your tests after every change.Whenever you find and fix a bug, take the input that elicited the bug and add it to your automated test suite as a test case.
    • automated regression testing: the combination of two testing ways above.
  • Summary:
    • Test-first programming.Write tests before you write code.
    • Partitioning and boundaries for choosing test cases systematically.
    • Glass box testing and statement coverage for filling out a test suite.
    • Unit-testing each module, in isolation as much as possible.
    • Automated regression testing to keep bud from coming back.

中文总结:

将输入空间划分

  • 1.把输入空间分成若干个包含一系列输入的子域,全部的子域并起来要能覆盖整个输入空间,在每个子域中选取至少一个测试用例组成我们的总的测试用例。子域的划分原则是,在同一个子域中的输入,在该函数都有类似的行为。
  • 2.也可以将输出空间划分为子域,使我们的输出结果覆盖整个输出空间,以此来选择测试用例,不同通常将输入空间划分得到的测试集,就已经是一个充分的测试集了。
  • 3.划分方法:首先确定整个输入空间,如果一个函数有两个参数(包括调用的那个对象。eg:BigInteger ab = a.multiply(b),其中multiply()方法就包含两个参数a和b),那么其输入空间就为二维空间。然后确定划分:划分就是使得不同的子域中的测试用例可能对于该函数会有不同的行为包括一些特殊值也要划分出来。例如multiply()方法就可以按如下划分:
    그림 삽입 설명 여기
  • 最后在每个子域上随机地选择一个测试用例加入测试集中。
  • 更进一步的划分技巧:将边界也作为一个子域,因为边界处最容易出现bug,常见的边界:
    그림 삽입 설명 여기
  • 一个例子: 그림 삽입 설명 여기

两种选择测试的策略

  • 1.Full Cartesian product:对于划分之后的每个子域,都选取一个测试用例,比如multiply()的例子,选取了7*7=49个测试用例
  • 2.Cover each part:每个子域中至多选择一个用例,比如在max()中,共有3*5*5个子域,但是有些测试是没有必要的,所以我们选择了5个测试用例。

使用Junit进行单元测试

使用assertEquals(,),assertTrue(,),assertFalse(,)等函数进行测试,其中第一个参数为期望值,第二个参数为实际值。

说明你的测试策略

그림 삽입 설명 여기
上面的函数的测试策略如下:
그림 삽입 설명 여기

黑盒测试和玻璃盒测试

  • 黑盒测试:不知道函数的具体实现,只通过函数的接口说明(specification)来选择测试样例
  • 玻璃盒测试:直到函数的具体实现,若对于不同的输入,函数的实现采用了不同的数据结构和算法,那么要把他们划分成不同子域。

覆盖率

  • Statement coverage: is every statement run by some test case?
  • Branch coverage: for every if or while statement in the program, are both the true and the false direction taken by some test case?
  • 경로 적용 : - 프로그램을 통해 모든 경로 - 몇 가지 테스트 케이스로 촬영 한 가지의 가능한 모든 조합은?
  • 강도를 높이기 위해 위의 시험은 일반적으로 우리는 단지에 문 범위에 도달해야합니다.
  • 각 문이 전에 실행되었는지 여부를 감지하는 코드 검사 도구를 사용할 수 있습니다. 일식은 좋은 도구 EclEmma입니다. 녹색 문을 실행 나타냅니다, 문이 빨간색, 노란색 조건 대신에 실행되지는 허위 진술입니다. 도는 다음과 같습니다 :
    -
  • 이 때, 다음 단계는 조건에 해당하는 경우, 모든 문이 녹색으로 바뀝니다 있도록 테스트 케이스를 찾을 수 있습니다,이 테스트 케이스는 테스트 세트에 추가.

모듈 테스트 및 통합 테스트

  • 모듈 테스트는 더 나은 모듈 버그를 발견뿐만 아니라 전반적인 테스트를위한 좋은 수 있습니다 연결 모듈 버그를 발견 할 수있는 능력

자동화 된 테스트 및 회귀 테스트

  • 자동 테스트 핑거 자동 테스트 샘플과 판정 결과가 정확한지는 자동 테스트 Junit와 같은 테스트 드라이버를 이용하여 수행된다. 그들은 단지 자동으로 선택의 테스트 샘플 테스트, 출력 테스트 결과 할 수있다. 하지만 여전히 연구의 대상이다 시료의 자동 생성이되지 않습니다.
  • 회귀 테스트는 각 코드를 수정 한 후, 테스트 케이스는 다시 시험을 다시한다. 때문에 코드를 변경의 작은 버그가 나타날에게로 이어질 가능성이 높다. 그런 잘못된 테스트로 이어질 수있는 프로그램을 발견하고 테스트 세트에 추가됩니다. 후 코드 변경은 아직이 테스트 세트를 사용하고, 새로운 가치 시험 샘플은 테스트 세트에 추가됩니다 계속됩니다.
게시 29 개 원래 기사 · 원의 찬양 (10) · 전망 7178

추천

출처blog.csdn.net/weixin_42017042/article/details/86719696