이미지 파일 및 설정 파일 삭제, 새로운 CLI 및 문서 추가
This commit is contained in:
190
docs/09_테스트와 품질 관리.md
Normal file
190
docs/09_테스트와 품질 관리.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# **Ruby에서 테스트와 품질 관리**
|
||||
|
||||
소프트웨어 개발에서 **테스트와 품질 관리**는 필수적인 과정이다. 테스트를 수행하면 코드가 정상적으로 동작하는지 확인할 수 있으며, 이후 유지보수 시 발생할 수 있는 문제를 줄일 수 있다. Ruby에서는 다양한 **테스트 프레임워크와 도구**를 활용해 자동화된 테스트를 수행하고 코드 품질을 관리할 수 있다.
|
||||
|
||||
이 글에서는 **Ruby의 테스트 개념, 주요 테스트 프레임워크, 테스트 코드 작성 방법, 품질 관리 도구**를 설명한다.
|
||||
|
||||
---
|
||||
|
||||
## **1. 테스트의 중요성**
|
||||
|
||||
테스트를 작성하는 것은 단순히 "버그를 찾기 위해" 하는 일이 아니다.
|
||||
|
||||
### **1.1. 테스트의 목적**
|
||||
- **코드 안정성 확보**: 변경 사항이 기존 기능을 망가뜨리지 않도록 보장
|
||||
- **디버깅 시간 단축**: 오류를 빠르게 발견하여 수정
|
||||
- **유지보수 용이**: 코드가 오래되더라도 안전하게 개선 가능
|
||||
- **자동화된 검증**: 반복적인 수작업 검증을 줄이고 효율적인 개발 가능
|
||||
|
||||
---
|
||||
|
||||
## **2. Ruby에서 테스트 방법**
|
||||
|
||||
Ruby에서는 다양한 테스트 기법이 사용된다.
|
||||
|
||||
### **2.1. 주요 테스트 기법**
|
||||
- **단위 테스트(Unit Test)**: 개별 함수나 메서드의 동작을 검증
|
||||
- **통합 테스트(Integration Test)**: 여러 컴포넌트가 함께 동작하는지 확인
|
||||
- **기능 테스트(Functional Test)**: 사용자의 시나리오를 따라가며 검증
|
||||
- **성능 테스트(Performance Test)**: 애플리케이션의 응답 속도와 성능을 측정
|
||||
|
||||
### **2.2. Ruby에서 사용되는 주요 테스트 프레임워크**
|
||||
| 프레임워크 | 특징 |
|
||||
|------------|--------------------------|
|
||||
| **Minitest** | Ruby에 기본 포함, 가볍고 빠름 |
|
||||
| **RSpec** | 가독성이 높은 BDD 스타일의 테스트 |
|
||||
| **Cucumber** | 자연어 기반 테스트 (Given-When-Then) |
|
||||
| **Capybara** | 웹 애플리케이션 UI 테스트에 사용 |
|
||||
|
||||
이 글에서는 가장 많이 사용되는 **Minitest**와 **RSpec**을 중심으로 설명한다.
|
||||
|
||||
---
|
||||
|
||||
## **3. Minitest: Ruby 기본 테스트 프레임워크**
|
||||
|
||||
`Minitest`는 Ruby에 기본 내장된 테스트 프레임워크로, 별도 설치 없이 사용할 수 있다.
|
||||
|
||||
### **3.1. Minitest로 테스트 작성하기**
|
||||
|
||||
파일: `test_example.rb`
|
||||
|
||||
```ruby
|
||||
require "minitest/autorun"
|
||||
|
||||
class TestExample < Minitest::Test
|
||||
def test_addition
|
||||
assert_equal 4, 2 + 2
|
||||
end
|
||||
|
||||
def test_subtraction
|
||||
assert_equal 3, 5 - 2
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
#### **실행 방법**
|
||||
터미널에서 실행:
|
||||
```sh
|
||||
ruby test_example.rb
|
||||
```
|
||||
|
||||
#### **출력 예시**
|
||||
```
|
||||
Run options: --seed 12345
|
||||
|
||||
# Running:
|
||||
|
||||
..
|
||||
|
||||
Finished in 0.00123s
|
||||
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
||||
```
|
||||
|
||||
`..`은 테스트가 성공했다는 의미다.
|
||||
|
||||
### **3.2. 주요 Minitest 메서드**
|
||||
| 메서드 | 설명 |
|
||||
|--------|----------------------|
|
||||
| `assert` | 조건이 `true`인지 확인 |
|
||||
| `assert_equal(expected, actual)` | 기대값과 실제값 비교 |
|
||||
| `assert_nil(value)` | 값이 `nil`인지 확인 |
|
||||
| `assert_raises(Exception) { block }` | 특정 예외 발생 확인 |
|
||||
|
||||
---
|
||||
|
||||
## **4. RSpec: 가독성이 높은 테스트 프레임워크**
|
||||
|
||||
RSpec은 사람이 읽기 쉬운 **BDD(Behavior-Driven Development)** 스타일을 지원하는 테스트 프레임워크다.
|
||||
|
||||
### **4.1. RSpec 설치**
|
||||
```sh
|
||||
gem install rspec
|
||||
```
|
||||
|
||||
### **4.2. RSpec 테스트 코드 작성**
|
||||
|
||||
파일: `spec/example_spec.rb`
|
||||
|
||||
```ruby
|
||||
require "rspec"
|
||||
|
||||
RSpec.describe "기본 연산" do
|
||||
it "더하기 연산을 수행한다" do
|
||||
expect(2 + 2).to eq(4)
|
||||
end
|
||||
|
||||
it "빼기 연산을 수행한다" do
|
||||
expect(5 - 2).to eq(3)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
#### **실행 방법**
|
||||
```sh
|
||||
rspec spec/example_spec.rb
|
||||
```
|
||||
|
||||
#### **출력 예시**
|
||||
```
|
||||
..
|
||||
|
||||
Finished in 0.0023 seconds
|
||||
2 examples, 0 failures
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **5. 테스트 주도 개발(TDD)과 행동 주도 개발(BDD)**
|
||||
|
||||
### **5.1. 테스트 주도 개발(TDD, Test-Driven Development)**
|
||||
**TDD**는 코드 작성 전에 **테스트를 먼저 작성하는 방식**이다.
|
||||
|
||||
**TDD 주기**
|
||||
1. **테스트 작성** (아직 구현되지 않은 기능에 대한 테스트)
|
||||
2. **테스트 실행** (실패해야 정상)
|
||||
3. **코드 작성** (테스트를 통과하도록 최소한의 코드 작성)
|
||||
4. **리팩토링** (코드 개선 및 최적화)
|
||||
|
||||
### **5.2. 행동 주도 개발(BDD, Behavior-Driven Development)**
|
||||
**BDD**는 TDD를 확장한 개념으로, 테스트를 **사람이 읽기 쉬운 형태**로 작성한다.
|
||||
- RSpec의 `describe`, `it` 문법이 대표적
|
||||
- Cucumber는 자연어(`Given`, `When`, `Then`) 기반 테스트 제공
|
||||
|
||||
---
|
||||
|
||||
## **6. 품질 관리 도구**
|
||||
|
||||
Ruby에서는 테스트뿐만 아니라 **코드 품질을 관리하는 도구**도 많이 사용된다.
|
||||
|
||||
| 도구 | 설명 |
|
||||
|------|-----------------------------|
|
||||
| **Rubocop** | 코드 스타일 검사 및 자동 수정 |
|
||||
| **SimpleCov** | 코드 커버리지 분석 |
|
||||
| **Brakeman** | 보안 취약점 검사 |
|
||||
|
||||
### **6.1. Rubocop: 코드 스타일 검사**
|
||||
|
||||
설치 및 실행:
|
||||
```sh
|
||||
gem install rubocop
|
||||
rubocop example.rb
|
||||
```
|
||||
|
||||
자동 수정 적용:
|
||||
```sh
|
||||
rubocop -A
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **7. 정리**
|
||||
|
||||
| 주제 | 설명 |
|
||||
|------|----------------------------------|
|
||||
| **테스트 프레임워크** | Minitest, RSpec, Cucumber |
|
||||
| **테스트 기법** | 단위 테스트, 통합 테스트, 기능 테스트 |
|
||||
| **TDD** | 테스트를 먼저 작성한 후 코드 구현 |
|
||||
| **BDD** | 사람이 읽기 쉬운 테스트 작성 |
|
||||
| **품질 관리 도구** | Rubocop(스타일 검사), SimpleCov(커버리지), Brakeman(보안) |
|
||||
|
||||
Ruby에서 테스트와 품질 관리를 잘 수행하면 **버그를 사전에 예방하고, 유지보수가 쉬운 코드를 작성할 수 있다.** TDD와 BDD를 적극 활용하면 코드의 신뢰성을 높이고 개발 효율성을 극대화할 수 있다.
|
||||
Reference in New Issue
Block a user