Khung tự động hóa kiểm thử: ArchiKiến trúc và các loại

⚡ Tóm tắt thông minh

Kiến trúc Khung tự động hóa kiểm thử xác định các tiêu chuẩn mã hóa, xử lý dữ liệu kiểm thử và các quy tắc kho lưu trữ đối tượng mà các kịch bản tự động hóa tuân theo. Có năm loại khung đã được thiết lập, mỗi loại đánh đổi giữa nỗ lực thiết lập với khả năng tái sử dụng, chi phí bảo trì và khả năng mở rộng lâu dài.

  • 📐 Định nghĩa cốt lõi: Khung phần mềm là một tập hợp các nguyên tắc, chứ không phải quy tắc, nhằm tạo ra khả năng tái sử dụng, tính di động và giảm chi phí bảo trì.
  • ⏺️ Lập trình tuyến tính: Chức năng ghi và phát lại là chức năng xây dựng nhanh nhất nhưng bảo trì khó khăn nhất, vì dữ liệu được mã hóa cứng.
  • 🧱 Thư viện kiểm tra Archikiến trúc: Các bước chung trở thành các hàm có thể tái sử dụng được gọi bởi một tập lệnh điều khiển, làm tăng khả năng tái sử dụng nhưng lại làm tăng thời gian lập kế hoạch.
  • 📊 Dữ liệu được điều khiển: Logic kiểm thử được lưu trữ trong các tập lệnh, trong khi dữ liệu được chuyển sang Excel, CSV hoặc cơ sở dữ liệu, cho phép thực hiện nhiều kịch bản khác nhau cho mỗi tập lệnh.
  • 🔑 Dựa trên từ khóa: Các thao tác được lưu trữ dưới dạng từ khóa trong một bảng, giúp cho việc kiểm thử không phụ thuộc vào công cụ hay ứng dụng.
  • 🔀 Mô hình kết hợp: Hầu hết các bộ công cụ phân tích dữ liệu hoàn thiện đều kết hợp bảng từ khóa với phân tích chức năng để cân bằng giữa nỗ lực và phạm vi bao phủ.

Khung tự động hóa thử nghiệm ArchiKiến trúc và các loại

Framework trong kiểm thử tự động hóa là gì?

A Khung tự động hóa thử nghiệm là một tập hợp các hướng dẫn như tiêu chuẩn mã hóa, xử lý dữ liệu thử nghiệm, xử lý kho lưu trữ đối tượng, v.v... khi tuân theo trong quá trình viết kịch bản tự động sẽ tạo ra các kết quả có lợi như tăng khả năng sử dụng lại mã, khả năng di động cao hơn, giảm chi phí bảo trì kịch bản, v.v. Đây chỉ là các hướng dẫn chứ không phải quy tắc; chúng không bắt buộc và bạn vẫn có thể viết kịch bản mà không cần tuân theo các hướng dẫn. Nhưng bạn sẽ bỏ lỡ những lợi thế của việc có một Khung.

Tại sao bạn cần một Khung?

Hãy xem xét một ví dụ để hiểu tại sao bạn cần một Framework.

Tôi chắc chắn rằng bạn đã tham dự một hội thảo/bài giảng/hội nghị mà những người tham gia được yêu cầu tuân thủ các hướng dẫn sau đây –

  • Học viên nên ngồi vào chỗ của mình 5 phút trước khi bắt đầu bài giảng.
  • Mang theo sổ và bút để ghi chép.
  • Đọc phần tóm tắttracNhư vậy, bạn sẽ có ý tưởng sơ lược về nội dung bài thuyết trình.
  • Điện thoại di động nên được đặt ở chế độ im lặng.
  • Sử dụng các cổng thoát ở phía đối diện với diễn giả nếu bạn cần rời đi giữa bài giảng.
  • Các câu hỏi sẽ được đưa ra vào cuối buổi học.

Bạn có nghĩ rằng bạn có thể tiến hành một cuộc hội thảo KHÔNG Bạn có tuân thủ các hướng dẫn này không?

Câu trả lời là một VÂNG! Chắc chắn, bạn có thể tiến hành một buổi hội thảo/bài giảng/hội nghị/trình diễn mà không cần những hướng dẫn trên.. trên thực tế, một số người trong chúng ta sẽ không tuân theo chúng mặc dù đã được đặt ra!

