메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

[진지한 파이써니스타 인터뷰] 로버트 콜린스와 테스트에 대해

2021-02-18

|

by 쥘리앵 당주

1,839

 
파이썬 작동 원리에서 확장, 테스트, 배포, 최적화까지
『진지한 파이썬』 중
 

로버트 콜린스Robert Collins는 bazaar 배포 버전 제어 시스템을 만들었습니다. 현재 HP 클라우드 서비스의 저명한 기술자로, 오픈스택에서도 일하고 있습니다. 또한 이 책에 설명된 많은 파이썬 도구의 개발자이기도 합니다. fixture, testscenarios, testrepository, python- subunit 등을 개발했는데 사람들은 이것을 개발한 사람이 로버트 콜린스인지 모르고 사용하기도 합니다.
· · ·
Q. 어떤 종류의 테스트 정책을 사용하라고 조언하겠습니까? 코드를 테스트하지 않는 것이 받아들여질까요?
엔지니어링 측면에서 테스팅에는 장단점이 있습니다. 잘못된 점이 있더라도 상용 환경에서 실제로 발견되지 않을 수도 있으니까요. 발견되지 않은 실패의 크기와 그것을 해결하는 비용에 대해서 고려해야 하고, 거기에 투자하는 노동력도 생각해야겠죠. 각자의 의견을 가진 다양한 사람과 미묘한 정책으로 작업하는 것은 어렵습니다. 일반적으로 프로젝트는 코드가 의도한 대로 작동하는지, 의도된 것이 필요한지 확인하기 위해 몇 가지 자동화된 테스트가 필요합니다. 종종 다른 코드 베이스에 있을 수 있는 기능 테스트가 필요하기도 합니다. 단위 테스트는 속도와 코너 케이스coner case1를 이해하는 데 탁월합니다. 테스트가 있는 한, 테스트 스타일 사이의 균형을 조정하는 것이 괜찮다고 생각합니다.
테스트 비용이 매우 높고 수익률이 매우 낮다면 테스트를 하지 않겠다는 결정을 내리는 것이 괜찮다고 생각하겠지만, 그런 상황은 상대적으로 드뭅니다. 대부분은 합리적으로 저렴하게 테스트할 수 있으며, 오류는 일찍 발견할수록 좋습니다.

1 옮긴이_ 코너 케이스
잘 작동하는 코드가 특정 환경에서 갑자기 실행되지 않는 등 여러 환경변수와 외부조건으로 발생하는 문제를 말합니다. 코너 케이스는 재현하기가 어려워 테스트하기도 어렵습니다.
Q. 테스트를 관리하고 코드의 품질을 향상하기 위해 파이썬 코드를 작성할 때 가장 좋은 전략은 무엇입니까?
문제를 분리하고 한 곳에서 여러 가지 작업을 수행하지 마세요. 이렇게 하면 자연스럽게 재사용을 가능하게 하고, 테스트 더블test double2을 진행하기가 더 쉬워집니다. 가능하면 순전히 기능적인 접근 방식을 취하세요. 예를 들어 단일 메서드에서 무엇인가를 계산하거나 일부 상태를 변경해도 되지만, 한꺼번에 두 가지를 수행하지 마세요. 이렇게 하면 데이터베이스에 쓰거나 HTTP 서버와 대화하는 등 상태 변경을 처리하지 않고도 모든 계산 동작을 테스트할 수 있습니다. 이 혜택은 다른 방식으로도 작동되는데, 테스트의 계산 논리를 대체하여 코너 케이스 동작을 유도하고 모의 및 테스트 더블을 사용하여 예상하는 상태 전파가 원하는 대로 발생하는지 확인할 수 있습니다. 가장 힘든 테스트는 복잡한 교차 계층 동작 디펜던시를 가진 깊고 계층화된 스택입니다. 계층 간의 계약이 간단하고 예측 가능하며 테스트에 가장 유용하게 사용할 수 있도록 코드를 발전시키고자 합니다.

2 옮긴이_ 테스트 더블
영어에서 대역 배우(혹은 흔히 스턴트맨, stunt double)를 부르는 말에서 비롯된 용어로 스텁(stub), 목(mock), 페이크(fake), 더미(dummy) 등의 (실제 객체가 아닌 다른) 객체를 활용하여 테스트하는 방법을 말합니다.
Q. 소스 코드에서 단위 테스트를 구성하는 가장 좋은 방법은 무엇입니까?
$ROOT/$PACKAGE/tests와 같은 명확한 계층구조를 갖습니다. 전체 소스 트리(예를 들어 $ROOT/$PACKAGE/$SUBPACKAGE/tests)에 대해 하나의 계층구조만 수행하는 것을 선호합니다.
테스트에서 종종 소스 트리의 나머지 구조를 미러링합니다. $ROOT/$PACKAGE/foo.py는 $ROOT/$PACKAGE/tests/test_foo.py에서 테스트됩니다. 나머지 트리는 최상위 수준의 __init__에서 test_suite/load_tests 함수를 제외하고는 테스트 트리에서 가져오지 않아야 합니다. 이를 통해 규모가 작은 설치에 대한 테스트를 쉽게 분리할 수 있습니다.
Q. 파이썬에서 단위 테스트 라이브러리와 프레임워크의 미래는 무엇이라고 보십니까?
중요한 과제는 다음과 같습니다.
CPU가 4개 있는 휴대폰과 같이 새로운 컴퓨터에서 병렬 기능의 지속적인 확장이 필요합니다
기존 단위 테스트 내부 API는 병렬 워크로드에 최적화되지 않습니다. StreamResult 자바 클래스에 대한 연구는 이 문제를 해결하기 위한 것입니다.
더 복잡한 스케줄링 지원이 필요합니다
클래스와 모듈 범위 설정이 목표인 문제에 대한 그나마 나은 솔루션입니다.
현재 가지고 있는 방대한 프레임워크를 통합할 방법을 찾아야 합니다
통합 테스트를 위해 서로 다른 테스터가 있는 여러 프로젝트에서 통합된 뷰가 있다면 좋을 것입니다.
· · ·
댓글 입력
자료실