PHPUnit
1. 개요
PHPUnit은 개발자가 코드의 오류를 조기에 발견하고 코드 회귀를 방지하도록 돕는 PHP용 단위 테스트 프레임워크이다. XUnit 스타일의 어설션을 사용하여 구성 요소의 동작을 검증하며, JUnit XML 및 TestDox 형식을 포함한 다양한 형식으로 테스트 결과를 출력한다. 2017년에는 PHPUnit을 통해 원격 코드 실행이 가능한 취약점이 발견되기도 했다.
이미지 준비중입니다.
| 종류 | 단위 테스트 프레임워크 |
|---|---|
| 개발자 | Sebastian Bergmann |
| 안정화 버전 | 10 |
| 최신 릴리스 버전 | 10 |
| 프로그래밍 언어 | PHP |
| 운영체제 | 크로스 플랫폼 |
| 라이선스 | BSD 3 Clause |
| 웹사이트 | PHPUnit 공식 웹사이트 |
-
유닛 테스트 프레임워크 -
JUnit
JUnit은 자바 환경에서 단위 테스트를 위한 프레임워크로, 반복적인 테스트 실행을 통해 버그 수정에 용이하며, 어노테이션 기반의 간편한 테스트 코드 작성과 IDE 통합을 지원하여 개발 효율성을 높인다. -
유닛 테스트 프레임워크 -
QUnit
QUnit은 존 레식에 의해 개발된 자바스크립트 유닛 테스트 프레임워크로, jQuery의 유닛 테스트 코드로 시작하여 독립적인 프로젝트가 되었으며, 모듈 및 테스트 정의와 표명 메서드를 통해 테스트를 수행한다. -
익스트림 프로그래밍 -
워드 커닝햄
워드 커닝햄은 미국의 컴퓨터 프로그래머로, 최초의 위키 사이트 WikiWikiWeb을 만들고 기술 부채 개념을 창안했으며, 소프트웨어 개발 방법론 발전에 기여했다. -
익스트림 프로그래밍 -
JUnit
JUnit은 자바 환경에서 단위 테스트를 위한 프레임워크로, 반복적인 테스트 실행을 통해 버그 수정에 용이하며, 어노테이션 기반의 간편한 테스트 코드 작성과 IDE 통합을 지원하여 개발 효율성을 높인다. -
BSD 라이선스 소프트웨어 -
V8 (자바스크립트 엔진)
V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드 실행 속도 향상을 위해 여러 컴파일러를 거쳐 크롬, 노드.js 등에서 활용된다. -
BSD 라이선스 소프트웨어 -
VP9
VP9는 구글이 개발한 오픈 소스 비디오 코덱으로, VP8보다 압축 효율을 높이고 HEVC보다 나은 성능을 목표로 개발되었으며, WebM 형식으로 사용되고 주요 웹 브라우저와 넷플릭스, 유튜브 등에서 지원했으나 AV1의 등장으로 개발이 중단되었다.
2. 목적
PHPUnit은 개발자가 새로 커밋한 코드의 실수를 조속히 찾아내고, 코드 기반의 다른 부분에 코드 회귀가 발생하지 않았음을 표명할 수 있도록 돕는 것을 목적으로 한다.
2.1. 어설션(Assertion)
PHPUnit은 개발자가 새로 커밋한 코드에서 발생할 수 있는 오류를 신속하게 찾아내고, 코드의 다른 부분에 코드 회귀가 발생하지 않았음을 확인할 수 있어야 한다는 개념에 기반을 둔다. 다른 단위 테스트 프레임워크들과 마찬가지로, PHPUnit은 어설션을 사용하여 테스트 대상 컴포넌트, 즉 [[유닛 (프로그래밍)|유닛]]의 동작이 예상대로 작동하는지 확인한다.
3. 장점
PHPUnit은 개발자들이 새로 커밋된 코드의 실수를 조속히 찾아내고 코드 기반의 다른 부분에 코드 회귀가 발생하지 않았음을 확인할 수 있도록 돕는다는 개념에 기반을 둔다. 유닛 테스트의 목표는 프로그램의 각 부분을 격리하여 개별 부분이 올바른지 확인하는 것이다. 유닛 테스트는 코드 조각이 충족해야 하는 엄격하고 명시적인 계약처럼 기능하여, 개발 주기 초기에 문제를 발견하는 데 도움을 준다.
다른 유닛 테스트 프레임워크들처럼 PHPUnit은 XUnit의 표명(assertion) 방식을 사용하여 특정 구성 요소가 예측대로 동작하는지 확인할 수 있다. 또한, 테스트 결과를 JUnit XML이나 TestDox 등 다양한 형식으로 출력할 수 있는 유연성을 제공한다.
4. 취약점
2017년 말, PHPUnit을 통해 공격자가 원격 코드 실행을 할 수 있는 취약점이 발견되었다. 이 취약점을 이용하면 공격자는 PHP 코드를 PHPUnit의 특정 파일로 보내 웹 서버에서 해당 코드를 실행시킬 수 있었다.