CHƯƠNG 1 TỔNG QUAN VỀ CÔNG NGHỆ PHẦN MỀM 1. Tổng quan về công nghệ phần mềm. Đi cùng với xu thế phát triển mạnh mẽ của các ngành công nghệ khác trên thế giới, công nghệ phần mềm cũng đang mở ra một cánh cửa cho các tiếp cận tiến bộ. Khá nhiều công ty, tổ chức đã nhận thức được tầm quan trọng của ngành công nghệ này và đã có những bước tiếp cận đáng ghi nhận.
Vậy Công nghệ phần mềm là gì? Công nghệ phần mềm là lĩnh vực khoa học về các phương pháp luận, kĩ thuật và công cụ tích hợp trong quy trình sản xuất và vận hành phần mểm[2] Mục tiêu của công nghệ phần mềm là tạo ra những phần mềm tốt nhất với thời gian ngắn nhất, giảm tối thiểu những rủi ro có thể gây ra cho các khách hàng. Với mỗi phần mềm đều trải qua các quy trình phát triển phần mềm được phân chia thành các pha chính : Xác định yêu cầu, Phân tích yêu cầu, thiết kế, đặc tả, Cài đặt, kiểm thử, triển khai và bảo trì. Từ đó các công ty, tổ chức sẽ áp dụng các quy trình phát triển vào các mô hình khác nhau sao cho phù hợp với từng dự án của công ty dựa trên: Bản chất của dự án và ứng dụng + Nhận thức rủi ro. + Sự hiểu biết và kỹ năng của các kỹ sư.
+ Kiến thức miền ứng dụng của người phát triển. Phương pháp và công cụ được dùng. Cách thức kiểm soát và các kết quả chuyển giao được yêu cầu. 2 • Định nghĩa lỗi phần mềm và phân loại lỗi phần mềm Có rất nhiều định nghĩa khác nhau về lỗi phần mềm, nhưng tựu chung, có thể phát biểu một cách tổng quát: Lỗi phần mềm là sự không khớp giữa chương trình và đặc tả của nó[1].
Dựa vào định nghĩa, ta có thể phân loại lỗi phần mềm thành 3 dạng sau: - Lỗi sai: Sản phẩm phần mềm được xây dựng khác với đặc tả. - Lỗi thiếu: Các yêu cầu của sản phẩm phần mềm đã có trong đặc tả nhưng lại không có trong sản phẩm thực tế. - Lỗi thừa: Sản phẩm thực tế có những tính năng không có trong tài liệu Cũng có trường hợp yêu cầu này có thể là một thuộc tính sẽ được người dùng chấp nhận nhưng khác với đặc tả nên vẫn coi nó là lỗi. Một hình thức khác nữa cũng được xem là lỗi, đó là phần mềm khó hiểu, khó sử dụng, chậm và dễ gây cảm rằng phần mềm hoạt động không đúng.
• Các thuật ngữ: - Lỗi (Error): Là các lỗi lầm do con người gây ra. - Sai sót (Fault): Sai sót gây ra lỗi. Có thể phân loại như sau: Sai sót do đưa ra dư thừa – chúng ta đưa một vài thứ không chính xác vào mô tả yêu cầu phần mềm. Sai sót do bỏ sót – Người thiết kế có thể gây ra sai sót do bỏ sót, kết quả là thiếu một số phần đáng ra phải có trong mô tả yêu cầu phần mềm.
- Hỏng hóc (Failure): – Xảy ra khi sai sót được thực thi. 3 - Kết quả không mong đợi, hậu quả (Incident) – Là những kết quả do sai sót đem đến. Hậu quả là các triệu chứng liên kết với một hỏng hóc và báo hiệu cho người dùng biết sự xuất hiện của hỏng hóc. - Trường hợp thử (Test case) – Trường hợp thử được liên kết tương ứng với hoạt động của chương trình.
Một trường hợp thử bao một một tập các giá trị đầu vào và một danh sách các kết quả đầu ra mong muốn. - Thẩm tra (Verification) – Thẩm tra là tiến trình nhằm xác định đầu ra của một công đoạn trong việc phát triển phần mềm phù hợp với công đoạn trước đó. - Xác nhận (Validation) – Xác nhận là tiến trình nhằm chỉ ra toàn hệ thống đã phát triển xong phù hợp với tài liệu mô tả yêu cầu. • So sánh giữa Thẩm tra và Xác nhận: Thẩm tra: thẩm tra quan tâm đến việc ngăn chặn lỗi giữa các công đoạn.
Xác nhận: xác nhận quan tâm đến sản phẩm cuối cùng không còn lỗi. • Tại sao phải kiểm thử. Mọi hành động của con người, tất cả máy móc, thiết bị, vật dụng… do con người làm ra đều có thể gây ra lỗi, rõ ràng hoặc tiềm ẩn. Do đó hoạt động kiểm thử phần mềm là việc cần và nên làm để cùng với nhóm phát triển tạo ra sản phẩm sau cùng tốt nhất có thể, thỏa mãn được yêu cầu và mong muốn của người dùng • Khi nào cần kiểm thử phần mềm Công việc kiểm thử có thể tiến hành ở bất kỳ giai đoạn nào của quá trình sản xuất: lấy yêu cầu khách hàng, phân tích yêu cầu, thiết kế, coding, triển khai phần mềm đến tay người dùng.
Tùy vào từng giai đoạn mà sẽ có những phương pháp kiểm thử khác nhau, đồng thời mức chi phí cho việc kiểm thử và sửa lỗi cũng sẽ tăng dần lên 4 1. Quy trình kiểm thử phần mềm Hình 1.1 Sơ đồ quy trình kiểm thử phần mềm • Lập kế hoạch và kiểm soát việc kiểm thử Lập kế hoạch kiểm thử bao gồm các bước chính như sau: - Xác định phạm vi, rủi ro cũng như mục đích của hoạt động kiểm thử - Xác định các cách tiếp cận kiểm thử - Xác định chiến lược kiểm thử. Chiến lược kiểm thử mô tả các thành phần kiểm thử cần có trong một chu kỳ phát triển phần mềm chẳng hạn như: các mục tiêu kiểm thử, các phương pháp kiểm thử, tổng thời gian và nguồn lực yêu cầu cho các dự án cũng như các môi trường test. (Lưu ý: Chiến lược kiểm thử thường được tạo ra bởi PM, TL) - Xác định các nguồn lực cần có cho kiểm thử như: nhân lực, phần cứng, phần mềm, môi trường test v.v - Lên lịch cho các hoạt động phân tích và thiết kế các trường hợp kiểm thử, thực thi kiểm thử cũng như đánh giá kết quả kiểm thử.
5 - Xác định các tiêu chí kết thúc việc kiểm thử (exit criteria) chẳng hạn như tỉ lệ độ bao phủ của test case, số lượng bug tìm được, độ nghiêm trọng của những con bug tìm được. Hoạt động kiểm soát kiểm thử có các nhiệm vụ chủ yếu sau đây: - Đo lường và phân tích các kết quả của hoạt động kiểm thử - Theo dõi và ghi lại tiến độ, độ bao phủ cũng như các tiêu chí kết thúc kiểm thử - Cung cấp thông tin về kiểm thử - Tiến hành các hành động khắc phục nếu cần thiết - Đưa ra quyết định • Phân tích và thiết kế các trường hợp kiểm thử: Hoạt động phân tích và thiết kế kiểm thử có các nhiệm vụ chủ yếu sau đây: - Rà soát các yêu cầu cần thiết trước khi tiến hành kiểm thử như tài liệu đặc tả, tài liệu thiết kế, tài liệu giao diện, - Xác định các điều kiện kiểm thử - Thiết kế test case - Đánh giá tính khả thi trong việc kiểm thử của yêu cầu cũng như của hệ thống. - Chuẩn bị môi trường test cũng như xác định các yêu cầu về cơ sở hạ tầng và các công cụ kiểm thử tương ứng. • Thực hiện và chạy test: Việc thực hiện test có nhiệm vụ chủ yếu sau đây: - Chuẩn bị test data - Thiết kế và phân loại các trường hợp kiểm thử dựa theo độ ưu tiên của từng trường hợp kiểm thử 6 - Tự động hóa cho các trường hợp kiểm thử nếu thấy cần thiết Hoạt động chạy test có nhiệm vụ chủ yếu sau đây: - Chạy các test case theo các bước đã định ra trước đó - Chạy lại các case bị failed trước đó để xác nhận là case đó đã được sửa - So sách kết quả ghi nhận được khi thực thi với kết quả mong đợi - Đánh giá kết quả kiểm thử (Passed/Failed) cho các trường hợp kiểm thử - Viết báo cáo lỗi cho những trường hợp kết quả ghi nhận được và kết quả mong đợi không giống nhau • Đánh giá tiêu chí kết thúc kiểm thử và báo cáo kết quả: Dựa trên đánh giá rủi ro của dự án, chúng ta sẽ thiết lập các tiêu chí cho từng hoạt động kiểm thử tương ứng để từ đó có thể xác định được liệu kiểm thử đã đủ hay chư.Những tiêu chí này khác nhau tùy từng dự án và được gọi tiêu chí kết thúc kiểm thử (exit criteria).
Các tiêu chí này bao gồm: - Số lượng test case tối đa được thực thi Passed - Tỷ lệ lỗi giảm xuống dưới mức nhất định - Khi đến deadline Việc đánh giá tiêu chí kết thúc kiểm thử bao gồm các nhiệm vụ chủ yếu sau đây: - Đối chiếu kết quả thực thi test case so với các tiêu chí kết thúc kiểm thử được định ra trong lúc lập kế hoạch kiểm thử - Từ đó, đánh giá xem liệu có cần phải test thêm hay điều chỉnh các tiêu chí kết thúc kiểm thử trong bản kế hoạch - Viết báo cáo tóm tắt hoạt động kiểm thử cũng như kết quả kiểm thử cho các bên liên quan. 7 • Đóng hoạt động kiểm thử: Các hoạt động kiểm thử thường chỉ được kết thúc khi các phần mềm được giao cho khách hàng. Ngoài ra, chúng ta cũng thường kết thúc kiểm thử với một trong những lí do sau: - Khi tất cả các thông tin đã được thu thập đầy đủ cho hoạt động kiểm thử - Khi dự án bị hủy bỏ. - Khi một mục tiêu nào đó đạt được.
- Khi hoạt động bao trì hay cập nhật hệ thống hoàn tất. Hoạt động đóng kiểm thử thường có các hoạt động sau: - Kiểm tra lại đã giao đầy đủ cho khách hàng những phần đã cam kết từ đầu - Kiểm tra lại các lỗi nghiêm trọng đã được fix tương ứng - Đóng gói các tài liệu kiểm thử, kịch bản kiểm thử, môi trường test v.v để dùng cho những mục đích /dự án sau này - Đánh giá quá trình kiểm thử cũng như rút ra bài học kinh nghiệm cho những dự án trong tương lại. Kiểm thử phần mềm. Kiểm thử phần mềm là gì? 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 lỗi [3].
Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi ích liên quan những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy. Mục đích của kiểm thử phần mềm là tìm ra các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau.