CHƯƠNG 1: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM VÀ SELENIUM 1. Khái niệm phần mềm Phần mềm máy tính (Computer Software) hay gọi tắt là Phần mềm (Software) là một tập hợp những câu lệnh hoặc chỉ thị (Instruction) được viết bằng một hoặc nhiều ngôn ngữ lập trình theo một trật tự xác định, và các dữ liệu hay tài liệu liên quan nhằm tự động thực hiện một số nhiệm vụ hay chức năng hoặc giải quyết một vấn đề cụ thể nào đó. Phần mềm thực hiện các chức năng của nó bằng cách gửi các chỉ thị trực tiếp đến phần cứng (hay phần cứng máy tính, Computer Hardware) hoặc bằng cách cung cấp dữ liệu để phục vụ các chương trình hay phần mềm khác. Quy trình phát triển phần mềm Quy trình phát triển phần mềm là một cấu trúc bao gồm tập hợp các thao tác và các kết quả tương quan sử dụng trong việc phát triển để sản xuất ra một sản phẩm phần mềm.
Nhìn chung, một quy trình phát triển phần mềm bao gồm các giai đoạn [7] như sau: - Giải pháp, yêu cầu: Thực hiện khảo sát chi tiết yêu cầu của khách hàng để từ đó tổng hợp vào tài liệu giải pháp. Tài liệu này phải mô tả đầy đủ các yêu cầu về chức năng, phi chức năng và giao diện. Kết quả đầu ra là Tài liệu đặc tả yêu cầu. - Thiết kế: Thực hiện thiết kế và tổng hợp vào tài liệu thiết kế.
Kết quả là tài liệu thiết kế tổng thể, thiết kế module, thiết kế cơ sở dữ liệu. - Lập trình: Lập trình viên thực hiện lập trình dựa trên tài liệu Giải pháp và Thiết kế đã được phê duyệt. Kết quả đầu ra là Source code. - Kiểm thử: Tester tạo kịch bản kiểm thử (test case) theo tài liệu đặc tả yêu cầu, thực hiện kiểm thử và cập nhật kết quả vào kịch bản kiểm thử, log lỗi trên các tool quản lý lỗi.
Kết quả đầu ra là Test case, lỗi trên hệ thống quản lý lỗi. - Triển khai: Triển khai sản phẩm cho khách hàng. Kết quả đẩu ra là biên bản triển khai với khách hàng. Lỗi phần mềm Lỗi phần mềm là một lỗi, lỗ hổng, thất bại, hoặc có lỗi trong một chương trình máy tính hoặc hệ thống đó là nguyên nhân nó tạo ra kết quả không chính xác hoặc không mong muốn, hoặc vận hành theo cách không được định hướng trước.
Lỗi phần mềm thường xuất hiện ở các hình thức sau đây: Bug: Lỗi trong một module hoặc hệ thống mà nó không thực hiện đúng chức năng theo yêu cầu. Defect: Lỗi trong quá trình phát triển hoặc lỗi logic làm cho chương trình hoạt động sai yêu cầu đề ra. Sai (Fault): Khi phần mềm gặp lỗi sẽ đưa đến những sai sót. Tuy nhiên, không dễ để phát hiện ra sai sót trong quá trình phát triển phần mềm.
Sai lầm có thể xuất hiện ở ngay đầu quy trình phát triển phần mềm khi người phân tích, thiết kế bỏ sót thông tin dẫn tới thiếu chức năng mà lẽ ra cần phải có. Thất bại (Failure): Thất bại dễ nhận thấy nhất khi một lỗi được thực thi. Chúng thường xuất hiện dưới 2 dạng: thất bại có thể chạy được (ví dụ như mã nguồn) và thất bại chỉ liên kết với các lỗi về nhiệm vụ. Ngoài ra, có thể kể đến các thất bại liên quan tới các lỗi do bỏ quên.
Chúng ta có thể hạn chế thất bại ngay tại bước đầu tiên của quy trình phát triển phần mềm nếu việc khảo sát được thực hiện tốt. Sự cố (Incident): Sự cố thường được liên kết với một thất bại. Tuy nhiên nó khác với thất bại ở chỗ sự cố luôn hiển thị cho người dùng hoặc kiểm thử viên biết về sự tồn tại của nó. Thừa: một số chức năng không có trong bản đặc tả yêu cầu phần mềm nhưng lại xuất hiện trong phần mềm được xây dựng.
Ngoài ra, còn xuất hiện một số lỗi phi chức năng như phần mềm khó sử dụng, tốc độ không đáp ứng yêu cầu (vấn đề hiệu năng) hay giao diện khó nhìn cũng dễ khiến cho người sử dụng nghĩ rằng phần mềm đang hoạt động không đúng. Yêu cầu khách hàng Mục tiêu quan trọng nhất đối với chất lượng phần mềm là phần mềm phải thỏa mãn được các yêu cầu và mong muốn của khách hàng. Chính vì lẽ đó, các chức năng của phần mềm được xây dựng dựa trên việc thu thập, phân tích, khảo sát nhu cầu của khách hàng thông qua những yêu cầu cụ thể. Đối với phần mềm, yêu cầu thường được tổng hợp từ nhiều người, nhiều tổ chức có mức độ chuyên môn và mức độ tham gia cũng như tương tác với phần mềm khác nhau trong môi trường hoạt động của nó.
Có thể phân loại yêu cầu của khách hàng cho sản phẩm phần mềm thành một số loại như sau: Phân loại theo sản phẩm và tiến trình - Yêu cầu sản phẩm: là những đòi hỏi hay ràng buộc mà phần mềm phải thực hiện.[13] - Yêu cầu tiến trình: là những ràng buộc liên quan đến việc phát triển phần mềm (kĩ thuật sử dụng, mô hình phát triển, v. [13] Phân loại theo chức năng - Yêu cầu chức năng: đặc tả các chức năng mà phần mềm cần phải thực hiện. - Yêu cầu phi chức năng: là các ràng buộc về giải pháp và chất lượng (hiệu năng, việc bảo trì, mức độ an toàn, bảo mật, v. - Yêu cầu đặc tả các thuộc tính nổi bật: là đặc tả cho các thuộc tính phụ thuộc vào sự vận hành, đặc biệt là kiến trúc hệ thống.
Các thuộc tính này không thể xác định được cho từng thành phần đơn lẻ. Phân loại theo tính kiểm định - Những yêu cầu mang tính mơ hồ, không thể kiểm định - Những yêu cầu đã rõ ràng và có thể kiểm định được. Phân loại theo phạm vi đặc tả - Yêu cầu hệ thống: đặc tả các cấu hình, cơ sở hạ tầng, phần cứng, phần mềm, con người, kỹ thuật, v. của toàn bộ hệ thống.
- Yêu cầu phần mềm: đặc tả các chức năng, giao diện, v. của các cấu phần phần mềm. Đặc tả yêu cầu phần mềm Đặc tả yêu cầu phần mềm tạo cơ sở cho việc thỏa thuận giữa khách hàng và nhà thầu hoặc các nhà cung cấp về những gì sản phẩm phần mềm có làm việc đúng như mong muốn không. Nó cho phép một đánh giá nghiêm ngặt các yêu cầu trước khi có thể bắt đầu vào việc thiết kế và làm giảm việc thiết kế lại.
Tài liệu đặc tả yêu cầu phần mềm cũng cần cung cấp một cơ sở thực tế để ước tính giá thành sản phẩm, rủi ro, và lịch trình cho quá trình phát triển sản phẩm. Từ yêu cầu của khách hàng và những yêu cầu bắt buộc khác, đặc tả yêu cầu phần mềm được viết ra để mô tả một cách chính xác các yêu cầu cần đáp ứng của sản phẩm phần mềm. Các tổ chức cũng có thể sử dụng một tài đặc tả yêu cầu phần mềm làm cơ sở để phát triển kế hoạch kiểm tra và xác minh. Đặc tả yêu cầu phần mềm cung cấp một cơ sở thông báo cho chuyển một sản phẩm phần mềm cho người dùng mới hoặc các nền tảng phần mềm.
Cuối cùng, nó có thể cung cấp một cơ sở để nâng cao phần mềm. Đặc tả yêu cầu phần mềm được viết ra phục vụ rất nhiều đối tượng từ người dùng hệ thống, khách hàng đến các nhà phát triển và bảo trì phần mềm. Do đó, tài liệu đặc tả nên được viết bằng ngôn ngữ tự nhiên, sử dụng biểu đồ, bảng biểu để đảm bảo tính dễ hiểu, dễ sử dụng cho tất cả các đối tượng trên. Chất lượng và độ tin cậy của phần mềm Chất lượng của phần mềm trước hết là sự đáp ứng các yêu cầu đề ra trong bản đặc tả yêu cầu phần mềm.
Có thể kể đến các yếu tố đại diện cho chất lượng phần mềm như: tính đúng đắn, tính hiệu quả, độ tin cậy, tính khả kiểm thử, dễ học, dễ sử dụng, dễ bảo trì… Ta có thể thấy độ tin cậy chỉ là một trong những yếu tố đánh giá chất lượng phần mềm. Tuy nhiên người kiểm thử lại hay nhầm lẫn giữa khái niệm chất lượng và độ tin cậy của phần mềm. Sau quá trình kiểm thử đảm bảo phần mềm có thể chạy ổn định, kiểm thử viên thường sẽ cho rằng phần mềm lúc này đã đạt chất lượng tốt. Độ tin cậy của phần mềm là xác suất để phần mềm chạy không có thất bại trong một khoảng thời gian nhất định.
Ngoài ra, có thể dựa vào thời gian khắc phục sự cố để đánh giá độ tin cậy của phần mềm. KIỂM THỬ PHẨM MỀM 1. Khái niệm về kiểm thử phần mềm Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm ra lỗi. Kiểm thử phần mềm đảm bảo sản phẩm phần mềm đáp ứng chính xác, đầy đủ và đúng theo yêu cầu của khách hàng, yêu cầu của sản phẩm đã đặt ra.
Kiểm thử phần mềm cũng cung cấp mục tiêu, cái nhìn độc lập về phần mềm, điều này cho phép việc đánh giá và hiểu rõ các rủi ro khi thực thi phần mềm [4]. Kiểm thử phần mềm tạo điều kiện cho bạn tận dụng tối đa tư duy đánh giá và sáng tạo để bạn có thể phát hiện ra những điểm mà người khác chưa nhìn thấy. Mục tiêu của kiểm thử phần mềm: Các mục tiêu trực tiếp: - Xác định và phát hiện nhiều lỗi nhất có thể trong phần mềm kiểm thử. - Sau khi sửa chữa các lỗi đã xác định và kiểm tra lại, làm cho phần mềm đã được kiểm thử đến một mức độ chấp nhận được về chất lượng.
- Thực hiện các yêu cầu kiểm thử cần thiết một cách hiệu quả và có hiệu quả, trong phạm vi ngân sách và thời gian cho phép. Các mục tiêu gián tiếp: - Để biên dịch một tài liệu về các lỗi phần mềm thường gặp nhằm mục đích ngăn ngừa và sửa chữa lỗi. Vai trò của kiểm thử phần mềm Thứ nhất, trách nhiệm hiệu quả về chi phí. Kiểm thử phần mềm giúp nhanh chóng phát hiện các lỗi của phần mềm, giúp giảm chi phí sửa chữa.
Thứ hai, trách nhiệm bảo mật. Sản phẩm được phát hiện và sửa lỗi giúp loại bỏ các rủi ro và các vấn đề sớm, làm tăng độ tin cậy cho sản phẩm. Đối với ngành công nghệ phần mềm, vấn đề bảo mật là yếu tố cực kỳ nhạy cảm, nó liên quan trực tiếp đến việc sở hữu, sử dụng của người dùng. Vì vậy, việc kiểm thử phần mềm giúp hoàn thiện nhất sản phẩm phần mềm, tránh những lỗ hổng bảo mật đáng tiếc, tăng độ tin tưởng cho người sử dụng.
18 Thứ ba, trách nhiệm về chất lượng sản phẩm.