Software Testing là gì ?
Duy Văn | 22/11/2024
Khái niệm
Software Testing nếu nói về khá niệm thì có vô số cách để mô tả, khác với câu chuyện ABC là gì?, kiểm thử phần mềm tồn tại ở dạng ý tưởng chứ không phải khái niệm cụ thể, mỗi người diễn đạt một kiểu, nhưng nhìn chung nó là
| Eng: Software Testing is the process of evaluating a software product to ensure it meets the specified requirements and functions as intended by the customer. | Tiếng Việt: Kiểm thử phần mềm là một quá trình đánh giá một sản phẩm phần mềm để đảm bảo nó đáp ứng các yêu cầu cụ thể và hoạt động như mong đợi của khách hàng. |
Typical question: What is software testing? - Software Testing là gì?
Mục tiêu
Có một cách diễn đạt mục tiêu của kiểm thử như sau:
Mục tiêu của kiểm thử phần mềm là tìm ra lỗi trong sản phẩm phần mềm, đảm bảo rằng sản phẩm hoạt động đúng như mong đợi và đáp ứng được yêu cầu của khách hàng.
Cách diễn đạt này vừa đúng…nhưng lại cũng vừa sai. Vấn đề ở chỗ, nếu giờ được hỏi:
Ừ, nhưng tại sao lại phải cần nó không có lỗi hay hoạt động đúng?
Nếu bạn trả lời là : Vì khách hàng yêu cầu như vậy, thì sẽ lại bị xoay lại Ừ nhưng tại sao khách hàng cần như vậy ?
Hiểu kiểm thử phần mềm không phải chỉ là hiểu mình đang làm gì, mà mình phải biết tại sao mình làm nó, và tại sao nó lại cần thiết. Đúng
| Mục tiêu của kiểm thử phần mềm là để tìm ra lỗi, để rồi khi chúng được sửa, sản phẩm hoạt động đúng như mong đợi và đáp ứng được yêu cầu của khách hàng. Và lý do chúng ta cần kiểm thử là để giảm rủi ro thất bại của sản phẩm phần mềm khi nó đi vào hoạt động. | The goal of software testing is to find defects, so that when they are fixed, the product works as expected and meets the requirements of the customer. And the reason we need to test is to reduce the risk of failure of the software product when it goes into operation. |
Ở bên trên là một cách hiểu đầy đủ về mục tiêu của kiểm thử phàn mềm, đương nhiên, mỗi người nghĩ một kiểu, nhưng ý tưởng chính vẫn là như vậy.
Để hiểu rủi ro thất bại của sản phẩm phần mềm, bạn có thể đọc thêm bài viết Error, Bugs, Failure
Typical question: Why do we perform software testing? - Tại sao chúng ta thực hiện kiểm thử phần mềm?
Ai sẽ làm kiểm thử
Trong một dự án phần mềm, có 3 người chính sẽ tham gia vào việc kiểm thử:
- Tester: Là người chuyên nghiệp về kiểm thử, họ sẽ thực hiện các bước kiểm thử, tạo ra các báo cáo kiểm thử và đánh giá chất lượng của sản phẩm phần mềm.
- Developer: Là người viết mã nguồn, họ sẽ thực hiện kiểm thử trên các đơn vị của sản phẩm, tức là kiểm thử những đoạn code mà họ viết ra.
- Customer: Là người sử dụng sản phẩm phần mềm, họ sẽ thực hiện kiểm thử chấp nhận, tức là kiểm thử sản phẩm phần mềm đã hoàn thiện.
Mình sẽ không đi quá sâu vào vấn đề này, vì nó sẽ là nội dung của một bài viết khác, nêu nó ra từ sớm sẽ khiến các bạn rơi vào mông lung. Để hiểu rõ hơn về các công đoạn kiểm thử, bạn có thể đọc bài viết Testing Levels
Tại sao lại cần Tester
Có 3 vấn đề khiến cho việc sử dụng Tester chuyên nghiệp là cần thiết, và tốt hơn nhiều so với việc Developer tự kiểm thử:
- Thứ nhất: Nếu Dev cũng tự thực hiện kiểm thử, tức là công việc của dev bây giờ sẽ bao gồm việc lập trình sản phẩm, kiểm thử code, và kiểm thử sản phẩm, rồi sửa cả bugs. Làm quá nhiều, quá tải.
Vậy nếu thuê thêm Dev, trong team Dev sẽ có nửa đi dev và nửa đi test thì sao ? Ơ ! thế thì khác gì đi thuê Tester riêng đâu?
Ờ HA 😂
Thứ hai: Thời buổi bây giờ thì kỹ năng của Tester rất đặc thù, một sinh viên công nghệ thông tin định hướng Kỹ sư phần mềm khi ra trường sẽ không thể thực hiện kiểm thử như một Tester ngay, mà cần thời gian và tài nguyên để training. Các Tester đời đầu chính là các Dev, nhưng đá sang Testing và đã phải học và tích luỹ rất nhiều.
Thứ ba: Mindset của Dev và Tester là khác nhau. Dev có mindset đi xây “builder”, còn Tester có mindset đi phá “breaker”. Điều này giúp cho Tester nhìn nhận sản phẩm phần mềm từ một góc độ khác, giúp cho việc tìm ra lỗi dễ dàng hơn.
Cùng là một người, có làm được cả hai, có cả hai mindset được không? Có, nhưng mệt, tại sao phải thế?
Typical question: Who performs testing? - Ai thực hiện kiểm thử?
Typical question: Why do we need testers when developers can do testing on their own? - Tại sao chúng ta cần Tester khi Developer có thể tự kiểm thử?
Kiểm thử ra làm sao?
Kiểm thử cần có quy trình của nó, cực kỳ quy củ để giúp cho công đoạn kiểm thử đạt hiệu quả cao nhất.
Bản thân kiểm thử có quy trình, nhưng nó cũng là một công đoạn của một quy trình lớn hơn, chính là quy trình phát triển phần mềm. Bộ ba bài viết SDLC, Testing Levels và Test Process sẽ giúp bạn hiểu rõ hơn về quy trình kiểm thử.
Typical question: Why do we need to follow a process in testing? - Tại sao chúng ta cần phải tuân thủ một quy trình trong kiểm thử?
Các nguyên tắc kiểm thử
Các nguyên tắc kiểm thử hay còn gọi là Testing Principles, là các nguyên tắc mang tính “mindset”, khi làm kiểm thử thì luôn cần giữ những điều này trong đầu:
| VI | Eng |
|---|---|
| 1. Kiểm thử sẽ cho thấy sự tồn tại của Bug, nhưng không thấy bug không phản ánh tính chính xác của sản phẩm phần mềm | Testing shows the presence of bug, but the lack of bug does not indicate the correctness of the software |
| 2. Kiểm thử toàn diện không khả thi do nỗ lực cần đổ vào quá lớn | Exhausive testing is impossible due to the amount of effort needed |
| 3. Kiểm thử càng sớm càng tốt để phát hiện và loại bỏ bug càng sớm càng tốt khi nó còn rẻ Chi phí để sửa bug sẽ đội lên theo thời gian khi nó tiến càng sâu vào các giai đoạn phát triển sau | Early testing should be done to find and remove bug as soon as possible when it is stil cheap |
| 4. Bug có xu hướng xuất hiện thường xuyên và tập trung ở các phần phức tạp của phần mềm | Clustering defect: Bug tends to appear more frequently and focused in more complex part of the software |
| 5. Nghịch lý thuốc côn trùng: Một bộ testcase không thể phát hiện được thêm bug | Pesticide paradox: A testcase can’t find any more bug |
| 6. Kiểm thử phụ thuộc vào bối cảnh | Testing is context dependent |
| 7. Mơ tưởng hão huyền về không có bug: Kiểm thử một phần mềm không theo đúng yêu cầu không giúp làm nó tốt hơn | Absence of error fallacy: Testing a software that doesn’t satisfy requirement does not help making it better |