1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Kiểm thử tích hợp với độ phức tạp tương đương kiểm thử thành phần

23 27 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 367,74 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kết quả, chỉ cần sử dụng các kỹ thuật kiểm thử đơn vị, có thể kiểm thử một chức năng trên toàn bộ hệ thống mà không cần sử dụng kỹ thuật kiểm thử tích hợp.. Ý tưởng giải quyết bài toán

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

ĐẶNG THỊ THU

KIỂM THỬ TÍCH HỢP VỚI ĐỘ PHỨC TẠP TƯƠNG ĐƯƠNG KIỂM THỬ THÀNH PHẦN

Ngành: Công nghệ thông tin

Chuyên ngành: Công nghệ phần mềm

Mã số: 60 48 10

TÓM TẮT LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Hà Nội – 2012

Trang 2

MỤC LỤC

DANH SÁCH CÁC BẢNG 3

DANH SÁCH CÁC HÌNH 3

CHƯƠNG 1 - GIỚI THIỆU 4

1.1 Mục tiêu nghiên cứu 4

1.2 Ý tưởng giải quyết bài toán 5

1.3 Cấu trúc luận văn 6

CHƯƠNG 2 - KIẾN THỨC NỀN TẢNG 6

2.1 Kiểm thử đơn vị 6

2.2 Phân tích tĩnh 7

2.3 Kiểm thử luồng điều khiển 7

2.4 Kiểm thử luồng dữ liệu 8

2.4.1 Kiểm thử định nghĩa - sử dụng ( Define/Use Testing) 8

2.4.2 Kiểm thử dựa trên lát cắt (Slice-based testing) 9

CHƯƠNG 3 - KỸ THUẬT KIỂM THỬ SINH MÔI TRƯỜNG 10

3.1 Chọn chức năng cần kiểm thử và xác định đơn vị 10

3.2 Xác định giao diện 10

3.3 Kiểm thử 13

CHƯƠNG 4 - ỨNG DỤNG 13

4.1 Giới thiệu phần mềm TestSystem 13

4.2 Kiểm thử chức năng Đăng nhập của phần mềm TestSystem 13

4.2.1 Xác định đơn vị 13

4.2.2 Xác định giao diện đơn vị – môi trường 14

4.2.3 Kiểm thử chức năng Đăng nhập 14

4.2.4 Báo cáo kết quả kiểm thử 22

KẾT LUẬN 22

TÀI LIỆU THAM KHẢO 23

Trang 3

CHƯƠNG 1 - GIỚI THIỆU 1.1 Mục tiêu nghiên cứu

Với những chương trình có kích thước nhỏ và chức năng đơn giản, ta dễ dàng tiến hành kiểm thử bằng kỹ thuật kiểm thử đơn vị Kiểm thử đơn vị có thể được lập trình viên thực hiện, có độ phức tạp nhỏ và tốn ít chi phí Với sự phát triển của ứng dụng công nghệ thông tin, hiện nay, những phần mềm thường lớn và chứa nhiều lớp Các lớp có thể được thực thi độc lập, sau đó được tích hợp lại thành một hệ thống như mong muốn Để kiểm thử một chức năng trên hệ thống

đó, người ta thường sử dụng kỹ thuật kiểm thử tích hợp

Việc kiểm thử tích hợp một chức năng trên toàn hệ thống thường có độ phức tạp cao, đòi hỏi kiểm thử trên một không gian kiểm thử lớn Để làm giảm không gian cần kiểm thử, người ta có thể tiếp cận theo hướng mô-đun hóa bằng cách chia phần mềm thành hai phần: đơn vị (unit) và môi trường Đơn vị bao gồm tập hợp một số lớp liên quan đến chức năng cần kiểm thử, môi trường là tập hợp các lớp mà đơn vị tương tác với Các tương tác này xẩy ra tại giao diện đơn