Nhưng nếu tuân thủ các hướng dẫn, sẽ mang lại kết quả có lợi như giảm thiểu sự phân tán khán giả.tracViệc sử dụng ngôn ngữ ký hiệu trong các bài giảng đã giúp tăng khả năng ghi nhớ của người tham gia và nâng cao sự hiểu biết về nội dung bài học.

Dựa vào những điều trên, một Khung có thể được định nghĩa là một bộ hướng dẫn mà khi tuân theo sẽ mang lại kết quả có lợi.

Khung tự động hóa thử nghiệm ArchiKiến trúc: Các thành phần chính

Trước khi so sánh các loại, việc xem xét nội dung của từng framework là rất hữu ích. ArchiKiến trúc mô tả cách các bộ phận này được xếp lớp sao cho sự thay đổi ở một lớp không làm hỏng các lớp khác.

  • Lớp kịch bản kiểm thử: Chứa các trường hợp kiểm thử. Các kịch bản vẫn ngắn gọn vì chúng gọi các hàm có thể tái sử dụng thay vì lặp lại các bước điều hướng.
  • Thư viện hàm: Lưu trữ các thao tác chung như đăng nhập, tìm kiếm và đăng xuất, do đó việc thay đổi quy trình làm việc chỉ cần thực hiện một lần.
  • Kho lưu trữ đối tượng: Ánh xạ các tên thân thiện với các bộ định vị phần tử giao diện người dùng. Khi giao diện thay đổi, chỉ lớp này được chỉnh sửa.
  • Lớp dữ liệu thử nghiệm: Lưu trữ dữ liệu đầu vào và giá trị mong muốn trong các nguồn Excel, CSV hoặc cơ sở dữ liệu thay vì bên trong mã nguồn.
  • Lớp cấu hình: Chứa môi trường URLcác tùy chọn trình duyệt, thời gian chờ và thông tin đăng nhập.
  • Lớp báo cáo: Tạo báo cáo thực thi, ảnh chụp màn hình lỗi và nhật ký chẩn đoán.
  • Lớp thực thi: Bộ kích hoạt từ máy chủ xây dựng, liên kết tự động hóa với tích hợp liên tục.

Các loại khung cấu trúc bên dưới chủ yếu khác nhau ở mức độ phân tách nghiêm ngặt các lớp này.

Các loại khung tự động hóa thử nghiệm

Dưới đây là các loại Khung kiểm tra tự động khác nhau:

  1. Lập trình tuyến tính
  2. Thư viện kiểm thử ArchiKhung kiến ​​trúc.
  3. Dựa trên dữ liệu Kiểm tra Khuôn khổ.
  4. Khung kiểm thử dựa trên từ khóa hoặc dựa trên bảng.
  5. Khung tự động hóa kiểm thử lai.

Hãy xem xét chúng một cách chi tiết –

1) Kịch bản tuyến tính – Ghi và phát lại

Đây là khung đơn giản nhất trong tất cả các Khung tự động hóa thử nghiệm và còn được gọi là “Ghi & Phát lại”. Trong Kiểm tra tự động hóa Framework, Người kiểm tra ghi lại thủ công từng bước (Điều hướng và Đầu vào của người dùng), Chèn Điểm kiểm tra (Các bước xác thực) trong vòng đầu tiên. Sau đó, anh ta phát lại tập lệnh đã ghi ở các vòng tiếp theo.

Ví dụ: Cân nhắc việc đăng nhập Đơn xin đặt vé máy bay và kiểm tra xem ứng dụng đã được tải khi đăng nhập thành công hay chưa. Ở đây, người kiểm tra sẽ chỉ ghi lại các bước và thêm các bước xác thực.

SystemUtil.Run "flight4a.exe","","","open"
Dialog("Login").WinEdit("Agent Name:").Set "Guru99"
Dialog("Login").WinEdit("Password:").Set "Mercury"
Dialog("Login").WinButton("OK").Click
'Check Flight Reservation Window has loaded after successful log-on
Window("Flight Reservation").Check CheckPoint("Flight Reservation")

Ưu điểm

  • Cách nhanh nhất để tạo tập lệnh
  • Chuyên môn tự động hóa không bắt buộc
  • Cách dễ nhất để tìm hiểu các tính năng của Công cụ kiểm tra

