Mùi như một câu hỏi bài tập về nhà.
Là thử nghiệm trong lĩnh vực phần mềm cần thiết?
Vâng. Chắc chắn rồi. Ở tất cả các cấp. Ngoài một vài lĩnh vực chuyên ngành, chúng ta chưa ở giai đoạn mà chúng ta có thể toán học chứng minh một cách mã của chúng tôi là đúng với các lỗi cụ thể (ít nhất là không trong khung thời gian hợp lý), vì vậy chúng tôi phải ném đá vào đó để xem và nơi nó phá vỡ.
Nếu chúng ta tạo ra một phần mềm hết sức cẩn thận thì tại sao chúng ta phải thử nghiệm?
Kiểm tra không chỉ là tìm lỗi mã hóa. Đó cũng là về việc đảm bảo rằng bạn đã đáp ứng tất cả các yêu cầu của bạn và hệ thống tổng thể hoạt động như mong đợi. Nếu tôi có một yêu cầu rằng một giao dịch thất bại phải trả về một mã lỗi cụ thể, thì tôi cần phải viết một bài kiểm tra để xác minh cả hai chức năng đó tồn tại và nó hoạt động chính xác.
Và tất cả những gì giả định rằng đặc điểm kỹ thuật và thiết kế là hoàn chỉnh, chính xác và nhất quán trong nội bộ, thường không phải là trường hợp. Ngay cả khi bạn đáp ứng các đặc điểm kỹ thuật của chữ cái và theo thiết kế xuống dấu chấm và dấu chấm phẩy cuối cùng, nếu thông số kỹ thuật hoặc thiết kế xấu, thì sẽ có vấn đề tại thời điểm tích hợp. Thông thường, kiểm tra hệ thống hoặc tích hợp là khi bạn phát hiện ra rằng bản thân thông số kỹ thuật có lỗi và cần được sửa đổi (xem câu chuyện chiến tranh dưới đây).
Sau khi thử nghiệm, chúng tôi có thể chắc chắn rằng chúng tôi đã đạt được mục tiêu này (sản phẩm / phần mềm hoạt động như dự định) bởi vì chúng tôi đã thực hiện thử nghiệm cho nó? Có thể không?
Không, không đến 100%. Chúng tôi không thể kiểm tra mọi kết hợp có thể hiểu được của các đầu vào hoặc đường dẫn thực hiện trong bất kỳ mã nào đơn giản nhất. Chúng tôi không thể giải thích cho tất cả các yếu tố môi trường. Chúng tôi không thể tưởng tượng tất cả các chế độ thất bại có thể.
Chúng tôi có thể kiểm tra đến một điểm mà chúng tôi hợp lý chắc chắn không có bất kỳ vấn đề lớn. Một lần nữa, đây là lý do tại sao chúng ta cần kiểm tra ở tất cả các cấp. Viết một bộ kiểm tra để đảm bảo mã của bạn xử lý đúng các điều kiện cạnh (đầu vào xấu, kết quả không mong muốn, ngoại lệ, v.v.). Kiểm tra đơn vị để xác minh rằng mã của bạn đáp ứng yêu cầu của nó. Kiểm tra hệ thống để xác minh xử lý đầu cuối. Kiểm tra tích hợp để xác minh rằng tất cả các thành phần nói chuyện với nhau một cách chính xác. Kiểm tra khả năng sử dụng để đảm bảo rằng toàn bộ hoạt động theo cách mà khách hàng không muốn bắn bạn.
Kịch bản trong thế giới thực - Tôi đang làm việc trên một hệ thống back-end thỉnh thoảng gửi các bản cập nhật cho dịch vụ GUI để hiển thị trong một bảng trên màn hình. Trong dự án, một yêu cầu đã được thêm vào để thêm tính năng lọc vào màn hình (ví dụ: toán tử có thể chọn hiển thị một tập hợp con của các mục trong bảng). Thiết kế sai lầm # 1 - lọc nên đã được thực hiện bởi các dịch vụ GUI (Tôi có kỳ lạ này, khái niệm sưu tầm đồ cổ mà chức năng quản lý màn hình nên là trách nhiệm của các phần mềm quản lý màn hình), nhưng do chính trị và sự bất lực của tôi để nhận ra vấn đề trước khi chúng trở nên vấn đề , yêu cầu đó đã được đặt trên dịch vụ back-end. Chà, không sao, không vấn đề gì, tôi có thể làm điều đó. Lọc thay đổi trạng thái, tôi nhận được một tin nhắn và sau đó tôi gửi tin nhắn tạo hoặc xóa chomỗi hàng trong bảng , vì đó là cách giao diện hoạt động (lỗi thiết kế số 2 - không có cách nào để gửi cập nhật cho nhiều hàng trong một tin nhắn; chúng tôi thậm chí không thể gửi một tin nhắn "xóa" hoặc "xóa" để xóa toàn bộ bảng).
Vâng, mọi thứ hoạt động tốt trong quá trình phát triển; kiểm tra đơn vị, hệ thống và tích hợp cho thấy rằng tôi gửi đúng thông tin và xử lý các thay đổi bộ lọc một cách chính xác. Sau đó, chúng tôi nhận được để kiểm tra khả năng sử dụng, và toàn bộ điều này rơi xuống khó khăn , bởi vì khối lượng dữ liệu là quá nhiều. Độ trễ mạng giữa dịch vụ phụ trợ của tôi và GUI là theo thứ tự từ 15 đến 0,25 giây. Không tệ nếu bạn chỉ phải gửi thông tin cập nhật cho hàng tá hàng. Rất nguy hiểm khi bạn phải gửi thông tin cập nhật cho vài trăm. Chúng tôi bắt đầu nhận được báo cáo lỗi rằng GUI đã bị đóng băng sau khi thay đổi trạng thái bộ lọc; tốt, không, những gì đang xảy ra là nó đã diễn ra trong vài phút khi cập nhật màn hình vì giao thức tin nhắn cập nhật một hàng đầu không thể xử lý một kịch bản trong thế giới thực.
Lưu ý rằng tất cả những điều đó có thể đã và nên được dự đoán bởi tất cả mọi người từ nhà thầu chính cho đến khi tôi già đi nếu chúng tôi bận tâm làm ngay cả những phân tích cơ bản nhất trước đó. Biện pháp bảo vệ duy nhất tôi sẽ đưa ra là chúng tôi đã kết thúc năm thứ hai của một dự án kéo dài sáu tháng sẽ bị hủy gần như ngay lập tức sau khi giao hàng, và tất cả chúng tôi đều tuyệt vọng khi nhìn thấy mặt sau của nó.
Điều này đưa chúng ta đến lý do cuối cùng để kiểm tra - CYA. Các dự án trong thế giới thực thất bại vì nhiều lý do, nhiều trong số đó là chính trị, và không phải ai cũng hành động một cách thiện chí khi mọi thứ đi sai. Ngón tay bị chỉ, những lời buộc tội được đưa ra, và vào cuối ngày, bạn cần có thể chỉ ra một bản ghi cho thấy rằng ít nhất công cụ của bạn hoạt động như mong muốn.
If we create a software with care in during its development period then why should we go for Test?
- bởi vì không có vấn đề gì, ngay cả lập trình viên lành nghề nhất cũng mắc lỗi.