« Home « Kết quả tìm kiếm

KIỂM THỬ THEO MÔ HÌNH FSM VÀ ỨNG DỤNG CỦA NÓ TRONG WEB


Tóm tắt Xem thử

- Xây dựng mô hình và kiểm tra cho thiếu, thừa trạng thái và sự chuyển tiếp..
- Sự kiểm thử cho những trạng thái và sự chuyển tiếp.
- Sự lựa chọn đường dẫn.
- Những yếu tố tĩnh: bao gồm trạng thái (state) và sự chuyển tiếp trạng thái (state transition).
- Những sự chuyển tiếp trạng thái thường được gọi là các sự chuyển tiếp.
- Số lượng của những trạng thái là hữu hạn.
- Sự chuyển tiếp trực tiếp từ trạng thái A sang trạng thái B chỉ có thể theo 1 đường link duy nhất là A-B.
- Trong trường hợp mà số lượng đầu vào và đầu ra có thể chiếm một số lượng lớn hoặc một số lượng vô hạn các giá trị, thường thường chúng ta cần phải nhóm chúng vào các phân vùng.
- Mỗi trạng thái được mô tả như là một nút (node) trong đồ thi.
- Mỗi sự chuyển tiếp được diễn tả như một đường link được kết nối trực tiếp từ trạng thái này sang trạng thái khác.
- Thông thường một trạng thái thì tương ứng với vài trạng thái xử lý chương trình, hoặc là một khoảng thời gian cụ thê.
- hoặc là tương ứng với 1 trường hợp cá biệt giữa những hoạt động nào đó.Ví dụ, hãy xem xét trình tự thực hiện sau đây.
- Trạng thái mà chương trình xử lý hoàn thành thì được gọi là trạng thái cuối cùng.
- Sự lướt mỗi trang Web có thể coi là 1 trạng thái.
- Chúng ta có thể dừng lại bất kỳ lúc nào bằng cách tắt thanh Web Browser hoặc đơn giản là không tải Web nữa.
- Trang Web cuối cùng được xem được coi là trạng thái cuối cùng.
- Trạng thái FSM đại diện cho mục đích chính của việc sử dụng Web và người sử dụng có thấy điều đó 1 cách dễ dàng.
- Một ví dụ cụ thể của FSMs cho trường hợp này miêu tả những cho sự xử lý cuộc gọi trong hệ thống mạng thông tin liên lạc.
- Trong trường hợp đó, thường chỉ có 1 sự chuyển tiếp là có thể xảy ra, bởi vì nếu không, thì phải có những điều kiện và thông tin đầu vào rõ ràng để chỉ rõ sự chuyển tiếp nào được phép diễn ra.Ví dụ, sau khi trạng thái A, trạng thái tiếp theo sau luôn luôn là B.
- Những quá trình chuyển tiếp khác được kết nối với những thông báo, điều kiện rõ ràng như thông tin đầu vào và một sô thông tin đầu ra có thể.
- Tương tự trạng thái E cũng có thể sau trạng thái D nếu cuộc gọi được hình thành, hoặc trạng thái B sau trạng thái D trong trường hợp các nhiệm vụ truy cập hệ thống được hoàn thành..
- Các đồ thị như thế có thể chỉ rõ bằng 1 bộ các trạng thái cho phép, và các input/output được kết nối.
- đối với đầu vào được chỉ rõ bằng 3 thành phần và output không xác định.
- Ví dụ đồ thị 1.1 có thể được mô tả bằng bảng 1.1, có thể được giải thích như sau: Bảng 1.1: Ví dụ về finite-state machine (FSM) cho tiến trình gọi trong sự mô tả kiểu bảng ma trận.
- Trạng thái được liệt kê theo cả hàng và cột.
- Hàng mô tả những trạng thái ban đầu và những cột mô tả trạng thái kết thúc cho sự chuyển tiếp xác định.
- Nếu sự chuyển tiếp từ trạng thái X( hàng X) sang trạng thái Y( cột Y) được cho phép, thì phần tử tương ứng( ở vị trí dòng X, cột Y) được đánh đấu bằng chính input/output của nó.
- Như chúng ta thấy, sự mô tả kiểu ma trận là rất hệ thống, thường thường là kiểu ma trận vuông (N x N ô) và không khó để mô tả.
- Vì thế nó được dùng 1 cách rộng rãi để mô tả FSMs.
- Về cơ bản, 1 tập trạng thái được mô tả bằng 1 danh sách và sự chuyển tiếp được cho phép thì được mô tả cũng bằng 1 danh sách, bao gồm các yếu tố, ví dụ như cấu trúc {C, B, “không thể nhận kênh gọi.
- Cả 3 cách mô tả của FSMs : đồ thị, ma trận, danh sách đều được dùng rộng rãi trong tài liệu kiểm thử.
- Những rắc rối cơ bản đối với hệ thống được mô hình hóa bởi FSMs Như đã đề cập ở trên, FSMs có thể được dùng để mô hình cả 2 trường hợp: Mô hình hành vi hệ thống bên ngoài (black-box view) và thực hiện chi tiết các cài đặt cụ thể (while-box view).
- Lỗi trạng thái là những trạng thái có hành vi khó xác định.
- Sự thiếu trạng thái: tương ứng với những trường hợp có trạng thái hiện tại nhưng trạng thái tiếp theo bị thiếu.
- Trường hợp đặc biệt của thiếu trạng thái là: hệ thống có trạng thái ban đầu là không xác định.
- Nhiều sự chuyển tiếp cho cùng 1 input cũng có thể được kết nối với 1 vài trạng thái thêm.
- Trong trường hợp đó thì trạng thái hiện tại cũng là 1 trạng thái lỗi bởi vì hành vi của nó là khó xác định..
- Những vấn đề về sự chuyển tiếp: thiếu, thừa và lỗi chuyển tiếp..
- Thiếu sự chuyển tiếp: là 1 trường hợp tương ứng với 1 trạng thái hiện tại và đầu vào input hợp lệ nhưng trạng thái tiếp theo là thiếu hoặc không xác định.
- Thêm sự chuyển tiếp: được liên kết với nhiều sự chuyển tiếp cho cùng 1 trạng thái hiện tại và input.
- Những vấn đề về input: Trong sự kiểm thử dựa trên FSMs, đặc biệt coi những vấn đề input như 1 phần của vấn đề trạng thái và vấn đề sự chuyển tiếp, giả định rằng tất cả cần phải được xử lý chính xác thông qua một số sự chuyển tiếp trạng thái của FSM này.
- Bỏ qua các đầu vào không hợp lệ: như là đứng yên ở cùng 1 trạng thái cho những trường hợp input không hợp lệ..
- Xây dựng mô hình và kiểm tra cho thiếu, thừa trạng thái và sự chuyển tiếp.
- Trong trường hợp trước đây, các nguồn thông tin bao gồm những thông số kỹ thuật sản phẩm bên ngoài hoặc cách sử dụng mong đợi.
- Trong trường hợp thứ 2, thông tin bên trong sản phẩm ,như là cấu trúc và sự kết nối của những thành phần cài đặt trong tài liệu thiết kế sản phẩm và trong mã hóa chương trình có thể được sử dụng cho quá trình xây dựng mô hình.
- Đối với nhiều sản phẩm hiện có, trường hợp kiểm thử và kiểm tra danh sách đã có, có thể được sử dụng như là 1 nguồn thông tin rất quan trọng.
- Chúng ta có thể cùng 1 lúc xem xét các yếu tố theo những bước sau đây:.
- Bước 2.1: Liệt kê và xác nhận trạng thái.
- Chúng ta cần giữ số lượng các trạng thái ở các mức có thể quản lý được từ 1 ít đến vài chục nhưng không phải hàng nghìn.
- Trong trường hợp hệ thống thật sự cần được mô tả bởi 1 số lượng trạng thái rất lớn, chúng ta có thể sử dụng lồng nhau hoặc hệ thống FSMs có trật tự, như sẽ mô tả chi tiết hơn trong tinh lọc mô hình dưới đây.
- Như đã đề cập ở phần 1.1, khi mà số lượng các giá trị input có thể rất lớn hoặc là vô hạn, chúng ta có thể sử dụng sự phân vùng input để giúp đỡ cho quá trình xác định sự chuyển tiếp cụ thể.
- Các phân vùng này mô tả những lớp tương đương với những đặc điểm của sự chuyển tiếp sẽ được thực thi.
- Hậu quả là khi mà số lượng lớn trạng thái và sự chuyển tiếp cần được mô tả trong mô hình, chúng ta thường sử dụng lồng FSMs hoặc FSMs phân cấp.
- Ý tưởng cơ bản để xác định trạng thái và sự chuyển tiếp thiếu thì tương tự như sự kiểm thử dựa trên kiểm tra danh sách và sự phân vùng.
- Ví dụ, sự kiểm tra danh sách dựa trên những chi tiết kỹ thuật chức năng của sản phẩm có thể được dùng để kiểm tra trực tiếp những trạng thái thiếu, hoặc những sự chuyển tiếp thiếu.
- Tuy nhiên, những chi tiết kỹ thuật chức năng đó thường tuơng ứng với những trạng thái và sự chuyển tiếp ở mức cao, những trạng thái đó cần được tinh chế đến cùng 1 mức của những trạng thái và sự chuyển tiếp đạt được bởi FSMs.
- Với những mức thấp hơn của FSMs, thông tin chi tiết sản phẩm hoặc mã hóa chương trình thường được dùng để giúp xác nhận những trạng thái và chuyển tiếp thiếu.
- Kiểm tra những trạng thái và sự chuyển tiếp thừa có thể làm theo cùng 1 thủ tục được làm cho có giá trị chéo với các nguồn thông tin.
- Tuy nhiên, sự kiểm tra đó thường khó hơn rất nhiều so với sự xác nhận những trạng thái thiếu, tương tự như trường hợp yêu cầu khả năng truy vết cần thiết của sản phẩm.
- Nếu mọi trạng thái và mọi sự chuyển tiếp có thể được truy vết lại những nguồn thông tin tương ứng với sự tạo ra chúng, thì sự kiểm tra đó có thế được hoàn thành 1 cách dễ dàng.
- Thường thì những trạng thái không thể xác định này mô tả những trạng thái thừa hoặc 1 vài rắc rối khác.
- Ngoài những phương pháp kiểm tra những trạng thái và sự chuyển tiếp thiếu, thừa, thì đôi khi nó cũng có thể được kiểm tra cùng với những trạng thái, sự chuyển tiếp không chính xác.
- Trạng thái hay là nút đưa ra thông tin.
- Chúng ta cần đảm bảo rằng mỗi 1 trạng thái đều có thể đạt tới và truy cập của 1 số trường hợp thử nghiệm.
- Đó là những trạng thái và vấn đề xuyên suốt trong học thuyết đồ thị (Deo 1974, Knuth 1974), kết quả là rất nhiều thuật toán có thể đi qua các nút đồ thị được dùng để giúp chúng ta phát triển các trường hợp thử nghiệm.
- Sự chuyển tiếp và kết nối thông tin đưa ra Chúng ta cần đảm bảo rằng mỗi 1 sự kết nối hoặc sự chuyển tiếp thì đều được làm rõ, bao phủ bởi 1 số trường hợp thử nghiệm.
- Sự kiểm thử của sự tương tác ở trên thường được gọi lần lượt là: sự kiểm thử dòng điều khiển (CFT) và sự kiểm thử dòng dữ liêu (DFT).
- Những kỹ thuật này là những kỹ thuật white-box truyền thống áp dụng cho việc kiểm thử dòng chức năng các mức của hệ thống, sự phụ thuộc dữ liệu và sự tương tác có liên quan..
- Sự kiểm thử dòng điều khiển cơ bản Sự kiểm thử dòng điều khiển(CFT) là sự mở rộng một cách tự nhiên và trực tiếp của sự kiểm thử FSM với một loại chuyên dụng của FSMs gọi là đồ thị dòng điều khiển (CFGs) và tập trung vào hoàn thành đường dẫn thực thi thay vì trạng thái hoặc các liên kết.
- Đồ thị dòng điều khiển (CFGs) có thể được coi là trường hợp đặc biệt của loại thứ hai, với các yếu tố và các đặc điểm quy định như sau.
- Để rõ ràng hơn, chúng ta chia các nút thành 3 loại với sự xử lý thông tin được kết nối với các nút xử lý và với 1 nút mối nối tương ứng với mỗi nút nhánh..
- Vì không cho phép có link trùng lặp, chúng ta chỉ có thể xác định đường dẫn bởi một chuỗi các nút được duyệt qua.
- Ở sự biến đổi khác của CFG thường được sử dụng trong lý thuyết và thực hành, chúng ta có thể chập J1 và C2 thành một nút.
- Chú ý rằng việc sử dụng “goto” không được bao gồm trong thủ tục xây dựng CFG ở trên.
- Việc sử dụng tự do “goto” sẽ tạo ra những chương trình rất xấu tương ứng với trường hợp CFGs rất khó được kiểm thử.
- chuỗi lồng nhau như là G3 lồng trong G2 trong Hình 2.1.
- Tất nhiên nhiều chuỗi mắt xích hay nhiều cấp lồng nhau có thể được sử dụng trong các chương trình và phản ánh trong CFGs của nó.
- Sự lựa chọn đường dẫn Chúng ta tiếp tục giới thiệu kỹ năng để lựa chọn 1 cách hệ thống các đường dẫn cho cấu trúc CFGs.
- Định nghĩa đường dẫn từ dưới lên..
- Cấu trúc CFG là một cấu trúc mà chỉ có chuỗi mắt xích liên tục và chuỗi lồng nhau, chỉ có 1 nút vào và chỉ có1 nút ra.
- Cấu trúc CFGs có thể được phân tích thành các đồ thị con sub-CFGs, và các sub-CFGs có thể được kết nối thông qua chuỗi mắt xích liên tục hoặc chuỗi lồng nhau.
- G3), với G3 lồng trong G2, và G1 móc nối với G2.
- G3) chỉ ra rằng G3 lồng trong nhánh phải của G2 mà trong đồ thị thì là nhánh F, với việc sử dụng.
- chỉ ra rằng không có sub-CFGs nào lồng vào nhánh trái T của G2.
- Còn G2 (G3) chỉ ra rằng G3 được lồng vào trong G2 nhưng không biết lồng vào nhánh trái hay phải của G2.
- Đường biên cho G1, G2, G3 trong hình 2.1 được chỉ rõ bằng hình chữ nhật nét đứt.
- Với sự phân tích CFG ở trên, tôi có thể thực hiện định nghĩa đường dẫn từ dưới lên.
- Khi 2 CFGs, GI với đường dẫn M và G2 với đường dẫn N, kết hợp thành một CFG cấp cao hơn, chúng ta có thể xác định đường dẫn như sau.
- Nghĩa là mỗi đường dẫn trong M đường luôn có thể nối với 1 đường dẫn trong N đường dẫn.
- Và tất cả các đường dẫn đó tạo thành đường dẫn trong G.
- Với chuỗi lồng nhau, G = G1 (G2), thì G sẽ có M + N - 1 đường dẫn.
- Nghĩa là, một đường dẫn trong đường dẫn ở G1 sẽ được thay thế bởi N đường dẫn ở G2.
- Ví dụ, chuỗi lồng nhau trong CFGs hoàn hảo dạng nhị phân ở hình 2.2 là G2.
- G3) có 3 đường dẫn là: T, FT, FF, đúng theo công thức 2+2-1=3 đường dẫn.
- Đầu tiên chúng ta xác định 2 đường dẫn trong G3, tương ứng với C3=T và C3=F.
- Tiếp theo, đường dẫn lồng G3 trong G2 tạo ra 3 đường dẫn, tương ứng với C2=T.
- Chúng ta có thể biểu thị đường dẫn như T-, FT, FF.
- Cuối cùng chúng ta kết hợp G2 (G3) với G1 để tạo ra 6 đường dẫn: TT-, TFT, TFF, FT-, FFT, FFF.
- 3.1.4.Cập nhật đường dẫn Chìa khóa để để làm cập nhật đường dẫn là các nút quyết định hay các nút nhánh hay các điều kiện kết nối giữa các nút.
- Ví dụ, nếu những biến logic được sử dụng cho CFG trong hình 2.1, thì 6 đường dẫn TT-, TFT, TFF, FT-, FFT, FFF được cập nhật một cách trực tiếp