βš™οΈ Engineer Information Processing_

[정보 처리 기사] 제 2κ³Όλͺ© - μ†Œν”„νŠΈμ›¨μ–΄ 개발

CodeLoge 2025. 5. 15. 21:28

πŸ‘‰ μ†Œν”„νŠΈμ›¨μ–΄ 개발 2μž₯

 

βœ… ν™”μ΄νŠΈλ°•μŠ€ ν…ŒμŠ€νŠΈ (White Box Test)

• λͺ¨λ“ˆ μ•ˆμ˜ λ‚΄μš©μ„ 직접 λ³Ό 수 있음

• λ‚΄λΆ€μ˜ λ…Όλ¦¬μ μΈ λͺ¨λ“  경둜λ₯Ό ν…ŒμŠ€νŠΈ

• μ†ŒμŠ€ μ½”λ“œμ˜ λͺ¨λ“  λ¬Έμž₯을 ν•œλ²ˆ 이상 μˆ˜ν–‰

 λ…Όλ¦¬μ  경둜 점검 (선택, 반볡 μˆ˜ν–‰)

 

πŸ‘‰ 기초 경둜 검사 (Base Path Test)

: λŒ€ν‘œμ  ν™”μ΄νŠΈλ°•μŠ€ ν…ŒμŠ€νŠΈ 기법

: μΈ‘μ • κ²°κ³ΌλŠ” μ‹€ν–‰ 경둜의 기초λ₯Ό μ •μ˜ν•˜λŠ” μ§€μΉ¨μœΌλ‘œ μ‚¬μš©

πŸ‘‰ μ œμ–΄ ꡬ쑰 검사

: μ‘°κ±΄ 검사 / λ£¨ν”„ 검사 / μžλ£Œ 흐름 검사 (Data Flow Test)

 

βœ… λΈ”λž™λ°•μŠ€ ν…ŒμŠ€νŠΈ (Black Box Test)

λͺ¨λ“ˆ λ‚΄λΆ€μ˜ λ‚΄μš© μ•Œ 수 μ—†μŒ

μ†Œν”„νŠΈμ›¨μ–΄ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ‹€μ‹œλ˜λŠ” ν…ŒμŠ€νŠΈ

SW 각 κΈ°λŠ₯이 μ™„μ „νžˆ μž‘λ™λ˜λŠ” 것을 μž…μ€‘ν•˜λŠ” ν…ŒμŠ€νŠΈ

= κΈ°λŠ₯ ν…ŒμŠ€νŠΈ

 

πŸ‘‰ λ™μΉ˜ λΆ„ν•  검사 / 경계값 뢄석 / 원인-효과 κ·Έλž˜ν”„ 검사 / 비ꡐ 검사 / 였λ₯˜ 예츑 검사

 

βœ… κ°œλ°œλ‹¨κ³„μ— λ”°λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν…ŒμŠ€νŠΈ

 

1️⃣ λ‹¨μœ„ ν…ŒμŠ€νŠΈ (Unit Test)

: μ΅œμ†Œ λ‹¨μœ„ 기반 ν…ŒμŠ€νŠΈ → λͺ¨λ“ˆ(μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ΄λ£¨λŠ” κΈ°λ³Έ λ‹¨μœ„, 독립적 κΈ°λŠ₯)

2️⃣ 톡합 ν…ŒμŠ€νŠΈ (Integration Test)

: λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν›„ λͺ¨λ“ˆμ„ ν†΅ν•©ν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 였λ₯˜ 및 결함을 μ°ΎλŠ” ν…ŒμŠ€νŠΈ 기법

πŸ’‘ ν•˜ν–₯식 (Top-down)

→ μŠ€ν…(Stub) : λͺ¨λ“ˆμ˜ κΈ°λŠ₯을 λ‹¨μˆœνžˆ μˆ˜ν–‰ν•˜λŠ” 도ꡬ = μ‹œν—˜μš© λͺ¨λ“ˆ

πŸ’‘ 상ν–₯식 (Bottom-up)

Cluster와 Driver μ‚¬μš©

Stub λ―Έμ‚¬μš©

3️⃣ μ‹œμŠ€ν…œ ν…ŒμŠ€νŠΈ (System Test)

: 개발된 SW의 컴퓨터 μ‹œμŠ€ν…œ λ‚΄ μž‘μš© μ—¬λΆ€ 점검

: μ‹€μ œ μ‚¬μš© ν™˜κ²½κ³Ό μœ μ‚¬ν•œ ν…ŒμŠ€νŠΈ ν™˜κ²½ → κΈ°λŠ₯적(λΈ”λž™λ°•μŠ€) 및 λΉ„κΈ°λŠ₯적(ν™”μ΄νŠΈλ°•μŠ€) ν…ŒμŠ€νŠΈ ꡬ뢄

4️⃣ 인수 ν…ŒμŠ€νŠΈ (Acceptance Test)

πŸ’‘ μ•ŒνŒŒ ν…ŒμŠ€νŠΈ : ν†΅μ œλœ ν™˜κ²½μ—μ„œ μ‚¬μš©μžκ°€ κ°œλ°œμžμ™€ ν•¨κ»˜ 확인

πŸ’‘ 베타 ν…ŒμŠ€νŠΈ : ν†΅μ œλ˜μ§€ μ•Šμ€ ν™˜κ²½μ—μ„œ 개발자 없이 μ—¬λŸ¬λͺ…μ˜ μ‚¬μš©μžκ°€ 검증

 

βœ… ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ (Test Case)

• 개발된 SWκ°€ μ‚¬μš©μžμ˜ μš”κ΅¬μ‚¬ν•­μ„ 잘 λ°˜μ˜ν–ˆλŠ”μ§€ 확인 μœ„ν•΄ μ„€κ³„λœ μž…λ ₯κ°’(데이터), μ‹€ν–‰ 쑰건, κΈ°λŒ€ κ²°κ³Ό λ“±μœΌλ‘œ κ΅¬μ„±λœ ν…ŒμŠ€νŠΈ ν•­λͺ©μ— λŒ€ν•œ λͺ…μ„Έμ„œ

• ν…ŒμŠ€νŠΈμ˜ λͺ©ν‘œ / λ°©ν–₯ κ²°μ • ν›„ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±

 

βœ… ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μ μš©ν•˜λŠ” ꡬ체적인 절차λ₯Ό λͺ…μ„Έν•œ λ¬Έμ„œ

 

❗️ μœ μ˜μ‚¬ν•­

: μ‹œμŠ€ν…œ / λͺ¨λ“ˆ / ν•­λͺ©λ³„ μ—¬λŸ¬ 개의 μ‹œλ‚˜λ¦¬μ˜€λ‘œ 뢄리해 μž‘μ„±

: μ‚¬μš©μžμ˜ μš”κ΅¬μ‚¬ν•­κ³Ό 섀계 λ¬Έμ„œ 등을 ν† λŒ€λ‘œ μž‘μ„±

 

βœ… ν…ŒμŠ€νŠΈ 였라클

 ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ μ˜¬λ°”λ₯Έμ§€ νŒλ‹¨ν•˜κΈ° μœ„ν•œ κΈ°μ€€

 

βœ”οΈŽ νŠΉμ„± : μ œν•œλœ 검증 / μˆ˜ν•™μ  기법 / μžλ™ν™” κΈ°λŠ₯

βœ”οΈŽ μ’…λ₯˜ : μ°Έ (λͺ¨λ“  였λ₯˜ κ²€μΆœ) / μƒ˜ν”Œλ§ / νœ΄λ¦¬μŠ€ν‹±(μΆ”μ •) / 일관성 (μˆ˜ν–‰ μ „/ν›„ 비ꡐ)

 

βœ… ν…ŒμŠ€νŠΈ ν•˜λ„€μŠ€ (Test Harness)

 

1️⃣ ν…ŒμŠ€νŠΈ λ“œλΌμ΄λ²„ (Test Driver)

: μ‹œν—˜ λŒ€μƒμ˜ ν•˜μœ„ λͺ¨λ“ˆ 호좜 / λͺ¨λ“ˆ ν…ŒμŠ€νŠΈ μˆ˜ν–‰ ν›„μ˜ κ²°κ³Ό λ„μΆœ

→ 상ν–₯식 톡합 ν…ŒμŠ€νŠΈμ—μ„œ μ‚¬μš©

2️⃣ ν…ŒμŠ€νŠΈ μŠ€ν… (Test Stub)

: μ œμ–΄ λͺ¨λ“ˆμ΄ ν˜ΈμΆœν•˜λŠ” ν•˜μœ„ λͺ¨λ“ˆμ˜ μ—­ν•  λ‹¨μˆœ μˆ˜ν–‰

→ ν•˜ν–₯식 ν…ŒμŠ€νŠΈμ— μ‚¬μš©

3️⃣ ν…ŒμŠ€νŠΈ 슈트 (Test Suites)

: μ‹œμŠ€ν…œμ— μ‚¬μš©λ˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ μ§‘ν•© (μ»΄ν¬λ„ŒνŠΈ / λͺ¨λ“ˆ)

4️⃣ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€

: μ‚¬μš©μžμ˜ μš”κ΅¬μ‚¬ν•­ μ€€μˆ˜ μ—¬λΆ€ 확인 λͺ©μ  ν…ŒμŠ€νŠΈ ν•­λͺ© λͺ…μ„Έμ„œ

5️⃣ ν…ŒμŠ€νŠΈ 슀크립트

: μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μ‹€ν–‰ μ ˆμ°¨μ— λŒ€ν•œ λͺ…μ„Έμ„œ

6️⃣ λͺ© 였브젝트 (Mock Object)

: μ‚¬μš©μžμ˜ ν–‰μœ„ 쑰건뢀 μž…λ ₯ μ‹œ κ³„νšλœ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λŠ” 객체

 

βœ… 데이터 톡신을 μ΄μš©ν•œ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ˜μ—­μ—μ„œ λ°μ΄ν„° 포맷을 μ „μ†‘ν•˜κ³ , μˆ˜μ‹  μΈ‘μ—μ„œλŠ” 이λ₯Ό νŒŒμ‹±(Parsing) ν•˜μ—¬ ν•΄μ„ν•˜λŠ” 방식

 

1️⃣ JSON (JavaScript Object Notation)
: 속성-κ°’ 쌍 (Attribute-Value Pairs) μœΌλ‘œ κ΅¬μ„±λœ κ°€λ³κ³  읽기 μ‰¬μš΄ κ°œλ°©ν˜• 포맷
 AJAXμ—μ„œ 주둜 μ‚¬μš©λ¨
→ XML을 λŒ€μ²΄ν•˜λŠ” μ£Όμš” 포맷
 JavaScript 기반의 비동기 톡신 κΈ°μˆ μ— ν™œμš©

2️⃣ XML (eXtensible Markup Language)

: HTML의 λΉ„ν˜Έν™˜μ„±κ³Ό SGML의 λ³΅μž‘μ„±μ„ ν•΄κ²°ν•œ κ΅¬μ‘°ν™”λœ λ¬Έμ„œ 포맷 → λ‹€μ–‘ν•œ μ‹œμŠ€ν…œ κ°„ λ°μ΄ν„° κ΅ν™˜ 및 ν™•μž₯μ„± 확보

 

βœ… μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 검증 도ꡬ

 

1️⃣ xUnit

: Java, C++, .NET λ“± λ‹€μ–‘ν•œ μ–Έμ–΄λ₯Ό μ§€μ›ν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬

2️⃣ STAF

: μ„œλΉ„μŠ€ 호좜, μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš© λ“± λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ 지원

3️⃣ Fitness

: μ›Ή 기반 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 섀계/μ‹€ν–‰/κ²°κ³Ό 확인 μ§€μ›

4️⃣ NTAF

: STAF + Fitness 톡합 도ꡬ (ν˜„μž¬λŠ” νκΈ°λ¨)

5️⃣ Selenium

: λ‹€μ–‘ν•œ λΈŒλΌμš°μ € 및 개발 μ–Έμ–΄λ₯Ό μ§€μ›ν•˜λŠ” μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν…ŒμŠ€νŠΈ 도ꡬ

6️⃣ watir

: Ruby μ–Έμ–΄ 기반의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬

 

βœ… μ•Œκ³ λ¦¬μ¦˜

 

1️⃣ μ„ ν˜• 검색 (Linear Search)

• λ°μ΄ν„°λ₯Ό μ²˜μŒλΆ€ν„° ν•˜λ‚˜μ”© μˆœμ„œλŒ€λ‘œ 비ꡐ

• μ‘°κ±΄μ— λ§žλŠ” 값을 찾을 λ•ŒκΉŒμ§€ λͺ¨λ“  ν•­λͺ© 확인

• μ •렬이 ν•„μš” μ—†μŒ

• κ°„λ‹¨ν•˜μ§€λ§Œ 데이터 양이 λ§Žμ„ 경우 λΉ„νš¨μœ¨μ 

• μ‹œκ°„ λ³΅μž‘λ„: O(n)

2️⃣ μ΄μ§„ 검색 (Binary Search)

• κ²€μƒ‰ 전에 λ°μ΄ν„°κ°€ λ°˜λ“œμ‹œ μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό 함

• λ°μ΄ν„°μ˜ μ€‘간값을 κΈ°μ€€μœΌλ‘œ 탐색 λ²”μœ„λ₯Ό 절반으둜 μ’ν˜€κ°€λ©° 비ꡐ

• λ°˜λ³΅ λ˜λŠ” μž¬κ·€ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„

• μ‹œκ°„ λ³΅μž‘λ„: O(logβ‚‚n)

• μ„ ν˜• 검색보닀 훨씬 빠름 (λŒ€μš©λŸ‰ 데이터에 효과적)

 

βœ… ν•΄μ‹± ν•¨μˆ˜ μ’…λ₯˜

 

1️⃣ μ€‘첩법 (폴딩법)
: ν‚€ 값을 μ—¬λŸ¬ λΆ€λΆ„μœΌλ‘œ λ‚˜λˆˆ ν›„, λ”ν•˜κ±°λ‚˜ XORν•˜μ—¬ ν•΄μ‹œ μ£Όμ†Œ 생성

2️⃣ μ œμ‚°λ²•
: ν‚€ 값을 μ†Œμˆ˜λ‘œ λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό ν•΄μ‹œ μ£Όμ†Œλ‘œ μ‚¬μš©

3️⃣ κΈ°μˆ˜ λ³€ν™˜λ²•
: ν‚€ 값을 λ‹€λ₯Έ μ§„μˆ˜λ‘œ λ³€ν™˜ ν›„, 자릿수 μ ˆλ‹¨ν•˜μ—¬ μ£Όμ†Œ λ²”μœ„μ— 맞좀

4️⃣ μˆ«μž 뢄석법
: 자주 λ“±μž₯ν•˜λŠ” 숫자 자릿수λ₯Ό 뢄석해 κ³ λ₯Έ μœ„μΉ˜λ₯Ό μ£Όμ†Œλ‘œ 선택

5️⃣ κΈ°νƒ€ 방식
: μ œκ³±λ²•, λ¬΄μž‘μœ„λ²• λ“± λ‹€μ–‘ν•œ λ³€ν˜• 기법 쑴재

 

βœ… μ•Œκ³ λ¦¬μ¦˜ 섀계 기법

 

1️⃣ Divide and Conquer (λΆ„ν•  정볡)
: 문제λ₯Ό μ΅œμ†Œ λ‹¨μœ„λ‘œ λ‚˜λˆˆ λ’€ 각각 ν•΄κ²°ν•˜κ³  병합

2️⃣ Dynamic Programming (동적 κ³„νšλ²•)
: 더 μž‘μ€ 문제의 ν•΄λ₯Ό μ €μž₯ν•˜κ³  μž¬ν™œμš© → 계산 쀑볡 μ΅œμ†Œν™”

3️⃣ Greedy (νƒμš• μ•Œκ³ λ¦¬μ¦˜)
: λ§€ λ‹¨κ³„μ—μ„œ κ°€μž₯ 졜적의 선택을 반볡 → 전체 졜적 해법 μΆ”μ •

4️⃣ Backtracking (λ°±νŠΈλž˜ν‚Ή)
: κ°€λŠ₯ν•œ λͺ¨λ“  쑰합을 μ‹œλ„ → 쑰건 뢈일치 μ‹œ λ˜λŒμ•„κ°€μ„œ λ‹€λ₯Έ 경우 탐색

 

βœ… 톡합 개발 ν™˜κ²½ (IDE: Integrated Development Environment)

 

1️⃣ κ°œλ°œμ— ν•„μš”ν•œ λ‹€μ–‘ν•œ νˆ΄μ„ ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 톡합 제곡

• Compile
: κ³ κΈ‰ μ–Έμ–΄(μžμ—°μ–΄ μˆ˜μ€€)λ₯Ό μ €κΈ‰ μ–Έμ–΄(기계어)둜 λ³€ν™˜ν•˜λŠ” κ³Όμ •

• Debugging
: ν”„λ‘œκ·Έλž¨ λ‚΄ 버그λ₯Ό νƒμ§€ν•˜κ³  μˆ˜μ •ν•˜λŠ” μž‘μ—…

• Deployment
: 개발이 μ™„λ£Œλœ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ΅œμ’… μ‚¬μš©μžμ—κ²Œ λ°°ν¬ν•˜λŠ” 단계

 

2️⃣ λŒ€ν‘œ IDE 도ꡬ

• Eclipse (IBM)

