Ngân hàng câu hỏi của chương

Câu hỏi: PRM393 - Kiểm thử và gỡ lỗi

23 câu trắc nghiệm kèm lời giải của môn Lập trình di động (Flutter) - Mobile Programming, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/23 câuCòn 3
1What does an integration test verify?4 lựa chọnTrung bình67% trả lời đúng
ASingle function
BWidget rendering
CEnd-to-end app behavior
DTheme consistency
Lời giải
Một bài kiểm tra tích hợp (integration test) là một loại kiểm tra phần mềm được sử dụng để xác minh rằng các thành phần khác nhau của một ứng dụng hoạt động cùng nhau một cách chính xác. Bài kiểm tra này không chỉ kiểm tra một chức năng đơn lẻ mà còn kiểm tra cách các chức năng khác nhau tương tác với nhau. Ví dụ, một bài kiểm tra tích hợp có thể kiểm tra việc đăng nhập vào ứng dụng, sau đó thêm một sản phẩm vào giỏ hàng và cuối cùng thực hiện thanh toán. Điều này giúp đảm bảo rằng ứng dụng hoạt động một cách trơn tru và không có lỗi khi người dùng tương tác với nó.
Mở trang câu hỏi này →
2What is test isolation?4 lựa chọnDễ100% trả lời đúng
ARunning all tests together
BIndependence of test cases
CUI separation
DMocking only
Lời giải
Test isolation là một kỹ thuật quan trọng trong lập trình thử nghiệm (testing). Nó đảm bảo rằng mỗi thử nghiệm (test case) được thực hiện độc lập và không ảnh hưởng đến các thử nghiệm khác. Điều này giúp ngăn chặn các vấn đề liên quan đến sự phụ thuộc giữa các thử nghiệm, chẳng hạn như thay đổi trạng thái của ứng dụng giữa các thử nghiệm. Test isolation giúp đảm bảo rằng mỗi thử nghiệm được thực hiện trong một trạng thái nhất định, không bị ảnh hưởng bởi các thử nghiệm trước đó. Điều này giúp tăng cường độ chính xác và đáng tin cậy của các thử nghiệm.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Trong quá trình kiểm tra widget, 'pumpWidget()' là một hàm được sử dụng để render giao diện người dùng (UI) cho phép kiểm tra. Hàm này giúp tạo ra một bản sao của giao diện để chúng ta có thể xem xét và kiểm tra. Nó cho phép chúng ta kiểm tra xem giao diện có hoạt động đúng như mong đợi hay không, đồng thời cũng giúp chúng ta xác định được nguyên nhân của các lỗi. Vì vậy, câu trả lời đúng cho câu hỏi này là 'True'.
Mở trang câu hỏi này →
ASame
B`pump` is integration-only
C`pump` advances a frame/short work; `pumpAndSettle` waits for animations/timers to finish
DNeither after tap
Lời giải
Trong các bài kiểm tra widget, `pump()` và `pumpAndSettle()` là hai phương thức được sử dụng để tiến hành các tác vụ. `pump()` chỉ tiến hành một khung hình hoặc một số tác vụ ngắn, trong khi `pumpAndSettle()` chờ đợi cho đến khi các hiệu ứng animation hoặc timer được hoàn tất. Điều này có nghĩa là nếu bạn chỉ cần tiến hành một tác vụ đơn giản, `pump()` sẽ đủ. Tuy nhiên, nếu tác vụ của bạn bao gồm các hiệu ứng animation hoặc timer, bạn cần sử dụng `pumpAndSettle()` để đảm bảo rằng tác vụ được hoàn tất trước khi tiếp tục kiểm tra.
Mở trang câu hỏi này →
ANot in Flutter
BWindows only
CIdentical
DIntegration runs E2E on device/emulator with a driver; widget tests use the test engine
Lời giải
Câu hỏi này hỏi về sự khác biệt giữa **`integration_test`** và `flutter_test`. **`integration_test`** và `flutter_test` đều là các công cụ kiểm tra trong Flutter, nhưng chúng phục vụ cho các mục đích khác nhau. **`flutter_test`** là một công cụ kiểm tra widget, nó kiểm tra các widget và các hành vi của chúng. Trong khi đó, **`integration_test`** là một công cụ kiểm tra tích hợp, nó kiểm tra các tính năng và các giao diện của ứng dụng từ đầu đến cuối (end-to-end) trên thiết bị hoặc máy ảo. Điều này có nghĩa là **`integration_test`** sẽ kiểm tra toàn bộ ứng dụng, bao gồm cả các giao diện người dùng và các tính năng, trong khi **`flutter_test`** chỉ kiểm tra các widget và các hành vi của chúng.
Mở trang câu hỏi này →
AprecacheImage()
Btester.enterText()
CListView.builder
DNavigator.pushNamed
Lời giải
Trong Lab 11.2, chúng ta cần tìm hiểu về cách nhập văn bản vào một TextField trong quá trình kiểm tra widget. Để thực hiện điều này, chúng ta sử dụng hàm tester.enterText(). Hàm này cho phép chúng ta nhập văn bản vào TextField một cách dễ dàng và chính xác. Ví dụ, nếu chúng ta muốn nhập văn bản 'Hello World' vào TextField, chúng ta có thể sử dụng lệnh tester.enterText('Hello World'). Điều này giúp chúng ta kiểm tra chức năng của TextField một cách hiệu quả.
Mở trang câu hỏi này →
AIt ensures the UI avoids system intrusions like notches, status bars, and camera cutouts.
BIt encapsulates all network communication logic, separating it from the UI layer.
CUnit tests validate pure logic, while widget tests validate UI rendering and interaction.
DTo improve performance and prevent sensitive information from being logged in production.
Lời giải
Trong Lab 12, việc xóa bỏ các câu lệnh `print()` trước khi xây dựng bản phát hành Release là rất quan trọng. Điều này giúp cải thiện hiệu suất và ngăn chặn thông tin nhạy cảm được ghi lại trong môi trường sản xuất. Khi bạn chạy ứng dụng trong môi trường phát triển, việc in ra console thông tin như giá trị biến, trạng thái ứng dụng,... là hoàn toàn bình thường. Tuy nhiên, trong môi trường sản xuất, việc in ra console có thể gây ra vấn đề bảo mật và ảnh hưởng đến hiệu suất ứng dụng. Vì vậy, việc xóa bỏ các câu lệnh `print()` trước khi xây dựng bản phát hành Release giúp đảm bảo ứng dụng hoạt động ổn định và an toàn trong môi trường sản xuất.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Mẫu AAA trong kiểm thử là một phương pháp kiểm thử đơn vị được sử dụng để viết các trường hợp kiểm thử đơn giản và hiệu quả. Mẫu AAA được chia thành ba phần chính: Arrange, Act và Assert. Arrange: Đây là phần đầu tiên trong mẫu AAA, nơi bạn sẽ chuẩn bị dữ liệu và môi trường cần thiết cho trường hợp kiểm thử. Bạn sẽ tạo các đối tượng, thiết lập các giá trị và tạo ra các điều kiện cần thiết để thực hiện trường hợp kiểm thử. Act: Đây là phần thực hiện của mẫu AAA, nơi bạn sẽ thực hiện hành động hoặc phương thức cần kiểm thử. Bạn sẽ gọi phương thức, thực hiện hành động và tạo ra các kết quả mong muốn. Assert: Đây là phần cuối cùng của mẫu AAA, nơi bạn sẽ xác minh kết quả thực hiện trong phần Act. Bạn sẽ so sánh kết quả thực hiện với kết quả mong muốn và xác định xem trường hợp kiểm thử đã thành công hay chưa. Mẫu AAA giúp các nhà phát triển viết các trường hợp kiểm thử đơn giản và hiệu quả, giúp họ có thể dễ dàng xác định và sửa lỗi các vấn đề trong mã nguồn.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Trong một dự án Flutter, các đơn vị kiểm thử (unit tests) nên được lưu trữ trong thư mục 'test/'. Điều này giúp phân biệt rõ ràng giữa mã nguồn chính thức và mã nguồn kiểm thử, đồng thời cũng giúp dễ dàng tìm kiếm và chạy các đơn vị kiểm thử. Việc lưu trữ các đơn vị kiểm thử trong thư mục 'test/' cũng giúp duy trì tính nhất quán và dễ dàng bảo trì dự án.
Mở trang câu hỏi này →
A`Text` with that exact string (or descendant)
B`TextField` only
CA file on disk
DRoute name
Lời giải
Trong các widget test, `find.text('X')` được sử dụng để tìm kiếm các widget có chứa chuỗi văn bản 'X'. Điều này có nghĩa là nó sẽ tìm kiếm tất cả các widget có chứa chuỗi 'X' hoặc là con của nó. Ví dụ, nếu bạn có một widget `Text` có nội dung 'Hello World', và một widget `RichText` có nội dung 'Hello World, tôi là một widget khác', thì cả hai widget này đều sẽ được tìm thấy bởi `find.text('Hello World')'. Điều này là vì `find.text('X')` không chỉ tìm kiếm widget `Text` có nội dung chính xác 'X', mà còn tìm kiếm tất cả các widget có chứa chuỗi 'X' hoặc là con của nó.
Mở trang câu hỏi này →
AIt searches the widget tree for a widget that contains the specified string of text.
BHot Reload updates the UI without losing state, while Hot Restart resets the app state.
CIt uniquely identifies the Form and allows access to its state for validation and saving.
DIt allows a single codebase to render UI using its own engine across different platforms.
Lời giải
Trong một thử nghiệm widget Flutter, hàm `find.text()` được sử dụng để tìm kiếm một widget cụ thể trong cây widget dựa trên nội dung văn bản mà nó chứa. Hàm này sẽ tìm kiếm widget đầu tiên trong cây widget mà có nội dung văn bản khớp với chuỗi văn bản được chỉ định. Điều này cho phép bạn xác định vị trí của một widget cụ thể trong ứng dụng và kiểm tra xem nó có chứa nội dung văn bản mong muốn hay không. Ví dụ, nếu bạn muốn kiểm tra xem một nút bấm có chứa văn bản 'Xác nhận' hay không, bạn có thể sử dụng hàm `find.text()` để tìm kiếm widget có chứa văn bản này.
Mở trang câu hỏi này →
AIt prevents unnecessary rebuilds of widgets that do not change during the app's lifecycle.
BIt ensures the UI avoids system intrusions like notches, status bars, and camera cutouts.
CUnit tests validate pure logic, while widget tests validate UI rendering and interaction.
DTo improve performance and prevent sensitive information from being logged in production.
Lời giải
Trong Flutter, một bài kiểm tra đơn vị (unit test) và một bài kiểm tra widget (widget test) đều đóng vai trò quan trọng trong quá trình phát triển ứng dụng. Bài kiểm tra đơn vị giúp xác minh logic sạch (pure logic) của mã nguồn, trong khi bài kiểm tra widget giúp xác minh cách trình bày và tương tác của giao diện người dùng (UI). Bài kiểm tra đơn vị thường được sử dụng để kiểm tra các hàm, phương thức và lớp, trong khi bài kiểm tra widget được sử dụng để kiểm tra cách các widget được render và tương tác với nhau. Điều này giúp đảm bảo rằng ứng dụng của bạn hoạt động chính xác và ổn định, ngay cả khi có thay đổi trong mã nguồn.
Mở trang câu hỏi này →
AIt provides a default value if the expression on its left is null.
BIt forcefully asserts that a nullable expression is non-null.
CIt contains the source code for unit, widget, and integration tests.
DIt manages the platform-specific transition animation between screens.
Lời giải
Trong một dự án Flutter, mục đích của thư mục `test/` là chứa mã nguồn cho các bài kiểm tra đơn vị, widget và tích hợp. Các bài kiểm tra này giúp đảm bảo rằng mã nguồn của dự án hoạt động đúng như mong đợi. Thư mục `test/` thường được sử dụng để kiểm tra các chức năng của ứng dụng, chẳng hạn như việc nhập dữ liệu, giao diện người dùng và các tính năng khác. Việc viết các bài kiểm tra này giúp phát hiện ra các lỗi và vấn đề trong mã nguồn sớm, từ đó giúp cải thiện chất lượng của dự án. Ngoài ra, các bài kiểm tra cũng giúp đảm bảo rằng mã nguồn của dự án tuân thủ các quy tắc và tiêu chuẩn của dự án.
Mở trang câu hỏi này →
AIt helps Flutter's framework uniquely identify widgets to preserve state during list modifications.
BUnit tests validate pure logic, while widget tests validate UI rendering and interaction.
CIt ensures the UI avoids system intrusions like notches, status bars, and camera cutouts.
DIt prevents unnecessary rebuilds of widgets that do not change during the app's lifecycle.
Lời giải
Trong Flutter, `ValueKey` đóng vai trò quan trọng trong việc tối ưu hóa `ListView`. Khi bạn sử dụng `ValueKey`, Flutter có thể duy trì trạng thái của từng widget trong danh sách ngay cả khi danh sách được thay đổi. Điều này giúp ngăn chặn việc rebuild widget không cần thiết và cải thiện hiệu suất của ứng dụng. Tính năng này đặc biệt hữu ích khi bạn cần hiển thị một danh sách lớn các widget và muốn đảm bảo rằng trạng thái của từng widget được duy trì chính xác.
Mở trang câu hỏi này →
AMany similar widgets — `find.byKey` is more stable than text
BReplaces `expect`
CWeb only
DNever
Lời giải
Một khóa (key) trên một widget hữu ích trong các bài kiểm tra khi có nhiều widget tương tự. Trong trường hợp này, việc sử dụng khóa để tìm kiếm widget là ổn định hơn so với việc sử dụng văn bản. Điều này là vì khóa thường duy nhất và không thay đổi trong suốt quá trình chạy thử nghiệm, trong khi văn bản có thể thay đổi tùy thuộc vào nội dung của widget. Vì vậy, việc sử dụng khóa để tìm kiếm widget giúp đảm bảo rằng các bài kiểm tra luôn tìm thấy widget mong muốn, ngay cả khi nội dung của widget thay đổi. Điều này giúp tăng độ tin cậy và ổn định của các bài kiểm tra.
Mở trang câu hỏi này →
Atester.pumpAndSettle()
Btester.enterText()
CListView.builder
DNavigator.pushNamed
Lời giải
Để chuyển đến một màn hình mới bằng cách truyền tên của một tuyến đường cụ thể, bạn cần sử dụng phương thức Navigator.pushNamed(). Phương thức này cho phép bạn chuyển đến một màn hình mới bằng cách sử dụng tên của tuyến đường mà bạn đã định nghĩa trong tệp routes của ứng dụng. Điều này giúp bạn có thể dễ dàng quản lý và chuyển đổi giữa các màn hình trong ứng dụng của mình. Ví dụ, nếu bạn muốn chuyển đến màn hình Chi tiết sản phẩm, bạn có thể sử dụng phương thức Navigator.pushNamed('ProductDetail') để thực hiện việc này.
Mở trang câu hỏi này →
AUnit tests don’t run on dev machines
BIntegration is faster
CFlutter forbids integration
DUnit/widget are fast and stable; integration is slow and flaky — keep few critical E2E flows
Lời giải
Pyramida kiểm tra ủng hộ nhiều đơn vị kiểm tra hơn tích hợp vì lý do đơn vị kiểm tra nhanh và ổn định, trong khi tích hợp chậm và không chắc chắn. Điều này có nghĩa là bạn nên có nhiều đơn vị kiểm tra hơn để đảm bảo rằng từng phần của ứng dụng hoạt động chính xác. Tuy nhiên, bạn không cần phải kiểm tra tất cả các trường hợp, chỉ cần tập trung vào các trường hợp quan trọng. Điều này giúp giảm thiểu thời gian và công sức cần thiết để chạy các thử nghiệm.
Mở trang câu hỏi này →
18What does golden testing verify?4 lựa chọn
AAPI responses
BDatabase state
CUI appearance consistency
DAuthentication
Lời giải
Golden testing là một phương pháp kiểm thử giúp xác minh xem ứng dụng của chúng ta có tuân thủ đúng thiết kế giao diện người dùng (UI) hay không. Nó liên quan đến việc so sánh giao diện người dùng thực tế với giao diện người dùng đã được định nghĩa trước đó, được gọi là 'golden UI'. Golden testing giúp đảm bảo rằng ứng dụng của chúng ta luôn có một giao diện người dùng nhất quán và đẹp mắt, giúp cải thiện trải nghiệm người dùng. Tuy nhiên, golden testing không liên quan đến việc kiểm thử các yêu cầu khác như phản hồi API, trạng thái cơ sở dữ liệu hoặc tính bảo mật.
Mở trang câu hỏi này →
AWidget test
BUnit test
CLoad test
DIntegration test
Lời giải
Trong Flutter, có nhiều loại thử nghiệm khác nhau để đảm bảo ứng dụng hoạt động chính xác. Một trong những loại thử nghiệm quan trọng là thử nghiệm UI (User Interface). Thử nghiệm UI giúp kiểm tra các thành phần giao diện người dùng của ứng dụng, bao gồm các widget, layout và tương tác giữa chúng. Để kiểm tra các thành phần UI, chúng ta sử dụng loại thử nghiệm gọi là Widget test. Widget test cho phép chúng ta kiểm tra xem các widget của ứng dụng có hoạt động đúng như mong đợi hay không, bao gồm cả việc kiểm tra các trạng thái và hành vi của chúng. Vì vậy, trong các lựa chọn trên, Widget test là lựa chọn đúng.
Mở trang câu hỏi này →
AAnalysis
BImplementation
CDesign
DTesting
Lời giải
Pha thu thập yêu cầu là bước quan trọng trong quá trình phát triển phần mềm. Trong pha này, người phát triển sẽ thu thập thông tin về yêu cầu của khách hàng, bao gồm cả yêu cầu chức năng và phi chức năng. Yêu cầu chức năng bao gồm các tính năng mà phần mềm cần phải có, trong khi yêu cầu phi chức năng bao gồm các tính chất mà phần mềm cần phải đáp ứng, chẳng hạn như độ tin cậy, bảo mật và hiệu suất. Quá trình thu thập yêu cầu này giúp người phát triển hiểu rõ hơn về nhu cầu của khách hàng và đảm bảo rằng phần mềm được phát triển đáp ứng được các yêu cầu đó.
Mở trang câu hỏi này →