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 w
Trang 1The 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ụ minhhọ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
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 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
non-class-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:
Trang 2with 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 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
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
Trang 3testing 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 isdifficult to isolate a feature from its surrounding Tuy nhiên, rất khó để cô lập một tính năng
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
Trang 4paragraph 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 đượctiế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ể đượcsá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 originalphả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
Trang 5technique 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
Trang 6software 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
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ớimụ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ểmtra 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)
Trang 7In 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ảnxuất yêu cầu
However, in object-oriented languages the data representation of an object persists betweenTuy 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
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
Trang 8first() đầ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ácthiết lập của
bStart to true) would be verified bStart cho đúng) sẽ được xác nhận In addition, the use ofbStart 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
Trang 9into 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 inKhi 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ướckhi 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 ()
Trang 10
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 tracho 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
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
Trang 11the 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-basedNhà 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ởithiên nhiên
Trang 12The 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ấtthiết phải thành lập một lớp hợp 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
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ể
Trang 13become 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áceffectiveness 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
closely as possible chặt chẽ nhất có thể The only way to prove that a program conforms tothe 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
Trang 14completely 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ăngthử 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
Trang 154 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ộtbướ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,
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ụ:
Trang 16produces 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 detailedtesting, 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
Trang 17the 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 naynhà nước However, some features do not affect the Tuy nhiên, một số tính năng không ảnhhưở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ì?"
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
Trang 18constructor) 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
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à
Trang 19similar 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 đầuvà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
Trang 20O 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 đó
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ớphọ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
Trang 21features 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 đó
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
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 bethe 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
Trang 22means 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
Trang 23StartValue (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
Trang 24class 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
A major part of state-based testing is the determining of the object's current state Một phầnlớ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 ofchosen 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ềunà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]
Trang 25As 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 chocá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
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áicủ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 isessential 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
Trang 26particular changes can occur to the structure, and when they can occur thay đổi đặc biệt có thể xảy ra để cơ cấu, và khi họ có thể xảy ra This analysis produces phân tích này được sản xuất
a list of situations which are significant to the model upon which the data structure is based; một danh sách các tình huống mà đáng kể cho các mô hình mà các cấu trúc dữ liệu được dựa;
these situations will be referred to as data scenarios những tình huống này sẽ được gọi là kịch bản dữ liệu
list_element * pNext; list_element * pNext;
TYPE tItem; LOẠI tItem;
}; );
// pTop points to the top of the first element of the / / PTop điểm đến hàng đầu của yếu tố đầu tiên của
list (the top) danh sách (phía trên)
list_element * pTop ; list_element * pTop;
// pCur points to the pointer to the current / / PCur điểm để con trỏ đến hiện tại
This class was actually written as a template (a generic class), but for simplification
reasons, it has been reduced to a class lớp học này được thực sự được viết như là một bản mẫu (một lớp học chung), nhưng vì lý do đơn giản hóa, nó đã được giảm xuống một lớp
Trang 27ii) pTop does not equal NULL ii) pTop không bằng NULL
S2) *pCur S2) * pCur
15 15
i) *pCur equals NULL i) * pCur bằng NULL
ii) *pCur does no equal NULL ii) * pCur hiện không có bằng NULL
S3) pCur S3) pCur
i) pCur equals the address of pTop i) pCur bằng địa chỉ của pTop
ii) pCur does not equal the address of pTop ii) pCur không bằng địa chỉ của pTop
The significance of these states are: Ý nghĩa của các nước này là:
In conjunction with the model upon which the class is based (not shown), two different sets
of Kết hợp với mô hình mà các lớp học dựa (không hiển thị), hai bộ khác nhau
scenarios are produced: scenarios used by those features of the class that act upon the elements kịch bản được sản xuất: kịch bản được sử dụng bởi những tính năng của lớp mà hành động theo các yếu tố
themselves (see figure 6), and the scenarios used by those features which act upon the linksmình (xem hình 6), và kịch bản được sử dụng bởi những tính năng mà hành động theo các liên kết
between the nodes (see figure 7) giữa các nút (xem hình 7) Generally, the type of features that fall into the first category Nói chung, các loại tính năng mà rơi vào thể loại đầu tiên are those that alter the contents of nodes, but do not actually change the structure là những thay đổi nội dung của các nút, nhưng không thực sự thay đổi cơ cấu Whereas the Trong khi
type of features that fall into the second category are generally those features that add, or delete loại tính năng mà rơi vào thể loại thứ hai nói chung là những tính năng thêm, hoặc xóa
nodes from the list các nút từ danh sách
15 15
A star in front of a variable name in C/C++ means the object pointed to by the variable (a pointer) Một ngôi sao ở phía trước của một tên biến trong C / C + + có nghĩa là đối tượng được chỉ tới bởi biến (một con trỏ) In this case, it means the Trong trường hợp này, nó có nghĩa là
current element in the list hiện yếu tố trong danh sách
CDTurner CDTurner
- 26 - - 26 -
02/02/93 02/02/93
Page 27 Trang 27 a) a)
Trang 28when put into words, they are: khi đưa vào từ ngữ, đó là:
a) the only node of the list, a) nút duy nhất của danh sách,
b) the first element of a multiple node list, b) các yếu tố đầu tiên của một danh sách nhiều nút,
c) the last element of a multiple node list c) các yếu tố cuối cùng của một danh sách nhiều nút
Figure 6 Hình 6 The data scenarios for the features that act upon the nodes of the list Các
dữ liệu kịch bản cho các tính năng mà hành động theo các nút của danh sách
When put in to words, they are: Khi đưa vào từ ngữ, đó là:
a) an empty list, a) một danh sách trống,
b) before the only element, b) trước khi các yếu tố duy nhất,
c) after the only element, c) sau khi các yếu tố duy nhất,
d) in between two nodes in a multiple node list, d) ở giữa hai nút trong một danh sách nhiều nút,
e) at the end of a multiple node list e) ở phần cuối của một danh sách nhiều nút
Trang 29Figure 7 Hình 7 The data scenarios for the features that act upon the links between the nodes Các dữ liệu kịch bản cho các tính năng mà hành động theo các liên kết giữa các nút
However, unless a change in the composition of the data structure is detectable, the results
of Tuy nhiên, trừ khi có sự thay đổi trong thành phần của cấu trúc dữ liệu được phát hiện, kết quả của
using the above scenarios will be difficult to verify sử dụng các kịch bản trên sẽ được khó khăn để xác minh Therefore, additional substates are required Vì vậy, khi được yêu cầu substates
for detecting the state of various parts of a dynamic data structure để phát hiện trạng thái của các bộ phận khác nhau của một cấu trúc dữ liệu động For the above example, the Đối với ví dụ trên,
following additional substates were used: sau substates bổ sung được sử dụng:
S4) (*pCur)->pNext S4) (* pCur) -> pNext
16 16
i) invalid i) không hợp lệ
ii) (*pCur)->pNext does not equals NULL ii) (* pCur) -> pNext không bằng NULL
iii) (*pCur)->pNext equals NULL iii) (* pCur) -> pNext bằng NULL
S5) (*pCur)->tItem S5) (* pCur) -> tItem
i) (*pCur)->tItem is invalid i) (* pCur) -> tItem là không hợp lệ
ii) (*pCur)->tItem is valid ii) (* pCur) -> tItem là hợp lệ
The substate values S4(ii) and S4(iii) are relatively self-explanatory Các giá trị substate S4 (ii) và S4 (iii) là tương đối tự giải thích
17 17
; S4(i) has to be ; S4 (i) phải được
included, because there is a possibility that *pCur could be NULL rendering the expressionbao gồm, vì có một khả năng rằng * pCur có thể là NULL vẽ biểu thức
(*pCur)->pNext invalid (* PCur) -> pNext không hợp lệ This also applies to S5, which has an added anomaly, it seems to Điều này cũng áp dụng đối với S5, trong đó có thêm bất thường, nó có vẻ
indirectly reflect the value of *pCur (S2) only gián tiếp phản ánh giá trị của * pCur (S2)
mà thôi This is because a list is used to store any range Điều này là do một danh sách được
sử dụng để lưu trữ bất kỳ phạm vi
of values; it is pointless to detect every single value, therefore what is required is the ability
to các giá trị, nó là vô nghĩa để phát hiện tất cả các giá trị duy nhất, do đó những gì được yêu cầu là khả năng
Trang 30detect a change in value phát hiện một sự thay đổi về giá trị This is provided by some of the extra features that have been added to Điều này được cung cấp bởi một số các tính năng bổ sung mà đã được thêm vào
the class under test; but for identification purposes, allocating a substate to the expression các lớp học thử, nhưng cho các mục đích xác định, phân bổ một substate với các biểu thức eases some problems giúp giảm bớt một số vấn đề It also facilitates the correct expression
of test cases to the tool Nó cũng tạo điều kiện cho sự biểu hiện chính xác các trường hợp thử nghiệm để công cụ
case, it refers to the pNext data member which is part of a list_element object trường hợp,
nó đề cập đến các thành viên dữ liệu pNext là một phần của một đối tượng list_element
17 17
They reflect whether the pNext data member of the current node points to another link, or
to NULL (the end of the list) Họ phản ánh cho dù các thành viên dữ liệu pNext trong những điểm nút hiện tại để một liên kết khác, hoặc để NULL (vào cuối danh sách)
able to differentiate between the scenarios; the initial set-up of the test case is driven by the
có khả năng phân biệt giữa các kịch bản; các thiết lập ban đầu của vụ án thử nghiệm là lái
xe của các
tester, therefore allowing the starting state to be whatever is required thử nghiệm, do đó cho phép nhà nước bắt đầu được bất cứ điều gì là cần thiết It is for this lack of Nó là dành cho sự thiếu
differentiability between scenarios that the tool MKTC has a separate facility allowing the differentiability giữa các kịch bản mà các MKTC công cụ có một cơ sở riêng biệt cho phépstarting state for test cases to be expressed as a scenario, rather than a state description bắt đầu từ nhà nước đối với trường hợp thử nghiệm để được thể hiện như một kịch bản, hơn làmột mô tả nhà nước
19 19
Trang 31
3.4.3 3.4.3 Generation of Test Cases Thế hệ các vụ án thử nghiệm
In this report so far, both substates and data scenarios have been introduced and can now beTrong báo cáo này cho đến nay, cả hai substates và dữ liệu kịch bản đã được giới thiệu và bây giờ có thể được
combined to provide a more general guide to state-based testing kết hợp để cung cấp một hướng dẫn tổng quát hơn để thử nghiệm trên cơ sở nhà nước The guide is in the form of a hướng dẫn là dưới hình thức một
list of tasks to be performed danh sách các nhiệm vụ phải được thực hiện
detect the changes to the class under test phát hiện những thay đổi lớp học thử
19 19
A state description is a list of substates descriptions which when combined form the state
of the object Một mô tả nhà nước là danh sách các mô tả substates mà khi kết hợp hình thành nhà nước của đối tượng A substate description is Một mô tả là substate
the declaration of a particular substate's value việc kê khai cụ thể của substate một giá trị CDTurner CDTurner
Trang 32for each cho mỗi
feature tính năng này In the majority of cases, both should be the same as Trong đa số trường hợp, cả hai cần được giống như
s s
because classes should bởi vì các lớp học nên
be written with no implied order for the calling of features [13] được viết với ngụ ý không
có thứ tự cho các cuộc gọi của các tính năng [13] These sets of states Những bộ của các quốc gia
form the basis of the cases hình thành cơ sở của các trường hợp
[8] [8]
Analyse from the design the call graph for inter-features within the same class, that is, Phântích từ thiết kế các đồ thị cuộc gọi cho liên tính năng trong cùng một lớp, có nghĩa là, the class under test các lớp học thử
Trang 33is done for all significant values that can be passed as parameters to the feature được thực hiện cho tất cả các giá trị đáng kể có thể được thông qua như các tham số để tính năng này.These Những
significant values are the stimuli of the features giá trị quan trọng là kích thích các tính năng
the code for the test, including the call to the feature under test mã cho thử nghiệm, bao gồm cả cuộc gọi đến tính năng được đo kiểm Append to all of this, a Nối cho tất cả các điều này, một
test for the final state of the object, and any code required to tidy up after the test kiểm tra cho các tiểu bang cuối cùng của đối tượng, và mã bất kỳ yêu cầu phải dọn dẹp sau khi thử nghiệm
[12] [12]
Go back to item 10 until there are no more features left to test Trở lại mục 10 cho đến khi không có thêm nhiều tính năng còn lại để kiểm tra
3.5 3.5 General Assessment of the Technique Kỹ thuật tổng hợp đánh giá của các
State-based testing, like the majority of other techniques, has particular types of classes on Nhà nước dựa trên thử nghiệm, giống như phần lớn các kỹ thuật khác, có các kiểu đặc biệt của các lớp học về
which it is more effective than on others mà nó hiệu quả hơn vào người khác The types ofclasses that have been tested by this Các loại lớp học đã được thử nghiệm bằng cách này technique so far have by no means been restrictive kỹ thuật cho đến nay đã không có nghĩa
là bị hạn chế They include file handlers, parsers, lexical Chúng bao gồm xử lý tập tin, parsers, từ vựng
analysers, and abstract data types such as lists phân tích, và dữ liệu trừu tượng kiểu như danh sách The degree of effectiveness of the technique is Mức độ hiệu quả của kỹ thuật này là
dependent upon the degree of control-information that exists as part of the data
representation phụ thuộc vào mức độ thông tin, kiểm soát tồn tại như một phần của đại diện dữ liệu
state-based testing is likely to be nhà nước dựa trên thử nghiệm có khả năng được
Trang 34However, if the class is designed simply as a repository of information, or as a non
dynamic Tuy nhiên, nếu lớp học được thiết kế đơn giản là một kho thông tin, hoặc như là một sự năng động
data storage structure, then this technique will have limited effect cấu trúc lưu trữ dữ liệu, sau đó kỹ thuật này sẽ có hiệu lực hạn chế Its ineffectiveness is related thiếu hiệu quả của
nó có liên quan
to the number of test cases that can be produced về số lượng các trường hợp kiểm thử có thể được sản xuất From the experience of the author, the Từ kinh nghiệm của tác giả, các number of test cases that can be generated is related to the amount of control-information
số trường hợp thử nghiệm có thể được tạo ra là liên quan đến số lượng thông tin kiểm soát present within the representation of the class and the number of different substate-values for Hiện nay trong phạm vi đại diện của lớp và số lượng khác nhau substate-giá trị cho each data-member mỗi thành viên dữ liệu
The technique is not a substitute for functional testing, nor structural testing Kỹ thuật này không phải là một thay thế cho thử nghiệm chức năng, cũng không cấu trúc thử nghiệm However, it Tuy nhiên,
should be considered as a complimentary technique for testing that part of programming that is nên được xem là một kỹ thuật miễn phí để thử nghiệm rằng một phần của chương trình đó là
particularly prevalent, and easily accessible in object-oriented programming, but which is not đặc biệt là phổ biến, và dễ dàng truy cập trong lập trình hướng đối tượng, nhưng đó không phải là
so readily visible in programs written in more procedural languages để dễ dàng nhìn thấy được trong các chương trình được viết bằng nhiều ngôn ngữ thủ tục
If a class is written with no order imposed upon the execution of features, the less
restrictive it Nếu một lớp học được viết không có để áp đặt lên việc thực hiện các tính năng, ít hạn chế nó
is upon any programmer who may to make use of it là khi có người lập trình để có thể sử dụng nó This in turn increases one of the aims of Điều này tăng lần lượt một trong những mục tiêu của
object-oriented programming - that of facilitating the increased use of reusable
components, lập trình hướng đối tượng - đó là tạo thuận lợi cho việc sử dụng tăng lên của các thành phần tái sử dụng,
therefore reducing the cost of software production [12] do đó giảm chi phí sản xuất phần mềm [12]
There is one point which has been carefully avoided until now - the emphasis of the test cases Có một điểm đã được cẩn thận tránh cho đến bây giờ - sự nhấn mạnh của các trườnghợp thử nghiệm
The dilemma is: should the test cases concentrate on individual substates, or should they tiến thoái lưỡng nan này là: nên các trường hợp kiểm tra tập trung vào substates cá nhân, hoặc nên họ
attempt to concentrate on combinations of substates ? cố gắng tập trung vào sự kết hợp của substates?
There does not seem to be a simple answer to this problem Hiện không có vẻ là một câu trả lời đơn giản cho vấn đề này If emphasis is placed on individual Nếu nhấn mạnh được đặt trên cá nhân
Trang 35substates, the number of test cases increases significantly, which although significantly faster substates, số trường hợp kiểm thử tăng đáng kể, mà mặc dù nhanh hơn đáng kể and easier to generate than the other type (when using automated methods such as MKTC),but và dễ dàng hơn để tạo ra hơn loại khác (khi sử dụng phương pháp tự động như
MKTC), nhưng
do have the disadvantage of using more testing resources such as machine time, and disk space không có những bất lợi của việc sử dụng các nguồn lực thử nghiệm hơn như máy thời gian, và không gian đĩa
However, it is possible to find a compromise between the two, and this must be decided upon Tuy nhiên, có thể để tìm một thỏa hiệp giữa hai, và điều này phải được quyết định khi
by the tester bởi các thử nghiệm
object-nghiệm hướng đối tượng
programs chương trình As there only a few papers, each will be discussed individually and contrasted with Vì có chỉ là một vài giấy tờ, mỗi cá nhân sẽ được thảo luận và tương phản với
the rest phần còn lại They are discussed in chronological order Họ được thảo luận trong thứ tự thời gian
The first paper is "Augmentation of Object-Oriented Programming by Concepts of AbstractCác giấy đầu tiên là "ngực của lập trình hướng đối tượng của khái niệm của Tóm tắt Data Type Theory: The ModPascal Experience" by Walter G Olthoff [15] It described an Loại dữ liệu Lý thuyết: Kinh nghiệm ModPascal "của Walter G Olthoff [15] Nó mô tả một
approach to the validation of object-oriented programs written in a modified version of Pascal cách tiếp cận để xác nhận các đối tượng theo định hướng chương trình viết bằng một phiên bản sửa đổi của Pascal
that includes constructs for defining classes, and for the inclusion of information connectedbao gồm các cấu trúc để xác định các lớp học, và cho sự bao gồm các thông tin kết nối with the ADT theory với lý thuyết ADT
The author gives a brief introduction to the various different methods of formally
specifying Tác giả đưa ra một giới thiệu ngắn gọn để các phương pháp khác nhau khác nhau của chính thức chỉ định
software components phần mềm thành phần He then concentrates upon the algebraic specification method, which is Sau đó ông tập trung theo phương pháp đại số đặc điểm kỹ thuật, mà là
Trang 36the one that has been used in conjunction with the modified Pascal một trong đó đã được
sử dụng kết hợp với Pascal đổi lần Details of the modified Thông tin chi tiết của các sửa đổi
Pascal language are then given including the declaration of classes, enrichment objects Ngôn ngữ Pascal sau đó được đưa ra bao gồm cả việc kê khai của các lớp học, các đối tượng làm giàu
(extensions to other objects), and the incorporation of information from the formal (Phần
mở rộng cho các đối tượng khác), và kết hợp thông tin từ chính thức
specification đặc điểm kỹ thuật The main problem with the use of a 'home-grown' version
of any language, is that Vấn đề chính với việc sử dụng bất kỳ ngôn ngữ "cây nhà lá vườn một 'của phiên bản, đó là
it is very unlikely that there is likely to be any third party tool support nó là rất không chắcrằng có khả năng được bất kỳ bên thứ ba công cụ hỗ trợ This restricts the user to Điều này hạn chế người sử dụng
the use of the limited tools that are supplied as part of the supporting environment việc sử dụng các công cụ hạn chế được cung cấp như một phần của môi trường hỗ trợ
The use of formal specifications by the system poses problems for the tester Việc sử dụng các thông số kỹ thuật chính thức của hệ thống là vấn đề với người thử việc They require
production of the specifications sản xuất các chi tiết kỹ thuật
Towards the end of the paper, the author discusses whether it is appropriate to model ADTs
in Đến cuối bài báo, tác giả bàn về cho dù đó là thích hợp để mô hình trong ADTs
imperative object-oriented programming languages bắt buộc lập trình hướng đối tượng ngôn ngữ He concludes that it is "not useful to Ông kết luận rằng đó là "không hữu ích choremodel the theoretical notion of an ADT in an imperative [traditional object-oriented] remodel khái niệm lý thuyết của ADT là một trong một [truyền thống] hướng đối tượng bắtbuộc
should be done using separate language constructs nên được thực hiện bằng cách sử dụng ngôn ngữ riêng biệt cấu trúc
Trang 37Steven P Fiedler in "Object-Oriented Unit Testing" [4], describes the application of a moreSteven P Fiedler trong "Object-Oriented Đơn vị kiểm tra" [4], mô tả các ứng dụng của mộtnhiều hơn
traditional approach phương pháp tiếp cận truyền thống He describes experience gained
on a software project at Hewlett Packard Ông mô tả kinh nghiệm có được trên một dự án phần mềm tại Hewlett Packard
The project applied traditional testing techniques to the testing of software written in C++
Dự án áp dụng các kỹ thuật kiểm tra truyền thống để các thử nghiệm của phần mềm viết bằng C + +
When describing the testing process, the author states: Khi mô tả quá trình thử nghiệm, tác giả tiểu bang:
"Since the paradigm of object-oriented programming emphasises the external behaviour of
"Kể từ khi mô hình của lập trình hướng đối tượng, nhấn mạnh các hành vi bên ngoài của data abstractions rather than the internals, one would only expect to employ only black box,
dữ liệu trừu tượng hơn là ruô ̣t, chỉ có một mong chờ để chỉ sử dụng hộp đen,
functional testing techniques chức năng kiểm tra kỹ thuật However, a more robust testing structure employing complete Tuy nhiên, một thử nghiệm cơ cấu mạnh mẽ hơn sử dụng laođộng hoàn thành
path testing is actually needed." con đường thử nghiệm là thực sự cần thiết "
The McCabe cyclomatic testing method was used to ensure independent path coverage of Các McCabe cyclomatic phương pháp thử được sử dụng để đảm bảo phạm vi bảo hiểm con đường độc lập
methods phương pháp Test cases were derived from the range of values expected by parameters to methods, trường hợp thử nghiệm đã được bắt nguồn từ dãy giá trị dự kiến của tham số cho phương pháp,
boundary analysis of parameter values, and erroneous values to place the unit under stress Ranh giới phân tích các giá trị tham số, và sai lầm để đặt giá trị của đơn vị bị căng thẳng Other test cases were derived from the unit's specification trường hợp thử nghiệm khác đã được xuất phát từ đặc điểm kỹ thuật của các đơn vị
Classes are validated in the order determined from a call graph of the project Lớp học được xác nhận theo trình tự xác định từ một đồ thị cuộc gọi của dự án The classes at Các lớp học tại
the bottom of the graph are validated first, removing the requirement for test driver classes phía dưới của đồ thị được xác nhận đầu tiên, loại bỏ các yêu cầu cho các lớp học lái xe thử nghiệm
which emulate unvalidated parameter classes mà thi đua unvalidated tham số lớp học This
is a similar conclusion to the one reached Đây là một kết luận tương tự như một đạt
earlier in this report trước đó trong báo cáo này
Results from the test runs are verified by simple file comparison with the expected results Kết quả chạy thử nghiệm được kiểm chứng bởi các tập tin đơn giản so sánh với kết quả mong đợi This Điều này
technique is cumbersome because of the time required to generate the expected output exactly kỹ thuật là cồng kềnh vì thời gian cần thiết để tạo ra sản lượng dự kiến sẽ chính xác
Trang 38However, it is an easier technique to use, rather than to develop self-verifying test cases Tuy nhiên, nó là một kỹ thuật dễ dàng hơn để sử dụng, hơn là để phát triển kiểm tra xác minh các trường hợp tự It is Đó là
suggested that rather than using a team of testing personnel separate from the team of gợi ý rằng thay vì sử dụng một đội ngũ nhân viên thử nghiệm riêng biệt từ đội ngũ
developers, it is more efficient to allow the developers to test the code because of their detailed phát triển, đó là hiệu quả hơn để cho phép các nhà phát triển để kiểm tra mã vì họ chi tiết
knowledge of the internal workings of the unit kiến thức về các hoạt động nội bộ của đơn
vị This decision is likely to be based on the Quyết định này có thể sẽ dựa trên
availability of resources for the testing nguồn lực sẵn có để thử nghiệm However, it has been suggested that although people Tuy nhiên, nó đã được gợi ý rằng mặc dù người dân CDTurner CDTurner
fewer preconceptions about the performance and functionality of the unit under test, and ít định kiến về hiệu suất và chức năng của đơn vị được đo kiểm, và
therefore are more likely to detect errors do đó có nhiều khả năng phát hiện lỗi In [20], Wallace and Fujii imply the separation of the Trong [20], Wallace và Fujii bao hàm sự táchcủa
validation and verification group (who perform the testing) from the development group xác nhận và xác minh nhóm (những người thực hiện các thử nghiệm) từ nhóm phát triển When discussing the testing of classed defined using inheritance, it is stated that the
methods of Khi thảo luận về các thử nghiệm phân loại được xác định bằng cách sử dụng kếthừa, đó là tuyên bố rằng phương pháp
the class that are provided by a parent class only require minimal testing các lớp học được cung cấp bởi một lớp cha mẹ chỉ cần thử nghiệm tối thiểu This is a rather Đây là một thay simplification of the problem concerning the reduction of testing required by derived classes đơn giản hóa vấn đề liên quan đến việc giảm kiểm tra theo yêu cầu của các lớp học
có nguồn gốc
This problem has been addressed in greater depth by the work conducted by MJ Harrold et
al Vấn đề này đã được giải quyết trong chiều sâu lớn hơn do việc đã thực hiện bởi MJ et alHarrold
It is concluded that a significant investment of time is required for the testing described, Đó
là kết luận rằng một đầu tư đáng kể thời gian cần thiết để thử nghiệm các mô tả,
although accurate estimates of time required for the testing were not available, because testing mặc dù số ước lượng chính xác về thời gian cần thiết để kiểm tra không có sẵn, bởi
vì thử nghiệm
and development occurred concurrently và phát triển diễn ra đồng thời Testing methods designed for use with procedural Kiểm tra các phương pháp thiết kế để sử dụng với thủ tục