[μ 보 μ²λ¦¬ κΈ°μ¬] μ 2κ³Όλͺ© - μννΈμ¨μ΄ κ°λ°
π μννΈμ¨μ΄ κ°λ° 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 λ§λ€ μ λ ¬λλ μ«μλ€ μ€ κ°μ₯ ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ λ°μ΄μ λ°°μΉ