테스트
테스트를 작성할 때는
1. 경계값을 잘 찾아야 하고,
2. 생길 수 있는 케이스에 대해 충분히 고민해봐야 한다.
경계값을 잘 찾는다는 건?
나눗셈의 경우를 고민해보자.
float divide(int x, int y) {
return x / y;
}
위와 같은 경우 테스트 케이스는 어떻게 작성되어야 할까?
우선 나눗셈의 특성을 이해한다.
나눗셈은 0으로 나누는 경우, 1로 나누는 경우 등이 특별한 케이스에 해당한다.
반면 2 / 3, 4 / 5 등은 모두 같은 '일반적인' 케이스에 해당한다고도 볼 수 있다.
즉, 이와 같은 테스트 케이스를 중복 작성해서는 안된다.
그렇다면 개인적인 사고에 의존하지 않고 경계값을 더 잘 찾는 방법이 있을까?
-> 극단의 값들을 넣어본다. 로또 번호라면 1, 45가 극단의 번호가 될 것.
테스트는 어디까지 작성해야 하는가?
-> 코드에 확신이 생기는 시점까지. 정량적인 측면으로 결정하는 것은 아니다.
개인적인 궁금증
- private 메소드를 테스트하고 싶을 때는 어떻게 할까?
내 생각은 다음과 같다.
반드시 테스트해야 하는 경우라면 1. 설계 변경의 필요성을 의미하는 것이고
그게 아니라면 public으로 열린 객체 공용 인터페이스만 테스트하면 된다.
객체의 존재 의의는 내부적으로 어떻게 구현되는지가 중요한 것이 아니라, 메세지, 즉 책임이 중요하기 때문이다.
해당 책임을 수행할 수만 있다면 내부적으로는 어떻게 구현되든 상관이 없다.
답해보기
- 내가 단위 테스트를 작성하는 이유는 무엇인가?
-> 1. 내가 작성한 코드에 빠른 피드백을 받기 위해서, 2. 변경이 용이한 코드를 만들기 위해, 3. 테스트 코드도 하나의 문서로 관리될 수 있기에.
- 내가 작성한 좋은 단위 테스트는 어떠한 부분에서 좋은 단위 테스트라 느꼈는가?
-> 이해하기 쉬우면서, 읽기 쉽고, 테스트하고자 하는 바가 명확할 때 좋은 단위 테스트라고 느꼈다.
- 위와 같은 좋은 단위 테스트를 작성하기 위해 어떠한 시도를 해볼 수 있는가?
-> 좋은 단위 테스트를 작성하기 위해 좋은 프로덕션 코드를 만들어야 한다. 따라서 단위 테스트를 작성하다가 부족한 점이
느껴진다면 프로덕션 코드로 돌아가 테스트하기 좋은 코드로 개선한다. 그 뒤 좋은 단위 테스트를 작성한다.
코드 품질
코드 품질을 결정짓는 건?
- 잘 동작하고,
- 소프트웨어의 목적은 문제 해결이다.
- 가장 중요하지만 코드에 매몰되어 많이 놓치는 부분이다.
- 읽기 쉽고,
- 개발자들이 가장 많이 얘기하는 코드 품질 요소 중 하나인 가독성이다.
- 의도를 드러내고 유지보수하기 좋은것은 매우 중요하다.
- 보기 좋고,
- 동작과는 연관이 없지만, 개발자들이 중요하게 보는 항목 중 하나다.
- 생각보다 많은 개발자들이 해당 항목에 대해 높은 평가를 한다.
- 관리하기 쉽고,
- 아무리 잘 작성하여도 예상과 다르게 동작할 수 있다.
- 소프트웨어는 개발 이후가 가장 중요하다. 2,3차 사용자들이 관여하는 점에서 매우 중요한 항목이다.
- 테스트 가능하고,
- 프로그램학적으로 자동화 테스트가 가능해야 한다.
- 설계 의도에 맞게 올바르게 동작하는지 항상 확인할 수 있어야 한다.
- 변경이 쉽고,
- 기능의 변경, 확장, 재사용은 매우 많이 발생되는 상황이다.
- 최소한의 노력으로 변경이 가능해야 하고, 그 과정에서 예기치 않은 부작용은 최소화해야 한다.
- 효율적이다.
- 코드의 동작이 아닌 산업적인 관점에서 효율적인 것이 중요하다.
- 최소한의 개발 리소스를 투입하여 결과물이 나올 수 있어야 한다.
답해보기
- 코드 품질이 중요한 이유 중 가장 와닿는 이유는 무엇인가?
-> 잘 동작하는 것. 코드의 본질은 문제 해결이며 결국 동작하지 않으면 나머지 모든 것들은 의미가 없다. 안 돌아가는 예쁜 프로그램보다
돌아가는 쓰레기 코드가 낫다.
- 위 이유를 만족하기 위한 코드를 작성하기 위해 어떠한 노력을 해봤는가? 혹은 할 예정인가?
-> 컨벤션을 준수하거나, 객체지향 원칙들을 준수하여 변경에 용이한 코드를 작성하는 등의 노력을 할 수 있을 것 같다.
아직 실제 사용자가 사용할 프로그램을 만드는 것은 아니기에 성능, 효율을 제외한 나머지 요소를 만족시키려 노력할 것이다.
- 코드 품질을 높은 코드를 작성하는 프로그래머가 훌륭한 프로그래머인가? 그렇게 생각한 이유는 무엇인가?
-> 코드 품질은 좋은 프로그램의 필요조건이지, 훌륭한 프로그래머의 필요조건은 아니라고 생각한다.
프로그래머라면 코드 품질이 높은 코드를 작성하는 것 뿐만 아니라 소프트 스킬, 고객과의 커뮤니케이션 등도 중요하다고 생각된다.
'우테코 5기' 카테고리의 다른 글
[레벨 1 미션] 자동차 경주 학습 기록 (0) | 2023.02.18 |
---|---|
[레벨 1 강의] TDD, 리팩터링, 자바에 대한 이해 (0) | 2023.02.18 |
[우테코] 우아한테크코스 백엔드 5기 최종 합격 후기 (24) | 2022.12.31 |
[우테코] 우아한 테크코스 5기 1차 합격 + 최종 합격 (1) | 2022.12.15 |
[우테코 프리코스] 4주차 회고 (1) | 2022.11.24 |