vị – môi trường Đơn vị có thể tác động một số hành vi lên môi trường và ngược lại, môi trường cũng có thể tác động một số hành vi lên đơn vị Sự tương tác giữa đơn vị và môi trường có thể là những hành vi về điều khiển, như gọi đến một trường hay một phương thức; hoặc có thể là những hành vi về dữ liệu, như thay đổi giá trị của một trường Tất cả những trường và những phương thức thể hiện hành vi của đơn vị và môi trường tạo nên giao diện đơn vị – môi trường

Với mỗi đơn vị cần kiểm thử, việc tạo ra môi trường là một công việc quan trọng Môi trường được chia thành hai phần là driver và stub Driver bao gồm các lớp gọi đến các trường hay các phương thức của đơn vị, còn stub là các lớp

mà đơn vị gọi đến Như vậy, driver thể hiện những hành vi mà môi trường tác động lên đơn vị, còn stub thể hiện những hành vi mà đơn vị tác động đến môi trường

Với việc định nghĩa các khái niệm như trên, có thể tổng quát hóa quá trình tạo ra môi trường cho đơn vị như hình 1.1 Toàn bộ phần mềm được thể hiện ở bên trái mũi tên Phần mềm gồm nhiều lớp Mỗi lớp được minh họa bởi hình chữ nhật có các dòng kẻ bên trong Đơn vị cần kiểm thử được bao quanh bởi đường viền chấm Các đường mũi tên nối giữa các lớp, thể hiện quan hệ giữa các lớp với nhau Những đường mũi tên nối trực tiếp với đường bao quanh đơn

vị thể hiện tương tác giữa đơn vị và môi trường Từ những thông tin trên, ta cần xác định driver và stub cho đơn vị Phần bên phải mũi tên thể hiện mối quan hệ giữa đơn vị, driver và stub Sau khi tạo ra môi trường cho đơn vị, để đảm bảo đơn vị được kiểm thử trên toàn bộ hệ thống, cần đặt đơn vị vào mối quan hệ với môi trường và kiểm thử đơn vị trong tổng thể mối quan hệ đơn vị – môi trường

Trang 4

hoàn toàn có thể sử dụng các kỹ thuật kiểm thử đơn vị như kiểm thử luồng điều khiển, kiểm thử luồng dữ liệu để kiểm thử

Hình 1.1 Tạo môi trường cho đơn vị [3]

Kết quả, chỉ cần sử dụng các kỹ thuật kiểm thử đơn vị, có thể kiểm thử một chức năng trên toàn bộ hệ thống mà không cần sử dụng kỹ thuật kiểm thử tích hợp Nghiên cứu này có ý nghĩa rất lớn trong việc kiểm thử những hệ thống phức tạp, làm đơn giản và tăng hiệu quả kiểm thử

1.2 Ý tưởng giải quyết bài toán

Để làm được công việc như trên, với mỗi chức năng cần kiểm thử của phần mềm, lần lượt làm các bước sau:

Bước thứ nhất - Xác định đơn vị: Sử dụng kỹ thuật phân tích tĩnh, cùng các tài liệu đặc tả, thiết kế, mã chương trình, xác định những lớp quyết định trực tiếp đến chức năng cần kiểm thử Tập hợp các lớp đó gọi là đơn vị

Bước thứ hai - Xác định giao diện đơn vị – môi trường: giao diện đơn vị – môi trường bao gồm hai phần: giao diện đơn vị và giao diện môi trường Giao diện đơn vị bao gồm các trường, phương thức của đơn vị mà môi trường tham chiếu đến Giao diện đơn vị thể hiện các hành vi của môi trường tác động lên đơn vị Ngược lại, giao diện môi trường bao gồm các trường, phương thức của các lớp trong môi trường mà đơn vị tham chiếu đến Giao diện môi trường thể hiện các hành vi của đơn vị tác động lên môi trường

Bước cuối cùng – Kiểm thử: sau khi xác định giao diện đơn vị - môi trường, tất cả các phương thức và các trường liên quan trực tiếp đến các hành vi mà đơn

vị và môi trường tác động qua lại lên nhau đã được chỉ rõ Sử dụng các kỹ thuật kiểm thử đơn vị như kiểm thử luồng điều khiển, kiểm thử luồng dữ liệu, tiến hành kiểm thử các trường và các phương thức trên Kết quả chính xác của các

