테스트와 디버깅

Download Report

Transcript 테스트와 디버깅

자바프로그래밍 8주 테스트와 디버깅 제대로 작동하는 클래스 만들기 1

핵심 개념 • Testing • Debugging • Test 자동화 • Writing for maintainability 자바프로그래밍 2

What is the output?

public void test() { int sum = 1; for (int i = 0; i <= 4; i++); { sum = sum + 1; } } System.out.println("The result is: " + sum); System.out.println("Double result: " + sum+sum);

자바프로그래밍 3

Code snippet of the day

public void test() { int sum = 1; for (int i = 0; i <= 4; i++); { sum = sum + 1; } } System.out.println("The result is: " + sum); System.out.println("Double result: " + sum+sum);

자바프로그래밍 4

We have to deal with errors • 초기 에러는 문법에러 – 컴파일러가 도와준다.

• 후기 에러는 로직 에러 – 컴파일러가 도움이 되지 않는다.

– 버그(bug)라고 부름.

• 일부 로직 에러는 잘 드러나지 않는다.

– 에러가 있는 채로 출시되는 경우가 대부분이다.

자바프로그래밍 5

예방 vs 탐지 (개발자 vs 유지보수자) • 에러 발생률을 줄일 수 있다.

– 소프트웨어 개발 가이드라인을 지킴으로써 (중복을 피함, 결합성을 낮춤, 응집성 높임, 책 임분담) • 에러 탐지 가능성을 높일 수 있다.

– 모듈화, 문서화 – 에러 탐지 기술 적용 자바프로그래밍 6

Testing and debugging • 매우 중요한 기술 • Testing 에러의 존재를 확인함 • Debugging 에러의 원인을 찾음 – 에러가 드러나는 곳은 실제 에러의 원인으로 부터 멀리 떨어진 곳일 수 있다.

자바프로그래밍 7

Testing and debugging techniques • Unit testing (within BlueJ) • Test automation • 수작업 추적 • Print statements • Debuggers 자바프로그래밍 8

Unit testing • 각 유닛을 테스트함 – 유닛: Method, class, module (package in Java).

• 개발 과정에서 수행 – 조기 발견과 해결이 전체 개발 비용을 줄인다.

– Test suite가 누적된다.

자바프로그래밍 9

Testing fundamentals • 유닛이 할 일 (contract 계약) 을 정확히 이해한다. – 계약에 어긋난 부분을 찾아낸다.

– positive tests and negative tests.

• 경계(boundary) 조건에 대해 집중적으로 테스트 한다.

– Zero, One, Full.

자바프로그래밍 10

자바프로그래밍

Test automation

11

핵심 개념 • Unit testing • JUnit • Regression testing • Test cases • Test classes • Assertions • Fixtures 자바프로그래밍 12

Unit testing within BlueJ • 개별 객체에 메소드를 호출한 후 • Inspector를 이용하여 객체의 상태를 관찰 자바프로그래밍 13

Test automation • 테스트를 잘 하려면 창의적이어야 한다.

• • 그러나 철저한 테스팅은 반복 작업을 요구하며 시간이 많이 소요된다.

Regression testing - 같은 테스트를 반복한다.

• 테스트자동화를 통해 부담을 덜 수 있다.

자바프로그래밍 14

Test 클래스 • 테스트 클래스를 작성한다.

• 테스트 클래스 객체가 사람이 하는 테스트 작업 을 대신한다.

• 기능이 추가되면 테스트 클래스도 업데이트되어 야 한다.

자바프로그래밍 15

Test automation • 테스트 자동화를 위한 틀 (test framework) • junit 자바프로그래밍 16

JUnit • JUnit - Java test framework • Test case - 테스트를 수행하는 메소드 • Test class 스 - 테스트 메소드들로 이루어진 클래 • Assertion • Fixture - 메소드 결과를 확인함 - 여러 테스트들에 이용됨 자바프로그래밍 17

자바프로그래밍

Debugging

18

Debugging techniques • 수작업 추적 • Print • Debugger 자바프로그래밍 19

Modularization and interfaces • 애플리케이션이 여러 모듈(패키지)로 구성될 수 있다.

– E.g. 여러 팀이 각 모듈을 맡아 개발 • 모듈간 인터페이스가 명확해야 한다.

– 각 모듈의 독립적 개발이 가능해진다.

– 통합 과정에서 문제 발생 가능성이 낮아진다.

자바프로그래밍 20

Modularization in a calculator • 각 모듈은 다른 모듈의 내부 구현에 대 해 알 필요가 없다.

– User controls - GUI or hardware device.

– Logic could be hardware or software.

Method headers as an interface

// Return the value to be displayed. public int getDisplayValue(); // Call when a digit button is pressed.

public void numberPressed(int number); // Plus operator is pressed.

public void plus(); // Minus operator is pressed.

public void minus(); // Call to complete a calculation.

public void equals(); // Call to reset the calculator.

public void clear();

자바프로그래밍 22/57

Debugging • 소스 코드를 읽는 능력을 길러야 한다.

– 다른 사람이 짠 코드를 디버깅하는 일도 많다.

자바프로그래밍 23

수작업 추적 • 잘 사용하지 않지만 – 생각보다 효과적인 수가 많다.

• 컴퓨터로부터 떨어져야 한다.

• 손으로 프로그램을 실행시킨다.

• High-level or low-level view 자바프로그래밍 24

객체의 상태(state) 변화를 표로 정리 • 상태 - state - field 값 • 객체의 동작은 “상태”에 의해 결정됨 • 올바르지 않은 상태에 의해 에러가 발생하는 수 가 많음 자바프로그래밍 25

말로 설명하기 • 코드의 동작을 다른 사람에게 말로 설명 • 인형에게 말해도 효과 있음 자바프로그래밍 26

Print 문 이용 • 가장 많이 이용됨 • 특별한 도구가 필요 없음 • 출력 량이 너무 많을 수 있다.

• 출력을 켜거나 끄도록 설정하는 기능 자바프로그래밍 27

자바프로그래밍 28

자바프로그래밍 29

자바프로그래밍 30

테스트 방법 선택 • 현재의 개발 단계에 적절한 방법 선택 • 가능한 한 자동화해야 한다.

– 따분함으로부터 벗어난다.

– 사람의 의한 오류를 방지한다.

– 반복적인 테스트가 가능하다.

– 더 빈번히 테스트하게 된다.

자바프로그래밍 31

Debugger • Debugger는 프로그래밍언어와 개발도구 모두에 종속적이다.

– BlueJ는 debugger를 포함하고 있다.

• Breakpoint • Step and Step-into • Call sequence (stack) • Object state • 지역변수 자바프로그래밍 32

Object diagram • 애플케이션 실행 중 어느 한 순간 의 객체들과 그 들간 관계를 보여주는 그림.

• 그 순간 객체들의 상태 정보를 보여줌.

• 프로그램의 dynamic view.

• Class diagram <-- static view.

자바프로그래밍 33

Object diagram vs Class diagram 자바프로그래밍 34

Review • 프로그래밍에 있어 에러는 일상적인 것이다.

• 적절한 기술을 적용하여 발생 가능성을 낮출 수 있다.

• 테스팅과 디버깅 능력이 매우 중요하다.

• 테스팅은 습관화되어야 한다.

• 테스팅은 최대한 자동화해야 한다.

• 반복적으로 그리고 자주 테스트해야 한다.

자바프로그래밍 35

자바프로그래밍 끝.

36