ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Đoàn Văn Trung KiÓm ®Þnh phÇn mÒm theo tiÕp cËn hÖ thèng Luận văn thạc sỹ Hà Nội - 2007 - 73 - LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Đoàn Văn Trung KiÓm ®Þnh phÇn mÒm theo tiÕp cËn hÖ thèng Ngành : Công nghệ thông tin Mã ngành: 1.10 Luận văn thạc sỹ Người hướng dẫn khoa học: PGS TSKH Nguyễn Xuân Huy Hà Nội - 2007 -1- LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1. TỔNG QUAN VỀ KIỂM ĐỊNH PHẦN MỀM 1.1 Giới thiệu chung về kiểm định phần mềm Các quy trình và kỹ thuật kiểm định phần mềm là các vấn đề hiện nay đang đƣợc các nhà chuyên môn và quản lý quan tâm, nhằm đáp ứng cho nhu cầu ngày càng cao về kiểm định chất lƣợng của các ứng dụng công nghệ thông tin nói chung và cụ thể là các sản phẩm phần mềm trong các lĩnh vực cuộc sống. Kiểm định phần mềm là một phần quan trọng và quyết định của quá trình phát triển phần mềm trên chất lƣợng và độ tin cậy của sản phẩm chuyển giao. Kiểm định không giới hạn để phát hiện lỗi trong phần mềm, mà sự tin cậy tăng lên trong các chức năng của chúng với sự đánh giá của các thuộc tính chức năng cũng nhƣ các thuộc tính khác [2].
Kiểm định phần mềm là một hoạt động kiểm tra năng lực, khả năng của phầm mềm bao gồm nhiều nhiệm vụ đòi hỏi khắt khe khác nhau: trƣớc hết là nhiệm vụ xuất phát từ một bộ đầy đủ các trƣờng hợp kiểm định thích hợp, theo một kỹ thuật kiểm định phần mềm đƣợc chọn lựa có lợi và có khả năng thực hiện đƣợc. Tuy nhiên, sự lựa chọn hình thức kiểm định mới chỉ là một điểm bắt đầu mà còn nhiều nhiệm vụ quyết định khác thể hiện các mặt về chuyên môn kỹ thuật và các khái niệm phức tạp: chặng hạn khả năng để chọn lựa các kiểu kiểm định; sự quyết định các kết quả kiểm định có thể chấp nhận đƣợc hay không; nếu không thì đánh giá sự ảnh hƣởng của sự cố lỗi chƣơng trình và phát hiện nguyên nhân trực tiếp cũng nhƣ gián tiếp lỗi của chúng, phân tích các nguyên nhân cơ bản; đánh giá kiểm định là có khả năng và có thể dừng lại đƣợc, phụ thuộc lần lƣợt việc kiểm tra các tiêu chuẩn đánh giá hiệu lực của kiểm định. Trong luận văn này các thuật ngữ kiểm định, kiểm tra và kiểm thử đƣợc sử dụng với cùng một ý nghĩa. Khái niệm kiểm định phần mềm Kiểm định phần mềm là phần mấu chốt của đảm bảo chất lƣợng phần mềm và biểu thị cho việc xét duyệt tối hậu về đặc tả, thiết kế và mã hóa.
-1- LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Theo nghĩa thông thƣờng nhất, kiểm định phần mềm bao gồm việc "chạy thử" phần mềm hay một chức năng của phần mềm, xem nó chạy đúng nhƣ mong muốn hay không. Theo Glen Myers [15] thì kiểm định là một quá trình vận hành chƣơng trình với ý định tìm ra các lỗi của phần mền. Một (lần) kiểm định tốt là kiểm định có xác suất cao trong việc tìm ra một lỗi chƣa đƣợc phát hiện. Một (lần) kiểm định thành công là một kiểm định làm lộ ra đƣợc ít nhất một lỗi còn chƣa đƣợc phát hiện.3 Quy trình kiểm định phần mềm Việc kiểm định phần mềm có thể thực hiện từng bƣớc, sau mỗi chức năng hoặc module đƣợc phát triển, hoặc thực hiện sau cùng, khi phần mềm đã đƣợc phát triển hoàn tất.
Quy trình kiểm định phần mềm có thể bao gồm các mức và bƣớc kiểm tra cơ bản nhƣ sau: Kiểm định đơn vị Kiểm định tích hợp Kiểm định hệ thống Kiểm định chấp nhận Hình 1. Các mức độ cơ bản của kiểm tra phần mềm -2- LUAN VAN CHAT LUONG download : add luanvanchat@agmail. Kiểm định đơn vị Để có thể hiểu rõ về kiểm định đơn vị, khái niệm trƣớc tiên ta cần làm rõ: thế nào là một đơn vị phần mềm [2]. Một đơn vị là một thành phần phần mềm nhỏ nhất mà ta có thể kiểm tra đƣợc.
Theo định nghĩa này, các hàm, thủ tục, lớp, hoặc các phƣơng thức đều có thể đƣợc xem là đơn vị. Vì đơn vị đƣợc chọn để kiểm tra thƣờng có kích thƣớc nhỏ và chức năng hoạt động đơn giản, sẽ không khó khăn gì trong việc tổ chức, kiểm tra, ghi nhận và phân tích kết quả kiểm tra. Nếu phát hiện lỗi, việc xác định nguyên nhân và khắc phục cũng tƣơng đối dễ dàng vì chỉ khoanh vùng trong một đơn thể đơn vị đang kiểm tra. Một nguyên lý đúc kết từ thực tiễn: thời gian tốn cho kiểm định đơn vị sẽ đƣợc đền bù bằng việc tiết kiệm rất nhiều thời gian và chi phí cho việc kiểm tra và sửa lỗi ở các mức kiểm tra sau đó.
Kiểm định đơn vị thƣờng do lập trình viên thực hiện. Công đoạn này cần đƣợc thực hiện càng sớm càng tốt trong giai đoạn viết code và xuyên suốt chu kỳ phát triển phần mềm. Thông thƣờng, kiểm định đơn vị đòi hỏi kiểm tra viên có kiến thức về thiết kế và code của chƣơng trình. Mục đích của kiểm định đơn vị là bảo đảm thông tin đƣợc xử lý và xuất (khỏi đơn vị) là chính xác, trong mối tƣơng quan với dữ liệu nhập và chức năng của đơn vị.
Điều này thƣờng đòi hỏi tất cả các nhánh bên trong đơn vị đều phải đƣợc kiểm tra để phát hiện nhánh phát sinh lỗi. Một nhánh thƣờng là một chuỗi các lệnh đƣợc thực thi trong một đơn vị, ví dụ: chuỗi các lệnh sau điều kiện if và nằm giữa then. else là một nhánh. Thực tế việc chọn lựa các nhánh để đơn giản hóa việc kiểm tra và quét hết đơn vị đòi hỏi phải có kỹ thuật, đôi khi phải dùng thuật toán để thực hiện.
Cũng nhƣ các mức kiểm tra khác, kiểm định đơn vị cũng đòi hỏi phải chuẩn bị trƣớc các ca kiểm định hoặc kịch bản, trong đó chỉ định rõ dữ liệu vào, các bƣớc thực hiện và dữ liệu mong chờ sẽ xuất ra. Các ca kiểm định và kịch bản này nên đƣợc giữ lại để tái sử dụng. Kiểm định đơn vị có thể bao gồm các kỹ thuật kiểm định sau: Kiểm định hộp đen (black box) Kiểm định hộp trắng (white box) -3- LUAN VAN CHAT LUONG download : add luanvanchat@agmail. Kiểm định tích hợp Kiểm định tích hợp kết hợp các thành phần của một ứng dụng và kiểm tra nhƣ một ứng dụng đã hoàn thành [15].
Trong khi kiểm định đơn vị kiểm tra các thành phần và đơn vị riêng lẻ thì kiểm định tích hợp kết hợp chúng lại với nhau và kiểm tra sự giao tiếp giữa chúng. Kiểm định tích hợp có 2 mục tiêu chính: Phát hiện lỗi giao tiếp xảy ra giữa các đơn vị. Tích hợp các đơn vị đơn lẻ thành các hệ thống nhỏ và cuối cùng là nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm tra ở mức hệ thống. Trong kiểm định đơn vị, lập trình viên cố gắng phát hiện lỗi liên quan đến chức năng và cấu trúc nội tại của đơn vị.
Có một số phép kiểm tra đơn giản trên giao tiếp giữa đơn vị với các thành phần liên quan khác, tuy nhiên mọi giao tiếp liên quan đến đơn vị thật sự đƣợc kiểm tra đầy đủ khi các đơn vị tích hợp với nhau trong khi thực hiện kiểm định tích hợp. Một chiến lƣợc cần quan tâm trong kiểm định tích hợp là nên tích hợp dần từng đơn vị. Một đơn vị tại một thời điểm đƣợc tích hợp vào một nhóm các đơn vị khác đã tích hợp trƣớc đó và đã hoàn tất các đợt kiểm định tích hợp trƣớc đó. Lúc này, ta chỉ cần kiểm tra giao tiếp của đơn vị mới thêm vào với hệ thống các đơn vị đã tích hợp trƣớc đó, điều này làm cho số lƣợng kiểm tra sẽ giảm đi rất nhiều, sai sót sẽ giảm đáng kể.
Có 4 loại kiểm tra trong kiểm định tích hợp: 1. Kiểm tra cấu trúc: Tƣơng tự kiểm định hộp trắng (kiểm tra nhằm bảo đảm các thành phần bên trong của một chƣơng trình chạy đúng), chú trọng đến hoạt động của các thành phần cấu trúc nội tại của chƣơng trình chẳng hạn các lệnh và nhánh bên trong. Kiểm tra chức năng: Tƣơng tự kiểm định hộp đen (kiểm tra chỉ chú trọng đến chức năng của chƣơng trình, không quan tâm đến cấu trúc bên trong), chỉ khảo sát chức năng của chƣơng trình theo yêu cầu kỹ thuật. Kiểm tra hiệu năng: Kiểm tra việc vận hành của hệ thống.
-4- LUAN VAN CHAT LUONG download : add luanvanchat@agmail. Kiểm tra khả năng chịu tải: Kiểm tra các giới hạn của hệ thống. Kiểm định hệ thống Mục đích kiểm định hệ thống là kiểm tra thiết kế và toàn bộ hệ thống (sau khi tích hợp) có thỏa mãn yêu cầu đặt ra hay không. Kiểm định hệ thống bắt đầu khi tất cả các bộ phận của phần mềm đã đƣợc tích hợp thành công.
Thông thƣờng loại kiểm tra này tốn rất nhiều công sức và thời gian. Trong nhiều trƣờng hợp, việc kiểm tra đòi hỏi một số thiết bị phụ trợ, phần mềm hoặc phần cứng đặc thù, đặc biệt là các ứng dụng thời gian thực, hệ thống phân bố, hoặc hệ thống nhúng. Ở mức độ hệ thống, ngƣời kiểm tra cũng tìm kiếm các lỗi, nhƣng trọng tâm là đánh giá về hoạt động, thao tác, sự tin cậy và các yêu cầu khác liên quan đến chất lƣợng của toàn hệ thống. Điểm khác nhau then chốt giữa kiểm định tích hợp và kiểm định hệ thống là kiểm định hệ thống chú trọng các hành vi và lỗi trên toàn hệ thống, còn kiểm định tích hợp chú trọng sự giao tiếp giữa các đơn thể hoặc đối tƣợng khi chúng làm việc cùng nhau.
Thông thƣờng ta phải thực hiện kiểm định đơn vị và kiểm định tích hợp để bảo đảm mọi Unit và sự tƣơng tác giữa chúng hoạt động chính xác trƣớc khi thực hiện kiểm định hệ thống. Kiểm định hệ thống kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu về chất lƣợng nhƣ độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng và bảo mật. Mức kiểm tra này đặc biệt thích hợp cho việc phát hiện lỗi giao tiếp với phần mềm hoặc phần cứng bên ngoài, chẳng hạn các lỗi "tắc nghẽn" hoặc chiếm dụng bộ nhớ. Sau giai đoạn kiểm định hệ thống, phần mềm thƣờng đã sẵn sàng cho khách hàng hoặc ngƣời dùng cuối cùng kiểm tra để chấp nhận hoặc dùng thử (Alpha/Beta Test).