• Visual Studio (Microsoft)

• Xcode (Apple)

• Android Studio (Google)

 

βœ… μΈμŠ€νŽ™μ…˜ (Inspection)

 

1️⃣ ν˜•식적 κ²€ν†  절차λ₯Ό 톡해 μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆ ν–₯상 → 였λ₯˜ 발견 및 예방 λͺ©μ 

πŸ‘‰ μ§„ν–‰ 단계 : κ³„νš → 사전 ꡐ윑 → μ€€λΉ„ → μΈμŠ€νŽ™μ…˜ 회의 → μˆ˜μ • → 후속 쑰치

 

βœ… λ¦¬νŒ©ν† λ§ (Refactoring)

 

1️⃣ κ²‰μœΌλ‘œ λ³΄μ΄λŠ” λ™μž‘μ€ μœ μ§€ν•œ 채, λ‚΄λΆ€ ꡬ쑰λ₯Ό λ³€κ²½ → μ½”λ“œ 가독성 ν–₯상, μœ μ§€λ³΄μˆ˜ λΉ„μš© 절감, κ°œλ°œ 효율 증가

 

βœ… μ†Œν”„νŠΈμ›¨μ–΄ κ΅¬ν˜„ 단계

 

πŸ‘‰ μ½”λ”© μž‘μ—… κ³„νš → μ½”λ”© μ§„ν–‰ → 컴파일  →μ½”λ“œ ν…ŒμŠ€νŠΈ

 

βœ… μ†Œν”„νŠΈμ›¨μ–΄ μ œν’ˆ νŒ¨ν‚€μ§• μ‹œ 고렀사항

 

1️⃣ λ³΄μ•ˆμ„± 확보
2️⃣ μ‚¬μš©μž νŽΈμ˜μ„±
3️⃣ μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜ 적용
4️⃣ μ΄κΈ°μ’… μ‹œμŠ€ν…œ κ°„μ˜ 연동 κ³ λ €

 

βœ… μΈν„°νŽ˜μ΄μŠ€ λ³΄μ•ˆ μ†”λ£¨μ…˜ (λ„€νŠΈμ›Œν¬ μ˜μ—­)

 

1️⃣ IPSec

2️⃣ SSL (Secure Sockets Layer)

3️⃣S-HTTP (Secure HyperText Transfer Protocol)

→ 데이터 톡신 μ‹œ κΈ°λ°€μ„± / 무결성 / 인증 ν™•보λ₯Ό μœ„ν•œ λ³΄μ•ˆ 기술

 

βœ… 트리 순회 방법

 

1️⃣ μ „μœ„ 순회 = Pre-order

2️⃣ μ€‘μœ„ 순회 = In-order

3️⃣ ν›„μœ„ 순회 = Post-order

 

βœ… μ •λ ¬ 방법

 

1️⃣ 선택 μ •λ ¬ (Selection Sort)

: μ΅œμ†Œκ°’μ„ μ°Ύμ•„ 첫번째 μˆ«μžμ™€ μœ„μΉ˜ κ΅ν™˜, 이후 μ •λ ¬λœ 값을 μ œμ™Έν•œ μ΅œμ†Œ 숫자λ₯Ό μ •λ ¬λ˜μ§€ μ•Šμ€ 숫자 쀑 첫번째 μˆ«μžμ™€ λ‹€μ‹œ μœ„μΉ˜ κ΅ν™˜ → 반볡

2️⃣ μ‚½μž… μ •λ ¬ (Insert Sort)

: λ‘λ²ˆμ§Έ μˆ«μžμ™€ 첫번째 숫자 λΉ„κ΅ν•˜μ—¬ 크기 순으둜 μ •λ ¬, 이후 3번째 숫자λ₯Ό μ•žμ„œ μ •λ ¬λœ μˆ«μžλ“€ 사이에 크기 μˆœμ— 맞게 μž¬μ •λ ¬ → 반볡 

3️⃣ 버블 μ •λ ¬ (Bubble Sort)

: μ™Όμͺ½λΆ€ν„° μΈμ ‘ν•œ 두 숫자 κ°„ 크기 λΉ„κ΅ν•˜μ—¬ μœ„μΉ˜ κ΅ν™˜ → 1 Pass λ§ˆλ‹€ μ •λ ¬λ˜λŠ” μˆ«μžλ“€ 쀑 κ°€μž₯ 큰 숫자λ₯Ό 였λ₯Έμͺ½μœΌλ‘œ λ°€μ–΄μ„œ 배치