# Error, Defect, Failure Là Gì? Phân Biệt (ISTQB)

> Đi học CTFL hay đọc syllabus, bạn sẽ gặp ngay ba từ dễ lẫn nhất nghề kiểm thử. 🙂 Để tôi gỡ rối gọn cho bạn: bộ ba error defect failure mô tả ba mắt xích khác nhau của cùng một câu chuyện lỗi phần mềm. Bài này tôi phân biệt rạch ròi error, defect, failure theo đúng chuẩn ISTQB, kèm một bảng tra nhanh và một ví dụ chuỗi nhân quả để bạn không bao giờ dùng nhầm khi đi thi hay đi làm.

- **URL canonical**: https://itlearn.edu.vn/blog/error-defect-failure
- **Published**: 2026-07-01T11:00:00+07:00
- **Modified**: 2026-07-01T12:42:51+07:00
- **Author**: Anh Tuấn
- **Category**: ISTQB Certificate (https://itlearn.edu.vn/blog/cat/istqb)
- **Reading time**: 11 phút
- **Source site**: IT LEARN — Học viện Software Testing tiếng Việt

---

## Error / Defect / Failure — bảng phân biệt nhanh

**Theo ISTQB: error là sai sót của con người (a human action that produces an incorrect result), defect là khiếm khuyết nằm trong sản phẩm (sản phẩm code, tài liệu) do error gây ra, còn failure là biểu hiện sai lệch quan sát được khi phần mềm chạy.** Nói ngắn: error là *nguyên nhân từ người*, defect là *thứ tồn tại trong sản phẩm*, failure là *hiện tượng lúc vận hành*.

Tiêu chí

Error (sai sót)

Defect / Bug (lỗi)

Failure (sự cố)

Bản chất

Hành động/suy nghĩ sai của con người

Khiếm khuyết trong sản phẩm (code, tài liệu)

Hành vi sai lệch so với mong đợi

Xảy ra ở đâu

Trong đầu/ thao tác của người (dev, BA…)

Nằm tĩnh trong sản phẩm đã tạo ra

Khi phần mềm được thực thi (runtime)

Thời điểm

Lúc viết code/ thiết kế/ phân tích

Sau khi error được "cài" vào sản phẩm

Khi chạy đúng nhánh code chứa defect

Ai gặp

Người gây ra

Tester/ reviewer phát hiện qua kiểm thử tĩnh hoặc động

Người dùng/ hệ thống quan sát thấy

Từ đồng nghĩa

mistake

fault, bug

sự cố, hỏng

Ba thuật ngữ này không thay thế cho nhau được. Hiểu sai một mắt xích là bạn vừa mất điểm thi, vừa viết bug report lủng củng khi đi làm. Muốn tra cứu thêm các định nghĩa chuẩn khác, bạn có thể xem [thuật ngữ kiểm thử](/blog/thuat-ngu-kiem-thu/) đầy đủ.

## Error (sai sót của con người) là gì

**Error (đồng nghĩa: mistake) là một hành động của con người tạo ra kết quả không đúng.** Theo ISTQB, error luôn gắn với *con người*, không phải với máy. Lập trình viên hiểu nhầm requirement, BA viết thiếu một quy tắc nghiệp vụ, hay dev gõ nhầm dấu so sánh — tất cả đều là error.

Lấy ví dụ quen thuộc của series này: **Hệ thống đặt phòng họp nội bộ**. Requirement ghi "một phòng không được đặt trùng khung giờ". Bạn dev hiểu nhầm thành "không được trùng *cùng ngày*", thế là viết logic kiểm tra theo ngày thay vì theo khung giờ. Cái hiểu nhầm trong đầu anh ấy chính là **error**.

Error đến từ đâu? Thường là áp lực thời gian, requirement mơ hồ, thiếu kinh nghiệm, hoặc đơn giản là mệt mỏi cuối ngày. Điểm mấu chốt cần nhớ: error mới chỉ là *nguyên nhân gốc*. Bản thân nó chưa làm hỏng gì cả — cho tới khi nó được "đóng gói" vào sản phẩm dưới dạng defect.

## Defect / Bug (lỗi trong sản phẩm) là gì

**Defect (đồng nghĩa: fault, bug) là một khiếm khuyết trong một thành phần hay hệ thống, có thể khiến phần mềm không thực hiện đúng chức năng yêu cầu.** Đây chính là câu trả lời cho thắc mắc *defect là gì* và *lỗi phần mềm là gì*: defect là dấu vết mà error để lại bên trong sản phẩm — thường là trong code, nhưng cũng có thể nằm trong tài liệu thiết kế hay requirement.

Quay lại Hệ thống đặt phòng họp: vì dev hiểu nhầm (error), đoạn code kiểm tra trùng lịch giờ đây so sánh theo ngày thay vì theo khung giờ. **Dòng code sai đó là defect.** Nó nằm yên trong sản phẩm, tĩnh, chờ tới lúc bị kích hoạt.

**Đính chính theo chuẩn ISTQB:** nhiều bài viết tiếng Việt dùng "bug" như đồng nghĩa của "error" — điều này không chính xác. Theo glossary ISTQB, **bug là từ đồng nghĩa của defect (fault)**, tức là lỗi *trong sản phẩm*, KHÔNG phải sai sót *của con người*. Khi nói "tìm thấy một bug", bạn đang nói tới defect.

Defect được phát hiện bằng hai con đường: **kiểm thử tĩnh** (review, phân tích tĩnh — soi defect ngay trong code/tài liệu mà không chạy), và **kiểm thử động** (chạy phần mềm, quan sát failure rồi lần ngược về defect). Một defect sau khi được tester ghi nhận sẽ đi qua một quy trình xử lý; bạn có thể đọc kỹ ở bài [vòng đời của bug](/blog/bug-life-cycle-bug-report) để nắm cách viết và theo dõi defect report.

## Failure (sự cố khi vận hành) là gì

**Failure là sự kiện trong đó một thành phần hoặc hệ thống không thực hiện đúng chức năng yêu cầu trong giới hạn đã định — biểu hiện sai lệch quan sát được khi phần mềm chạy.** Khác với defect (tĩnh, nằm trong sản phẩm), failure chỉ xuất hiện ở **runtime**, khi luồng thực thi đi đúng vào chỗ chứa defect.

Trong Hệ thống đặt phòng họp: một bạn nhân viên đặt phòng A lúc 9–10h, rồi một bạn khác cũng đặt đúng phòng A lúc 9h30. Đáng lẽ hệ thống phải chặn vì trùng khung giờ, nhưng nó lại cho qua (vì code so theo ngày). **Hai lịch chồng nhau hiện ra trên màn hình — đó là failure.** Người dùng nhìn thấy hậu quả; defect thì họ không thấy.

Một lưu ý ISTQB hay hỏi: failure phần lớn do defect, nhưng cũng có thể đến từ **điều kiện môi trường** (nhiễu điện từ, bức xạ, ô nhiễm, từ trường…) tác động lên phần cứng khiến phần mềm chạy sai, dù code hoàn toàn đúng. Trường hợp này hiếm trong ứng dụng web nghiệp vụ, nhưng vẫn nằm trong định nghĩa chuẩn. Để hiểu failure được "bắt" ở những đâu trong quá trình kiểm thử, xem thêm [các loại kiểm thử](/blog/cac-loai-kiem-thu).

## Chuỗi nhân quả Error → Defect → Failure (ví dụ)

Cách dễ nhớ nhất là xâu ba khái niệm thành **một chuỗi nhân quả error defect failure**: con người sai (error) → để lại lỗi trong sản phẩm (defect) → lỗi đó bộc lộ khi chạy (failure). Đây là mạch tư duy ISTQB muốn bạn nắm thật chắc.

Mắt xích

Trong Hệ thống đặt phòng họp

**Error**

Dev hiểu nhầm requirement: chống trùng "theo ngày" thay vì "theo khung giờ"

**Defect**

Đoạn code kiểm tra trùng lịch so sánh sai (theo ngày), nằm tĩnh trong sản phẩm

**Failure**

Khi chạy: hai lịch 9–10h và 9h30 cùng phòng A được chấp nhận, hiển thị chồng nhau

Một điểm cực kỳ quan trọng: **không phải defect nào cũng dẫn tới failure.** Nếu nhánh code chứa defect không bao giờ được thực thi (ví dụ tính năng bị ẩn, hoặc điều kiện kích hoạt không bao giờ xảy ra trong thực tế), thì defect cứ nằm im mà người dùng chẳng gặp sự cố nào. Đó là lý do tester thiết kế test case để *kích hoạt* được nhiều nhánh nhất, buộc defect ẩn phải lộ ra thành failure mà ta quan sát được.

Và đừng nhầm việc của ai: tester **report failure và truy về defect**; còn việc lần ngược tiếp về *error* rồi sửa code (debugging, fixing) là phần của lập trình viên. Hiểu đúng chuỗi này giúp cả nhóm nói chung một ngôn ngữ. Nếu bạn muốn nắm trọn bộ thuật ngữ nền tảng theo chuẩn quốc tế, tham khảo bài [ISTQB là gì](/blog/istqb-la-gi) để biết bức tranh chứng chỉ CTFL.

## Câu hỏi thường gặp

### Error và defect khác nhau thế nào?

Error là sai sót của con người — một hành động hay suy nghĩ sai, ví dụ dev hiểu nhầm requirement. Defect là hậu quả của error nằm lại trong sản phẩm, thường là đoạn code hay tài liệu bị sai. Nói gọn: error là nguyên nhân từ người, defect là khiếm khuyết trong sản phẩm.

### Bug và defect có giống nhau?

Có, theo ISTQB bug là từ đồng nghĩa của defect (và fault). Cả ba đều chỉ khiếm khuyết nằm trong sản phẩm phần mềm. Vì vậy khi ai đó nói "tìm thấy một bug", họ đang nói tới defect. Lưu ý bug KHÔNG đồng nghĩa với error — đây là chỗ rất nhiều người nhầm.

### Failure là gì?

Failure là sự cố quan sát được khi phần mềm chạy: hệ thống không thực hiện đúng chức năng yêu cầu trong giới hạn đã định. Khác với defect tĩnh nằm trong code, failure chỉ xuất hiện ở runtime khi luồng thực thi đi đúng vào chỗ chứa defect, khiến người dùng nhìn thấy hành vi sai lệch.

### Mọi defect đều gây failure?

Không. Nếu nhánh code chứa defect không bao giờ được thực thi, hoặc điều kiện kích hoạt không xảy ra trong thực tế, thì defect cứ nằm im mà không tạo ra failure nào. Đó là lý do tester thiết kế test case để kích hoạt nhiều nhánh, buộc các defect ẩn lộ thành failure quan sát được.

### Theo ISTQB lỗi gọi là gì?

Tùy mắt xích bạn muốn nói. "Lỗi của con người" là error (mistake). "Lỗi trong sản phẩm/code" là defect, đồng nghĩa fault hoặc bug. "Sự cố khi vận hành" là failure. Dùng đúng từ theo ngữ cảnh giúp bug report rõ ràng và tránh mất điểm khi thi CTFL. Bạn muốn nắm chắc glossary và luyện thi CTFL bài bản với người hướng dẫn? Tham khảo khóa [chứng chỉ ISTQB CTFL](/ctfl.html) của IT LEARN nhé.

