Tải bản đầy đủ (.doc) (76 trang)

tài liệu cao học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (488.16 KB, 76 trang )

The Testing of Object-Oriented
Trong phần này nhằm mục đích phác họa việc kiểm thử các chương trình hướng đối tượng.
Hiện nay có rất ít nghiên cứu đang được tiến hành, bao phủ vấn đề này.Tiến trình kiểm thử
hướng đối tượng được so sánh và tương phản với cách tiếp cận của kiểm thử đơn vị kiểm
thử tích hợp. Sự thay đổi rõ rệt từ các chương trình máy tính, tới việc kiểm thử giao diện
giữa các chương trình theo các phần tử dữ liệu của một lớp đạt được bằng cách áp dụng
một phương pháp tiếp cận dựa trên trạng thái. Kỹ thuật mới này được mô tả, và ví dụ minh
họa.
Giới thiệu
The vast majority of testing research to date has been concerned with non object-oriented
Phần lớn các kiểm thử nghiên cứu cho đến nay không quan tâm đến ngôn ngữ hướng đối
tượng. Some research has addressed the problem of the testing of Abstract Data Types Một
số nghiên cứu đã giải quyết được vấn đề của việc thử nghiệm Tóm tắt Các loại dữ liệu
(ADTs), but the majority of this research is dependent upon the availability of formal
(ADTs), nhưng phần lớn các nghiên cứu này là phụ thuộc vào sự sẵn có của chính thức
specifications. thông số kỹ thuật. This report will address this lack of research and review
any currently available Báo cáo này sẽ giải quyết sự thiếu nghiên cứu và xem xét bất kỳ
hiện đang có sẵn
techniques. kỹ thuật.
A technique (to be) known as state-based testing will be described which addresses specific
Một kỹ thuật (sẽ được) được gọi là nhà nước dựa trên thử nghiệm sẽ được mô tả có địa chỉ
cụ thể
problems associated with the testing of object-oriented programs. các vấn đề liên quan đến
việc thử nghiệm các chương trình định hướng đối tượng. Also guidelines for the Cũng
hướng dẫn cho
adaptation of traditional functional and structural testing techniques will be provided. thích
ứng của kỹ thuật và cấu trúc thử nghiệm chức năng truyền thống sẽ được cung cấp.
The detail provided within this report is given in terms of class-based object-oriented Các
chi tiết được cung cấp trong báo cáo này được đưa ra trong điều khoản của lớp dựa trên
hướng đối tượng
languages. ngôn ngữ. However, the techniques described are still applicable to non-class-


based object- Tuy nhiên, các kỹ thuật mô tả vẫn còn áp dụng cho các lớp học không dựa
trên đối tượng
oriented languages (usually prototype-based languages). định hướng ngôn ngữ (thường là
nguyên mẫu dựa trên ngôn ngữ).
The remainder of this document is as follows: Phần còn lại của tài liệu này là như sau:
• •
The first section describes in detail the theory and the practice of the testing of object- Phần
đầu tiên mô tả chi tiết lý thuyết và thực hành của các thử nghiệm của đối tượng
oriented programs using information about the state of the object. định hướng các chương
trình sử dụng thông tin về nhà nước của đối tượng.
• •
The next section provides a survey of the current literature available that is concerned Phần
tiếp theo cung cấp một cuộc khảo sát của văn học hiện nay có sẵn mà là có liên quan
with the testing of object-oriented programs. với việc thử nghiệm các chương trình định
hướng đối tượng. This is compared and contrasted with the Đây là so sánh và tương phản
với
previous section. phần trước.
• •
The next section provides a brief discussion of the applicability of more traditional Phần
tiếp theo cung cấp một cuộc thảo luận ngắn gọn về tính ứng dụng của truyền thống
testing techniques to the testing of object-oriented programs. thử nghiệm kỹ thuật cho việc
thử nghiệm các chương trình định hướng đối tượng.
• •
The penultimate section briefly outlines a suite of tools that have been written to aid Phần
áp chót một thời gian ngắn phác thảo một bộ công cụ đã được viết để hỗ trợ
the user in the state-based testing of object-oriented programs. người sử dụng trong các thử
nghiệm dựa trên trạng thái của chương trình theo định hướng đối tượng.
CDTurner CDTurner
- 6 - - 6 -
02/02/93 02/02/93

Page 7 Trang 7
• •
The final section summarises the information that is contained within this report. Phần cuối
cùng tóm tắt các thông tin mà được chứa trong báo cáo này.
• •
A glossary of terms used in this report is provided at the rear. Chú giải thuật ngữ được sử
dụng trong báo cáo này được cung cấp ở phía sau.
CDTurner CDTurner
- 7 - - 7 -
02/02/93 02/02/93
Page 8 Trang 8
2. 2. The Testing Process Quá trình thử nghiệm
2.1. 2.1. Testing Background Bối cảnh Kiểm tra
This section describes the basic assumptions upon which the program testing within this
report Phần này mô tả các giả định cơ bản mà các thử nghiệm chương trình trong báo cáo
này
is based. dựa vào.
The very first, and possibly the most wide reaching assumption made during the testing of
Việc đầu tiên, và có thể là rộng nhất đạt giả thiết được thực hiện trong thời gian thử
nghiệm
software, is that the compiler used to translate the source code into the executable program
is phần mềm, đó là trình biên dịch được sử dụng để dịch mã nguồn vào chương trình thực
thi được
correct, that is to say, that the compiler does not introduce any errors into the code itself.
đúng, mà là để nói, mà trình biên dịch không giới thiệu bất kỳ lỗi nào vào code của chính
nó. The Các
testing of compilers is a separate area of research and therefore will not be discussed any
thử nghiệm của trình biên dịch là một khu vực riêng biệt của nghiên cứu và do đó sẽ không
được thảo luận nào
further. hơn nữa.

Validation consists of a number of distinct testing activities, such as unit, integration,
system Xác nhận bao gồm một số hoạt động thử nghiệm riêng biệt, chẳng hạn như đơn vị,
tích hợp, hệ thống
and acceptance testing. và chấp nhận thử nghiệm. Of these, only unit and integration
testing are within the scope of this Trong số này, chỉ đơn vị và thử nghiệm hội nhập được
trong phạm vi này
report as the remaining activities have no special consequences for the testing of object-
báo cáo như các hoạt động còn lại không có hậu quả đặc biệt cho các thử nghiệm của đối
tượng
oriented programs. định hướng chương trình.
Unit testing is the process whereby each separate unit of a program is tested in isolation.
Đơn vị kiểm định là quá trình mà trong đó mỗi đơn vị riêng biệt của một chương trình
được thử nghiệm trong sự cô lập. With Với
imperative (procedural) languages, the chosen size of unit tends to be the function, or bắt
buộc (thủ tục) ngôn ngữ, kích thước lựa chọn của đơn vị có xu hướng được các chức năng,
hoặc
procedure; whereas, with object-oriented programs it is the feature (also known as a
member thủ tục; trong khi đó, với các chương trình định hướng đối tượng nó là tính năng
(còn được gọi là một thành viên
function, method, or routine). chức năng, phương pháp, hoặc thường xuyên). However, it is
difficult to isolate a feature from its surrounding Tuy nhiên, rất khó để cô lập một tính năng
từ xung quanh mình
class and then to write test drivers and stubs (which themselves require testing) to replace
the lớp và sau đó để viết các trình điều khiển kiểm tra và khai (mà mình yêu cầu kiểm tra)
để thay thế
code removed, when the majority of the code required is already provided in the form of
other Mã loại bỏ, khi phần lớn các mã yêu cầu đã được cung cấp trong các hình thức khác
features of the class. các tính năng của lớp. From this, a conclusion can be drawn that the
class is therefore the Từ này, một kết luận có thể được rút ra rằng lớp học là vì vậy
smallest unit of test. đơn vị nhỏ nhất của thử nghiệm.

Unit testing implies that test stub and test driver classes are to be written for the unit testing
of Đơn vị ngụ ý rằng bài kiểm tra thử nghiệm và các lớp học lái xe sẽ được thử nghiệm
bằng văn bản cho đơn vị thử nghiệm
the higher level classes. các cấp lớp cao hơn. Following the same philosophy that was
applied in the previous Sau cùng một triết lý đã được áp dụng trong các trang trước
CDTurner CDTurner
- 8 - - 8 -
02/02/93 02/02/93
Page 9 Trang 9
paragraph for the unit testing of classes; the activity should be guided by the instantiation
(or đoạn cho kiểm tra đơn vị của các lớp học; hoạt động phải được hướng dẫn bởi các
instantiation (hoặc
call) graph. cuộc gọi) đồ thị. The classes at the bottom of the graph which are called by
other classes, but do not Các lớp học ở dưới cùng của đồ thị đó được gọi là bởi các lớp
khác, nhưng không
call any themselves should be tested first. Gọi bất cứ bản thân nên được thử nghiệm đầu
tiên. The testing then continues up the graph using the thử nghiệm sau đó tiếp tục lên đồ thị
bằng cách sử dụng
previously validated classes in the testing of other classes. trước đó xác nhận các lớp học
trong thử nghiệm của các lớp khác. If the testing is conducted in this Nếu thử nghiệm được
tiến hành trong
manner, the resources that would have been used for writing and testing the test stubs to
cách thức, các nguồn tài nguyên mà có thể đã được dùng để viết và kiểm tra thử nghiệm để
khai
replace the called classes, have been saved. thay thế các lớp học được gọi là, đã được lưu.
Integration testing is the combination of units that have been validated in isolation. Tích
hợp thử nghiệm là sự kết hợp của các đơn vị đã được xác nhận trong sự cô lập. The Các
interface between the components is thus the focus of the testing process. giao diện giữa
các thành phần là như vậy, trọng tâm của quá trình thử nghiệm. If the values passed Nếu
các giá trị được thông qua

to other objects are monitored, then the interface between one object and another can be để
các đối tượng khác được theo dõi, sau đó giao diện giữa một đối tượng và khác có thể
được
effectively validated. xác nhận có hiệu quả.
If unit testing was performed as prescribed above, then the activities of unit testing and Nếu
đơn vị kiểm nghiệm đã được thực hiện theo quy định trên, sau đó các hoạt động của đơn vị
và thử nghiệm
integration testing can be effectively merged. thử nghiệm hội nhập có hiệu quả có thể được
sáp nhập. This merged process is of more benefit to object- Quá trình này sáp nhập là có
lợi hơn cho đối tượng
oriented programming because of the difficulty in trying to write test stub classes which
model lập trình hướng vì những khó khăn trong việc cố gắng để viết các lớp học thử
nghiệm mà còn sơ khai mô hình
the responses of other classes accurately without actually having to write the classes các
phản ứng của các lớp khác một cách chính xác mà không thực sự có để ghi các lớp học
themselves. bản thân mình.
There is of course an exception; when dealing with external stimuli, it is likely to be more
cost Có một ngoại lệ của khóa học; khi giao dịch với các kích thích bên ngoài, nó có khả
năng được nhiều chi phí
effective to write the test stubs for unit testing. hiệu quả để viết các khai thử nghiệm để thử
nghiệm các đơn vị. This choice has to be made by the tester, and sự lựa chọn này phải
được thực hiện bởi thử nghiệm, và
must be based upon the resources required to write the stub as opposed to using the original
phải được dựa trên những nguồn lực cần thiết để viết các bài như trái ngược với cách sử
dụng bản gốc
class. lớp.
Figure 1 shows an example of an instantiation tree (taken from the tool MKTC which is
Hình 1 cho thấy một ví dụ về một cây instantiation (lấy từ công cụ mà là MKTC
discussed later). thảo luận sau). In the example, testing would start with the bottom layer,
that is, Trong ví dụ, thử nghiệm sẽ bắt đầu với lớp dưới cùng, có nghĩa là,

StringOfTokens StringOfTokens
, ,
StateValues StateValues
, ,
SubstateRef SubstateRef
; then continuing up the tree to , Sau đó tiếp tục lên cây để
lex lex
, ,
substates substates
, ...etc. , ... Vv
CDTurner CDTurner
- 9 - - 9 -
02/02/93 02/02/93
Page 10 Trang 10
Lex Lex
StateValuesRule StateValuesRule
STATEVALUES STATEVALUES
STATECHANGERULE STATECHANGERULE
STATECHANGE STATECHANGE
5J=JA 5J = JA
57*56)6-4AB 57 * 56) 6-4AB
5K>IJ=JA 5k> IJ = JA
StringOfTokens StringOfTokens
Figure 1. Hình 1. An example of an instantiation tree (from the tool MKTC) Một ví dụ về
một cây instantiation (từ công cụ MKTC)
This is an alternative to the more traditional view of the testing process. Đây là một thay
thế cho các truyền thống xem nhiều hơn của quá trình thử nghiệm. However, the Tuy
nhiên,
technique which will be outlined later can be used with either views. Kỹ thuật này sẽ được
vạch ra sau này có thể được sử dụng với một trong hai quan điểm.

Functional testing is considered to be the testing of a piece of software with respect to its
thử nghiệm chức năng được coi là thử nghiệm của một phần mềm của nó đối với
expected functionality (derived from its specification only). chức năng dự kiến (xuất phát
từ đặc điểm kỹ thuật của nó chỉ). This has a tendency to be an Điều này có xu hướng được
một
overall system viewpoint. tổng thể hệ thống quan điểm. However, this document will use
the term functional testing in the Tuy nhiên, tài liệu này sẽ sử dụng các chức năng thử
nghiệm hạn trong
software component sense. phần mềm thành phần ý nghĩa. It is the testing of a component
against its specification, not the Đây là thử nghiệm của một thành phần chống lại các đặc
điểm kỹ thuật của nó, chứ không phải
system specification. hệ thống đặc điểm kỹ thuật. A test coverage measure (see later for a
description) will be used to Một biện pháp bảo hiểm thử nghiệm (xem sau đó cho một mô
tả) sẽ được dùng để
determine how much of the unit has, and has not been tested. xác định bao nhiêu đơn vị đã,
và chưa được thử nghiệm.
Structural testing is usually considered to be the testing of a program, or unit, against the
Kết cấu thử nghiệm thường được coi là thử nghiệm một chương trình, hoặc đơn vị, so với
specification, taking into account information derived from the program design and code.
đặc điểm kỹ thuật, có tính đến thông tin tài khoản bắt nguồn từ việc thiết kế chương trình
và mã số. Any Bất kỳ
coverage that has not been achieved by the use of the functional test cases can be 'made up'
by phạm vi bảo hiểm mà chưa được đạt được bằng việc sử dụng các trường hợp thử
nghiệm chức năng có thể được 'được tạo thành bằng cách
the use of structural test that are specifically designed to exercise those parts of the
software việc sử dụng các bài kiểm tra cấu trúc được thiết kế đặc biệt để thực hiện những
phần của phần mềm
which are unexercised. được unexercised. Both these views are consistent with those
presented by Herrington et Cả hai quan điểm này phù hợp với những trình bày của
Herrington et

al. al. in [8]. trong [8].
CDTurner CDTurner
- 10 - - 10 -
02/02/93 02/02/93
Page 11 Trang 11
2.2. 2.2. Emphasis of the Testing Process Nhấn mạnh tiến trình thử nghiệm
At this point, the difference between classes and objects must be defined. Tại thời điểm
này, sự khác biệt giữa các lớp và các đối tượng phải được xác định. For the purpose of Với
mục đích
this report, a class is taken to be the static, programmer-defined representation of an object.
báo cáo này, một lớp học được lấy để được, tĩnh lập trình được xác định đại diện của một
đối tượng.
Therefore an object is a run-time instance of a class. Vì vậy đối tượng là một ví dụ thời
gian chạy của một lớp. Classes cannot be generally be tested Lớp học không thể được kiểm
tra thường
directly; therefore it is actually the object created from the class that is tested. trực tiếp, vì
vậy nó thực sự là đối tượng tạo ra từ các lớp học đó là thử nghiệm. Nevertheless, the Tuy
nhiên,
two are virtually synonymous when discussing the testing of object-oriented programs
(written hai là hầu như đồng nghĩa khi thảo luận về việc thử nghiệm các chương trình định
hướng đối tượng (bằng văn bản
in class-based languages). trong ngôn ngữ dựa trên lớp).
In procedural languages, the paths executed through procedures are determined by the
Trong ngôn ngữ thủ tục, các con đường thực hiện thông qua các thủ tục được xác định bởi
parameters that are passed to routines, and the values of global variables. tham số được
truyền cho các thói quen, và các giá trị của các biến toàn cầu. The parameters Các thông số
usually affect the control flow within the function and so produce the required outcome.
thường ảnh hưởng đến dòng chảy trong phạm vi chức năng kiểm soát và vì vậy kết quả sản
xuất yêu cầu.
However, in object-oriented languages the data representation of an object persists between

Tuy nhiên, trong ngôn ngữ hướng đối tượng đại diện dữ liệu của một đối tượng tồn tại
giữa
calls of features of an object, therefore influencing the control-flow during calls to features.
các cuộc gọi của các tính năng của một đối tượng, do đó ảnh hưởng đến việc kiểm soát
dòng chảy trong thời gian cuộc gọi đến các tính năng.
Communication between features of the same class is facilitated by using data-members to
Truyền thông giữa các tính năng của lớp cùng là tạo điều kiện bằng cách sử dụng dữ liệu-
thành viên
store control-information Kiểm soát lưu trữ thông tin
1 1
. . The different values that these can store may influences the Các giá trị khác nhau mà
chúng có thể lưu trữ có thể ảnh hưởng đến
control-flow and thus the results of calls to features. kiểm soát dòng chảy và do đó kết quả
của các cuộc gọi vào các tính năng. These data-members can have their values Những dữ
liệu này là thành viên có thể có giá trị của chúng
set and/or used in any of the features. thiết lập và / hoặc sử dụng trong bất kỳ các tính năng.
This is therefore the main emphasis for the state-based Điều này là do sự nhấn mạnh chính
của nhà nước dựa trên
testing of object-oriented programs. thử nghiệm các chương trình định hướng đối tượng.
This emphasis is in contrast with the data-flow testing of nhấn mạnh Điều này trái ngược
với dòng chảy của dữ liệu thử nghiệm
programs written in procedural languages which concentrates upon the definitions and uses
of các chương trình viết bằng ngôn ngữ thủ tục mà tập trung theo các định nghĩa và sử
dụng của
variables within the same function (during unit testing at least). biến trong cùng một chức
năng (trong kiểm tra đơn vị ít nhất).
Figure 2 shows an example of the interaction (and therefore data flow) between the features
of Hình 2 cho thấy một ví dụ về sự tương tác (và do đó lưu lượng dữ liệu) giữa các tính
năng của
an object. một đối tượng.

1 1
Control-information is data used to communicate events, rather than values, between
features. Control-thông tin là dữ liệu được sử dụng để giao tiếp sự kiện, chứ không phải là
giá trị, giữa các tính năng.
CDTurner CDTurner
- 11 - - 11 -
02/02/93 02/02/93
Page 12 Trang 12
Object Đối tượng
Data Dữ liệu
Representation Đại diện
Features Tính năng
(Member (Thành viên
Functions) Chức năng)
first() đầu tiên ()
next() tiếp theo ()
clear() rõ ràng ()
bool bStart; bool bStart;
int * pPos; int * PPO;
int * pTop; int * pTop;
int * pEnd; int * pend;
Defined by Được xác định bởi
Used by Được sử dụng bởi
Defined and Used by Xác định và được sử dụng bởi
Key: Key:
Figure 2. Hình 2. An example of a class, showing potential data flow within the
representation Một ví dụ của một lớp, cho thấy tiềm năng lưu lượng dữ liệu trong phạm vi
đại diện các
As can be seen in the diagram below (figure 3), the feature first() defines the value of
the Như có thể thấy trong sơ đồ dưới đây (hình 3), tính năng u tiên ()đ xác định giá

trị của
data member bStart, and the feature next() uses it. bStart thành viên dữ liệu và tính năng
tip theo () sử dụng nó. In data-flow testing, the path between Trong dòng chảy dữ
liệu thử nghiệm, con đường giữa
the definition and the use would have to be exercised. định nghĩa và sử dụng sẽ phải được
thực hiện. However, a technique will be presented Tuy nhiên, một kỹ thuật sẽ được trình
bày
that separates the definitions and uses that exist in different features, for testing in isolation.
phân cách các định nghĩa và sử dụng mà còn tồn tại trong các tính năng khác nhau, để thử
nghiệm trong sự cô lập.
The definition of bStart in the feature first() would be tested, and the result (the setting
of Định nghĩa của bStart trong tính năng u tiên ()đ sẽ được kiểm tra, và kết quả (các
thiết lập của
bStart to true) would be verified. bStart cho đúng) sẽ được xác nhận. In addition, the use of
bStart in the feature next() would Ngoài ra, việc sử dụng các bStart trong tính năng
tip theo () sẽ
also be tested (with both: bStart equals false, and bStart equals true). cũng được kiểm tra
(với cả hai: bStart bằng giả, và bStart bằng đúng). By performing the testing Bằng cách
thực hiện các thử nghiệm
in this manner, the potentially random order that the features of an class can be called, is
taken theo cách này, các thứ tự ngẫu nhiên có khả năng rằng các tính năng của một lớp có
thể được gọi, được lấy
into account. vào tài khoản. The responses of all features to all states are tested, thus any
incorrect responses Các phản ứng của tất cả các tính năng để tất cả các nước được kiểm
tra, do đó bất kỳ phản ứng không chính xác
would be detected. sẽ được phát hiện. Also the possibly incorrect interaction between
features would be Cũng có thể không chính xác tương tác giữa các tính năng sẽ được
noticeable. đáng chú ý.
When a class is defined, in the vast majority of cases, the only explicit (or implicit) order in
Khi một lớp học được định nghĩa, trong đa số trường hợp, chỉ rõ ràng (hoặc ẩn), trật tự

trong
which the features can be called insists that the constructor must be called before any other
mà các tính năng có thể được gọi là nhấn mạnh rằng các nhà xây dựng phải được gọi trước
khi bất kỳ khác
feature, and that the destructor must be the last feature called. tính năng, và rằng các
destructor phải là tính năng mới gọi là. Apart from that, there is likely Ngoài ra, có khả
năng
CDTurner CDTurner
- 12 - - 12 -
02/02/93 02/02/93
Page 13 Trang 13
to be an infinite number of different possible combinations of feature calls. để được vô số
có thể kết hợp khác nhau của cuộc gọi tính năng này. This possibly Điều này có thể
infinite order is tested by the aforementioned approach. Để vô hạn được thử nghiệm bởi
các phương pháp tiếp cận nói trên. It is achieved by exercising each Đó là đạt được bằng
cách tập thể dục mỗi
feature with all possible starting states. tính năng với tất cả các nước có thể bắt đầu. The
resultant states that can be generated by each Các kết quả nói rằng có thể được tạo ra bởi
mỗi
feature are validated. tính năng được xác nhận. It should not be possible to cause a feature
to generate an invalid state. Nó không nên có thể gây ra một tính năng để tạo ra một nhà
nước không hợp lệ. In Trong
addition, it is recommended that all features should be able to accept all legal states as
input. Ngoài ra, khuyên rằng tất cả các tính năng có thể chấp nhận tất cả các tiểu bang quy
phạm pháp luật như là đầu vào.
feature first() Tính năng đầu tiên ()
begin bắt đầu
bStart = true; bStart = true;
... ...
... ...

end kết thúc
feature next() tính năng tiếp theo ()
begin bắt đầu
end kết thúc
if (bStart equals false) if (bStart bằng false)
return; trở lại;
end if; nếu kết thúc;
... ...
bool bStart; bool bStart;
Definition Định nghĩa
7IA 7IA
Figure 3. Hình 3. An Expanded view of figure 2. An xem mở rộng của hình 2.
State-based testing is testing of the interactions within a class by monitoring the changes
that Nhà nước dựa trên thử nghiệm là thử nghiệm của tương tác bên trong một lớp bằng
cách giám sát những thay đổi
take place in the values of the data members. diễn ra trong các giá trị của các thành viên dữ
liệu. Therefore it tests the all of the definitions of data Vì vậy, các xét nghiệm của tất cả các
định nghĩa của dữ liệu
members within the features, along with all the uses. các thành viên trong các tính năng,
cùng với tất cả các sử dụng. In addition, it must test for a lack of Ngoài ra, nó phải kiểm tra
cho một thiếu
reaction by features to certain data-member values. Phản ứng của các tính năng cho một số
thành viên các giá trị dữ liệu. Using this approach, 100% state coverage Sử dụng phương
pháp này, phạm vi bảo hiểm nhà nước 100%
with a state-based test suite is attained by testing all the features of an object with all the
dựa trên thử nghiệm với một bộ-nhà nước là đạt được bằng cách kiểm tra tất cả các tính
năng của một đối tượng với tất cả các
possible states có thể các tiểu bang
2 2
. . Put in another way, 100% coverage is achieved by testing all possible state Đặt theo

cách khác, phạm vi bảo hiểm 100% là đạt được bằng cách kiểm tra tất cả các tiểu bang có
thể
changes that can take place within an object, as well as all feature calls which do not affect
the thay đổi có thể diễn ra trong vòng một đối tượng, cũng như kêu gọi tất cả các tính năng
mà không ảnh hưởng đến
objects state. đối tượng nhà nước.
2 2
A state is particular combination of values of all of the data-members of an object. Nhà
nước đặc biệt là sự kết hợp của các giá trị của tất cả các dữ liệu các thành viên của một đối
tượng. It will be explained in greater detail later on. Nó sẽ được giải thích chi tiết hơn về
sau này.
CDTurner CDTurner
- 13 - - 13 -
02/02/93 02/02/93
Page 14 Trang 14
In addition to state based tests, functional (specification) based tests must also be
performed on Ngoài việc nhà nước kiểm tra dựa trên đặc điểm kỹ thuật (chức năng) kiểm
tra dựa trên cũng phải được thực hiện trên
the class under test. các lớp học thử. Functional tests are important because they validate
the external view of xét nghiệm chức năng rất quan trọng bởi vì họ xác nhận quan điểm
bên ngoài của
the class, whereas the state based tests have a tendency to discard external results. lớp,
trong khi nhà nước kiểm tra dựa có xu hướng loại bỏ các kết quả bên ngoài. For Đối với
example, Ví dụ,
When testing the 'get next token' feature of a lexical analyser class, unless Khi thử nghiệm
được tiếp token 'tính năng' của một lớp phân tích từ vựng, trừ khi
tests are extremely carefully designed (which is both tedious and time các bài kiểm tra rất
cẩn thận thiết kế (được cả hai tẻ nhạt và thời gian
consuming) so that the next token to be obtained would already be known in tiêu thụ) để
cho mã thông báo tiếp theo đã được thu được sẽ được biết đến ở

fine detail, it is far easier to simply check for the effect on the representation phạt tiền cụ
thể, nó là xa dễ dàng hơn để đơn giản chỉ kiểm tra tác dụng của đại diện các
and ignore the actual token returned unless it is a special token eg và bỏ qua các dấu hiệu
thực tế quay trở lại trừ khi nó là một ví dụ mã thông báo đặc biệt
EndOfFile ...etc. EndOfFile ... vv Functional tests would be used to determine if the correct
xét nghiệm chức năng sẽ được sử dụng để xác định xem chính xác
token had been returned. mã thông báo đã được trả lại.
This difference implies a contrast in emphasis between the two testing styles. Sự khác biệt
này hàm ý sự tương phản trong sự nhấn mạnh giữa hai phong cách thử nghiệm. State-based
Nhà nước dựa trên
testing places emphasis on the feature's correct interaction with the data representation of
the kiểm tra chú trọng vào tính năng chính xác của tương tác với các đại diện của dữ liệu
object; whereas, functional tests place emphasis on the correct interaction of the features
with đối tượng, trong khi đó, các xét nghiệm chức năng chú trọng vào sự tương tác chính
xác của các tính năng với
the surrounding world (the rest of the program). thế giới xung quanh (phần còn lại của
chương trình). Functional testing therefore concentrates on Do đó chức năng kiểm tra tập
trung vào
the correct functioning of any calculations performed within the features as the first
priority. các chức năng chính xác của bất kỳ tính toán thực hiện trong các tính năng như là
ưu tiên hàng đầu.
From this, two distinct purposes can be seen for the data representation: control
information, Từ đó, hai mục đích riêng biệt có thể được nhìn thấy cho các đại diện dữ liệu:
Thông tin kiểm soát,
and data storage. và các dữ liệu lưu trữ. Control information is used to flag various internal
events to other features, Kiểm soát thông tin được sử dụng để flag nội bộ các sự kiện khác
nhau để tính năng khác,
whereas data storage is used to store values required by the object. trong khi lưu trữ dữ liệu
được sử dụng để lưu trữ các giá trị theo yêu cầu của đối tượng. Data storage can be used
lưu trữ dữ liệu có thể được sử dụng

either to store information supplied by the caller, or to store the result of a call to another
hoặc để lưu trữ thông tin được cung cấp bởi người gọi, hoặc để lưu trữ kết quả của một
cuộc gọi khác
feature, therefore allowing access to information that would otherwise be transient by
nature. tính năng, do đó cho phép truy cập vào thông tin mà nếu không sẽ bị thoáng qua bởi
thiên nhiên.
The traditional testing process should consist of both functional testing and structural
testing Quá trình thử nghiệm truyền thống nên bao gồm cả kiểm tra chức năng và cấu trúc
thử nghiệm
[22]. [22]. It is deemed complete when the appropriate coverage level has been achieved.
Nó được coi là hoàn thành khi mức bảo hiểm thích hợp đã đạt được. To reach Để đạt được
this level, first functional tests are performed, followed by the structural tests to increase
the mức này, các xét nghiệm chức năng đầu tiên được thực hiện, tiếp theo là các bài kiểm
tra cơ cấu để tăng
coverage of specific constructs. phạm vi bảo hiểm của các cấu trúc cụ thể. This technique
is easily applied to the testing of features, Kỹ thuật này có thể dễ dàng áp dụng cho việc
thử nghiệm các tính năng,
however, this does not necessarily constituted a valid class. Tuy nhiên, điều này không nhất
thiết phải thành lập một lớp hợp lệ.
CDTurner CDTurner
- 14 - - 14 -
02/02/93 02/02/93
Page 15 Trang 15
Object-oriented programming is data-centred, that is, the functionality of the program is
Lập trình hướng đối tượng là dữ liệu trung tâm, có nghĩa là, các chức năng của chương
trình là
decomposed with respect to the types of data that will be dealt with, rather than simply bị
phân hủy đối với các loại dữ liệu đó sẽ được giải quyết, thay vì chỉ đơn giản
decomposing the functionality into smaller tasks. các chức năng phân hủy thành các nhiệm
vụ nhỏ hơn. To take account of the change in emphasis of Chủ tài khoản của sự thay đổi

trong trọng tâm của
the decomposition, state-based testing is required. phân hủy, trên cơ sở kiểm tra nhà nước
là bắt buộc. Therefore the testing process for object- Vì vậy quá trình thử nghiệm cho đối
tượng
oriented programs should consist of three types of testing: state-based testing, and the two
more chương trình định hướng nên bao gồm ba loại hình thử nghiệm: thử nghiệm dựa trên
tiểu bang, và hai thêm
traditional approaches. phương pháp tiếp cận truyền thống.
State-based testing validates the model upon which the class is based, therefore if any
major Nhà nước dựa trên thử nghiệm xác nhận mô hình mà các lớp học dựa, do đó nếu có
chính
error in the functionality lỗi trong chức năng
3 3
of the model is found, it is more likely to be detected during the state- của mô hình được
tìm thấy, nó có nhiều khả năng được phát hiện trong nhà
based test than the other types. dựa trên thử nghiệm hơn so với các loại khác. If an error is
discovered, then the code has to be altered to Nếu lỗi được phát hiện, sau đó mã đã được
thay đổi để
correct the fault. sửa lỗi. The test cases that are dependent upon the code structure of the
features may Các trường hợp được thử nghiệm phụ thuộc vào cấu trúc mã số của tính năng
có thể
become obsolete, leading to the recommendation that the structural tests are not conducted
until trở nên lỗi thời, dẫn đến việc giới thiệu rằng các bài kiểm tra kết cấu được không tiến
hành cho đến khi
both the state-based testing and the functional testing has taken place. cả hai dựa trên thử
nghiệm nhà nước và chức năng thử nghiệm đã diễn ra.
If the features are being tested as part of a larger unit (that is, the class), rather than in Nếu
các tính năng đang được thử nghiệm như là một phần của một đơn vị lớn hơn (có nghĩa là,
các lớp), hơn là trong
isolation surrounded by test stubs and drivers then it is advisable to perform the state-based

cô lập được bao quanh bởi Sơ khai thử nghiệm và trình điều khiển sau đó nó được khuyến
khích để thực hiện các bang dựa trên
testing first. thử nghiệm đầu tiên. Once the interaction between the features has been tested,
then the interaction can Một khi sự tương tác giữa các tính năng đã được thử nghiệm, sau
đó sự tương tác có thể
then be used as part of the functional tests, therefore exercising a greater part of the class
sau đó được sử dụng như một phần của bài kiểm tra chức năng, do đó thực hiện một phần
lớn của lớp
before performing the structural tests. trước khi thực hiện các bài kiểm tra cấu trúc. This
causes a reduction in the test cases that are Điều này gây ra một giảm trong các trường hợp
được thử nghiệm
dependent upon the code structure of features. phụ thuộc vào cấu trúc mã của tính năng.
2.3. 2.3. Coverage Measures Các biện pháp bảo hiểm
Testing generally consists of both functional testing and structural based testing. Thử
nghiệm thường bao gồm cả chức năng thử nghiệm và thử nghiệm dựa trên cơ cấu. The Các
effectiveness of any test suite with respect to its testing method can be determined by the
hiệu quả của bất kỳ bộ phần mềm thử nghiệm đối với các phương pháp thử của nó có thể
được xác định bởi
appropriate coverage measure. biện pháp thích hợp bảo hiểm.
3 3
Here, functionality refers to the correct interaction of all the separate section of the model,
not the functionality of individual Ở đây, chức năng đề cập đến sự tương tác chính xác của
riêng phần tất cả các mô hình, không phải là chức năng của cá nhân
sections. phần.
CDTurner CDTurner
- 15 - - 15 -
02/02/93 02/02/93
Page 16 Trang 16
The aim of testing is to produce validated programs which conform to the specification as
Mục đích của thử nghiệm là để sản xuất các chương trình xác nhận đó phù hợp với đặc

điểm kỹ thuật như
closely as possible. chặt chẽ nhất có thể. The only way to prove that a program conforms to
the specification Cách duy nhất để chứng minh rằng một chương trình phù hợp với đặc
điểm kỹ thuật
completely by testing is to perform exhaustive testing on it. hoàn toàn bằng cách kiểm tra
là để thực hiện kiểm tra đầy đủ về nó. Exhaustive functional testing may Đầy đủ chức năng
thử nghiệm có thể
involve passing an infinite range of values as arguments and therefore it is infeasible in the
vast liên quan đến việc đi qua một dãy vô hạn các giá trị như các đối số và vì thế nó là tính
khả thi trong lớn
majority of cases. đa số các trường hợp. Exhaustive path testing is also infeasible for
anything but the simplest of kiểm tra đường dẫn tiêts cũng là tính khả thi cho bất cứ điều gì
nhưng đơn giản nhất của
programs because of the combinatorial explosion of paths that occurs as the program grows
in chương trình vì sự bùng nổ tổ hợp của các đường xảy ra như chương trình phát triển ở
size. kích thước.
This introduces the requirement for a method for measuring the effectiveness of a test suite
Này giới thiệu các yêu cầu về một phương pháp để đo lường hiệu quả của một bộ thử
nghiệm
under the chosen testing method. theo phương pháp thử chọn. The definition of 'effective'
is very subjective, but is loosely Định nghĩa của 'hiệu quả' là rất chủ quan, nhưng là một
cách lỏng lẻo
related to the amount of program that is exercised. liên quan đến số tiền của chương trình
đó được thực hiện. Therefore a measure of the program Vì vậy một biện pháp của chương
trình
coverage is required. phạm vi bảo hiểm là bắt buộc. A number of different coverage
measures exist, each one providing a Một số biện pháp bảo hiểm khác nhau tồn tại, mỗi
một trong những cung cấp một
differing level of validation. mức độ khác nhau xác nhận.
Four examples are: Bốn thí dụ:

Statement coverage - Every statement in the program must be exercised at least once. Báo
cáo bảo hiểm - Tất cả các tuyên bố trong chương trình phải được thực hiện ít nhất một lần.
Branch (or condition) coverage - Every branch in the program must be exercised at least
Chi nhánh (hoặc điều kiện) bảo hiểm - Tất cả các chi nhánh trong chương trình phải được
thực hiện ít nhất
once. một lần. This implies that each conditional test within a program must produce both
Điều này ngụ ý rằng mỗi bài kiểm tra điều kiện bên trong một chương trình phải xuất trình
cả hai
outcomes, that is, true and false. kết quả, có nghĩa là, đúng và sai.
Multiple condition coverage - Every clause in the conditional tests within the program
Nhiều điều kiện bảo hiểm - Tất cả các điều khoản trong các bài kiểm tra điều kiện trong
chương trình
must produce both outcomes, that is true and false. phải xuất trình cả hai kết quả, đó là
đúng và sai.
LCSAJ LCSAJ
4 4
coverage - Every LCSAJ (sub-path) through the code must be executed at least phạm vi
bảo hiểm - Mỗi LCSAJ (tiểu đường) thông qua mã số phải được thực hiện ít nhất
once. một lần. See [23] and [7] for more information. Xem [23] và [7] để biết thêm thông
tin.
4 4
LCSAJ is an acronym for Logical Code Sequence And Jump. LCSAJ là một từ viết tắt cho
logic Code Sequence Và Jump. In summary, it is a sub-path through the code that either
starts at Tóm lại, đó là một tiểu đường thông qua các đoạn code đó hoặc là bắt đầu
the begining of the program, or the destination for a jump in the code; it continues until a
statement which could cause a jump, sự khởi đầu của chương trình, hoặc điểm đến cho một
bước nhảy trong các mã, nó vẫn tiếp tục cho đến khi một tuyên bố nào có thể gây ra một
bước nhảy,
or the end of the code is reached. hoặc vào cuối của mã là đạt.
CDTurner CDTurner

- 16 - - 16 -
02/02/93 02/02/93
Page 17 Trang 17
It is very unlikely that while using any of the above coverage measures, that 100%
coverage of Nó là rất không chắc rằng trong khi sử dụng bất kỳ biện pháp bảo hiểm ở trên,
đó là phạm vi bảo hiểm 100%
a program will be achieved. một chương trình sẽ đạt được. This is due to a number of
factors: Điều này là do một số yếu tố:
• •
There may be branches within the program that may only be executed during Có thể có các
chi nhánh trong chương trình mà chỉ có thể được thực hiện trong thời gian
exceptional circumstances. trường hợp đặc biệt.
• •
There may be parts of the program that cannot be executed at all. Có thể có các bộ phận
của chương trình mà không thể được thực hiện ở tất cả. This may be due to a Điều này có
thể do một
programmer's error, or simply due to defensive programming lập trình viên của lỗi, hoặc
đơn giản là do chương trình phòng thủ
5 5
. .
• •
If using a path coverage measure, then there may be paths through the program which Nếu
sử dụng một biện pháp bảo hiểm con đường, sau đó có thể có đường đi qua chương trình
đó
are infeasible. có tính khả thi. An infeasible path is one which can never be executed; the
most likely An là một trong những con đường khả thi mà không bao giờ có thể được thực
hiện; các khả năng nhất
cause of these is the mutual exclusivity of two conditions. nguyên nhân trong số này là sự
độc quyền lẫn nhau của hai điều kiện. For example: Ví dụ:
IF (x > 0) THEN IF (x> 0) THEN