Trang 5

trường và các phương thức trên đảm bảo chức năng ban đầu cần kiểm thử sẽ hoạt động đúng trên toàn hệ thống

Như vậy, với việc sử dụng kỹ thuật kiểm thử đơn vị, ta đã kiểm thử được chức năng cần kiểm thử trên toàn bộ hệ thống mà không cần sử dụng kỹ thuật kiểm thử tích hợp Trong luận văn này, ta gọi kỹ thuật kiểm thử được trình bày

ở trên là kỹ thuật kiểm thử sinh môi trường

1.3 Cấu trúc luận văn

Để trình bầy cụ thể các kiến thức, giúp người đọc tiếp cận phương pháp kiểm thử sinh môi trường nêu trên, nội dung của luận văn được tập trung vào 3 chương

Những kiến thức nền tảng về kiểm thử được trình bày trong chương 2 - Kiến

thức nền tảng Đó là những kiến thức về: kiểm thử đơn vị, phân tích tĩnh, các

kỹ thuật kiểm thử hộp trắng bao gồm: kiểm thử luồng điều khiển và kiểm thử luồng dữ liệu Những kiến thức này hỗ trợ người đọc trong việc tiếp cận và hiểu vấn đề mà luận văn nghiên cứu

Lý thuyết chính của luận văn được đề cập ở chương 3 – Kiểm thử sinh môi

trường Chương 3 trình bày cơ sở lý thuyết và các thuật toán được sử dụng

trong kỹ thuật kiểm thử sinh môi trường Kỹ thuật bao gồm các bước: xác định đơn vị, xác định giao diện đơn vị - môi trường, áp dụng kỹ thuật kiểm thử đơn

vị để kiểm thử chức năng cần kiểm thử

Việc áp dụng kỹ thuật kiểm thử sinh môi trường vào một ví dụ cụ thể được

trình bầy trong chương 4 - Ứng dụng Chương 4 giới thiệu khái quát về phần

mềm kiểm tra trực tuyến - TestSystem Sau đó trình bày từng bước áp dụng kỹ thuật kiểm thử sinh môi trường để kiểm thử chức năng Đăng nhập (Login) trong phần mềm TestSystem

CHƯƠNG 2 - KIẾN THỨC NỀN TẢNG 2.1 Kiểm thử đơn vị

Kiểm thử đơn vị là kỹ thuật kiểm thử trên một đơn vị của chương trình Đơn vị

đó được kiểm thử trong sự cô lập với toàn bộ chương trình Người ta thường hiểu với nghĩa rằng, một đơn vị là một hàm, một thủ tục, một phương thức hay một lớp [1]

Kiểm thử đơn vị là mức kiểm thử thấp nhất nhưng có ý nghĩa rất quan trọng Việc đảm bảo các đơn vị chạy chính xác sẽ làm giảm thời gian và chi phí rất nhiều cho các mức kiểm thử cao hơn về sau Quá trình kiểm thử đơn vị nên được tiến hành sớm nhất có thể ngay trong giai đoạn viết mã và cần được thực hiện thường xuyên và xuyên suốt cả chu kỳ phát triển phần mềm

Trang 6

Kiểm thử đơn vị bao gồm hai hướng: Kiểm thử hộp đen và kiểm thử hộp trắng Trong đó, kiểm thử hộp đen là kiểm thử dựa trên phân tích tất cả các hành vi có thể xẩy ra khi chạy chương trình mà không chạy chương trình thực

sự Còn kiểm thử hộp trắng là kiểm thử dựa trên việc chạy chương trình và phân tích kết quả đầu ra

2.2 Phân tích tĩnh

Phân tích tĩnh là một kỹ thuật đòi hỏi duyệt lại các tài liệu về yêu cầu, đặc tả, thiết kế và mã chương trình để kiểm tra tính logic của chương trình, mà không chạy chương trình [1]