Nhược điểm

  • Ít sử dụng lại các tập lệnh
  • Dữ liệu thử nghiệm được mã hóa cứng vào tập lệnh
  • Cơn ác mộng bảo trì

2) Thư viện kiểm tra ArchiKhung kiến ​​trúc

Nó còn được biết đến như “Kịch bản có cấu trúc” or "Suy giảm chức năng".

Trong Khung kiểm tra tự động hóa này, các tập lệnh kiểm tra ban đầu được ghi lại bởi “Ghi và phát lại" phương pháp. Later, các tác vụ phổ biến bên trong tập lệnh được xác định và nhóm thành Hàm. Các hàm này được gọi bằng tập lệnh thử nghiệm chính được gọi là Người lái xe theo những cách khác nhau để tạo ra các trường hợp thử nghiệm.

Ví dụ: Tương tự ví dụ trên, chức năng đăng nhập vào Đặt chỗ chuyến bay sẽ có dạng .

Function Login()
  SystemUtil.Run "flight4a.exe","","","open"
  Dialog("Login").WinEdit("Agent Name:").Set "Guru99"
  Dialog("Login").WinEdit("Password:").Set "Mercury"
  Dialog("Login").WinButton("OK").Click
End Function

Bây giờ, bạn sẽ gọi hàm này trong script chính như sau

Call Login()
---------------------------
'Other Function calls / Test Steps.
---------------------------

Ưu điểm

  • Mức độ tái sử dụng mã cao hơn đạt được trong Tập lệnh có cấu trúc so với “Ghi & Phát lại”
  • Các tập lệnh tự động hóa phát triển ít tốn kém hơn do khả năng sử dụng lại mã cao hơn
  • Bảo trì tập lệnh dễ dàng hơn

Nhược điểm

  • Cần có chuyên môn kỹ thuật để viết Tập lệnh bằng Khung thư viện kiểm tra
  • Cần thêm thời gian để lập kế hoạch và chuẩn bị kịch bản kiểm thử.
  • Dữ liệu thử nghiệm được mã hóa cứng trong các tập lệnh

3) Khung kiểm tra dựa trên dữ liệu

Trong khuôn khổ này, trong khi Trường hợp thử nghiệm Logic nằm trong các kịch bản kiểm thử, dữ liệu kiểm thử được tách biệt và lưu trữ bên ngoài các kịch bản kiểm thử. Dữ liệu kiểm thử được đọc từ các tệp bên ngoài (tệp Excel, tệp văn bản, tệp CSV, nguồn ODBC, đối tượng DAO, đối tượng ADO) và được tải vào các biến bên trong kịch bản kiểm thử. Các biến được sử dụng cho cả giá trị đầu vào và giá trị xác minh. Bản thân các kịch bản kiểm thử được chuẩn bị bằng cách sử dụng lập trình tuyến tính hoặc khung thư viện kiểm thử. Kỹ thuật này được giải thích chi tiết hơn trong phần tiếp theo. thử nghiệm dựa trên dữ liệu hướng dẫn.

Ví dụ: phát triểnping Việc lập trình kịch bản đăng nhập đặt vé máy bay sử dụng phương pháp này sẽ bao gồm hai bước.

Bước 1) Tạo một tệp thử nghiệm – Dữ liệu có thể là Excel , CSV hoặc bất kỳ nguồn cơ sở dữ liệu nào khác.

Tên đại lý Mật khẩu
Jimmy Mercury
Tina THỦY NGÂN
Bill Thủy ngân

Bước 2) Phát triển Test Script và tạo tài liệu tham khảo cho nguồn Dữ liệu thử nghiệm của bạn.

SystemUtil.Run "flight4a.exe","","","open"
Dialog("Login").WinEdit("Agent Name:").Set DataTable("AgentName", dtGlobalSheet)
Dialog("Login").WinEdit("Password:").Set DataTable("Password", dtGlobalSheet)
Dialog("Login").WinButton("OK").Click
'Check Flight Reservation Window has loaded
Window("Flight Reservation").Check CheckPoint("Flight Reservation")
'Note "dtGlobalSheet" is the default excel sheet provided by QTP.

Ưu điểm

  • Những thay đổi đối với Test Script không ảnh hưởng đến Test Data
  • Các trường hợp thử nghiệm có thể được thực thi với nhiều Bộ dữ liệu
  • Nhiều kịch bản thử nghiệm khác nhau có thể được thực thi chỉ bằng cách thay đổi Dữ liệu thử nghiệm trong Tệp dữ liệu ngoài

Nhược điểm

  • Cần thêm thời gian để lập kế hoạch và chuẩn bị cả Test Script và Test Data

4) Khung kiểm tra theo hướng từ khóa hoặc theo bảng

Dựa trên từ khóa Hoặc việc phát triển khung tự động hóa dựa trên bảng dữ liệu yêu cầu các bảng dữ liệu và từ khóa. độc lập với thử nghiệm công cụ tự động hóa được sử dụng để thực hiện chúng. Các thử nghiệm có thể được thiết kế có hoặc không có Ứng dụng. Trong thử nghiệm dựa trên từ khóa, chức năng của ứng dụng đang thử nghiệm được ghi lại trong bảng cũng như hướng dẫn từng bước cho mỗi thử nghiệm.

Có 3 thành phần cơ bản của một Keyword Driven Framework, đó là: Từ khóa, Bản đồ ứng dụng và Chức năng thành phần.

Từ khóa là một Hành động có thể được thực hiện trên một Thành phần GUI. Ví dụ: Đối với Hộp văn bản Thành phần GUI, một số Từ khóa (Hành động) sẽ là InputText, VerifyValue, VerifyProperty, v.v.

Bản đồ ứng dụng là gì?

Bản đồ ứng dụng cung cấp các tham chiếu được đặt tên cho các thành phần GUI. Bản đồ ứng dụng không gì khác ngoài “Kho lưu trữ đối tượng"

Chức năng thành phần là gì?

Hàm thành phần là những hàm chủ động thao tác hoặc thẩm vấn thành phần GUI. Một ví dụ về chức năng sẽ là nhấp vào nút web với tất cả việc xử lý lỗi, nhập dữ liệu vào Chỉnh sửa web với tất cả việc xử lý lỗi. Các chức năng thành phần có thể phụ thuộc vào ứng dụng hoặc độc lập.

Ví dụ: Để hiểu Chế độ xem từ khóa, hãy lấy ví dụ tương tự. Nó bao gồm 2 bước

Bước 1: Tạo bảng dữ liệu (Khác với Bảng dữ liệu thử nghiệm được tạo trong Khung điều khiển dữ liệu). Bảng dữ liệu này chứa Hành động được thực hiện trên Đối tượng GUI và các đối số tương ứng nếu có. Mỗi hàng đại diện cho một Bước kiểm tra.

Đối tượng Hoạt động
(Bản đồ ứng dụng) (TỪ KHÓA) Tranh luận
WinEdit(Tên đại lý) Thiết lập Guru99
WinEdit(Mật khẩu) Thiết lập Mercury
Nút Win(OK) Nhấp chuột
Cửa sổ(Đặt chỗ chuyến bay) Xác minh Tồn tại

Bước 2: Viết Code dưới dạng các hàm thành phần.

Sau khi đã tạo (các) bảng dữ liệu, bạn chỉ cần viết một chương trình hoặc một tập lệnh đọc trong mỗi bước, thực hiện bước đó dựa trên từ khóa có trong trường Hành động, thực hiện kiểm tra lỗi và ghi lại mọi thông tin liên quan. Chương trình hoặc tập lệnh này sẽ trông giống như mã giả bên dưới:

Function main()
{
  Call ConnectTable(Name of the Table) { //Calling Function for connecting to the table.
  while (Call TableParser() != -1) //Calling function for Parsing and extracting values from the table.
  {
    Pass values to appropriate COMPONENT functions. Like Set(Object Name, Argument) ex. Set(Agent Name, Guru99).
  }
}
  Call CloseConnection() //Function for Closing connection after all the operation has been performed.
} //End of main

Đó là tất cả đối với Khung điều khiển từ khóa.

Ưu điểm của Keyword Driven Framework là các từ khóa có thể tái sử dụng. Để hiểu điều này, hãy xem xét bạn muốn xác minh hoạt động đăng nhập cho một trang web, chẳng hạn như YAHOO MAIL. Bảng sẽ trông như thế này –

Đối tượng Hoạt động
(SƠ ĐỒ ỨNG DỤNG) (TỪ KHÓA) Tranh luận
WebEdit(Tên người dùng) Thiết lập abc@yahoo.com
WebEdit(Mật khẩu) Thiết lập xxxxx
Nút Web(OK) Nhấp chuột
Cửa sổ(Yahoo Mail) Xác minh Tải trọng

Nếu bạn để ý trong trường hợp này, các từ khóa Set, Click, Verify vẫn giữ nguyên và các chức năng thành phần tương ứng đã được phát triển. Tất cả những gì bạn cần làm là thay đổi Application Map.ping (Kho lưu trữ đối tượng) từ hệ thống đặt vé máy bay trước đó đến Yahoo Mail , với sự thay đổi về giá trị đối số và cùng một tập lệnh sẽ hoạt động!

Ưu điểm

  • Cung cấp khả năng sử dụng lại mã cao
  • Công cụ kiểm tra độc lập
  • Độc lập với Ứng dụng đang được thử nghiệm, tập lệnh tương tự hoạt động với AUT (với một số hạn chế)
  • Các bài kiểm tra có thể được thiết kế có hoặc không có AUT

Nhược điểm

  • Đầu tư ban đầu khá cao, lợi ích của việc này chỉ có thể được nhận ra nếu ứng dụng có dung lượng lớn và các kịch bản thử nghiệm được duy trì trong một vài năm.
  • Cần có chuyên môn Tự động hóa cao để tạo Khung điều khiển từ khóa.

CHÚ THÍCH : Mặc dù OpenText UFT One (trước đây là Micro Focus) UFTMặc dù tự quảng cáo là một Framework dựa trên từ khóa, bạn không thể đạt được sự độc lập hoàn toàn giữa công cụ kiểm thử và ứng dụng khi sử dụng nó.

5) Khung tự động hóa thử nghiệm kết hợp

Đúng như tên gọi, khung này là sự kết hợp của một hoặc nhiều Khung tự động hóa được thảo luận ở trên nhằm phát huy điểm mạnh và cố gắng giảm thiểu điểm yếu của chúng. Khung tự động hóa QA thử nghiệm kết hợp là thứ mà hầu hết các khung tự động hóa thử nghiệm phát triển theo thời gian và nhiều dự án. Ngành công nghiệp tối đa sử dụng Khung từ khóa kết hợp với phương pháp phân rã chức năng.

PS: Các Khung tự động hóa khác đáng được đề cập là

Khung mô-đun thử nghiệm

Trong khung này, một tác vụ chung trong tập lệnh thử nghiệm được nhóm lại với nhau dưới dạng Mô-đun.

Ví dụ: Sử dụng các hành động trong QTP có thể sử dụng để tạo ra các kịch bản mô-đun.

Tập lệnh mẫu để đăng nhập

SystemUtil.Run "flight4a.exe","","","open"
Dialog("Login").WinEdit("Agent Name:").Set "Guru99"
Dialog("Login").WinEdit("Password:").Set "Mercury"
Dialog("Login").WinButton("OK").Click
'End of Script

Bây giờ bạn có thể gọi Hành động này trong tập lệnh chính như sau –

RunAction ("Login[Argument]", oneIteration)

Kiểm tra quy trình kinh doanh (BPT)

Các Khung tự động hóa này chia các Quy trình kinh doanh lớn thành các Thành phần có thể được sử dụng lại nhiều lần trong cùng một hoặc các tập lệnh kiểm tra khác nhau. Ví dụ: Quy trình công việc đặt vé chuyến bay được chia thành các thành phần như Đăng nhập, Tìm chuyến bay, Đặt chỗ, Thanh toán & Đăng xuất. Các thành phần này có thể được sử dụng lại trong cùng một Quy trình công việc hoặc các quy trình khác nhau. Ngoài ra, BPT tạo điều kiện phối hợp chặt chẽ hơn giữa các Kỹ sư tự động hóa và SME.

Cách chọn khung tự động hóa kiểm thử phù hợp

Không có loại nào luôn luôn thắng. Sự lựa chọn đúng đắn phụ thuộc vào kỹ năng của nhóm, quy mô ứng dụng và thời gian hệ thống cần hoạt động. Bảng dưới đây so sánh năm loại dựa trên các yếu tố quyết định kết quả.