..... ..... // x is not altered during this branch / / X là không thay đổi trong ngành này
END IF END IF
IF (X <= 0) THEN IF (X <= 0) THEN
.... ....
ENDIF Endif
produces an infeasible path because the path that goes through both branches can tạo ra
một con đường khả thi vì con đường đi qua cả hai ngành có thể
never be executed. không bao giờ được thực thi.
Therefore a realistic coverage target must be set, based on the availability of resources for
the Do đó một mục tiêu bảo hiểm thực tế phải được thiết lập, dựa trên sự sẵn có của các
nguồn lực cho
testing, and an assessment of the code. thử nghiệm, và đánh giá một số mã.
The different types of coverage measure facilitate differing levels of testing. Các loại bảo
hiểm khác nhau của biện pháp tạo thuận lợi cho các cấp khác nhau của thử nghiệm. If
every statement Nếu mỗi báo cáo
in a program was exercised at least once during a test run, then there may still be faults in
the trong một chương trình được thực hiện ít nhất một lần trong một chạy thử nghiệm, sau
đó có thể vẫn còn lỗi trong
program that lie undetected and will remain so until a specific path (or group of paths)
through chương trình mà không bị phát hiện nói dối và sẽ vẫn như vậy cho đến khi một
đường dẫn cụ thể (hoặc nhóm các đường dẫn) qua
the code are executed. mã được thực hiện. Branch coverage provides slightly more detailed
testing, however, not as Chi nhánh bảo hiểm cung cấp thử nghiệm chi tiết hơn một chút,
tuy nhiên, không phải là
much as multiple condition coverage. nhiều càng nhiều điều kiện bảo hiểm. Although
exhaustive path testing is infeasible, testing Mặc dù kiểm tra đường dẫn đầy đủ có tính khả
thi, kiểm tra
5 5
This is a technique whereby all conditions will be tested for, but some may never be
achievable. Đây là một kỹ thuật mà trong đó tất cả các điều kiện sẽ được thử nghiệm,

nhưng một số không bao giờ có thể đạt được.
CDTurner CDTurner
- 17 - - 17 -
02/02/93 02/02/93
Page 18 Trang 18
using sub-paths sử dụng các đường tiểu
6 6
is not. không. Therefore the longer the sub-paths, the more 'effective' the testing Do đó còn
là tiểu đường, càng có nhiều 'hiệu quả' thử nghiệm
method. phương pháp. The consequence of this is that LCSAJ testing (in theory at least)
should provide a Hệ quả của điều này là thử nghiệm LCSAJ (trong lý thuyết ít nhất) sẽ
cung cấp
more effective testing method than multiple condition coverage. phương pháp thử nghiệm
hiệu quả hơn so với nhiều điều kiện bảo hiểm.
A disadvantage of using a more effective testing method is the increasing difficulty in Một
bất lợi của việc sử dụng một phương pháp thử nghiệm hiệu quả hơn là những khó khăn
ngày càng tăng trong
generating the test cases. tạo ra các trường hợp thử nghiệm. However, this problem will not
be discussed further as it is beyond Tuy nhiên, vấn đề này sẽ không được thảo luận thêm,
vì nó vượt ra ngoài
the scope of this document. phạm vi của văn bản này.
6 6
sub-paths are partial paths through the code that don't have to start at the begining of the
code, and do not have to proceed al the tiểu đường là con đường một phần thông qua các
code mà không có để bắt đầu vào đầu của mã này, và không có để tiến hành các al
way to the end of the code. đường đến cuối mã.
CDTurner CDTurner
- 18 - - 18 -
02/02/93 02/02/93
Page 19 Trang 19

3. 3. State-Based Testing Nhà nước-Based Testing
3.1. 3.1. Introduction Giới thiệu
This section describes the process of state-based testing of classes and what it involves.
Phần này mô tả quá trình thử nghiệm dựa trên trạng thái của các lớp học và những gì nó
liên quan đến.
As its name suggests, the main emphasis of state-based testing is the values stored in the
Như tên gọi, sự nhấn mạnh chính của nhà nước dựa trên thử nghiệm là các giá trị được lưu
trữ trong
object's representation. đối tượng của đại diện. The particular values are to be known
simply as the object's state. Các giá trị cụ thể sẽ được gọi đơn giản là đối tượng của các
nhà nước. This Điều này
draws similarities from Finite State Automata and Infinite State Automata, which will
simply rút ra từ hữu hạn nhà nước tương automata và Infinite automata Nhà nước, mà sẽ
chỉ đơn giản
be referred to as State Automata (or SA). được gọi là Nhà nước automata (hoặc SA). SAs
are objects whose next state is determined by SAS là đối tượng mà nhà nước tiếp theo
được xác định bởi
the next feature that is called and the current state. tính năng tiếp theo được gọi và hiện nay
nhà nước. However, some features do not affect the Tuy nhiên, một số tính năng không ảnh
hưởng đến
state, but simply allow a client to ask questions such as "what is your value ?". nhà nước,
mà chỉ đơn giản cho phép một khách hàng đặt câu hỏi như "giá trị của bạn là gì?".
For example, Ví dụ,
Figure 4. Hình 4. A Finite State Automata for counting from one to four Một hữu hạn nhà
nước automata cho đếm từ một đến bốn
CDTurner CDTurner
- 19 - - 19 -
02/02/93 02/02/93
Page 20 Trang 20
As can be seen in the above figure, the SA has four states corresponding to the numbers

one Như có thể thấy trong hình trên, SA đã có bốn tiểu bang tương ứng với một số
through to four. thông qua đến bốn. There are four different features available for the client
to call (including a Có bốn tính năng khác nhau có sẵn cho khách hàng để gọi (bao gồm cả
một
constructor) and their effects are shown above. constructor) và các hiệu ứng của họ được
hiển thị ở trên. The feature Các tính năng
GetValue() GetValue ()
does not affect the không ảnh hưởng đến
current state, it simply informs the client (caller) what the current value is. hiện tại nhà
nước, nó chỉ đơn giản thông báo cho khách hàng (người gọi) những gì là giá trị hiện hành.
The Các
Reset() Thiết lập lại ()
feature allows the state to be returned to the start (one) at any time. tính năng cho phép nhà
nước để được trả lại cho bắt đầu (một) bất kỳ lúc nào.
The counting SA would be relatively trivial to test, especially as all features are defined
over Các tính SA sẽ là tương đối tầm thường để kiểm tra, đặc biệt là khi tất cả các tính
năng được định nghĩa trên
the whole range of states of the objects with no exceptions. toàn bộ phạm vi của các quốc
gia của các đối tượng không có ngoại lệ. Each feature would be called with Mỗi tính năng
sẽ được gọi với
the object in each of the four states. các đối tượng trong thuộc bốn tiểu bang. The result of
the call would be verified against the diagram Kết quả của cuộc gọi sẽ được xác nhận đối
với sơ đồ
above. ở trên.
Any feature has four types of possible responses to a particular state and feature argument
Bất kỳ tính năng có bốn loại phản ứng có thể đến một nhà nước nói riêng và đối số tính
năng
combination: kết hợp:
i) It can change the object's state to the appropriate new state. i) Nó có thể thay đổi đối
tượng của nhà nước để nhà nước mới phù hợp.

ii) It can leave the object's state as it is. ii) Nó có thể để lại đối tượng của nhà nước như nó
có.
iii) It can change the object's state to an undefined state (error). iii) Nó có thể thay đổi đối
tượng của nhà nước để một nhà nước không xác định (lỗi).
iv) It can change the object's state to an inappropriate state (error). iv) Nó có thể thay đổi
đối tượng của nhà nước để một nhà nước không thích hợp (lỗi).
Of these, iii) and iv) are definitely errors, and ii) can be an error if the object's response was
Trong số này, iii) và iv) có chắc chắn các lỗi, và ii) có thể là một lỗi nếu phản ứng của đối
tượng được
supposed to be i). nghĩa vụ phải được i). Therefore the aim of state-based testing is to
detect all occurrences of the Vì vậy mục tiêu của nhà nước dựa trên thử nghiệm là để phát
hiện tất cả các xuất hiện của các
erroneous ii), iii), and iv). sai lầm ii), iii), và iv).
Chow discusses testing using SA's in [2]. Chow thảo luận về thử nghiệm bằng cách sử
dụng của SA trong [2]. However, he discusses the testing of control- Tuy nhiên, ông bàn về
các thử nghiệm kiểm soát
structures that can occur within a design, rather than an implementation. cấu trúc có thể xảy
ra trong thiết kế, thay vì thực hiện một. His approach of phương pháp tiếp cận của ông
predicting the correct response of a routine according to the SA upon which it is based, is
dự đoán phản ứng chính xác của một thói quen theo SA khi mà nó được dựa, là
similar to the one described in this document. tương tự như mô tả trong tài liệu này.
CDTurner CDTurner
- 20 - - 20 -
02/02/93 02/02/93
Page 21 Trang 21
3.2. 3.2. Notation Ký hiệu
To introduce a minimal degree of formalism, each feature is considered a mapping from its
Để giới thiệu một mức độ tối thiểu của hình thức, tính năng từng được coi là một ánh xạ từ
của nó
input states, to its output states, affected only by the current state of the object, and any đầu

