Blog

테스트 주도 iOS 애플리케이션 개발 1장 정리

January 15, 2014

author:

테스트 주도 iOS 애플리케이션 개발 1장 정리

소프트웨어 테스트와 단위 테스트

1장에서는 소프트웨어 테스트의 영억을 배울 것이다. 또한 단위 테스트가 이 영역에서 어디에 적합한지와 장점과 단점은 무엇인지 배울 것이다.

소프트웨어 테스트의 목적

테스트하는 목적은 제품이 효과적임을 보여주려는 것이지 버그를 찾으려는 것이 아님을 명심하자.

적절한 소프트웨어 테스트는 프로젝트 비용을 감당할 수 있는 수준에서 소프트웨어가 잘 동작한다는 확신을 주고자 개발에서 필요한 제어를 하는 수준과 소프트웨어를 점검하는 수준 사이의 균형을 맞추는 일종의 타협이다. 최종 목표는 소프트웨어가 원래 해야 하는 동작을 해서 비용을 지불할 만한 가치가 있는지를 고객에게 보여주는 것이 되어야 한다.

소프트웨어 테스트 대상

테스터와 개발자가 테스트하는 것은 장단점이 있고 테스터는 보통 블랙 박스 테스트를, 개발자는 화이트 박스 테스트를 한다.

결국 정리하면 시점마다 개발자와 테스터 모두 테스트를 지속적으로 해야 한다.

소프트웨어 테스트 시기

최근 소프트웨어 프로젝트 관리 접근법은 최종 단계에서만 테스트하는 방식이 문제점이 있음을 인식하고 제품의 모든 부분을 항상 지속적으로 테스트하는 것을 목표로 한다.

따라서 정답은 소프트웨어를 항상 테스트해야만 한다는 것이다. 그리고 “지금 하려는 일이 제품에 특정 가치를 더하고 제품이 마케팅 문구에 쓰여진 기능을 해서 사용자를 만족시킬 수 있는 가능성을 높일 수 있을까”라는 질문에 매번 답을 구할 수 있다.

테스트의 실제 사례

iOS 앱은 애플의 인스트루먼트 프로파일링 도구의 일부분인 UI Automation 인스트루먼트를 이용해 이러한 테스트를 어느 정도 자동화할 수 있다.

사용성 테스터는 오랜 시간을 들여 사용자와 애플리케이션 간의 상호작용을 살펴보고 사용자가 잘못 사용하는 것이나 헷갈리는 내용을 기록한다. 사용성 테스트의 특별한 기법은 A/B 테스트다. 서로 다른 사용자가 애플리케이션의 각 버전과 사용법을 받고 사용법을 통계적으로 비교한다.

앱의 인터페이스를 쓰는 사용자의 반응을 측정하는 데는 인터페이스 빌더나 키노트, 종이 같은 곳에 그려진 목업까지 어떤 것이든 활용할 수 있다.

특히 좀 더 규모가 큰 팀에서 일하는 개발자는 함께 작업하고 있는 제품 관련 통합 작업에 들어가기 전에 동료가 검토할 수 있게 소스 코드를 제출하는데, 이는 화이트 박스 테스트의 한 형태다.

단위 테스트가 적합한 곳

단위 테스트는 코드의 동작을 테스트하는 작은 코드 조각

단위 테스트는 선행 조건을 설정하고 테스트 조건을 기준으로 코드를 실행하고 마지막 상태에 대한 어써트를 생성한다. 어써트가 유효한 것이라면 테스트를 통과한다. 테스트를 끝까지 수행하는 것을 멈추는 예외를 포함해 어써트된 상태로부터 벗어난 모든 것은 테스트 실패를 나타낸다.

이 단위 테스트의 세밀한 단위도는 단위 클래스를 수행하는 과정에서 발견한 문제를 재빨리 대응할 수 있게 한다.

단위 테스트를 작성하는 것은 애플리케이션 안에서 최종적으로 남지 않을 코드를 작성함을 의미한다고 하더라도 이 비용은 테스터에게 이르기 전에 문제를 발견하고 고치면서 생기는 이득으로 상쇄 가능하다.

단위 테스트의 가장 중요한 장점 중 하나는 테스트를 자동으로 수행하게 할 수 있다는 것이다. 이는 한 번 수정했지만 나중에 개발할 때 다시 발생하는 퇴행 버그를 테스트하는 데 매우 적은 비용이 들게 해준다. 지속적인 통합 시스템을 사용해 소스 코드를 저장소에 커밋할 때마다 테스트를 자동으로 실행할 수 있게 할 수 있다.

(얼마나 많은 테스트를 어떤 범위까지 해야 하는지… 에 대한 설명들)

목표는 테스트가 도움이 된다고 생각할 때까지 테스트를 하는 것이자 반대로 테스트에서 어떤 이득도 생기지 않는다면 테스트를 중단하는 것이어야만 한다. 소프트웨어 엔지니어가 “내 소프트웨어의 어떤 부분을 테스트해야 됩니까”라고 물었을 때 단위 테스트 전문가 켄트 벡은 “당신이 작업하고 싶은 아주 일부만 하면 된다”고 말했다.

단위 테스트가 iOS 개발자에게 의미하는 점

단위 테스트가 iOS 앱 개발자에게 주는 가장 큰 장점은 적은 비용을 들여서 많은 이득을 얻을 수 있다는 것이다.

테스트를 실행하는 데 걸리는 시간은 매우 짧기 때문에 단위 테스트를 도입하는 데 가장 비용이 많이 드는 부분은 테스트를 설계하고 테스트 케이스를 작성하는 데 드는 시간일 것이다. 이런 비용 투자의 결과로 코드를 작성하는 동안 해당 코드가 어떤 일을 해야 하는지 더 많은 것을 알게 될 것이다. 이렇게 되면 버그를 작성하는 것을 피할 수 있고 베타 테스터가 발견할 버그의 개수가 작아져서 프로젝트 완료 시점이 언제일지 좀 더 확실히 알 수 있다.