Loại khung Nỗ lực thiết lập Code Tái sử dụng Chi phí bảo trì Phù hợp nhất cho
Lập trình tuyến tính Rất thấp Rất thấp Rất cao Các cuộc trình diễn và kiểm tra khói một lần
Thư viện kiểm tra Archikiến trúc Trung bình Trung bình Trung bình Các ứng dụng ổn định với quy trình làm việc lặp đi lặp lại.
Theo hướng dữ liệu Trung bình Trung bình Thấp Các biểu mẫu và phép tính cần nhiều bộ dữ liệu đầu vào.
Dựa trên từ khóa Cao Rất cao Thấp Các phòng máy chủ lớn được bảo trì bởi các nhóm kỹ thuật hỗn hợp.
Hỗn hợp Cao Rất cao Thấp Các chương trình doanh nghiệp dài hạn

Hãy suy nghĩ kỹ những câu hỏi này trước khi đưa ra quyết định:

  1. Căn hộ này sẽ có tuổi thọ bao lâu? Nhiều năm bảo trì sẽ bù đắp cho khoản đầu tư ban đầu cao của một thiết kế dựa trên từ khóa hoặc thiết kế lai. Một dự án ngắn hạn thì không.
  2. Ai là người ra đề thi? Nếu người kiểm thử thủ công đóng góp các trường hợp, bảng từ khóa cho phép họ làm việc mà không cần học ngôn ngữ lập trình kịch bản.
  3. Giao diện này biến động đến mức nào? Việc thay đổi màn hình thường xuyên khiến việc có một kho lưu trữ đối tượng riêng biệt trở nên cần thiết, nếu không, mỗi kịch bản đều cần được chỉnh sửa.
  4. Cần có bao nhiêu biến thể dữ liệu? Nhiều tổ hợp đầu vào chỉ ra trực tiếp một thiết kế dựa trên dữ liệu.
  5. Công cụ nào hiện đang được sử dụng? Khung phải phù hợp với lựa chọn đã chọn công cụ tự động hóa và một ngôn ngữ mà cả nhóm đều biết, chẳng hạn như Selenium với Java or Cucumber.

Hầu hết các nhóm bắt đầu với phương pháp dựa trên thư viện hoặc dữ liệu, sau đó phát triển dần sang mô hình lai. hồi quy Phòng suite được mở rộng.

Lợi ích của Khung tự động hóa thử nghiệm Archikiến trúc

Sau đây là những lợi ích của kiến ​​trúc khung tự động hóa thử nghiệm:

  • Khung tự động hóa thử nghiệm giúp giảm rủi ro và chi phí
  • Nó cải thiện hiệu quả của các bài kiểm tra
  • Nó giúp giảm chi phí bảo trì
  • Cho phép sử dụng lại mã
  • Nó cho phép đạt được phạm vi kiểm tra tối đa
  • Nó tối đa hóa chức năng ứng dụng
  • Giúp giảm trùng lặp trường hợp thử nghiệm
  • Nó giúp cải thiện hiệu quả và hiệu suất kiểm tra bằng tự động hóa kiểm tra

Câu Hỏi Thường Gặp

Công cụ thực thi các lệnh đối với một ứng dụng. Khung phần mềm là tập hợp các quy ước, cấu trúc thư mục và thư viện có thể tái sử dụng, quyết định cách các lệnh đó được viết, tổ chức và bảo trì.

Không. Page Object Model (POM) là một mẫu thiết kế cho lớp kho lưu trữ đối tượng. Nó thường được sử dụng trong các framework thư viện, hướng dữ liệu và lai ghép chứ không phải để thay thế bất kỳ framework nào trong số đó.

AI bổ sung thêm các bộ định vị tự phục hồi và so sánh trực quan vào lớp kho lưu trữ đối tượng. Kiến trúc phân lớp vẫn giữ nguyên, nhưng các kịch bản ít bị lỗi hơn khi giao diện người dùng thay đổi một chút.

Đúng vậy. Trợ lý AI chuyển đổi các bước đã viết thành các dòng đối tượng, hành động và đối số. Người kiểm duyệt vẫn phải xác nhận tên đối tượng khớp với kho lưu trữ, nếu không các dòng được tạo ra sẽ bị lỗi khi chạy.

Track là chỉ số đo thời gian bảo trì script mỗi bản phát hành, tỷ lệ lỗi không ổn định và thời gian từ khi biên dịch đến khi có kết quả. Một framework tốt cho thấy nỗ lực bảo trì giảm dần trong khi độ bao phủ tự động tiếp tục tăng.

Tóm tắt bài viết này với: