2011-03-21 4 views
1

나는 커다란 기존 소프트웨어 프로젝트의 QA 시스템을위한 디자인을 제안했다. 지난 며칠간 Unit Testing과 Test Driven Development에 대한 기사를 읽었습니다. 그리고 그들이 공언 한 개념이 나에게 잘 어울리는 것처럼 보입니다. 그들은 또한 그들이 "업계 표준 좋은 코딩 사례"인 것처럼 보입니다.QA 시스템, 세분성 수준 설계?

어쨌든, 나는이 모든 것들로 내 발가락을 물속에 담갔다. 그러나 나는이 테스트의 디자인을 시작하는 방법에 대한 아이디어가 없다. 저의 관리자의 주요 목표는 새로운 개발 코드가 기존 생산 코드와 동일한 결과를 산출하는지 테스트하는 것입니다. 이 세분화 수준은 나에게 완벽하게 잘 보이지만 단위 테스트 및 TDD에 대해 읽은 기사가 모두 세밀한 수준의 세분성을 장려하는 것처럼 보입니다 (메서드 당 여러 테스트와 유사 함).

많은 개발자들이이 프로젝트를 한 번에 작업하고 있으며 그 높은 수준의 단위 테스트 세분성을 구현하는 것은 악몽입니다. 또한, 단위 테스트의 실질적인 이점은 그 시점에서 줄어들 것입니다.

제가 궁금해하는 점은 어떻게해야하는지 테스트를 결정할 수 있는지입니다. 필자는 프로젝트의 각 큰 구성 요소의 입출력 테스트가 좋은 기반이라고 생각하지만 심층적 인 단위 테스트를 개발하는 방법에 대해 가장 안 좋은 생각은 없습니다. 이것에 대한 몇 가지 일반적인 규칙이 있다면, 나는 그것들을 듣는 데 관심이있을 것입니다.

또한 거대한 기존 소프트웨어 프로젝트에서 TDD 철학을 구현하는 것에 대한 일반적인 의견도 환영 할 것입니다. 감사!

+0

이 프로젝트와 대상 플랫폼의 언어를 지정시겠습니까? – aponomarenko

답변

2

단위 테스트와 TDD는 모두 가치있는 방법이지만 개발자가 채택해야합니다. 당신이 말하는 것처럼, 반드시 코딩은 아니며 반드시 테스트는 아닙니다. TDD는 디자인 과정이므로 이미 작성된 테스트를 통해 코드 디자인을 이끌어 낼 수 없습니다.

단위 테스트에는 실제로 메소드 당 여러 개의 테스트가 있어야합니다. 테스트중인 기능의 요구 사항을 표현하는 데 필요한만큼의 테스트가 필요합니다.

QA 역할로만 접근해야한다면 기능적 또는 통합 테스트를 사용하여 응용 프로그램의 동작을 테스트하고 자동화하십시오.불행히도 이것은 Behaviary Driven Design이 아니며, 이러한 행동을 너무 늦게 설명하여 응용 프로그램의 디자인을 주도 할 수는 있지만 BDD에 사용되는 많은 도구가 여전히 유용 할 수 있습니다.

옵션이 있다면 개발자가 테스트 첫 번째 코드를 작성하는 데 정말로 참여하고 싶다고 생각합니다. 자신의 코드가 기능적으로 정확하다는 것을 생산 및 검증하고 품질 보증 부서가 결과적인 기능이 실제로 좋은 사용자 경험을 가져다 주는지 확인하는 데 집중할 책임을지게하십시오. 또한 필기 테스트에는 테스트 가능한 코드 작성이 필요합니다. 테스트가 없으면 격리하여 테스트하기가 매우 어려운 코드를 작성하는 것이 너무 쉽습니다.

무슨 일을 하던지 Feathers의 "레거시 코드 작업"에서 응용 프로그램의 동작을 예기치 않게 변경하지 않는지 확인하기위한 테스트 및 방법을 소개 할 수있는 응용 프로그램의 이음새 찾기 전략을 살펴보십시오 . 유감스럽게도, 코드가 작성되기 전이나 개발 된 후에 코드를 테스트하는 것이 얼마나 비쌉 냐고 생각하는 것 같습니다.


편집 : 그건해야한다 "working effectively with legacy code는"

+0

주셔서 감사합니다. 견고한 책처럼 보입니다. 저는 사실 TDD와 Unit Testing에 관한 책을 오늘 아침에 구입했습니다. 그래서 두 장의 새로운 책을 다 날 때까지이 구매를 연기 할 것입니다. (나는 책상 위에 책 한 권을 가지고 있습니다. 르가 한숨을 쉬는 시간이 너무 짧다 ...) – sooprise

1

내 경험에 따르면 가장 쉬운 시작 방법은 가장 두꺼운 세분화 수준입니다. 먼저 기능 테스트를 자동화하십시오. BDD를 살펴보십시오. (적어도 이론상의) 기능은 모든 사람에게 명확해야하므로 수용 기준을 정의하는 것이 더 쉽습니다. 가장 인식할만한 가치가있는 종류의 테스트이기도합니다. 그것은 시스템의 클라이언트 (또는 최종 사용자)가인지 한 품질을 처리합니다.

세밀한 수준 (통합 테스트, 단위 테스트)을 경험할 때 주로 제품의 내부 품질에 관심이 있습니다. 따라서 소프트웨어의 진화 및 유지 관리가 쉬운 구성 요소에 더 잘 설계된 구성 요소가 제공됩니다. 이것은 대부분의 경우 개발자들에 의해서만 인식 될 수 있습니다. 따라서 관리자와 고객에게 이점을 확신시키는 것이 더 어려울 것입니다. 또한 제 경험상 이런 유형의 테스트를 통해 테스트 문화를 구현하기가 더 어려워졌습니다.

제 제안은 가장 높은 수준의 세분화를 먼저 수행하는 것입니다. 그리고 팀이 그와 함께 추진력을 얻으면 더 낮은 수준으로 들어가기 시작하십시오. 또 다른 제안은 한 번에 한 단계 씩 나아가는 것입니다. 모든 시스템에 대한 테스트를 작성한다는 목표로 시작하지 마십시오. 가장 중요한 기능, 가장 중요한 구성 요소로 시작한 다음 천천히 시스템의 모든 틈을 메꾸십시오.

+0

감사합니다.이 게시물은 매우 유용했습니다. – sooprise