-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CHAPTER 1 효율적이고 체계적인 소프트웨어 테스트 #1
Comments
1. 테스트를 해야하는 이유실력이 좋은 개발자라도 사람이기 때문에 실수를 하게 된다. 그래서 실수를 최대한 방지하기 위해 테스트 코드를 작성한다. 2. 효율적인 테스트란?
이런 식으로 다양한 방법을 적용하며 개발할 때, 이상한 부분이 있으면 설계를 다시하거나, 버그를 발견해서 조기에 고치는게 제일 좋다. 3. 소프트웨어 테스트 원칙[완벽한 테스트는 불가능하다] [버그는 다른 곳에 많이 발생하는 지점이 있으니 이 부분을 잘 테스트하기] 4. 단위 테스트를 선호하는 이유
책에서는 단위테스트가 의존성이 필요한 서비스 로직은 Mock으로 단위 테스트하는 내용으로 보이는데, 저는 통합 테스트로 하는게 좋은 것 같다는 생각이 들었습니다. 저는 이번 챕터엔 적을 내용이 별로 없어서 블로그에 글을 안적고 여기에 적었는데, 생각보다 글이 길어진 것 같네요 |
1주차 스터디 정리 내용입니다! 추가로, 읽으면서 다른 분들은 테스트 피라미드, 테스트 트로피, 테스트 허니콤 방식에 대해서 어떤 생각을 가지고 계시는지 궁금했습니다! |
TDD는 비용이 많이 든다?
현직자 얘기를 들어보면 실제 프로젝트에선 기간 내에 완성해야 하기 때문에 테스트 코드 작성할 시간이 없고, 적용한다 해도 진짜 필요한 부분에서만 테스트를 가져간다고 한다. 또한, 비교적 자유롭다 여겨지는 스타트업도 초기엔 시장 선점을 빠르게 해야 해 테스트 코드가 더 빈약하단 얘기를 들었다. 정답은 TDD 개발 문화가 잘 정립된 회사로 가는 것이지만, 대부분은 이러지 않을 것이라 생각한다. 중요한 기능을 테스트할 자원이 부족한 경우, 팀을 설득하고 빠르게 테스트를 작성할 수 있는 능력이 요구될 것이다. 테스트는 버그가 없다는 걸 보여주는 게 아니다.실제 서비스에선 우리가 알고리즘 문제 풀듯 입력과 상황들이 제한돼있지 않다. 따라서, 코너 케이스는 발생할 수 있다. 우리가 테스트 코드를 작성하는 것은 치명적인 버그가 발생할 경우의 수를 최대한 줄이는 것이다. 물론, 버그가 발생한다는 것 자체가 추가 비용이 발생하는 일이지만 대부분은 적은 비용으로도 해결할 문제가 될 것이다. 단위 테스트는 만능이 아니다.단위 테스트에선 통과를 해도, 여러 의존성이 엮이는 통합 테스트에서 발생하는 문제도 있다. 실제로도 비즈니스 단에선 통과가 잘 되지만, 컨트롤러를 통해 입력을 거치는 부분에서 인증/인가 부분에서 기대하지 않은 결과가 나왔던 적이 있다. 결국에는 여러 단위 테스트를 묶어 하나의 통합 테스트를 만들 수 있는 능력도 필요하다. |
@Lightieey 그리고 저는 팀프로젝트를 테스트 피라미드로 하고 있어요. 저도 너무 지칠 떄 테스트 코드 작성하면 거의 인간 톱니바퀴가 생각날 정도로 노가다라고 느끼는데, 이런 노가다 작업 때문에 과감하게 리팩터링도 가능하고, 사이드 이펙트도 최소화 시킨게 아닐까라고 행복회로 돌리면서 만드는 중입니다 ㅋㅋㅋ... 🫠 |
2주차 정리 내용입니다! 2장의 내용은 우리가 당연히 알고는 있지만, 막상 하기엔 번거로운 내용인 명세 테스트를 어떻게 풀어갈지에 대해 설명돼있습니다. 명세 테스트를 만드는 법
주의할 점명세 테스트를 만드는 과정에서 우리는 실패에 대한 위험성을 이해해야 합니다. 실패가 발생할 때 가장 위험한 곳을 위주로 테스트 자원을 투자하고, 이 과정에서 필요없는 경우의 수를 제외 해야합니다. 하지만, 처음부터 최적화된 경우의 수를 생각할 수 없다고 생각합니다. 우리가 알고리즘 문제를 풀 때, 완전탐색을 통한 풀이부터 시작해 천천히 최적화 하는 것을 연습해야 하는 것처럼 명세 테스트를 작성할 때 전체 테스트의 경우의 수를 생각하고 이를 줄여보는 노력을 해야 합니다. |
1장은 블로그에 적을 정도까지의 깊이는 아닌 것 같아 여기다 적겠습니다! 개발자를 위한 효율적이 소프트웨어 테스트어떻게 하면 개발 활동과 함께 효율적인 테스트를 수행할 수 있을까? 반복 프로세스의 효율적 테스트
테스트 비용개발자에게 엄격한 테스트를 하도록 강요하는 것은 비용이 많이 든다고 생각할 수 있다.
소프트웨어 테스트 원칙(테스트는 왜 이렇게 어려운가)완벽한 테스트는 불가능우리에게 프로그램을 완벽히 테스트 할 수 있는 자원은 없다. 자원이 무한정 있어도 불가능 할 수 있음. 가변성이 중요소프트웨어 테스트에 은 탄환은 없다. 즉 가능한 버그를 모두 찾기 위해 항상 사용할 수 있는 기법은 존재하지 않는다. 다른 종류의 버그를 찾는 데는 다른 테스트 기법이 도움이 된다. 버그는 다른 곳에 비해 많이 발생하는 지점이 있다.완벽한 테스트는 불가능하기 때문에 소프트웨어 테스터는 수행할 테스트에 우선순위를 매겨야한다. 몇몇 구성요소에는 다른 구성요소보다 더 많은 버그가 있기 때문에 훨씬 엄격한 테스트를 할 필요가 있다. 어떤 테스트를 하든지 결코 완벽하거나 충분하지 않다.테스트가 얼마나 대량으로 진행되든지 간에 소프트웨어 시스템에 버그가 100% 존재하지 않는 다는 것을 보장할 수 없다. 테스트 피라미드와 집중해야 할 부분실용적 테스트에 관해 이야기할 때 가장 먼저 결정해야 할 사항은 어느 수준으로 코드를 테스트하는가이다.
단위 테스트단위를 격리해서 테스트하는 것을 단위 테스트라고 한다. 단위 테스트는 시스템에서 작업 단위를 호출하는 자동화된 코드 조각이다. 작업 단위는 한 메서드, 한 클래스 또는 함께 동작하는 여러 클래스에 이를 수 있고, 검증 가능한 단 하나의 논리적 목표를 달성한다. *단위 테스트는 외부 시스템(데이터베이스, 웹 서비스)에 의존하지 않는 작은 클래스 세트 또는 완전히 제어하지 않는 무언가를 테스트하는 것을 뜻한다. 장점
단점
통합 테스트통합 테스트는 우리의 코드와 외부 요소 간의 통합을 테스트해야 할 때 사용하는 테스트 수준이다. 시스템 전체를 테스트하는 대신 구성요소들의 상호작용에 초점을 맞춘다. A 구성요소가 X 메시지를 B 구성요소로 보내면 어떻게 되는지, 그것들이 여전히 올바로 동작하는지 테스트 시스템 테스트소프트웨어를 더 실질적인 관점에서 바라보고 더 현실적인 테스트를 수행하려면 시스템이 가진 모든 데이터베이스, 프런트 엔드 앱 및 기타 구성요소를 포함한 소프트웨어 시스템을 실행해야 한다. 시스템 테스트의 명백한 이점은 테스트가 현실적이라는 것. 하지만 단위 테스트에 느리며, 작성하기 힘들다는 단점이 있다. 또는, 어떨 때는 통과하고 어떨 때는 실패하기도 하는 불안정한 경향을 가지고 있다. 각 테스트 수준을 언제 사용해야 할까?우선 결론부터 말하자면 '상황에 따라 다르다' 저자는 일반적으로 단위 테스트를 사용하는 걸 좋아한다고 한다. 단위 테스트는 작성하기 쉽고, 빠르며, 제품 코드와 엮어서 만들 수 있다. 또한, 단위 테스트는 소프트웨어 개발자가 작업하는 방식(새로운 기능을 구현할 때 여러 개별 단위를 작성)과 잘 들어맞는다고 한다. 각 수준에서 무엇을 테스트해야 할까?소프트웨어 시스템의 알고리즘이나 단일 비즈니스 로직곽 관련된 단위에 대해서는 단위 테스트를 사용한다. 단위 테스트를 이용하면 입력 데이터를 완전히 통제할 수 있을 뿐 아니라 기대한 대로 동작했는지에 대한 완벽한 관찰 가능성을 확보할 수 있따. 통합 테스트는 대상 구성요소가 외부 구성요소(데이터베이스 또는 웹 서비스)와 상호작용 할 때마다 통합 테스트를 사용한다 시스템 테스트는 매우 비용이 많이 드는데(작성하기 어렵고 실행 속도가 느리다) 그래서 피라미드의 맨 위에 있다. 버그가 발생하면 시스템의 어느 부분에 가장 큰 영향을 끼칠까? 이러한 지점들이 몇 가지 시스템 테스트를 수행해야 하는 부분이다. 한 줄 요약: 상황에 맞는 테스트 전략을 선택하여 알잘딱깔센한 테스트 코드를 작성하자! |
범위
최소한 꼭 포함하면 좋을 주제
기간
The text was updated successfully, but these errors were encountered: