PHPUnit으로 직업을 인용하려면 어떻게해야합니까?


9

나는 15 년 동안 웹 사이트 프로그래밍을하고 지난 5 년 동안 PHP를 해왔다. 나는 항상 견고한 코드를 작성했습니다. 그러나 단위 테스트중인 코드의 80 %를 주장하는 클라이언트가 있습니다. 클라이언트는 항상 옳기 때문에 PHP_CodeSniffer를 사용하여 코드가 올바르게 보이고 PHPUnit이 단위 테스트를 수행 할 계획입니다. 이 경험을 통해 무언가를 배우고 싶습니다.

이것이 올바른 도구입니까? PHPUnit을 설정하고 추가 코드를 작성하는 데 시간이 얼마나 걸립니까? 과거에 한 것처럼 웹 페이지를 작성하고 자체 테스트하는 데 약 8 주가 소요됩니다. 단위 테스트 (PHPUnit)에 4 일 추가 (10 %)를 추가하면 충분합니까? 생각? 제안? 감사.


2
단위 테스트는 개발 시간을 두 배로 늘릴 수 있습니다.

PHP 2.0으로 작업 했습니까? 좋은! 내 의견은 간단히 대답 할 자격이 없습니다. 도구 선택을 위해서는 imho에 맞습니다. 참조 PHP 테스트 프레임 워크에 내 걸릴 및 phpcs 위해 내가 알지도 못하는 어떤 대안을. 추가 할 시간 : 한동안 TDD를 수행 한 후 나는 보통 그것 없이는 느리지 만 특정 일을 너무 오래 (+ 50 %) 시작했습니다. 테스트를 어렵게 만드는 프레임 워크 (많은 정적 요소)를 사용하면 더 많은 것을 추가 할 수 있습니다.
edorian

1
초기의 초기 개발이 증가하지만 8 주간 프로젝트를 통해 단위 테스트를 통해 버그를 더 빠르고 쉽게 발견 할 수 있으므로 차이가 줄어 듭니다.
Fenton

1
@Dragon는 좀뿐만 아니라 시험 장치 개발 [적은 배포 / 테스트 / \ 수정주기를 찾을 수 많은이 속도
monksy

답변:


7

한 줄에 : 그것은 당신이 일하는 방식에 달려 있습니다. 나는 10 %가 너무 적다고 생각합니다. 40 %가 아닌 경우 25 % 이상, 60 %가 아닌 경우 60 % 이상이어야합니다.

첫째, 나는 당신의 고객과 매우 동의합니다. 단위 테스트는 강력하고 유지 관리가 쉽고 디버그하기 쉬운 제품의 필수 부분입니다.

내가 아는 것에서 말할 것이다. 대부분의 프로젝트에 TDD (Test-Driven Development)를 사용합니다. TDD는 기본적으로 실제 코드보다 먼저 테스트를 작성합니다. 최종 제품이 충족해야하는 수용 기준 세트를 설정합니다. 일반적으로 테스트 작성 시간의 50 %-70 %를 소비하고 나머지는 테스트를 통과하기 위해 코드를 구현하는 데 소요됩니다.

터무니없고 거대하게 들릴지 모르지만, 그렇지 않다는 것을 확신 할 수 있습니다. 이유는 다음과 같습니다.

  • 테스트를 작성하는 동안 사용할 최상의 아키텍처 패턴을 파악할 수 있습니다. 이렇게하면 코딩을 시작할 때 애플리케이션 아키텍처를 다시 실행하는 데 비용이 많이 들기 때문에 애플리케이션 아키텍처가 최소한으로 변경됩니다.
  • 테스트를 통과하기 위해서만 코딩합니다 (따라서 최종 제품을 수용 가능하게 함). 쓸모 없거나 범위를 벗어난 기능을 프로그래밍하는 데 시간을 소비하지 않습니다.
  • 코드가 적을수록 (즉, 실제로 필요한 코드 만) 오류가 덜 발생하기 쉽습니다. (더 적은 코드 = 적은 오류).
  • 실수를 저지르면 문제가 발생하는 이유와 문제의 위치를 ​​파악하는 데 시간이 덜 걸립니다. 테스트가 올바르게 작성된 경우 단일 실수로 연쇄 반응이 아닌 단일 장애가 발생할 수 있습니다. 이런 식으로 몇 초 만에 문제의 원인을 쉽게 찾을 수 있습니다.
  • 단위 테스트로 실제 코드를 구현하는 데 시간이 덜 걸립니다. 테스트가 실패하자마자 무언가 잘못되었음을 알게됩니다. 버그를 수정하기 위해 클라이언트와 앞뒤로 할 필요가 없습니다.
  • 100 %의 오류를 포착 할 수있는 것이 없기 때문에 결국 버그를 수정하기 위해 클라이언트와 앞뒤로 작업해야합니다. 그러나 더 이상 그렇지 않으면 쉽게 95 %를 잡을 수 있습니다.

PHPUnit은 PHP를 단위 테스트하기위한 사실상의 도구입니다. PHP_CodeSniffer를 많이 사용하지 않았습니다. 그러나 혼자서 일하는 경우 필요하지 않을 것이라고 생각합니다. 코드를 작성하는 사람에 관계없이 코드가 동일하게 보이도록 팀에서 더 유용합니다.


5

이 경험에서 무언가를 배우 겠다는 태도를 갖는 데 도움이됩니다. 나는 당신이 확신합니다.

가장 먼저 배워야 할 것은 단위 테스트의 필요성은 당신이 얼마나 경험이 많은지와 관련이 없다는 것입니다 . 최고의 개발자는 최고의 단위 테스터 중 하나가 될 것입니다.

Bill Venners : 책 리팩토링 : "리팩토링하려는 경우 필수 전제 조건은 확실한 테스트를 수행하는 것입니다." 리팩토링하지 말아야 할 테스트가 없다면 의미합니까?

마틴 파울러 : 그물없이 줄타기를 걷는 것으로 생각해야합니다. 줄타기를 잘하는데 그다지 높지 않으면 시도해 볼 수 있습니다. 그러나 당신이 전에 줄타기를 한 번도가 본 적이 없으며 나이아가라 폭포를 넘어 서면 좋은 그물을 원할 것입니다.

에서 http://www.artima.com/intv/refactorP.html

단위 테스트없이 PHP를 작성했습니다. 그런 다음 수년간 Java로 단위 테스트를 수행 한 결과 단위 테스트없이 PHP에서 단일 페이지보다 훨씬 복잡한 작업을 수행 할 수 없다는 것을 알았습니다. 이유? 생산성 . 단위 테스트하지 않고, 나는 확신을 가지고 리팩토링 할 수 없었다 -이 중 하나를 의미 A) 내가 가지고있는 것은 아래 작업 다시 시작 또는 모든 것을 통해 더 많은 눈물 ) B , 내가 못생긴, 레거시 코드를 처리해야 할 것이다.

입찰 할 때 테스트 할 시간을 고려해야합니까? . 더 많은 시간 이 걸리는 것이 직관적 으로 보입니까? 예, 다시 . 다른 답변이 대략적으로 추정 했듯이 단위 테스트가없는 것보다 50-100 % 더 큰 것으로 추정해야 할 것입니다.

하나!...

  • 사양 구멍을 미리 파악하여 해결합니다.
  • 더 깨끗하고 견고한 사양으로 개발할 것입니다.
  • 사양 변경에 신속하고 자신있게 대응할 수 있습니다
  • 버그가 줄어 듭니다.
  • 버그가 더 빨리 잡히고 쉽게 고쳐질 것입니다

결과적으로 추정치 가 더 정확 해 집니다. 시간당 요금을 청구하면 고객에게 더 많은 감동을주고 요금을 인상 할 수 있습니다. 정액 요금을 부과하면 시간당 더 많은 돈을 벌 수 있습니다.

테스트를하지 않으면 추정치가 문제 일 가능성이 높습니다. 버그, 변경 순서 및 재정의는 모두 정확하게 예측하기에 끔찍합니다. 테스트는 세 가지 모두의 영향을 최소화하는 열쇠입니다!


3

얼마나 오래 걸리는지에 대한 쉬운 대답은 없습니다.

그러나 짧은 프로젝트라면 기본적으로 좋은 단위 테스트와 함께 개발하는 데 단위 테스트가없는 개발 시간보다 1.75-2 배가 걸릴 것이라고 말하고 싶습니다. 더 긴 프로젝트의 경우 25-30 %?

코드를 작성 하기 전에 단위 테스트를 수행하는 것이 좋습니다 . 이런 식으로 단위 테스트 스캐 폴딩을 구축하는 것은 실제로 설계 프로세스의 일부가되므로 단위 테스트 시간을 잃는 것이 아니라 단위 테스트를 구축하는 것이 설계를 돕는 데 도움이된다는 것을 고려해야합니다 훌륭한 제품과 테스트를 거친 후에는 테스트가 존재하기 때문에 테스트를 계속 유지할 수 있습니다. 단위 테스트를 먼저 작성해야하는 것은 실제 요구 사항에 초점을 맞추는 데 도움이되고, 수행 여부를 테스트 할 수있는 명확한 방법 (단위 테스트 통과)을 제공하며 "초기 테스트 및 자주 테스트"하는 데 도움이됩니다.

PHPUnit에 관해서는 .... 그것을 사용한 지 오래되었습니다. 제 인상은 강력하지만 실제로 연마하기 전에 더 많은 작업이 필요하다는 것입니다.

그러나 여기서 의사 소통하고 싶은 것이 있다면 : 프로젝트가 끝날 때 단위 테스트를 단순한 형식으로 보지 마십시오. 그것이 전부라면 제 생각에는 무가치합니다.


3

지금까지의 답변은 매우 철저하므로 한 가지만 다루지 않을 것입니다 .PHPUnit 사용으로 인한 추가 시간은

  1. 처음 배우고 나서 더 높고
  2. 자신감이 생길 때 테스트하지 않은 개발 시간을 줄입니다.

프리젠 테이션을 다루지 않는 단위 테스트 모델 클래스는 매우 간단합니다. 각 클래스에 대한 테스트를 작성하고 해당 테스트 케이스에서 특정 메소드 / 기능을 테스트하기 위해 오브젝트를 직접 인스턴스화하고 구성 할 수 있습니다. PHPUnit을 설치하고 실행하면 이러한 테스트를 빠르게 수행 할 수 있습니다.

단위 테스트 웹 페이지는 더 까다로울 수 있습니다. Zend Framework, Symfony, Smarty 또는 기타 MVC 엔진을 사용하는 경우 PHPUnit을 잘 재생하려면 시간이 더 걸릴 수 있습니다. 우리는 Zend Framework를 사용하고 있으며 컨트롤러 테스트 및 스크립트보기를위한 기본 클래스를 구축하는 데 상당한 시간을 보냈습니다. 이 프로젝트의 규모가 주어지면로 시작하는 것이 좋습니다 ControllerTestCase.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.