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