vào tiểu bang, đến tiểu bang đầu ra của nó, chỉ bị ảnh hưởng bởi trạng thái hiện tại của đối
tượng, và bất kỳ
parameters passed các thông số thông qua
7 7
. . The notation to be used for expressing this is as follows: Các ký hiệu được sử dụng để
thể hiện điều này là như sau:
I Tôi
= The set of valid states that the object can have. = Các thiết lập của các quốc gia hợp lệ
mà đối tượng có thể có.
A A
I Tôi
i tôi
= The set of states that the i = Các thiết lập của các quốc gia mà các i
th thứ
feature is expected to handle (by both action, and tính năng dự kiến sẽ xử lý (bởi cả hai
hành động, và
inaction) as input không hành động) như là đầu vào
8 8
. .
A A
O O
i tôi
= The set of states that the i = Các thiết lập của các quốc gia mà các i
th thứ
feature is expected to be able to produce as output tính năng dự kiến sẽ có thể sản xuất như
sản lượng
9 9
. .
= =
I Tôi

i tôi
= The set of states that the i = Các thiết lập của các quốc gia mà các i
th thứ
feature actually accepts as input. tính năng thực sự chấp nhận như là đầu vào.
= =
O O
i tôi
= The set of states that the i = Các thiết lập của các quốc gia mà các i
th thứ
feature is actually able to produce as output. là tính năng thực sự có thể sản xuất là đầu ra.
If a class is valid (as far as state-based testing is concerned), then Nếu một lớp học có giá
trị (như xa như dựa trên thử nghiệm nhà nước có liên quan), sau đó
= =
I Tôi
i tôi
= =
A A
I Tôi
i tôi
and và
= =
O O
i tôi
= =
A A
O O
i tôi
, for , Cho
all the features of the SA. tất cả các tính năng của SA. In essence this simply means that all
the states each feature accepts Trong bản chất này chỉ có nghĩa rằng tất cả các tiểu bang

mỗi tính năng chấp nhận
as input are as expected, and the same for the output states. như là đầu vào được như mong
đợi, và tương tự cho các tiểu bang đầu ra.
However, the previous example is only a simple one requiring only a single data member
Tuy nhiên, các ví dụ trên chỉ là một trong những yêu cầu đơn giản chỉ là một thành viên dữ
liệu duy nhất
needed to store the state of the object. cần thiết để lưu trữ nhà nước của đối tượng. When
applying this type of testing to classes, a number Khi áp dụng loại hình kiểm tra đến các
lớp học, một số
of factors influence the effectiveness of the process. các yếu tố ảnh hưởng đến hiệu quả của
quá trình. Firstly, the number of data members Thứ nhất, số lượng thành viên dữ liệu
10 10
that the class possesses has a profound effect on the complexity of the testing. mà lớp sở
hữu có một ảnh hưởng sâu sắc sự phức tạp của thử nghiệm. The more data Các dữ liệu
nhiều hơn
members, the more time it takes to design and implement the tests. thành viên, thời gian
nhiều hơn cần thiết để thiết kế và thực hiện các bài kiểm tra. Secondly, different types of
Thứ hai, khác với các loại
classes exist, each providing differing levels of emphasis on the data representation. các lớp
học tồn tại, từng cung cấp các mức độ khác nhau nhấn mạnh vào các đại diện dữ liệu. The
more Các chi tiết
features that inter-act with the representation, and each other via the representation, then
the tính năng liên hành động với đại diện các, và mỗi khác thông qua đại diện, sau đó
7 7
If global variables are acessible, they are treated as if they were passed as a parameter. Nếu
các biến toàn cầu đang acessible, họ được đối xử như là đã được thông qua như một tham
số.
8 8
Input is used to mean the current state of the object before the call to the feature. Đầu vào
được sử dụng để có nghĩa là trạng thái hiện tại của đối tượng trước khi gọi tính năng này.

9 9
Output is used to mean the state of the object after the call to the feature. Sản lượng được
sử dụng để có nghĩa là nhà nước của đối tượng sau khi cuộc gọi đến tính năng này.
10 10
Data members is the term used in the C++ community to describe the variables that make
up the data representation of an Thành viên dữ liệu là một thuật ngữ được sử dụng trong
cộng đồng C + + để mô tả các biến số tạo nên đại diện dữ liệu của một
object. đối tượng.
CDTurner CDTurner
- 21 - - 21 -
02/02/93 02/02/93
Page 22 Trang 22
more effective the state-based testing process will become. hiệu quả hơn các quá trình thử
nghiệm dựa trên nhà nước sẽ trở thành. Thirdly, the greater the code Thứ ba, các mã lớn
hơn
complexity phức tạp
11 11
within features, the more difficult those features are to test. trong các tính năng, các khó
khăn hơn những tính năng này để kiểm tra. This can be Điều này có thể được
circumvented to a certain degree by inserting at the end of each sub-task within the feature
an phá vỡ đến một mức độ nhất định bằng cách chèn vào cuối mỗi công việc phụ trong
một tính năng
assertion to check the state of the object (this will be discussed in more detail later). khẳng
định để kiểm tra trạng thái của đối tượng (điều này sẽ được thảo luận cụ thể hơn sau này).
3.3. 3.3. Substates Substates
The current state of an object is the combined values from all of its data members at the
Các trạng thái hiện tại của một đối tượng là các giá trị kết hợp từ tất cả các thành viên dữ
liệu của nó tại
current point in time. hiện tại thời điểm. It is appropriate to therefore define a substate to be
the value of a Đó là vì thế thích hợp để xác định một substate được giá trị của một

particular data member at a specific point in time; likewise, a partial state is the combined
thành viên dữ liệu cụ thể tại một điểm cụ thể trong thời gian; cũng vậy, một nhà nước một
phần là kết hợp
values of a subset of all of the data members of the class at a particular point in time. giá trị
của một tập hợp của tất cả các thành viên dữ liệu của lớp học tại một điểm cụ thể trong
thời gian. This Điều này
means that the state of an object can now be redefined to be the combination of all of the có
nghĩa là nhà nước của một đối tượng có thể được định nghĩa lại được sự kết hợp của tất cả
các
substates of the object at a point in time. substates của đối tượng tại một điểm trong thời
gian.
Rather than associate every single possible value of a data member with a substate, it is
more Thay vì có thể kết hợp tất cả các giá trị duy nhất của một thành viên dữ liệu với
substate một, nó là nhiều hơn
appropriate to introduce two types of substates values: thích hợp để giới thiệu hai loại
substates giá trị:
specific substate values - these are substate values that are tested for directly within the
substate giá trị cụ thể - đây là những giá trị substate được thử nghiệm trực tiếp trong
code, or are described in the design as being of special significance. code, hoặc được mô tả
trong thiết kế như là có ý nghĩa đặc biệt.
general substate values - these are a group of substate values that are all considered in the
Tổng substate giá trị - đó là một nhóm các giá trị substate được tất cả các xem xét trong
same manner; therefore there is no need to distinguish between them for the purposes of
cùng một cách, vì vậy không có cần phải phân biệt giữa chúng cho mục đích
state-based testing. nhà nước dựa trên thử nghiệm.
This means that a data member's substates values are now a collection of specific substate
Điều này có nghĩa rằng một thành viên dữ liệu của substates giá trị hiện nay một bộ sưu
tập của substate cụ thể
values and general substate values. giá trị và giá trị substate nói chung. For example, Ví dụ,
given an integer data member iValue, and a design that states: đưa ra một số nguyên liệu

