디버깅은 버그를 잡는 다는 의미로 예상치 못한 프로그램의 행동들에 원일을 분석하기 위한 기술이다.
function foo() {
for(let i = 0; i < 10; i++) {
console.log(i);
}
}
} // Uncaught SyntaxError : Unexpected token
이렇게 결과가 나왔을 경우 "SyntaxError의 의미가 뭐지?, 에러메세지의 의미가 뭐지?, 몇 번째 줄에서 발생한 문제지?" 를 파악해야 한다.
여가서 가설은 한번에 여러개를 세우지 않는다. 만약 여러개를 세우더라고
서로 독립적인 가설을 세워야 한다.
TDD는 코드를 작성하기 전 테스트를 쓰는 방법론이다. 개발자 자신이 바람직하다고 생각하는 코드의 결과를 미리 정의하고, 이것을 바탕으로 코드를 작성하는 방법이다.
장점
테스트를 먼저 작성하는 것은 판별적으로 코드를 어떻게 구성할지 고민하고. 그 과정에서 버그가 더 적은 코드를 작성할 수 있다. 즉 테스트가 쉽도록 코드의 구조를 기획하는 것과 같은 효과를 내게 된다.
단점
코드를 기획한다는 것은 초반에 명호가하지 않을 수 있고 대신 빠르게 프로토 타입을 만들어 전반적인 아웃라인을 그리는 것이 좋을 수 있다. 이런 경우 지속적으로 기획이 바뀌는 과정에서 초반에 테스트를 짜다가 다시 짜야하거나 끼워야 할 경우가 높다. 즉 TDD의 가장 큰 단점은 속도다. 장기적으로 피할 수 있는 문제는 피할지 라도 개발속도가 느리다는 것이 큰 단점이다.
예를 들어 자동차를 만든다고 가정을 했을 때 자동차 안에는 많은 부품들이 들어간다. 여기서 부품들이 잘 작동하는지에 댛나 검증이 필요하다. 이 과정에서는 수학을 사용하곤한다. 수학으로 엄격한 검증을 거쳐 완벽한 설계를 하는 것 처럼 소프트웨어에는 테스트를 통해 검증을 하는 것이다!