Negative testing
Khi chúng ta tạo ra một sản phẩm mới, ta cần đảm bảo rằng tất cả những yêu cầu đã được đáp ứng, khách hàng có thể nhận được sản phẩm đúng như mình mong muốn. Nhưng như thế là đã đủ chưa? Tất nhiên là chưa và điều muốn đề cập ở đây chính là vai trò của tester! Tester thực hiện testing để tìm ra sự ...
Khi chúng ta tạo ra một sản phẩm mới, ta cần đảm bảo rằng tất cả những yêu cầu đã được đáp ứng, khách hàng có thể nhận được sản phẩm đúng như mình mong muốn. Nhưng như thế là đã đủ chưa? Tất nhiên là chưa và điều muốn đề cập ở đây chính là vai trò của tester! Tester thực hiện testing để tìm ra sự tồn tại của lỗi trong phần mềm. Mục tiêu rõ ràng nhất của tester là đảm bảo phần mềm không có lỗi, để làm được điều đó ta thực hiện positive và negative testing. Positive testing không có gì hơn ngoài việc sử dụng các dữ liệu và tham số nằm trong kì vọng của chúng ta để kiểm thử.
Bài viết này sẽ đề cập đến những vấn đề sau: 1. Negative testing là gì? 2. Negative testing có thực sự quan trọng? 3. Thực hiện Negative testing như thế nào? 4. Các kĩ thuật testing sử dụng trong Negative testing 5. Ưu và nhược điểm của Nagative testing
Khi bạn thực hiện positve testing, bạn chỉ cần đảm bảo rằng hệ thống đã làm việc trong những điều kiện bình thường nhưng điều này không thể đảm bảo rằng hệ thống của bạn đã hoàn thành xong 100%. Chúng ta cần đảm bảo rằng hệ thống của chúng ta có thể xử lý được trong những điều kiện không mong muốn (Unexpected condition). Kiểm thử hệ thống trong những điều kiện không mong muốn được gọi là Negative tesitng.
Điều kiện không mong muốn có thể là bất cứ điều gì, từ data type bị lỗi cho đến những lần tấn công lớn vào hệ thống... Do đó, cần phải đảm bản rằng hệ thống có thể xử lý tốt được những tình huống như thế.
Ví dụ về negative testing Hãy xem xét một ví dụ về tháng máy. Trong ví dụ này có thể coi việc "bấm vào Floor Number để thang máy đi đến tầng tương ứng" là requirement của chúng ta. Và bây giờ hãy xem Negative scenario cho ví dụ trên:
Điều quan trọng là chúng ta không thể đảm bảo rằng những trường hợp negative trên sẽ không bao giờ xảy ra, do đó cần phải kiểm thử với nó. Xem xét trường hợp cân nặng trong thang máy vượt quá mức cho phép được đưa vào kiểm thử. Nếu thang máy hoạt động không bình thường khi bị vượt quá trọng lượng cho phép sẽ gây ảnh hưởng lớn đến độ tin cậy của sản phẩm và có khả năng gây nguy hiểm cho người sử dụng. Điều này giải thích tại sao Negative tesing lại cần thiết như vậy
Trong phần mềm, những trường hợp như trên được đưa vào rất nhiều khi kiểm thử. Khi thực hiện negative testing, chúng ta đi chệch qui trình hoạt động bình thường của phần mềm. Ta hãy đi qua một ví dụ đăng kí dưới đây:
Như đã nói ở trên, ta cần đảm bảo rằng những case negative hệ thống sẽ hoạt động một cách đúng đắn. Ví dụ như ai đó cố nhập những chữ cái trong một trường chỉ cho phép nhập số --> hệ thống không thể hoạt động khi nhận được những tham số không phải là số và bị crash. Hoặc nếu ai đó đang tấn công SQL injection và xóa tất cả các dữ liệu trong database... Đôi khi có những hậu quả rất nghiêm trọng mà ta không thể lường trước được.
Kể từ khi kiểm thử là một công việc mất nhiều thời gian, việc xác định 'what', 'how' and 'how much' để test là rất cần thiết. Chúng ta cần lựa chọn một cách khôn ngoan khi nào thì thực hiện negative testing, khi nào thì không. Vậy hãy cùng xem tâm quan trọng của negative testing dưới cái nhìn của nhà phát triển phần mềm và của khách hàng.
2.1 Cái nhìn của nhà phát triển:
Trách nhiệm của nhà phát triển là cung cấp những sản phẩm chất lượng đến tay người dùng. Để đạt được điều đó, một việc nhất thiết phải thực hiện đó là negative testing. Có thể chúng ta không thể xây dựng được một hệ thống đảm bảo 100% không có lỗi, nhưng chúng ta có thể đảm bảo rằng chúng ta đã làm mọi thứ có thể để ngăn chặn lỗi. Để làm được việc đó chúng ta nên thực hiện negative testing Một yếu tố cần xem xét nữa đó là ảnh hưởng phía sau đó. Giả sử bạn tạo ra một hệ thống thương mại điện tử và hoàn thành xong positive testing, mọi thứ có vẻ rất ổn. Nhưng điều gì xảy ra nếu hệ thống đó bị tấn công SQL injection và xóa toàn bộ dữ liệu? Đó sẽ là một cuộc tấn công dữ liệu gây ra hiệu quả rất nghiêm trọng. Ta cần thực hiện nagative testing để phòng chống việc hacking hệ thống, không để kẻ tấn công có cơ hội phá hủy hệ thống. Hacking là một phần quan trọng trong nagative testing
2.2 Cái nhìn của khách hàng:
Khách hàng luôn mong muốn nhận được một sản phẩm không còn lỗ hổng nào, do đó cần phải thực hiện negative testing. Nếu là những hệ thống "nhạy cảm" như về kinh tế, ngân hàng, thương mại điện tử thì security và negative testing là rất cần thiết Chỉ có một mối lo ngại về negative testing đối với khách hàng đó là chi phí. Nhưng một khi những ảnh hưởng đã được phân tích kĩ lưỡng, khách hàng sẽ đưa ra được quyết định sẽ thực hiện negative hay không
Để thực hiện negative testing ta cần phải xem xét tất cả các trường hợp có thể, đưa ra các trường hợp không bình thường. Ví dụ: nếu chúng ta có trường nhập email, hãy nghĩ đến trường hợp nhập các đầu vào không phải là định dạng email hoặc trong trường hợp test chức năng upload ảnh, ta cần kiểm tra với các loại file có thể.
Trong khi thực hiện negative testing ta cũng cần phải xếp độ ưu tiên cho các đầu vào, có rất nhiều case khả thi. Ví dụ: trường nhập tên ảnh chỉ cho phép nhập với '.png' , ta cần kiểm tra với nhiều định dạng khác như 'jpeg', 'xml', 'xls'. Vì có rất nhiều case khả thi nên ta cần xếp độ ưu tiên dựa trên ảnh hưởng của nó đối với hệ thống. Việc xếp độ ưu tiên giúp ta tiết kiệm chi phí và thời gian.
4.1 Boundary value analysis
Trong kĩ thuật này tester sẽ xác định các giá trị biên, chính là các giá trị ở biên các phân vùng. Các phân vùng được chia làm 2 loại là valid và invalid. Nếu sử dụng các giá trị nằm ngoài vùng biên để kiểm thử ta gọi là negative testing.
Ví dụ: Một hệ thống chỉ accept các input từ 0 đến 10, áp dụng kĩ thuật trên ta có thể xác định được các giá trị có thể đưa vào negative testing như sau:
4.2 Equivalence Partitioning
Equivalence Partitioning phân vùng tập các điều kiện test vào các nhóm mà các giá trị trong nhóm đó trả về một kết quả như nhau khi đưa vào kiểm thử. Nếu sử dụng các giá trị trong vùng valid để kiểm thử ta gọi là positive testing và ngược lại nếu sử dụng các giá trị trong vùng invalid để kiểm thử ta gọi là negative testing.
5.1 Ưu điểm:
- Như tất cả chúng ta đều biết negative testing là rất quan trọng để đảm bảo chất lượng sản phẩm. Một sản phẩm chất lượng tốt là một sản phẩm không còn lỗ hổng.
- Thực hiện negative testing đảm bảo rằng tất cả các trường hợp có thể được cover. Một cách cố ý hay không cố ý, những trường hợp negative vẫn có thể xảy ra trong thực tế. Do đó để đảm bảo được các trường hợp đã được cover, ta cần thực hiện negative testing song song với positive testing
- Negative testing giúp khách hàng có được sự tin tưởng, tự tin về sản phẩm trước khi đưa ra thị trường.
5.2 Nhược điểm:
- Nhiều khi thực hiện Negative testing gây mất thời gian và sức lực trong khi nó không thực sự cần thiết. Ví dụ: Nếu một ứng dụng được tạo cho một cá nhân nào đó dùng, ta không cần phải thử nghiệm trường hợp 100 user cùng lúc đăng nhập vào hệ thống. Do đó chọn điều kiện để thực hiện negative testing là rất quan trọng.
- Yêu cầu tester phải có kĩ năng và kinh nghiệm khi thực hiện negative testing
- Negative testing đôi khi lại là một việc gây delay thời gian release và phải thêm chi phí
- Dành nhiều effort cho negative testing đôi khi gây tốn thời gian và sức lực, giảm thời gian và effort cho positive testing.
Bài viết được tham khảo từ các nguồn sau: http://www.guru99.com/positive-vs-negative-testing.html http://www.guru99.com/negative-testing.html