Cơ sở Kiểm thử Phần mềm

MỤC LỤC

Thuật ngữ

System Testing Kiểm thử hệ thống SUT System Under Test Hệ thống cần kiểm thử SQA Software Quality Assur-. V&V Verification and Validation Kiểm chứng và thẩm định White-box Testing Kiểm thử hộp trắng.

Một số ví dụ

  • Bài toán tam giác
    • Hàm NextDate (ngày kế tiếp)
      • Hệ thống rút tiền tự động đơn giản

        Một trong các lý do làm bài toán này được sử dụng rất phổ biến có thể là vì nó tiêu biểu cho việc định nghĩa không đầy đủ làm phương hại đến việc trao đổi thông tin giữa khách hàng, người phát triển và người kiểm thử. Dù nó đặc trưng cho các hệ thời gian thực nhưng vẫn thích hợp với mục đích của ta vì các nhà thực hành trong lĩnh vực thương mại điện tử đều cho rằng ngay cả các hệ COBOL truyền thống cũng gặp nhiều vấn đề liên quan đến các hệ thời gian thực.

        Hình 2.1: Sơ đồ khối cho cài đặt chương trình tam giác truyền thống.
        Hình 2.1: Sơ đồ khối cho cài đặt chương trình tam giác truyền thống.

        Cơ sở toán học rời rạc cho việc kiểm thử

        Lý thuyết tập hợp

          Có ba cách để định nghĩa một tập hợp: liệt kê tất cả các phần tử của nó, hoặc bằng một quy tắc quyết định xác định các phần tử của nó, hoặc bằng việc xây dựng từ các tập hợp khác đã biết. Điều bất lợi của cách biểu diễn này là đôi khi khá phức tạp, chẳng hạn quy tắc được biểu diễn bằng các biểu thức lôgic với các lượng từ tồn tại (ký hiệu là∃) và với mọi (ký hiệu là∀).

          Hình 3.2: Các biểu đồ Venn cho các phép toán cơ sở.
          Hình 3.2: Các biểu đồ Venn cho các phép toán cơ sở.

          Hàm

            Vì dữ liệu đầu vào và dữ liệu đầu ra đã bao hàm một thứ tự tự nhiên giữa chúng, hàm f được tính bởi chương trình chính là tập các cặp được sắp trong đó phần tử thứ nhất của cặp là từ miền xác định, và phần tử thứ hai là từ miền giá trị. Phân biệt giữa “vào” và “lên” được dùng trong kiểm thử hàm dựa trên miền giá trị và miền xác định, và các hàm một-một thường yêu cầu nhiều ca kiểm thử hơn các hàm nhiều-một khi chúng có cùng miền xác định.

            Quan hệ

              Định nghĩa loại và tham gia của quan hệ trong trường hợp này phức tạp và phong phú hơn và có thể được mở rộng từ các định nghĩa trên dùng các kết hợp khác nhau của tích Đề-các. Quan hệ này là phản xạ vì bất kỳ một phần tử của A đều nằm trong một phần tử nào đó của phân hoạch, quan hệ này là đối xứng vì nếu a, bở trong cùng một phần tử của phân hoạch thì b, acũng cùng nằm trong phần tử đó, quan hệ này cũng bắc cầu vì a, bở trong cùng một tập Aj và b, cnằm trong cùng một tậpAi thì Ai = Aj, và do đó a, c cùng nằm trong Aj.

              Lôgic mệnh đề

                Chúng ta cũng có thể đặc tả thứ tự mà các phép toán lôgic trong một biểu thức lôgic cần thực hiện với các quy ước thông thường về các dấu ngoặc và bằng cách sử dụng thứ tự ưu tiên của các phép toán là: phép phủ định, phép hội, và sau cùng là phép tuyển. Hai biểu thức lôgic P và Q được gọi là tương đương, ký hiệu là P ⇔ Q, nếu và chỉ nếu chúng có cùng giá trị chân lý đối với bất kể giá trị chân lý nào của các mệnh đề cơ sở thành phần chứa trong các biểu thức này.

                Lý thuyết xác suất

                Vì tập chân lý của một hằng đúng làU và của một mâu thuẫn là∅, ta có xác suất củaU (hằng đúng) là 1và xác suất của ∅(mâu thuẫn) là 0. Vai trò của vũ trụ chuyên đề là quan trọng trong việc tính xác suất, và việc xác định vũ trụ chuyên đề (hay không gian xác suất) cho đúng với bài toán là một nghệ thuật và cần phải được thực hành nhiều.

                Lý thuyết đồ thị

                • Đồ thị
                  • Đồ thị có hướng
                    • Các loại đồ thị dùng cho kiểm thử

                      Bậc của một đỉnh v của một đồ thịGlà số các cạnh của G nối với v và được ký hiệu là deg(v). Ta cũng có thể coi bậc của một đỉnh đặc trưng cho tính “phổ biến” của đỉnh đó. Các nhà khoa học xã hội đã dùng đồ thị để mô tả sự tương tác trong xã hội, trong đó mỗi người là một đỉnh và các cạnh biểu diễn mối quan hệ “là bạn” hoặc “liên lạc với”. Nếu ta vẽ một đồ thị với các đỉnh là các đối tượng và các cạnh là các thông. điệp giữa các đối tượng, thì bậc của đỉnh cho biết quy mô của kiểm thử tích hợp thích hợp đối với đối tượng của đỉnh đó. Đồ thị không nhất thiết được biểu diễn bởi hình vẽ. Chúng có thể được biểu diễn bằng ma trận tới, mà dạng biểu diễn này rất quan trọng đối với người kiểm thử. Khi một đồ thị được gán cho một thể hiện nào đó, ma trận tới luôn cung cấp những thông tin có ích về thể hiện này. trong đó phần tử ở hàng ivà cộtj là1nếu đỉnhvi là một đầu mút của cạnh ej, là 0 nếu ngược lại. Ta có các quan sát sau đây đối với ma trận tới: thứ nhất là tổng các cột luôn bằng 2 vì mỗi cạnh chỉ có hai đầu mút, và được dùng làm điều kiện để kiểm tra tính tương thích, thứ hai là tổng của một hàng luôn bằng bậc của đỉnh tương ứng với hàng đó. Khi bậc của một đỉnh bằng 0, ta gọi đỉnh đó là đỉnh cô lập. Đỉnh cô lập có thể tương ứng với mã không đạt được hoặc đối tượng thừa. Ma trận liền kề của đồ thị là một dạng biểu diễn khác bổ sung cho ma trận tới. Vì ma trận liền kề liên quan đến tính liên thông, khái niệm này là cơ sở cho nhiều khái niệm sau này về đồ thị. , en}), là một ma trận mìm, trong đó phần tử ở hàng ivà cộtj là1nếu và chỉ nếu đỉnhvi được nối với đỉnh vj bởi một cạnh, là 0nếu ngược lại. Máy hữu hạn trạng thái (viết tắt là FSM - Finite State Machine) là một đồ thị có hướng(S, T, Ev, Act), trong đó S là tập hữu hạn các trạng thái và là đỉnh của đồ thị, T là tập các chuyển trạng thái và là các cạnh của đồ thị, Ev và Act là các tập các sự kiện và hành động liên kết với các cạnh trong T.

                      Hình 3.9: Đồ thị của các cấu trúc của lập trình có cấu trúc.
                      Hình 3.9: Đồ thị của các cấu trúc của lập trình có cấu trúc.

                      Bài tập

                      Giả sử ta xây dựng một đồ thị trong đó các đỉnh là người, và cạnh tương ứng với một dạng nào đó của mối tương tác xã hội, chẳng hạn “nói với” hoặc “bạn bè với”. Tìm các khái niệm trong lý thuyết đồ thị tương ứng với các khái niệm xã hội như tính phổ biến, hội.

                      Hình 3.14: Các đồ thị cho bài tập 10.
                      Hình 3.14: Các đồ thị cho bài tập 10.

                      Khảo sát đặc tả và mã nguồn

                      • Khảo sát đặc tả
                        • Khảo sát mã nguồn

                          Việc tài liệu này được tạo ra thế nào và viết ra dưới dạng nào không phải là mối quan tâm của người kiểm thử, miễn là nó đã được đúc kết thành một tài liệu mô tả sản phẩm để phát triển và người kiểm thử sẽ tiến hành các khảo sát trên tài liệu này để tìm các lỗi đặc tả có thể có. • Tính đồng đội.Khi việc phản biện được tiến hành một cách thực sự, nó sẽ là chỗ để người lập trình và người kiểm thử gặp gỡ và phát triển lòng kính trọng lẫn nhau về kỹ năng công việc và hiểu biết về công việc của nhau cũng như tầm quan trọng của họ.

                          Kiểm thử chức năng

                          Kiểm thử giá trị biên

                          • Một số dạng kiểm thử giá trị biên .1 Kiểm thử giá trị biên mạnh
                            • Ví dụ minh họa

                              Để tăng khả năng phát hiện lỗi, kiểm thử giá trị biên thường lấy năm ca kiểm thử cho mỗi biến là các giá trị: cực đại, cực tiểu, các giá trị cạnh chúng trong miền xác định (gọi là cận biên hoặc cạnh biên), và một giá trị ở giữa miền xác định đại diện cho giá trị thông thường. Tổng quát hóa kiểm thử giá trị biên cho hàmn biến số và mỗi biến có các giá trị biên và cận biên khác nhau ta có thể dễ thấy sẽ có 1 + 4n ca kiểm thử vì xuất phát từ một ca kiểm thử gồm các giá trị trung bình của các biến, ta thay nó bằng bốn giá trị biên và cận biên: min, min+, max, và max−.

                              Bảng 5.1: Các ca kiểm thử các giá trị biên cho bài toán Tam giác
                              Bảng 5.1: Các ca kiểm thử các giá trị biên cho bài toán Tam giác

                              Kiểm thử lớp tương đương

                              • Phân loại kiểm thử lớp tương đương .1 Kiểm thử lớp tương đương yếu
                                • Ví dụ minh họa

                                  Bản chất ở đây là chúng ta cho rằng chương trình sẽ thực hiện cùng các lệnh giống nhau với các ca kiểm thử cùng một lớp tương đương, nên hành vi của chương trình là tương tự nhau – cùng có lỗi hay ra kết quả sai hay cùng ra các kết quả đúng. Thứ hai là một số ngôn ngữ lập trình có hệ thống kiểm tra kiểu mạnh như Java, C# thì không thể đưa giá trị sai kiểu vào được nên chúng ta không cần các ca kiểm thử cho giá trị sai kiểu, nhưng vẫn cần kiểm tra dữ liệu do người sử dụng nhập vào, và chỉ kiểm tra dữ liệu không hợp lệ cùng kiểu.

                                  Bảng 5.4: Các ca kiểm thử lớp tương đương mạnh cho hàm Tam giác
                                  Bảng 5.4: Các ca kiểm thử lớp tương đương mạnh cho hàm Tam giác

                                  Kiểm thử bằng bảng quyết định

                                    Khi lập bảng quyết định, chúng ta thường tìm các điều kiện có thể xảy ra để xét các tổ hợp của chúng mà từ đó chúng ta sẽ xác định được các ca kiểm thử tương ứng cho các điều kiện được thỏa mãn. Khi máy in có sự cố, chúng ta sẽ xem xét tình trạng dựa trên các điều kiện trong bảng là đúng (T) hay sai (F), từ đó xác định được cột duy nhất có các điều kiện thỏa mãn, và thực hiện các hành động khắc phục sự cố tương ứng.

                                    Bảng 5.13: Ca kiểm thử bằng bảng quyết định cho hàm NextDate
                                    Bảng 5.13: Ca kiểm thử bằng bảng quyết định cho hàm NextDate

                                    Kiểm thử tổ hợp

                                      Một ca kiểm thử thường có nhiều cặp giá trị này với các i, j khác nhau nên dễ thấy số lượng ca kiểm thử sẽ giảm đáng kể so với tổ hợp tất cả các ca kiểm thử. Nhiều chiến lược kiểm thử đôi một cũng đã được trình bày trong các nghiên cứu [GOA05], cụ thể và đáng chú ý là thuật toán dựa trên mảng trực giao [Shr89] và thuật toán IPO [TL02].

                                      Tổng kết

                                      Trong cách tiếp cận kiểm thử chức năng, các phương pháp được sử dụng phổ biến hiện nay bao gồm: kiểm thử dựa trên phân tích giá trị biên, kiểm thử phân lớp tương đương và kiểm thử bằng bảng quyết định. Một quy trình kiểm thử hiệu quả cần khai thác tối đa các ưu điểm của các kỹ thuật này bằng cách tích hợp chúng theo một tỷ lệ hợp lý nhằm phát huy tối đa khả năng phát hiện lỗi của các phương pháp kiểm thử này.

                                      Bài tập

                                      Thiết kế phần mềm thích hợp sẽ không chỉ giúp quá trình phát triển được tốt hơn mà còn giúp việc kiểm thử cũng thuận lợi để giúp tiết kiệm chi phí tổng thể của dự án phần mềm. Mỗi phương pháp đều có những ưu và nhược điểm riêng và hướng đến phát hiện các lỗi theo các triết lý riêng nên chúng không thể thay thế cho nhau.

                                      Kiểm thử dòng điều khiển

                                      Kiểm thử hộp trắng

                                      Khác với các phương pháp kiểm thử hộp đen nơi mà các ca kiểm thử được sinh ra từ đặc tả của hệ thống, các ca kiểm thử trong các phương pháp kiểm thử hộp trắng được sinh ra từ mã nguồn. Tuy nhiên, để áp dụng các phương phỏp kiểm thử hộp trắng, người kiểm thử khụng chỉ cần hiểu rừ giải thuật mà còn cần có các kỹ năng và kiến thức tốt về ngôn ngữ lập trỡnh được dựng để phỏt triển phần mềm, nhằm hiểu rừ mó nguồn của chương trình/đơn vị phần mềm cần kiểm thử.

                                      Đồ thị dòng điều khiển

                                      Kiểm thử hộp đen và kiểm thử hộp trắng không thể thay thế cho nhau mà chúng cần được sử dụng kết hợp với nhau trong một quy trình kiểm thử thống nhất nhằm đảm bảo chất lượng phần mềm. Trong trường hợp này, chúng ta không tách riêng thành hai đỉnh vì đây là hai câu lệnh tuần tự nên chúng ta ghép chúng thành một đỉnh nhằm tối thiểu số đỉnh của đồ thị dòng điều khiển.

                                      Các độ đo kiểm thử

                                      Độ đo kiểm thử cấp 3 (C3): Với các điều kiện phức tạp (chứa nhiều điều kiện con cơ bản), việc chỉ quan tâm đến giá trị đúng sai là không đủ để kiểm tra tính đúng đắn của chương trình ứng với điều kiện phức tạp này. Điều kiện để đảm bảo độ đo này là các điều kiện con thuộc các điều kiện phức tạp tương ứng với các điểm quyết định trong đồ thị dòng điều khiển của đơn vị cần kiểm thử đều được thực hiện ít nhất một lần cả hai nhánh đúng và sai.

                                      Kiểm thử dựa trên độ đo

                                        Với câu lệnh điều kiện 5, vì đây là điều kiện phức tạp nên ta phải tách thành hai điều kiện con cơ bản là (a == b)và (c == d)ứng với hai điểm quyết định5c1và5c2trong đồ thị dòng điều khiển. Cho dù chúng ta tiến hành kiểm thử các đơn vị chương trình với độ đo C3 (độ đo với yêu cầu cao nhất), phương pháp kiểm thử dòng điều khiển không thể kiểm thử các vòng lặp xuất hiện trong các đơn vị chương trình.

                                        Bảng 6.8: Các ca kiểm thử cho độ đo C 3 của hàm foo
                                        Bảng 6.8: Các ca kiểm thử cho độ đo C 3 của hàm foo

                                        Tổng kết

                                        Trong trường hợp này, chúng ta không chỉ thực hiện lại ca kiểm thử phát hiện ra lỗi này mà phải thực hiện lại tất cả các ca kiểm thử của đơn vị chương trình. Việc áp dụng phương pháp kiểm thử dòng điều khiển là khó và tốn kém hơn các phương pháp kiểm thử hộp đen (phân hoạch tương đương, phân tích giá trị biên, bảng quyết định, v.v.).

                                        Bài tập

                                        Trình bày các bước nhằm kiểm thử một đơn vị chương trình theo phương pháp kiểm thử dòng điều khiển với một độ đo kiểm thử cho trước. • Hãy xây dựng đồ thị dòng điều khiển cho hàmBinSearch ứng với độ đo C1 và C2.