Trong kiểm thử, phân tích tĩnh thường được dùng như kỹ thuật bổ xung cho các kỹ thuật kiểm thử truyền thống và kiểm tra mô hình Do sự không chính xác của phân tích, phân tích tĩnh ít chính xác hơn, nhưng nói chung có khả năng mở rộng tốt hơn kiểm tra mô hình Do an toàn, không giống như các kỹ thuật kiểm thử truyền thống, phân tích tĩnh có thể đưa ra những kết quả chính thức đúng đắn

2.3 Kiểm thử luồng điều khiển

Kiểm thử luồng điều khiển là một kỹ thuật kiểm thử hộp trắng do Tom McCabe

đề xuất Để tiếp cận với kiểm thử luồng điều khiển, ta cần làm quen với các khái niệm được trích dẫn trong tài liệu [2] như sau:

Đường thi hành (execution path): là một danh sách có thứ tự các lệnh trong chương trình được thực thi trong 1 lần chạy, bắt đầu từ điểm nhập đến điểm kết thúc của đơn vị

Đồ thị luồng điều khiển: là một công cụ hữu ích để hiển thị luồng điều khiển trong chương trình Trong đó các nút hình tròn biểu thị các đoạn câu lệnh trong chương trình, các cung biểu thị luồng điều khiển

Độ phức tạp Cyclomatic C là một thước đo phần mềm, đo độ phức tạp của chương trình Trong ngữ cảnh kiểm thử luồng điều khiển, độ phức tạp cyclomatic cho biết số đường thi hành tuyến tính độc lập cơ bản của thủ tục cần kiểm thử

Độ phức tạp Cyclomatic C = V(G) của đồ thị dòng điều khiển được tính bởi một trong các công thức sau :

o V(G) = E - N + 2, trong đó E là số cung, N là số nút của đồ thị

o V(G) = P + 1, nếu đồ thị chỉ chứa các nút quyết định luận lý (chỉ có 2 cung xuất Đúng/Sai) và P là số nút quyết định

Phủ kiểm thử: là tỉ lệ các thành phần thực sự được kiểm thử so với tổng thể sau khi đã kiểm thử các trường hợp kiểm thử được chọn Phủ càng lớn thì độ tin cậy càng cao

Trang 7

Vậy để kiểm thử luồng điều khiển một đơn vị, lần lượt tiến hành các bước sau:

o Xác định phủ kiểm thử

o Xây dựng đồ thị luồng điều khiển dựa trên phủ kiểm thử

o Tính độ phức tạp Cyclomatic của đồ thị (=C)

o Xác định C đường thi hành tuyến tính cơ bản cần kiểm thử

o Tạo từng trường hợp kiểm thử cho từng đường thi hành tuyến tính cơ bản

o Thực hiện kiểm thử trên từng trường hợp kiểm thử

o So sánh kết quả có được với kết quả được kỳ vọng

o Lập báo cáo kết quả kiểm thử

2.4 Kiểm thử luồng dữ liệu

2.4.1 Kiểm thử định nghĩa - sử dụng ( Define/Use Testing)

Để tiếp cận với lý thuyết kiểm thử định nghĩa – sử dụng, cần làm quen với những một số định nghĩa về nút định nghĩa, nút sử dụng, đường định nghĩa – sử dụng,… Nội dung các định nghĩa này được trích dẫn từ tài liệu [4]

Những định nghĩa này áp dụng cho một chương trình P P có đồ thị chương trình G(P) và có tập hợp các biến chương trình V G(P) được thiết lập với các nút là các đoạn chương trình, các cạnh biểu diễn thứ tự các nút G(P) có một nút đơn đầu vào và một nút đơn đầu ra Trong G(P) không cho phép một cạnh bắt đầu từ một nút và kết thúc tại chính nút đó

Với chương trình P được xác định như trên, ta có các định nghĩa sau đây:

Định nghĩa 1

Nút n G(P) là nút định nghĩa (defining node) của biến v V, ký hiệu là

DEF(v,n), nếu giá trị của biến v được định nghĩa tại đoạn câu lệnh tương ứng với nút n

Định nghĩa 2

Nút n G(P) là nút sử dụng (usage node) của biến v V, ký hiệu là