iValue thành viên, và thiết kế mà các tiểu bang:
• •
-1 has special meaning -1 Có ý nghĩa đặc biệt
11 11
The term complexity is used to imply that multiple tasks are perfomed within the feature.
Sự phức tạp thời hạn được sử dụng để ngụ ý rằng nhiệm vụ được perfomed trong nhiều
tính năng. An implication of greater complexity Một ý nghĩa phức tạp hơn
is that there is more likely to be a greater number of state transitions. là có nhiều khả năng
được một số lượng lớn hơn của quá trình chuyển đổi nhà nước.
CDTurner CDTurner
- 22 - - 22 -
02/02/93 02/02/93
Page 23 Trang 23
• •
that the value is always greater or equal to -1 giá trị đó luôn luôn là lớn hơn hoặc bằng -1
• •
and all numbers greater than minus one are treated equally, và tất cả các số lớn hơn trừ đi
một là đối xử bình đẳng,
then iValue can have the following substate values: sau đó iValue có thể có các giá trị
substate sau đây:
• •
StartValue (iValue = -1) - a specific substate value StartValue (iValue = -1) - một giá trị cụ
thể substate
• •
RemainingValues (iValue > -1) - a general substate value RemainingValues (iValue> -1) -
một giá trị chung substate
To determine the substates values for a class, perform the following for each data member:
Để xác định các giá trị substates cho một lớp, thực hiện những điều sau đây cho mỗi thành
viên dữ liệu:
1) analyse which particular values are significant (by analysis of the code, or the design), 1)

phân tích mà các giá trị cụ thể là đáng kể (bằng cách phân tích các đoạn code, hoặc thiết
kế),
and which are not. và không.
2) Allocate one substate value for each significant value. 2) Phân bổ substate một giá trị
cho từng giá trị đáng kể.
3) Allocate one substate value for each group of related values. 3) Phân bổ substate một giá
trị cho từng nhóm các giá trị liên quan.
If the data member being considered is a pointer (an address of an object, rather than an
actual Nếu các thành viên dữ liệu được coi là một con trỏ (một địa chỉ của một đối tượng,
hơn là một thực tế
object), then it is most likely that the pointer will only have two substate values, one
specific đối tượng), sau đó nó rất có thể là con trỏ sẽ chỉ có hai giá trị substate, một trong
những cụ thể
and one general. và một chung. The specific value is likely to be the value NULL Giá trị cụ
thể có khả năng là giá trị NULL
12 12
, and the general value will , Và tổng giá trị sẽ
cover all other possibilities, that is, not equal to NULL. bao gồm tất cả các khả năng khác,
đó là, không bằng NULL. However, it is possible that the Tuy nhiên, nó có thể là
substate can have more susbtate values, such as the address of a specific object. substate có
thể có giá trị susbtate hơn, chẳng hạn như địa chỉ của một đối tượng cụ thể.
An example of substates generated for a class is given in the section headed "Data
Scenarios". Một ví dụ về substates tạo ra cho một lớp học được đưa ra trong phần đầu
"Kịch bản dữ liệu".
3.4. 3.4. Performing the testing Thực hiện kiểm tra
The next part of the testing preparation is to determine the Các phần tiếp theo của việc
chuẩn bị thử nghiệm là để xác định
A A
I Tôi
i tôi

and và
A A
O O
i tôi
for all the features of the cho tất cả các tính năng của
class. lớp. This must be done from the design of the class, not from the code, as there may
be errors Điều này phải được thực hiện từ việc thiết kế các lớp, không phải từ mã, vì có thể
có sai sót
in the code. trong mã.
In order to facilitate the testing of substate-values, extra features must be added to the class
Để tạo thuận lợi cho việc thử nghiệm substate-giá trị, tính năng bổ sung phải được bổ sung
vào các lớp học
under test. thử. This will be described below. Điều này sẽ được mô tả dưới đây.
12 12
Null is generally used as the value of an invalid pointer in C/C++. Null thường được sử
dụng như là giá trị của một con trỏ không hợp lệ trong C / C + +.
CDTurner CDTurner
- 23 - - 23 -
02/02/93 02/02/93
Page 24 Trang 24
3.4.1. 3.4.1. Additions to the class Bổ sung vào các lớp học
A major part of state-based testing is the determining of the object's current state. Một phần
lớn của nhà nước dựa trên thử nghiệm là xác định của nhà nước hiện hành của đối tượng.
To enable Để kích hoạt
this, a new version of the class under test must be produced. này, một phiên bản mới của
lớp học được đo kiểm phải được sản xuất. At least one new feature per Ít nhất một tính
năng mới cho mỗi
substate is required. substate là bắt buộc. These will enable the tester to inspect the value of
chosen substates. Những sẽ cho phép thử để kiểm tra giá trị của substates chọn.
However, if there is a state change between two values which were both considered to be

part Tuy nhiên, nếu có sự thay đổi trạng thái giữa hai giá trị đó đã được cả hai được coi là
một phần
of the same general group, then the change is undetectable. của nhóm chung giống nhau,
sau đó thay đổi là không thể phát hiện. This problem is easily rectified by Vấn đề này có
thể dễ dàng sửa chữa bởi
the addition of an extra set of data members, whose purpose is to mirror the value of the
việc bổ sung thêm một thiết lập của các thành viên dữ liệu, mà mục đích là để phản ánh giá
trị của
original data members that the user is interested in. For each data member being mirrored,
an dữ liệu ban đầu các thành viên mà người dùng có quan tâm Đối với mỗi thành viên dữ
liệu được nhân đôi, một
extra feature is required to test the difference between the original and the mirroring data
tính năng bổ sung là cần thiết để kiểm tra sự khác biệt giữa bản gốc và các phản chiếu dữ
liệu
member, and to update the value of the mirror data members. thành viên, và để cập nhật
các giá trị của các thành viên dữ liệu máy nhân bản. This is explained in greater detail Điều
này được giải thích chi tiết hơn
in a separate report describing the MKTC suite of tools [19]. trong một báo cáo riêng biệt
mô tả các bộ MKTC các công cụ [19].
As a simple recommendation, it is advisable to insert statements at the beginning and end
of Như một khuyến nghị đơn giản, nó được khuyến khích để báo cáo chèn vào đầu và cuối
each feature to report to the screen (or to a file) the value of the parameters passed and the
mỗi tính năng báo cáo về màn hình (hoặc vào một tập tin) giá trị của các tham số được
thông qua và
values returned by the features. giá trị trả về bởi các tính năng. It is useful if this is also
done for the substate testing features, Nó rất hữu ích nếu điều này cũng được thực hiện cho
các tính năng thử nghiệm substate,
providing a useful aid in debugging any errors that might occur, by allowing the execution
of cung cấp một trợ giúp hữu ích trong việc gỡ lỗi bất kỳ lỗi nào mà có thể xảy ra, bằng
cách cho phép thực hiện

the test case to be traced. trường hợp thử nghiệm để được truy tìm.
It is usual that some features of a class must perform more than one task to achieve their
Nó là bình thường mà một số tính năng của một lớp phải thực hiện nhiều nhiệm vụ để đạt
được của họ
desired functionality. mong muốn các chức năng. The greater the number of tasks, the
more difficult they will be to test and Việc nhiều hơn số lượng các nhiệm vụ, càng khó
khăn họ sẽ được thử nghiệm và
debug if errors are present. debug lỗi nếu có hiện nay. As a recommendation to aid the
tester, it is advisable to insert Như một khuyến nghị để hỗ trợ các thử nghiệm, nó được
khuyến khích để chèn
assertions khẳng định
13 13
into the code between each task, checking the individual task performed as well as vào
trong mã giữa mỗi công việc, kiểm tra thực hiện nhiệm vụ cá nhân cũng như
the feature as a whole. các tính năng như một toàn thể.
13 13
Assertions are statements about the current value of variables, or substates. Khẳng định
được báo cáo về giá trị hiện tại của các biến, hoặc substates.
CDTurner CDTurner
- 24 - - 24 -
02/02/93 02/02/93
Page 25 Trang 25
3.4.2. 3.4.2. Data Scenarios Dữ liệu kịch bản
State-based testing is useful for more than simply detecting the change in state of an object,
it Nhà nước dựa trên thử nghiệm có ích hơn chỉ đơn giản là phát hiện sự thay đổi trạng thái
của một đối tượng, nó
can be used to detect the correct construction of a more complex dynamic data structure;
for có thể được dùng để phát hiện việc xây dựng chính xác của một cấu trúc dữ liệu phức
tạp năng động hơn; cho
example, a linked list. Ví dụ, một danh sách liên kết. For such dynamic data structures, it is

essential to determine which Đối với các cấu trúc dữ liệu động, nó là điều cần thiết để xác
định

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×