Phần mở đầu, ba chƣơng nội dung, Phần kết luận và Tài liệu tham khảo. Chƣơng 1: Tổng quan về qui trình quản lí chất lƣợng phần mềm Tìm hiểu khái niệm chung về sản phẩm phần mềm, vấn đề chất lƣợng phần mềm, tầm quan trọng, khó khăn của việc kiểm thử phần mềm và các hoạt động đánh giá chất lƣợng trong quy trình phát triển phần mềm. Chƣơng 2: Các kỹ thuật kiểm thử phần mềm. Nội dung của chƣơng này phân tích các kỹ thuật cơ bản trong kiểm thử phần mềm: Kiểm thử hộp đen: xây dựng lớp phân hoạch tƣơng đƣơng, phân tích giá trị biên, kỹ thuật đồ thị nhân quả, kiểm thử giá trị đặc biệt.
Kiểm thử hộp trắng: kiểm thử dựa trên đồ thị luồng điều khiển, kiểm thử dựa trên luồng dữ liệu, kiểm thử điều kiện. Trên cơ sở các nội dung nói trên, luận văn phân tích, làm nổi bật những yếu tố quan trọng trong đảm bảo chất lƣợng phần mềm. Chƣơng 3: Một số ứng dụng cụ thể của quy trình kiểm thử. Để minh hoạ cho phần lý thuyết ở trên, chƣơng 3 sẽ trình bày một vài kịch bản kiểm thử áp dụng kỹ thuật hộp đen và kỹ thuật hộp trắng để kiểm thử.
Xây dựng các trƣờng hợp kiểm thử (test cases) cho từng kịch bản kiểm thử. Xây dựng chƣơng trình và giao diện: thực hiện với các trƣờng hợp kiểm thử đã đề xuất, đối sánh kết quả của chƣơng trình và kết quả dự kiến của các trƣờng hợp kiểm thử. Kết luận và hƣớng phát triển Tài liệu tham khảo Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 1 CHƢƠNG 1 QUI TRÌNH VÀ CHẤT LƢỢNG PHẦN MỀM 1.1 SẢN PHẨM VÀ CHẤT LƢỢNG PHẦN MỀM 1.1 Khái niệm về sản phẩm phần mềm Phần mềm là một (bộ) chƣơng trình đƣơc cài đặt trên máy tính thực hiện một nhiệm vụ tƣơng đối độc lập nhằm phục vụ cho một hoặc nhiều ứng dụng cụ thể: quản lý hoạt động của máy tính hoặc áp dụng máy tính trong các hoạt động kinh tế, quốc phòng, văn hóa, giáo dục, giải trí…[4], [5] Ví dụ: S1. Hệ điều hành Ubutu; S2.
Môi trƣờng lập trình C++ Devcpp; S3. Hệ thống quản lý: CN2; S4. Game: Lines… … Việc tạo ra một sản phẩm phải trải qua nhiều giai đoạn, ngƣời ta gọi là quy trình phát triển phần mềm. Quy trình này đƣợc khởi động từ khi bắt đầu có ý tƣởng cho đến khi đƣa ra sản phẩm phần mềm thực thi.
Khối lƣợng công việc trong từng giai đoạn của quá trình sản xuất phần mềm cũng thay đổi theo thời gian.1 minh họa cụ thể hơn về tỷ lệ công việc của các giai đoạn phát triển phần mềm [9] Bảng 1. 1 - Tỷ lệ công việc của các giai đoạn phát triển phần mềm Phân Thiết Lập trình Tích hợp và Kiểm Thiết kế Giai đoạn tích yêu kế sơ và kiểm kiểm thử thử hệ chi tiết cầu bộ thử đơn vị tích hợp thống Thập kỉ 1960- 1970 10% 80% 10% Thập kỉ 1980 20% 60% 20% Thập kỉ 1990 40% 30% 30% Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 2 Theo một tài liệu khác [7], chi phí liên quan từng giai đoạn của vòng đời phần mềm đƣợc thể hiện trong biểu đồ hình quạt nhƣ đƣới đây: Nguồn [7] Nhƣ vậy, một sản phẩm phần mềm đƣợc xem là một hệ thống bao gồm một hoặc nhiều phân hệ. Mỗi phân hệ lại đƣợc xây dựng từ những cấu phần. Mỗi cấu phần bao gồm các đơn vị nhỏ.
Các thành phần của phần mềm đƣợc liên kết với nhau thông qua các mối quan hệ và các tƣơng tác [8]. Vì vậy, việc mắc lỗi không chỉ xảy ra trong khi lập trình mà còn xảy ra cao hơn trong các công đoạn khác của quy trình phát triển một sản phẩm phần mềm. Việc kiểm thử cũng vì thế phải đƣợc tiến hành trong tất cả các phần tạo nên một sản phẩm phần mềm. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.
1 - Sản phẩm phần mềm.2 Khái niệm lỗi phần mềm Chúng ta đã thấy khi phần mềm hoạt động không nhƣ mong muốn thì ta nói rằng phần mềm đó có lỗi. Tuy nhiên, cũng có thể dùng nhiều thuật ngữ khác để mô tả hiện tƣợng này nhƣ: thất bại, sai sót, có vấn đề, bất thường không hợp lý, không tương thích,… Định nghĩa lỗi phần mềm dƣới đây dựa trên khái niệm đặc tả: một đặc tảlà một sự thống nhất về đặc tính, quan hệ, chức năng và hành vi của sản phẩm giữa những ngƣời phát triển phần mềm hoặc giữa ngƣời phát triển phần mềm và ngƣời đặt hàng hoặc sử dụng phần mềmthông qua một ngôn ngữ nào đó [5], [8], [10]. Lỗi phần mềm xuất hiện khi xảy ra một hay nhiều điều kiện sau [13], [14], [15]: Phần mềm không thực hiện đúng những gì mà đặc tả định nghĩa. Phần mềm thực hiện những gì mà đặc tả khuyến cáo không nên thực hiện.
Phần mềm thực hiện những gì mà đặc tả không đề cập đến. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 4 Phần mềm không thực hiện những gì mà đặc tả không đề cập đến nhƣng lẽ ra nên thực hiện. Phần mềm là khó hiểu hay khó sử dụng. Theo các kết quả nghiên cứu đƣợc thực hiện trong các dự án khác nhau, số lỗi do đặc tả gây ra là nhiều nhất, chiếm khoảng 80% [12].
Các nguyên nhân sinh lỗi tại pha đặc tả: Đặc tả không hình thức: Ngôn ngữ tự nhiên dễ hiểu nhƣng rƣờm rà, nhập nhằng. Đặc tả hình thức (ngôn ngữ toán học và logic): đơn giản, chính xác nhƣng khó hiểu, khó cài đặt. Quên đặc tả một yêu cầu nào đó. Đặc tả không hết.
Yêu cầu đã thay đổi nhƣng đặc tả không thay đổi. Đặc tả khác nhau cho cùng một yêu cầu xuất hiện trong các cấu phần khác nhau của hệ thống. 2– Các nguyên nhân gây ra lỗi phần mềm [5] Nguồn gây ra lỗi lớn thứ hai là thiết kế. Đó là nền tảng mà lập trình viên dựa vào để nỗ lực thực hiện kế hoạch cho phần mềm.
Thời kỳ đầu, phát triển phần mềm thƣờng đồng nhất với lập trình, công việc lập trình thì nặng nhọc, do đó lỗi do lập trình gây ra là chủ yếu [4]. Ngày nay, công việc lập trình chỉ là một phần việc của qúa trình lao động chất xám, việc lập trình trở nên nhẹ nhàng hơn, mặc dù độ phức tạp phần mềm lớn hơn rất nhiều. Do đó, lỗi do lập trình gây ra cũng ít hơn. Tuy nhiên, nguyên nhân để lập trình tạo ra lỗi lại Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.
Đó là do độ phức tạp của phần mềm, do tài liệu nghèo nàn, do sức ép thời gian hoặc chỉ đơn giản là những lỗi “không nói lên đƣợc” [11]. Một điều cũng khá hiển nhiên là nhiều lỗi xuất hiện trên văn bản chƣơng trình, nhƣng khi tìm hiểu kỹ thì thực ra lại do lỗi của đặc tả hoặc thiết kế [10]. Một nguyên nhân khác tạo ra lỗi là do bản thân của công cụ phát triển phần mềm cũng có lỗi nhƣ công cụ trực quan, thƣ viện lớp, bộ biên dịch, các mẫu thƣờng đƣợc thiết kế theo xu hƣớng tổng quát hóa quá cao … 1.3 Chi phí sửa lỗi Ngƣời ta ƣớc tính, bảo trì là phần chi phí chính của phần mềm và kiểm thử là hoạt động có chi phí đắt thứ hai, ƣớc tính khoảng 40% của chi phí trong quá trình phát triển ban đầu của sản phẩm phần mềm. Kiểm thử cũng là phần chi phí chính của giai đoạn bảo trì do phải tiến hành kiểm thử lại những thay đổi trong quá trình sửa lỗi và đáp ứng yêu cầu của ngƣời dùng [1], [6] Kiểm thử và sửa lỗi có thể đƣợc thực hiện tại bất kỳ giai đoạn nào của vòng đời phần mềm.
Tuy nhiên, chi phí cho việc tìm và sửa lỗi sẽ tăng đáng kể theo thời gian trong quá trình phát triển [8]. Sự thay đổi một tài liệu hoặc yêu cầu (thí dụ, của khách hàng) khi đang trong pha thiết kế là không đắt nếu không nói là không đáng kể. Chi phí sẽ tăng lên nhiều hơn nếu các yêu cầu thay đổi đƣợc đƣa ra sau khi đã lập trình. Thay đổi lúc này đồng nghĩa với việc phải viết lại chƣơng trình [9].
Việc sửa lỗi sẽ không đáng kể nếu ngƣời lập trình tự phát hiện lỗi của mình, và không có sự liên quan đến chi phí khác. Họ không phải giải thích lỗi cho bất kỳ ngƣời nào trong nhóm. Họ cũng không phải nhập lại lỗi đó vào cơ sở dữ liệu lỗi và lƣu vết lỗi. Ngƣời kiểm thử và ngƣời quản lý không phải duyệt lại tình trạng lỗi.
Và lỗi đó không ảnh hƣởng đến công việc của ngƣời khác trong nhóm dự án. Nói chung, sửa một lỗi trƣớc khi phát hành một phần mềm rẻ hơn rất nhiều so với việc khắc phục nó sau khi đã phát hành [14], [15]. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 6 Theo các nghiên cứu của IBM, GTE cho biết, lỗi đƣợc phát hiện càng muộn thì chi phí cho việc sửa lỗi càng lớn. Chi phí tăng theo hàm mũ nhƣ sau: Hình 1.
3 - Chi phí cho việc sửa lỗi. Nguồn: [6], [8] Chúng ta từng chứng kiến sự cố máy tính Y2K năm 2000. Nguyên nhân là do việc tiết kiệm bộ nhớ bằng cách biểu diễn năm có 4 chữ số bằng 2 chữ số cuối của năm mà không dự tính đƣợc lỗi tiềm ẩn có thể xảy ra mà mấy chục năm sau, thế giới đã phải lo sợ và tốn nhiều tỉ đô la để khắc phục do dữ liệu ngày tháng có thể bị thay đổi khi máy tính coi năm 1900 nhƣ năm 2000 [1], [5].4 Khái niệm kiểm thử phần mềm Kiểm thử phần mềm là một quá trình liên tục, xuyên suốt mọi giai đoạn phát triển phần mềm để đảm bảo rằng phần mềm thỏa mãn các yêu cầu thiết kế và các yêu cầu đó đáp ứng các nhu cầu của ngƣời dùng. Các kỹ thuật kiểm thử phần mềm đã, đang đƣợc nghiên cứu, và việc kiểm thử phần mềm đã trở thành quy trình bắt buộc trong các dự án phát triển phần mềm trên thế giới.
Kiểm thử phần mềm là khâu mấu chốt để đảm bảo chất lƣợng phần mềm, là đánh giá cuối cùng về đặc tả thiết kế và mã hóa [7]. Mục đích của kiểm thử phần mềm là tìm ra lỗi chƣa đƣợc phát hiện ở thời điểm sớm nhất có thể và đảm bảo rằng lỗi đó đã đƣợc sửa.