Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Công Nghệ Phần Mềm - Đề 03 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong giai đoạn phát triển phần mềm, kiểm thử hộp đen (black-box testing) chủ yếu tập trung vào khía cạnh nào sau đây của phần mềm?
- A. Cấu trúc dữ liệu và giải thuật bên trong chương trình.
- B. Chức năng và hành vi của phần mềm dựa trên đặc tả yêu cầu.
- C. Mức độ bao phủ code (code coverage) của các test case.
- D. Hiệu năng và khả năng mở rộng của hệ thống.
Câu 2: Một nhóm phát triển phần mềm đang sử dụng mô hình Agile. Trong mỗi Sprint, họ ưu tiên giao tiếp liên tục với khách hàng và thường xuyên điều chỉnh kế hoạch dựa trên phản hồi. Nguyên tắc cốt lõi nào của Agile được thể hiện rõ nhất trong tình huống này?
- A. Ưu tiên quy trình và công cụ hơn con người và tương tác.
- B. Tài liệu toàn diện hơn phần mềm chạy tốt.
- C. Phản hồi của khách hàng hơn là đàm phán hợp đồng.
- D. Tuân thủ kế hoạch hơn là đáp ứng với thay đổi.
Câu 3: Khi thiết kế kiến trúc phần mềm, kiểu kiến trúc nào sau đây phù hợp nhất cho một hệ thống thương mại điện tử lớn, đòi hỏi khả năng mở rộng, độ tin cậy cao và khả năng xử lý đồng thời nhiều yêu cầu?
- A. Kiến trúc đơn khối (Monolithic Architecture)
- B. Kiến trúc lớp (Layered Architecture)
- C. Kiến trúc client-server
- D. Kiến trúc Microservices
Câu 4: Trong quản lý cấu hình phần mềm, nhánh (branch) được sử dụng với mục đích chính nào?
- A. Cho phép phát triển song song các tính năng hoặc sửa lỗi một cách cô lập.
- B. Sao lưu toàn bộ mã nguồn dự án.
- C. Tạo ra các phiên bản khác nhau của phần mềm cho các khách hàng khác nhau.
- D. Tối ưu hóa hiệu suất của mã nguồn.
Câu 5: Đâu là lợi ích chính của việc sử dụng Design Patterns (mẫu thiết kế) trong phát triển phần mềm hướng đối tượng?
- A. Tăng tốc độ biên dịch chương trình.
- B. Giảm thiểu rủi ro bảo mật của phần mềm.
- C. Tăng tính tái sử dụng, khả năng bảo trì và dễ hiểu của mã nguồn.
- D. Tự động sinh mã nguồn hoàn chỉnh cho ứng dụng.
Câu 6: Mục tiêu chính của giai đoạn "Requirements Elicitation" (thu thập yêu cầu) trong quy trình phát triển phần mềm là gì?
- A. Thiết kế giao diện người dùng (UI/UX) của phần mềm.
- B. Xác định và làm rõ nhu cầu, mong muốn của người dùng và các bên liên quan.
- C. Lập kế hoạch kiểm thử phần mềm.
- D. Viết mã nguồn ban đầu cho phần mềm.
Câu 7: Phương pháp kiểm thử nào sau đây thường được thực hiện bởi người dùng cuối hoặc khách hàng để đảm bảo phần mềm đáp ứng được yêu cầu nghiệp vụ và mong đợi của họ trong môi trường thực tế?
- A. Kiểm thử đơn vị (Unit Testing)
- B. Kiểm thử tích hợp (Integration Testing)
- C. Kiểm thử hệ thống (System Testing)
- D. Kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT)
Câu 8: Trong mô hình thác nước (Waterfall), giai đoạn nào sau đây diễn ra sau giai đoạn thiết kế (design) và trước giai đoạn kiểm thử (testing)?
- A. Bảo trì (Maintenance)
- B. Triển khai (Deployment)
- C. Triển khai (Implementation/Coding)
- D. Phân tích yêu cầu (Requirements Analysis)
Câu 9: Công cụ nào sau đây thường được sử dụng để theo dõi và quản lý lỗi (bug) trong quá trình phát triển phần mềm?
- A. Trình biên dịch (Compiler)
- B. Hệ thống theo dõi lỗi (Bug Tracking System) như Jira, Bugzilla
- C. Hệ quản trị cơ sở dữ liệu (DBMS)
- D. Công cụ mô hình hóa UML
Câu 10: Trong lập trình hướng đối tượng, khái niệm "tính đóng gói" (encapsulation) mang lại lợi ích gì chính?
- A. Tăng tốc độ thực thi chương trình.
- B. Giảm dung lượng bộ nhớ sử dụng.
- C. Cho phép đa kế thừa (multiple inheritance).
- D. Che giấu thông tin và bảo vệ dữ liệu, giảm sự phụ thuộc giữa các thành phần.
Câu 11: Khi lựa chọn mô hình phát triển phần mềm, yếu tố nào sau đây quan trọng nhất để xem xét khi yêu cầu của khách hàng chưa được xác định rõ ràng và có khả năng thay đổi thường xuyên?
- A. Mô hình thác nước (Waterfall)
- B. Mô hình chữ V (V-Model)
- C. Mô hình lặp (Iterative Model) hoặc Agile
- D. Mô hình xoắn ốc (Spiral Model)
Câu 12: Đâu là mục tiêu chính của việc tái cấu trúc mã nguồn (code refactoring)?
- A. Cải thiện cấu trúc mã nguồn mà không thay đổi chức năng bên ngoài.
- B. Thêm chức năng mới vào phần mềm.
- C. Sửa lỗi và vá lỗ hổng bảo mật.
- D. Tối ưu hóa hiệu suất thực thi của phần mềm.
Câu 13: Trong quá trình kiểm thử phần mềm, "độ bao phủ quyết định" (decision coverage) là gì?
- A. Tỷ lệ dòng code được thực thi bởi test cases.
- B. Tỷ lệ các nhánh rẽ của câu lệnh điều kiện (true/false) được thực thi.
- C. Số lượng lỗi được phát hiện trên mỗi nghìn dòng code.
- D. Mức độ đáp ứng yêu cầu của người dùng.
Câu 14: Khi thiết kế cơ sở dữ liệu quan hệ, "chuẩn hóa dữ liệu" (data normalization) nhằm mục đích chính nào?
- A. Tăng tốc độ truy vấn dữ liệu.
- B. Mã hóa dữ liệu để bảo mật.
- C. Giảm dư thừa dữ liệu và cải thiện tính nhất quán.
- D. Tối ưu hóa dung lượng lưu trữ dữ liệu.
Câu 15: Trong mô hình Scrum, "Sprint Review" (đánh giá Sprint) được tổ chức vào cuối mỗi Sprint với mục đích chính là gì?
- A. Lập kế hoạch cho Sprint tiếp theo.
- B. Giải quyết các vấn đề và rào cản trong Sprint.
- C. Đánh giá hiệu suất làm việc của từng thành viên trong nhóm.
- D. Trình bày sản phẩm đã hoàn thành và thu thập phản hồi từ các bên liên quan.
Câu 16: "Nợ kỹ thuật" (technical debt) trong phát triển phần mềm phát sinh khi nào?
- A. Khi sử dụng công nghệ mới và chưa quen thuộc.
- B. Khi đưa ra các quyết định thiết kế hoặc mã hóa mang tính "đi đường tắt" để nhanh chóng.
- C. Khi phát hiện lỗi bảo mật nghiêm trọng.
- D. Khi cơ sở dữ liệu bị quá tải.
Câu 17: Công cụ kiểm soát phiên bản (Version Control System) như Git giúp ích gì trong quá trình hợp tác phát triển phần mềm theo nhóm?
- A. Tự động kiểm thử phần mềm.
- B. Tối ưu hóa hiệu suất của mã nguồn.
- C. Quản lý thay đổi mã nguồn, phối hợp làm việc nhóm và theo dõi lịch sử.
- D. Tự động triển khai phần mềm lên môi trường production.
Câu 18: Trong kiểm thử hiệu năng (performance testing), "load testing" (kiểm thử tải) được thực hiện để làm gì?
- A. Đánh giá khả năng chịu tải của hệ thống khi có nhiều người dùng đồng thời.
- B. Kiểm tra tốc độ phản hồi của hệ thống.
- C. Đo lường mức độ sử dụng tài nguyên hệ thống (CPU, bộ nhớ).
- D. Tìm kiếm lỗi bảo mật liên quan đến hiệu năng.
Câu 19: "SOLID" là một tập hợp các nguyên tắc thiết kế hướng đối tượng. Chữ "L" trong SOLID đại diện cho nguyên tắc nào?
- A. Single Responsibility Principle
- B. Liskov Substitution Principle
- C. Interface Segregation Principle
- D. Dependency Inversion Principle
Câu 20: Đâu là vai trò chính của "Product Owner" trong mô hình Scrum?
- A. Điều phối các hoạt động hàng ngày của nhóm phát triển.
- B. Viết mã nguồn và kiểm thử phần mềm.
- C. Đại diện cho khách hàng và chịu trách nhiệm về giá trị sản phẩm.
- D. Giải quyết các vấn đề kỹ thuật phát sinh trong Sprint.
Câu 21: Trong kiến trúc phần mềm, "API Gateway" (cổng API) thường được sử dụng để làm gì trong kiến trúc Microservices?
- A. Lưu trữ dữ liệu cho các microservices.
- B. Quản lý cấu hình của các microservices.
- C. Giám sát hiệu năng của các microservices.
- D. Điểm vào duy nhất cho client và định tuyến yêu cầu đến các microservices.
Câu 22: "Continuous Integration" (CI - tích hợp liên tục) và "Continuous Delivery" (CD - phân phối liên tục) là gì và chúng mang lại lợi ích gì cho quy trình phát triển phần mềm?
- A. Công cụ để quản lý dự án phần mềm.
- B. Phương pháp tự động hóa tích hợp, kiểm thử và phân phối phần mềm để phát hành nhanh và thường xuyên.
- C. Mô hình phát triển phần mềm mới thay thế Agile.
- D. Quy trình kiểm thử bảo mật tự động.
Câu 23: Trong mô hình thiết kế hướng đối tượng, mối quan hệ "kết hợp" (association) giữa hai lớp thể hiện điều gì?
- A. Một lớp kế thừa từ lớp khác.
- B. Một lớp chứa các đối tượng của lớp khác.
- C. Sự liên kết giữa các đối tượng của hai lớp, có thể là sử dụng, sở hữu hoặc biết đến nhau.
- D. Một lớp phụ thuộc hoàn toàn vào lớp khác.
Câu 24: "Technical Specification Document" (tài liệu đặc tả kỹ thuật) được tạo ra trong giai đoạn nào của quy trình phát triển phần mềm và mục đích chính của nó là gì?
- A. Giai đoạn thiết kế, để mô tả chi tiết các khía cạnh kỹ thuật của phần mềm.
- B. Giai đoạn phân tích yêu cầu, để ghi lại yêu cầu của người dùng.
- C. Giai đoạn kiểm thử, để ghi lại kế hoạch và kết quả kiểm thử.
- D. Giai đoạn triển khai, để hướng dẫn cài đặt và cấu hình phần mềm.
Câu 25: Phương pháp ước lượng nỗ lực phát triển phần mềm "COCOMO" (Constructive Cost Model) dựa trên yếu tố chính nào để tính toán chi phí và thời gian phát triển?
- A. Số lượng thành viên trong nhóm phát triển.
- B. Kích thước phần mềm (ví dụ: số dòng code).
- C. Mức độ rủi ro của dự án.
- D. Thời gian làm việc trung bình của lập trình viên.
Câu 26: Trong kiểm thử bảo mật (security testing), "penetration testing" (kiểm thử xâm nhập) được thực hiện để làm gì?
- A. Kiểm tra tính toàn vẹn của dữ liệu.
- B. Đảm bảo hệ thống tuân thủ các tiêu chuẩn bảo mật.
- C. Mô phỏng tấn công để tìm và khai thác lỗ hổng bảo mật.
- D. Kiểm tra tốc độ mã hóa và giải mã dữ liệu.
Câu 27: "UML" (Unified Modeling Language) là gì và nó được sử dụng để làm gì trong công nghệ phần mềm?
- A. Một ngôn ngữ lập trình mới.
- B. Một hệ quản trị cơ sở dữ liệu.
- C. Một công cụ kiểm thử phần mềm tự động.
- D. Ngôn ngữ mô hình hóa để trực quan hóa và thiết kế hệ thống phần mềm.
Câu 28: "Code review" (đánh giá mã nguồn) là một hoạt động quan trọng trong phát triển phần mềm. Đâu là lợi ích chính của việc thực hiện code review thường xuyên?
- A. Tăng tốc độ viết mã của lập trình viên.
- B. Phát hiện sớm lỗi, cải thiện chất lượng mã và chia sẻ kiến thức.
- C. Tự động sửa lỗi mã nguồn.
- D. Tối ưu hóa hiệu suất của mã nguồn.
Câu 29: Trong quản lý rủi ro dự án phần mềm, "ma trận rủi ro" (risk matrix) được sử dụng để làm gì?
- A. Liệt kê tất cả các rủi ro có thể xảy ra trong dự án.
- B. Tính toán chi phí dự phòng cho rủi ro.
- C. Đánh giá và phân loại rủi ro dựa trên mức độ nghiêm trọng và khả năng xảy ra.
- D. Lập kế hoạch ứng phó với từng loại rủi ro.
Câu 30: "Regression testing" (kiểm thử hồi quy) được thực hiện khi nào và với mục đích gì trong quá trình bảo trì phần mềm?
- A. Trước khi phát hành phiên bản phần mềm mới.
- B. Trong giai đoạn phát triển ban đầu của phần mềm.
- C. Chỉ khi có yêu cầu thay đổi từ khách hàng.
- D. Sau mỗi thay đổi (sửa lỗi, thêm tính năng) để đảm bảo không gây ra lỗi mới.