본문 바로가기

전체 글164

When should I unit test? (unit test) 사소한 함수를 제외한 모든 함수에 유닛 테스트를 해야 합니다. 프로그래밍 인터뷰에서는 시간 제약을 감당하기 위해 원칙을 벗어날 수밖에 없을 때도 있을 것입니다. 그러나 유닛 테스트를 안 하는 것은 아주 안 좋은 습관입니다. 마치 가드레일이 없는 도로에서 고속으로 달리는 차가 낭떠러지에서 떨어지기 쉬운 것처럼, 오히려 테스트를 안 해서 버리게 되는 시간이 더 많게 될 것입니다. 복잡하게 코드를 작성해서 스스로 헷갈리게 되는 경우는 아주 빈번합니다. 반면 각각의 컴포넌트들을 테스트하면 무엇을 만들고 있는지를 바로 이해할 수 있습니다. A warning sign that you should be testing 코드를 작성하는 과정에서 여기저기 console.log 를 찍어 지금 도대체 무슨 일이 일어나고 있는.. 2020. 1. 15.
What's a "unit test"? (unit test) 신뢰할 수 있는 시스템은 신뢰할 수 있는 컴포넌트로 구성되어 있습니다. 레고 블록이 갑자기 양을 바꾸지 않습니다. 갑자기 변하지 않고 자신의 역할을 분명히 합니다. 이 신뢰를 바탕으로 다른 레고 블록을 연결할 수 있으며 복잡한 블록 구조를 만들어낼 수 있게 되는 것입니다. 프로그램의 컴포넌트는 레고 블록처럼 작동되어야 합니다. 서로가 약속한 대로 작동하게 된다면 아주 복잡한 프로그램도 만들어낼 수 있게 됩니다. 그러지 못한다면 모든 것들은 관리가 불가능할 것입니다. 그렇다면 어떻게 (자신이 작성한) 각각의 컴포넌트들이 서로 의도대로 작동하는지 알 수 있을까요? 유닛 테스트가 바로 그 역할을 합니다. 각 "유닛"은 여러분이 작성한 컴포넌트, 레고 블록입니다. 쉽게 이해해보면, 프로그래밍에서 가장 기본적인 .. 2020. 1. 15.
Testing, and the value thereof (unit test) 엔지니어링에서 수학은 가장 엄격한 잣대를 요구합니다. 구조 공학, 기계 공학, 우주 공학 모두 미분, 적분, 미분 방정식, 선형 수학 등을 주로 사용하며, 무엇이든지 그냥 만드는 경우는 없습니다. 컴퓨터 공학도 수학에 깊은 뿌리를 두고 있지만, 공학도들처럼 직접적으로 사용하는 경우는 드뭅니다. 그렇다면, 프로그래머들은 자신이 구축한 시스템이 바르게 작동하는지 어떻게 알 수 있을까요? 일반적으로 프로그래머들이 하부 시스템들을 구축해 나가는 과정에는 계산과정이 그다지 많지 않습니다. 대부분의 프로그래머들에게 해당되는 실제적인 답변은... 테스트 작성이 프로그래머 세계에서의 엄격한 공학입니다. 여기서 언급하는 "테스트"라는 말은 특정한 매뉴얼을 가지고 프로그램의 작동을 확인한다는 말이 아닙니다. Automat.. 2020. 1. 15.
테스트 주도 개발 TDD(Test-driven Development) TDD(Test-driven Development)는 코드를 작성하기 전에 테스트를 쓰는 방법론입니다. Pros 대부분의 사람은 TDD를 버그 잡는 방법이라고 생각합니다. 그런 면도 있지만 생각해보면 버그를 잡기 위해 테스트를 짠다는 생각은 비직관적입니다. 테스트를 실행하고 그 후에 버그를 잡는다고 생각하는 것이 더 논리적일 것입니다. 실제로 TDD를 통해 정교한 테스트를 짜기 위해서 코드를 어떻게 구성할지 고민하게 되며, 그 과정에서 버그가 더 적은 코드를 짜게 됩니다. 테스트가 쉽도록 코드를 디자인하는 것도 같은 효과를 내게 됩니다. TDD는 무턱대고 코드를 바로 작성하지 않고 코드를 면밀하게 살펴보도록 합니다. 자신이 작성할 코드가 어떤 역할을 하게 되며, 전체와 어떤 관계가 있는지 생각하게 합니다.. 2020. 1. 15.