USE(v,n), nếu giá trị của biến v được sử dụng tại đoạn câu lệnh tương ứng với nút n

Định nghĩa 3

Một nút sử dụng USE(v,n) là một sử dụng mệnh đề (predicate use) (kí hiệu

là P-use) nếu câu lệnh n là một câu lệnh mệnh đề, trong trường hợp ngược lại

USE(v,n) là một sử dụng tính toán (kí hiệu là C-use)

Định nghĩa 4

Trang 8

Đường định nghĩa – sử dụng (definition-use path) với một biến v là một

đường thuộc PATHS(P) với m và n lần lượt là các nút bắt đầu và nút kết thúc, trong đó DEF(v, m) và USE(v,n) lần lượt là các nút định nghĩa và nút sử dụng của biến v

Định nghĩa 5

Đường định nghĩa - rõ ràng (definition-clear path) với một biến v là đường

định nghĩa - sử dụng trong PATHS(P) với nút bắt đầu và kết thúc là DEF(v,m)

và USE(v,n), đồng thời không tồn tại một nút định nghĩa khác của biến v trong đường

Vậy để kiểm thử định nghĩa – sử dụng một chương trình, cần tiến hành kiểm thử theo quy trình sau :

o Xác định phủ kiểm thử

o Xây dựng đồ thị chương trình dựa trên phủ kiểm thử

o Tìm các đường định nghĩa - sử dụng với mỗi biến

o Với mỗi đường định nghĩa - sử dụng, có thể xây dựng một trường hợp kiểm thử đi qua các câu lệnh trong đường đó để kiểm thử dòng dữ liệu của biến

2.4.2 Kiểm thử dựa trên lát cắt (Slice-based testing)

Bắt đầu bằng việc phát triển định nghĩa về lát cắt chương trình Tiếp tục sử dụng những ký hiệu dùng cho các đường định nghĩa - sử dụng ở mục 2.4.1: Một chương trình P có đồ thị chương trình G(P), và có tập hợp các biến chương trình V Đầu tiên cần xem xét các định nghĩa để cho phép chuyển đổi các nút trong G(P) thành các đoạn câu lệnh

Như vậy một lát cắt nắm bắt được thời gian thực thi các hành động của chương trình tương ứng với các biến trong lát cắt Cuối cùng sẽ phát triển một mạch (đồ thị hở, có hướng) của các lát cắt, trong đó, các nút là các lát cắt, các cạnh tương ứng với các mối quan hệ tập hợp con

Trang 9

CHƯƠNG 3 - KỸ THUẬT KIỂM THỬ SINH MÔI TRƯỜNG

Chương 3 trình bầy từng bước để tạo ra môi trường cho đơn vị và tiến hành kiểm thử đơn vị trong sự tương tác với môi trường Quá trình bao gồm các bước: chọn chức năng cần kiểm thử; xác định đơn vị gồm những lớp nào; xác định giao diện đơn vị - môi trường; liệt kê các hành vi của môi trường lên đơn vị và các hành vi của đơn vị lên môi trường; cuối cùng, tiến hành kiểm thử trên tổng thể mối quan hệ đơn vị và môi trường để đảm bảo tính đúng đắn của chức năng

3.1 Chọn chức năng cần kiểm thử và xác định đơn vị

Những phần mềm lớn có rất nhiều lớp và nhiều chức năng Ta cần xác định chức năng cần kiểm thử Sử dụng kỹ thuật phân tích tĩnh, cùng các tài liệu về đặc tả, thiết kế, mã chương trình, xác định những lớp nào quyết định trực tiếp đến chức năng này Tập hợp những lớp đó gọi là đơn vị, những lớp này được gọi là các lớp của đơn vị

3.2 Xác định giao diện

Nội dung bước hai là tìm hiểu cấu trúc của giao diện đơn vị – môi trường Giao diện của đơn vị - môi trường gồm hai phần: giao diện đơn vị và giao diện môi trường Giao diện đơn vị thể hiện các hành vi mà môi trường có thể thực thi trên đơn vị Ngược lại, giao diện môi trường thể hiện các hành vi mà đơn vị tác động lên môi trường

