CHƯƠNG 1. GIỚI THIỆU Trong thời đại bùng nổ thông tin, khi mà tất cả các lĩnh vực trong ngành công nghệ thông tin đều phát triển rất mạnh mẽ, điều này dẫn đến việc tăng rất nhanh về lượng dữ liệu lưu trữ và sử dụng. Trong hầu hết các tổ chức cũng như doanh nghiệp, lượng dữ liệu lưu trữ và sử dụng tăng trung bình từ 30% đến 50% mỗi năm. Lượng thông tin mà các tổ chức cũng như doanh nghiệp xử lý mỗi ngày lên tới hơn 60 terabyte - tăng hơn 1000 lần so với thập niên trước [1].
Bởi vậy, việc phần mềm ngày nay phải có khả năng mở rộng để xử lý với lượng dữ liệu ngày càng lớn là điều hiển nhiên. Ví dụ, những chức năng rất cơ bản của một phần mềm như tìm kiếu, sắp xếp hay so sánh, v. sẽ phải làm việc với những cơ sở dữ liệu lớn hơn rất nhiều so với quá khứ. Việc này không những làm tăng độ phức tạp của chương trình mà còn làm tăng rất nhiều thời gian xử lý của chương trình.
Bởi vậy, việc nghiên cứu và đo đạc khả năng mở rộng của chương trình [14] để đảm bảo được tính ổn định cũng như thời gian chạy hợp lý với người dùng trở thành một mảng rất quan trọng trong quá trình phát triển phần mềm. Ở thời điểm hiện tại, có ba cách tiếp cận phổ biến cho việc phân tích và đo đạc khả năng mở rộng của chương trình dựa trên độ phức tạp tính toán và lượng tài nguyên sử dụng của chương trình đó. Cách tiếp cận đầu tiên đó là phân tích tĩnh [8, 17], việc phân tích này dự trên tính toán độ phức tạp của chương trình bằng cách xây dựng mô hình của chương trình dựa trên các trạng thái của chúng. Hướng tiếp cận rất chính xác nhưng chỉ phù hợp với những chương trình nhỏ do độ phức tạp trong tính toán và đo đạc là rất lớn.
Hướng tiếp cận thứ hai là hướng tiếp cận amortised được mô tả trong [9,10,12]. Hướng tiếp cận này đánh giá lượng tài nguyên sử dụng trong những trường hợp xấu nhất của chương trình bằng cách quan sát và phân tích tất cả những trạng thái cũng như hành động của chương trình đó. Tương tự như hướng tiếp cận đầu tiên, hướng tiếp cận này cũng chỉ khả thi đối với những chương trình nhỏ. Hướng tiếp cận 6 TIEU LUAN MOI download : skknchat@gmail.com thứ ba là hướng tiếp cận thời gian thực được mô tả trong các nghiên cứu tại [5, 6, 13].
Hướng tiếp cận này đo đạc chi phí tính toán trung bình của chương trình khi chạy. Kết quả chi phí tính toan trong những nghiên cứu [5, 6, 13] là tương đồng với những mô hình toán học như là đa thức hay lũy thừa. Tuy nhiên, những nghiên cứu này đề có những giới hạn liên quan đến số lượng mô hình toán học mà họ hỗ trợ hay là thời gian chạy quá lâu. Luận văn này đề xuất một hướng tiếp cận thời gian thực mới nhằm giải quyết những giới hạn của hướng tiếp cận thời gian thực như đã mô tả ở trên.
Hướng tiếp cận của đề xuất tính toán tài nguyên sử dụng trung bình của chương trình dựa trên dữ liệu đầu vào thay vì dự đoán thời gian chạy thực của chương trình một cách thiếu chọn lọc. So sánh với những hướng tiếp cận thời gian thực khác, hướng tiếp cận này có thể hỗ trợ nhiều mô hình toán học và có thời gian thực thi nhanh hơn. Cụ thể hơn, hướng tiếp cận của nghiên cứu này gồm hai thành phần chính. Thành phần đầu tiên là những công cụ đo đạc (monitor instrumentation) và thành phần thứ hai là để xây dựng mô hình toán học tương đương (model construction).
Đầu tiên, những công cụ đo đạc sẽ theo dõi và đo đạc lượng tài nguyên sử dụng của chương trình dựa trên những tập dữ liệu đầu vào tương ứng. Sau đó, thành phần xây dựng mô hình toán học sẽ tiến hành xây dựng để phù hợp những dữ liệu và kết quả quan sát được với những mô hình toán học mà chúng tôi hỗ trợ. Hiện tại, nghiên cứu trong luận văn này đã có thể hỗ trợ được năm mô hình toán học phổ biến. Nghiên cứu này cũng tập trung vào việc đo đạc và ước lượng tài nguyên tính toán và độ sâu sử dụng của bộ nhớ stack mà chương trình cần như là hai thước đo chính để đánh giá tài nguyên của chương trình.
Hướng tiếp cận này cũng có thể được mở rộng để áp dụng với những độ đo tài nguyên khác. Tuy nhiên, trong khuôn khổ nghiên cứu của luận văn này, nghiên cứu chỉ tập trung vào hai thước đo như đã nêu trên. Bằng cách so sánh kết quả của hướng tiếp cận này với những kết quả dựa trên lý thuyết chúng tôi có thể đánh giá được khả năng mở rộng cũng như lỗi tiềm ẩn của chương trình. Luận văn cũng xây dựng một công cụ để mô phỏng hướng tiếp cận 7 TIEU LUAN MOI download : skknchat@gmail.com này bằng ngôn ngữ lập trình Java và sử dụng công cụ này để đo đạc những thuật toán chuẩn và một số chương trình mã nguồn mở nhằm minh chứng cho tính hiệu quả của phương pháp đề xuất.
Phần còn lại của luận văn được cấu trúc như sau. Hướng tiếp cận đề xuất nhằm tính toán và ước lượng tài nguyên sử dụng của các chương trình sẽ được mô tả chi tiết trong Chương 2. Chương 3 giới thiệu về công cụ cài đặt hỗ trợ phương pháp đề xuất cũng như mô tả chi tiết về quá trình thực nghiệm nhằm minh chứng cho tính hiệu quả của phương pháp đề xuất. Cuối cùng, kết luận và định hướng phát triển trong tương lai của luận văn sẽ được trình bày trong Chương 4.
8 TIEU LUAN MOI download : skknchat@gmail.com CHƯƠNG 2. TỔNG QUAN VỀ PHÂN TÍCH CHƯƠNG TRÌNH Ở phần này, khóa luận trình bày các kiến thức tổng quan về phân tích chương trình. Kĩ thuật chính mà chúng tôi hướng tới ở đây là kiểm thử hộp trắng dòng điều khiển gồm hai kĩ thuật kiểm thử hướng tĩnh và hướng động, đồng thời đưa ra sự so sánh về ưu điểm và nhược điểm của từng kĩ thuật. Tổng quan kĩ thuật kiểm thử hộp trắng dòng điều khiển Kiểm thử hộp trắng dòng điều khiển chia ra gồm kiểm thử hướng tĩnh và kiểm thử hướng động.
Đầu vào của hai kĩ thuật này đều là mã nguồn và tiêu chí phủ kiểm thử. Sau một loạt quá trình phân tích, đầu ra tương ứng là tập ca kiểm thử. Mỗi một kĩ thuật đều có những ưu điểm và hạn chế riêng. Mục tiêu của kiểm thử hộp trắng dòng điều khiển là tìm tập ca kiểm thử tối thiểu nhưng đạt được độ phủ tối đa.
Quy trình chung của kiểm thử hộp trắng dòng điều khiển theo hướng động Theo kĩ thuật này, mã nguồn sẽ được thêm các đoạn chương trình con trước khi thực thi trong môi trường chạy.1 trình bày quy trình chung của kiểm thử động. Nhìn chung, kĩ thuật này gồm 6 bước cơ bản được diễn giải theo thứ tự dưới đây: Bước 1. Chèn thêm các đoạn mã nguồn mới vào mã nguồn cần kiểm thử. Chọn ngẫu nhiên một tập giá trị đầu vào hợp lệ làm ca kiểm thử đầu tiên.
Thực thi chương trình với bộ giá trị vừa tìm được. Nếu không thực thi được, quay lại bước 2 để sinh bộ giá trị khác. Tìm tập các câu lệnh đã được đi qua với bộ giá trị ở bước 3 để xây dựng được hệ ràng buộc tương ứng. Phủ định hệ ràng buộc thu được ở bước 4 để sinh các hệ ràng buộc mới có tác dụng sinh các ca kiểm thử kế tiếp.
Nếu không thể sinh hệ phủ định nào khác, thuật toán kết thúc. Giải hệ ràng buộc thu được ở bước 5 để sinh ca kiểm thử kế tiếp. Nếu không có ca kiểm thử nào thỏa mãn, quay về bước 5 để tìm hệ ràng buộc phủ định mới sao cho khác hệ ràng buộc hiện tại. Ngược lại, quay lại bước 3 để sinh ca kiểm thử kế tiếp.
9 TIEU LUAN MOI download : skknchat@gmail.com Source Pha chèn thêm khối code Tiêu chí lệnh mới phủ Tìm ca kiểm thử khởi đầu ngẫu nhiên Thực thi ca kiểm thử vừa tìm được Tái tạo đường thực thi Tạo đường thực thi mới Kết False Tìm được ca True thúc kiểm thử mới Hình 0. Quy trình chung của kiểm thử hộp trắng dòng điều khiển theo hướng động. Trong bước 1, quá trình chèn thêm khối mã nguồn mới vào mã nguồn cần kiểm thử được tiến hành một cách tự động. Công cụ DMS/SRT1 được đánh giá khá mạnh mẽ để thực hiện pha này.
Đoạn mã nguồn thêm vào có chức năng đánh dấu, thoát chương trình hoặc ghi thông tin về quá trình thực thi ra tệp, v. Để làm được điều này, chúng tôi cần xây dựng các luật chèn thêm mã nguồn mới vào mã nguồn cần kiểm thử. Với công cụ DMS/SRT, mỗi một luật bắt đầu với từ khóa rule và theo sau là tên đặt cho luật. Từ khóa rewrite to nêu cách biến đổi đoạn mã nguồn gốc về đoạn mã nguồn mới.
Kiểu dữ liệu có thể là expression (ứng với biểu thức), statement (ứng với câu lệnh gán hoặc khởi tạo), type (ứng với kiểu dữ liệu), identifier (ứng với định danh như tên biến, tên hàm), v.2 mô tả một luật chèn thêm câu lệnh đánh dấu vào khối lệnh điều khiển rẽ nhánh. Cụ thể, biến mảng visited đánh dấu vị trí câu lệnh đi qua 10 TIEU LUAN MOI download : skknchat@gmail.com được bổ sung vào mã nguồn ban đầu ngay sau mỗi khối lệnh điều khiển rẽ nhánh.3 đưa ra mã nguồn triangle sau khi áp dụng luật.2: Ví dụ một luật chèn mã nguồn trong DMS/SRT. Mã nguồn hàm triangle sau khi thêm khối mã nguồn mới. Quy trình chung của kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh Trong kiểm thử tĩnh, mã nguồn không được thực thi trong môi trường chạy để sinh ca kiểm thử.
Trong kiểm thử tĩnh, quá trình chạy ca kiểm thử chỉ thực hiện duy 11 TIEU LUAN MOI download : skknchat@gmail.com nhất một lần với từng ca kiểm thử để tính toán giá trị trả về và đảm bảo ca kiểm thử thực thi không có vấn đề. Các bước tổng quát trong kĩ thuật này được trình bày ở Hình 0. Đầu tiên, đồ thị dòng điều khiển được xây dựng dựa trên mã nguồn và tiêu chí phủ kiểm thử. Bước tiếp theo, từ đồ thị dòng điều khiển chúng tôi xây dựng được tập đường kiểm thử.
Mỗi một đường kiểm thử trong tập đường kiểm thử mô tả hành vi chương trình với một miền bộ đầu vào nào đó. Sau đó, pha tìm ca kiểm thử thỏa mãn đường kiểm thử được tiến hành. Cuối cùng, ca kiểm thử được thực thi trong môi trường chạy.