클린코드 9장 & 10장 궁금증 자문자답

지송·2023년 10월 12일
0

클린코드

목록 보기
5/8

📚 클린코드 9장 단위 테스트 및 10장 클래스 을 읽고 생긴 궁금증을 정리해 보았습니다


< 느낀 점 >

어느덧 클린코드 읽고 블로그 작성하기 활동도 5주차에 접어들었다 혼자였다면 하지 못했을 수도 있지만 스터디원 분들 덕분에 착실하게 해내고 있는 것 같다! 다들 의지박약이 걱정된다면 스터디를 하세요 단점은 가끔 과거의 스스로가 원망스러워서 울게 될지라도... 나중에는 뿌듯함만 남습니다 ^_^ 느낀 점 칸에 요즘 일상을 회고하는 듯한 느낌이라 적고 싶은 주제 하나만 간략하게 더 적고... 책 이야기로 넘어가야지

스터디는 모집도 힘들지만 그것보다 더 힘든 건 유지하기인 것 같다 실제 다른 스터디 하나를 일 년정도 진행했는데 그러다 보니까 서로의 상황과 환경이 많이 달라져서 깔끔한 마무리보다는 흐지부지해져 끝나고 말았다 그래서 깨달은 바는 2달 정도마다 갱신할 타임이 필요한 것 같다! 존속 여부 결정 고정 시간 결정 추가 모집 등등... 이번에 깨달은 바를 다른 분들도 슬쩍 아셨으면 해서 적어 본다

각설하고 책 이야기로 넘어가자면 이제는 다 아는 얼굴 또 만났네요 느낌으로 읽고 있다 전에까지의 챕터에서 나왔던 내용을 좀 길게 풀어서 설명하는 느낌 단위 테스트나 클래스의 경우 이전 챕터에서 각각 흩어져 있던 내용을 하나의 주제로 다시 엮은 느낌이 들었다 그래서 다시금 정리할 수 있어서 좋았다는 이야기

단위 테스트의 경우에는 늘 입이 닳도록 말하는 소프트웨어 테스팅 이론 강의... 해당 강의에서 배웠던 내용들을 본문에 좀 녹여보고자 한다! 이상 본론만큼이나 긴 서론 끝


1. 테스트는 오류를 없애기 위함이 아닌 찾기 위함이다

그리고 바로 나온 소프트웨어 테스팅 이론 강의 내용... 이건 궁금증보다는 테스팅 이론을 배울 때 가장 인상 깊게 남은 구절이라서 공유하고자 첨부한다 해당 표현이 정말 짜릿하다고 느꼈다!

현실적으로는, 처음부터 코드를 완벽하게 짜는 것이 중요하지만 이는 불가능에 가깝다 또한 모든 테스트 케이스를 테스트하는 것도 좋지만 이도 불가능에 가깝고 실제로 한다면 시간과 에너지의 낭비일 것이다 따라서 우리는 가장 적절한 범위를 커버하는 테스트 케이스를 만들어내야 한다

즉 테스트는 '사용하면서' 생길 수 있는 오류들을 찾아낸다면 성공적인 테스트인 것이다!

사실 말장난 같은 느낌이 있지만 코드를 짜 본 사람이라면 알 것...


2. 다양한 테스트 패턴들

책을 읽으며 테스트도 여러 패턴에 따라 작성할 수 있다는 걸 알고 신기했다 고로 찾아 보았다

(1) 빌드 오퍼레이트 체크 패턴 (Build-Operate-Check Pattern):

이 패턴은 소프트웨어 테스트와 개발 프로세스를 지원하기 위한 패턴으로, 세 가지 주요 단계로 구성된다

from selenium import webdriver

# 빌드 단계
driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 오퍼레이트 단계
search_box = driver.find_element_by_name("q")
search_box.send_keys("Example search")
search_box.submit()

# 체크 단계
assert "Example Search Results" in driver.title

driver.quit()

(2) Given-When-Then 패턴:

이 패턴은 소프트웨어 테스트와 개발 문서화를 위한 패턴으로, 시나리오를 주어진(Given), 어떤 동작(When), 그리고 결과(Then)로 구분한다

# Given
initial_value = 10

# When
result = initial_value + 5

# Then
assert result == 15, "Expected the result to be 15"

(3) BDD (Behavior-Driven Development) 패턴:

BDD 패턴은 Given-When-Then 패턴과 유사하지만, 테스트 케이스를 비즈니스 동작 및 요구 사항과 연결하여 소프트웨어의 행동을 강조하는 패턴
주로 자연어로 작성된 테스트 케이스와 연동된 도구를 사용

# 특정 동작을 정의하는 BDD 스타일의 테스트 케이스
from behave import given, when, then

@given('a user is on the login page')
def step_given_user_on_login_page(context):
    context.user = User()
    context.user.visit_login_page()

@when('the user enters valid credentials')
def step_when_user_enters_valid_credentials(context):
    context.user.enter_credentials("username", "password")
    context.user.submit_login_form()

@then('the user should be logged in')
def step_then_user_should_be_logged_in(context):
    assert context.user.is_logged_in(), "User should be logged in"

# 테스트 실행
# 위의 스텝에 따라 테스트 케이스를 실행하고 결과를 확인

(4) 픽스처 (Fixture) 패턴:

픽스처 패턴은 테스트 환경을 설정하고 정리하기 위한 패턴
주어진 초기 상태와 정리 단계를 정의하여 테스트를 격리시키고 일관성 있게 유지하는 데 도움을 준다

import unittest

class TestMathOperations(unittest.TestCase):
    def setUp(self):
        # 초기 상태 설정
        self.x = 5
        self.y = 3

    def test_addition(self):
        result = self.x + self.y
        self.assertEqual(result, 8)

    def test_subtraction(self):
        result = self.x - self.y
        self.assertEqual(result, 2)

    def tearDown(self):
        # 테스트 환경 정리
        self.x = None
        self.y = None

if __name__ == '__main__':
    unittest.main()

3. 클래스 테스트를 위한 각각의 도구들

주제를 잡아 보려고 하니까 이미 다 작성했던 내용들이라... 클래스와 단위 테스트면 당연히 클래스 테스트에 대한 말이 나와야지! 싶어 추가한 주제다

(1) unittest (유닛테스트):
파이썬에서 클래스를 테스트하는 데 사용되는 도구로, 파이썬 표준 라이브러리에 포함
클래스의 테스트를 작성할 때, 테스트 케이스 클래스를 만들고 테스트 메서드를 작성 setUp와 tearDown 메서드를 사용하여 테스트 환경을 설정하고 정리할 수 있음

(2) pytest:
파이썬에서 클래스를 테스트하는 좋은 선택지로, unittest보다 더 쉽고 강력
테스트 케이스를 만들 때 간단하게 함수로 작성하고, 테스트를 자동으로 찾아줌 다양한 플러그인으로 테스트를 확장 가능

(3) Junit (자바):
자바 언어에서 클래스 테스트를 하기 위한 표준 도구 중 하나
클래스나 메서드를 어노테이션으로 정의하고 테스트

(4) NUnit (.NET):
.NET 플랫폼에서 사용되는 유닛 테스트 도구로, C#와 같은 언어를 사용하는 사람들이 자주 사용
테스트 픽스처 설정, 테스트 케이스 클래스 만들고, 어셔션 메서드를 사용해서 테스트를 실행

(5) RSpec (루비):
루비 개발자들이 사용하는 BDD (Behavior-Driven Development) 테스트 도구로, 동작에 중점을 둠
특별한 문법을 사용하여 테스트 케이스를 작성하고, 테스트 더블을 만드는 것이 쉬움

(6) Mocha (자바스크립트):
자바스크립트에서 사용하는 테스트 도구로, Node.js나 브라우저 환경에서 사용
describe와 it 함수를 사용하여 테스트를 그룹화하고 비동기 코드를 테스트

profile
💻 늘 공부하고 발전하는 개발자

0개의 댓글