Giao diện đơn vị:

Bằng việc sử dụng kỹ thuật phân tích tĩnh, lần lượt phân tích các lớp của đơn vị Giao diện đơn vị bao gồm tất cả các phương thức và các trường công khai (public) của các lớp trong đơn vị, cái mà có thể bị tham chiếu bởi môi trường Nghĩa là, lần lượt xét các trường và các phương thức của các lớp trong đơn vị, xem những trường, phương thức nào được gọi đến bởi môi trường, hay

bị thay đổi giá trị bởi môi trường

Để xác định giao diện đơn vị ta sử dụng thuật toán 3.1

Thuật toán 3.1 – Thuật toán xác định giao diện đơn vị [3]

Đầu vào: U: tập các lớp của đơn vị

Đầu ra: S: tập các phương thức và các trường của đơn vị

Khởi tạo: S =

1: for each class u U do

2: for each method m u.getMethods() do

Trang 10

Giao diện môi trường:

Để xác định giao diện môi trường, phân tích lần lượt các phương thức và các trường trong từng lớp của đơn vị, tìm kiếm các liên kết ngoài mà các lớp của đơn vị tham chiếu đến

Để xác định giao diện môi trường, ta sử dụng thuật toán 3.2

Thuật toán 3.2: Thuật toán xác định giao diện môi trường [3]

Đầu vào: U: tập các lớp của đơn vị, CG: đồ thị gọi các phương thức

Đầu ra: E: tập các lớp, các phương thức, các trường của môi trường

Trang 11

thêm nó vào môi trường Công việc đó được minh họa bởi hảm envCheck trong

thuật toán Sau đó, lần lượt xét các phương thức và các trường trong các lớp của đơn vị Với mỗi trường, kiểm tra xem kiểu của nó có cần được thêm vào môi

trường hay không bởi hàm envCheck Với mỗi phương thức, lần lượt kiểm tra

giá trị trả về, từng tham số, từng biến nội bộ và từng câu lệnh của nó Hàm

envCheckSignature kiểm tra kiểu của giá trị trả về, kiểu của các tham số của

hàm Với các câu lệnh trong phương thức, tìm xem nó có gọi đến phương thức hay trường nào ngoài đơn vị hay không Nếu trong câu lệnh có lời gọi hàm, tìm xem hàm đó là gì, thuộc lớp nào Kiểm tra xem lớp đó có nằm ngoài đơn vị không và nếu lớp đó nằm ngoài và hàm đó chưa được thêm vào môi trường thì thêm hàm đó vào môi trường Tương tự, nếu trong câu lệnh có tham chiếu đến một trường khác ngoài lớp đang xét, kiểm tra xem trường đó thuộc lớp nào Lớp đó có nằm ngoài đơn vị hay không, nếu có, kiểm tra xem trường đó đã được thêm vào môi trường chưa, nếu chưa, thêm vào môi trường

Đơn vị và môi trường có thể tác động qua lại với nhau về mặt điều khiển hay về mặt dữ liệu Môi trường có thể làm thay đổi giá trị của trường hay gọi đến một trường, một phương thức nào đó của đơn vị Tập hợp những hành vi đó gọi là những hành vi mà môi trường tác động lên đơn vị Sử dụng giao diện đơn

vị được xác định ở trên, có thể liệt kê ra những hành vi của môi trường tác động lên đơn vị, từ đó đòi hỏi cần tiến hành kiểm thử những trường, phương thức nào của đơn vị để đảm bảo những hành vi của môi trường lên đơn vị có kết quả chính xác

Tương tự, đơn vị cũng có thể có những tác động ngược lại lên môi trường, chẳng hạn như đơn vị có thể sử dụng một phương thức hay trường nào đó nằm ngoài đơn vị Những hành vi đó gọi là hành vi của đơn vị lên môi trường Với kết quả tìm được giao diện môi trường ở trên, có thể xác định được cần tiến

Ngày đăng: 06/03/2020, 00:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w