Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Công Nghệ Phần Mềm - Đề 01 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 mô hình thác nước (Waterfall), giai đoạn nào sau đây tập trung chủ yếu vào việc chuyển đổi các yêu cầu người dùng thành các đặc tả chi tiết và cấu trúc dữ liệu?
- A. Giai đoạn kiểm thử (Testing)
- B. Giai đoạn thiết kế (Design)
- C. Giai đoạn triển khai (Implementation)
- D. Giai đoạn bảo trì (Maintenance)
Câu 2: Một nhóm phát triển phần mềm đang sử dụng phương pháp Agile. Họ nhận thấy rằng việc lập kế hoạch chi tiết cho toàn bộ dự án từ đầu là không hiệu quả do yêu cầu thay đổi liên tục. Giải pháp nào sau đây là phù hợp nhất với triết lý Agile để giải quyết vấn đề này?
- A. Cố gắng lập kế hoạch chi tiết hơn ngay từ đầu để hạn chế thay đổi.
- B. Chuyển sang mô hình Waterfall vì nó phù hợp với các dự án lớn.
- C. Lập kế hoạch ngắn hạn và thường xuyên điều chỉnh kế hoạch sau mỗi Sprint.
- D. Giữ nguyên kế hoạch ban đầu và yêu cầu khách hàng không thay đổi yêu cầu.
Câu 3: Khi phân tích yêu cầu phần mềm, kỹ sư phần mềm thường sử dụng biểu đồ Use Case. Biểu đồ Use Case chủ yếu mô tả điều gì?
- A. Cấu trúc dữ liệu của hệ thống.
- B. Luồng dữ liệu giữa các thành phần của hệ thống.
- C. Kiến trúc phần cứng của hệ thống.
- D. Tương tác giữa người dùng (Actor) và hệ thống để đạt được mục tiêu.
Câu 4: Trong kiểm thử phần mềm, kiểm thử hộp đen (Black-box testing) khác biệt với kiểm thử hộp trắng (White-box testing) chủ yếu ở điểm nào?
- A. Kiểm thử hộp đen không cần xem xét cấu trúc code bên trong, trong khi kiểm thử hộp trắng thì cần.
- B. Kiểm thử hộp đen chỉ được thực hiện bởi tester, kiểm thử hộp trắng chỉ bởi developer.
- C. Kiểm thử hộp đen luôn hiệu quả hơn kiểm thử hộp trắng trong việc tìm lỗi.
- D. Kiểm thử hộp đen chỉ áp dụng cho kiểm thử đơn vị, kiểm thử hộp trắng cho kiểm thử hệ thống.
Câu 5: Một hệ thống phần mềm được thiết kế theo kiến trúc Microservices. Lợi ích chính của kiến trúc này so với kiến trúc Monolithic là gì?
- A. Đơn giản hóa việc triển khai và bảo trì toàn bộ hệ thống.
- B. Tăng cường tính bảo mật tổng thể của hệ thống.
- C. Cho phép triển khai và mở rộng các thành phần độc lập, linh hoạt hơn.
- D. Giảm thiểu độ phức tạp trong việc phát triển các tính năng mới.
Câu 6: Nguyên tắc SOLID là 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 7: Trong quản lý cấu hình phần mềm, phiên bản (version) của một thành phần phần mềm được quản lý để làm gì?
- A. Tăng tốc độ biên dịch mã nguồn.
- B. Cải thiện hiệu suất của phần mềm khi chạy.
- C. Giảm dung lượng lưu trữ của mã nguồn.
- D. Theo dõi và quản lý các thay đổi của thành phần phần mềm theo thời gian.
Câu 8: Đâu là mục tiêu chính của việc tái cấu trúc mã nguồn (Refactoring) trong quá trình phát triển phần mềm?
- A. Thêm các tính năng mới vào phần mềm.
- B. Sửa lỗi trong mã nguồn.
- C. Cải thiện cấu trúc bên trong của mã nguồn mà không thay đổi chức năng bên ngoài.
- D. Tối ưu hóa hiệu suất thực thi của phần mềm.
Câu 9: Trong quy trình kiểm thử, kiểm thử hồi quy (Regression testing) được thực hiện khi nào?
- A. Chỉ sau khi phát triển xong toàn bộ phần mềm.
- B. Sau khi có bất kỳ thay đổi nào trong mã nguồn (sửa lỗi, thêm tính năng).
- C. Trước khi bắt đầu kiểm thử tích hợp.
- D. Chỉ khi có yêu cầu từ khách hàng.
Câu 10: Độ đo Cyclomatic Complexity được sử dụng để đánh giá điều gì trong mã nguồn?
- A. Số dòng code trong chương trình.
- B. Số lượng biến và hàm trong chương trình.
- C. Mức độ dễ đọc và dễ hiểu của mã nguồn.
- D. Độ phức tạp về logic và số lượng đường dẫn thực thi trong chương trình.
Câu 11: Trong mô hình Scrum, vai trò Product Owner chịu trách nhiệm chính về điều gì?
- A. Quản lý Product Backlog và đảm bảo giá trị sản phẩm.
- B. Điều phối công việc hàng ngày của nhóm phát triển (Development Team).
- C. Loại bỏ các rào cản để nhóm phát triển làm việc hiệu quả.
- D. Đảm bảo chất lượng kỹ thuật của sản phẩm.
Câu 12: Kiến trúc hướng sự kiện (Event-driven architecture) phù hợp nhất với loại hệ thống nào?
- A. Hệ thống quản lý cơ sở dữ liệu quan hệ truyền thống.
- B. Hệ thống tính toán khoa học với các thuật toán phức tạp.
- C. Hệ thống thời gian thực, phản ứng nhanh với các sự kiện và tương tác người dùng.
- D. Hệ thống xử lý batch dữ liệu lớn định kỳ.
Câu 13: Khi nào thì mô hình Prototype (mẫu thử) là lựa chọn phù hợp trong phát triển phần mềm?
- A. Khi yêu cầu hệ thống đã được xác định rõ ràng và ổn định.
- B. Khi yêu cầu của người dùng chưa rõ ràng và cần được làm rõ thông qua thử nghiệm.
- C. Khi dự án có thời gian và ngân sách rất hạn hẹp.
- D. Khi cần phát triển một hệ thống có hiệu suất cực cao.
Câu 14: Đâu là hoạt động chính trong giai đoạn "Xác định yêu cầu" của quy trình phát triển phần mềm?
- A. Viết mã nguồn chương trình.
- B. Thiết kế cơ sở dữ liệu.
- C. Thu thập và phân tích nhu cầu của người dùng đối với hệ thống.
- D. Kiểm thử phần mềm đã phát triển.
Câu 15: Trong kiểm thử hiệu năng (Performance testing), loại kiểm thử nào tập trung vào việc đo thời gian phản hồi của hệ thống dưới tải trọng khác nhau?
- A. Kiểm thử bảo mật (Security testing)
- B. Kiểm thử tải (Load testing)
- C. Kiểm thử khả năng sử dụng (Usability testing)
- D. Kiểm thử chấp nhận (Acceptance testing)
Câu 16: Mục đích của việc sử dụng Design Patterns (mẫu thiết kế) trong thiết kế phần mềm là gì?
- A. Tăng tốc độ phát triển phần mềm bằng cách tự động sinh mã.
- B. Giảm thiểu số lượng code cần viết trong dự án.
- C. Đảm bảo phần mềm tương thích với mọi nền tảng.
- D. Tái sử dụng các giải pháp thiết kế đã được kiểm chứng và cải thiện cấu trúc phần mềm.
Câu 17: Nguyên tắc "KISS" (Keep It Simple, Stupid) có ý nghĩa gì trong thiết kế phần mềm?
- A. Thiết kế hệ thống nên đơn giản nhất có thể để dễ hiểu, dễ bảo trì và ít lỗi.
- B. Luôn sử dụng công nghệ mới nhất và phức tạp nhất để thể hiện trình độ.
- C. Tập trung vào việc đáp ứng mọi yêu cầu của khách hàng, bất kể độ phức tạp.
- D. Viết code càng ngắn gọn càng tốt, bỏ qua tính dễ đọc.
Câu 18: Trong mô hình xoắn ốc (Spiral), yếu tố nào được đánh giá kỹ lưỡng ở mỗi vòng lặp trước khi tiếp tục?
- A. Tiến độ phát triển so với kế hoạch ban đầu.
- B. Mức độ hài lòng của khách hàng với sản phẩm hiện tại.
- C. Các rủi ro tiềm ẩn có thể ảnh hưởng đến dự án.
- D. Số lượng dòng code đã viết trong vòng lặp.
Câu 19: Công cụ UML (Unified Modeling Language) được sử dụng chủ yếu để làm gì trong công nghệ phần mềm?
- A. Biên dịch mã nguồn thành mã máy.
- B. Mô hình hóa và biểu diễn thiết kế của hệ thống phần mềm.
- C. Quản lý cơ sở dữ liệu.
- D. Kiểm thử tự động phần mềm.
Câu 20: Đâu là thách thức chính khi phát triển phần mềm cho hệ thống nhúng (Embedded systems)?
- A. Sự đa dạng về ngôn ngữ lập trình.
- B. Khó khăn trong việc quản lý dự án.
- C. Thiếu công cụ phát triển phù hợp.
- D. Giới hạn về tài nguyên phần cứng (bộ nhớ, năng lượng, hiệu năng).
Câu 21: Trong kiểm thử tích hợp (Integration testing), phương pháp "top-down" tiếp cận việc tích hợp các module như thế nào?
- A. Tích hợp tất cả các module cùng một lúc.
- B. Tích hợp các module theo thứ tự ngẫu nhiên.
- C. Bắt đầu tích hợp từ các module cấp cao nhất và dần dần tích hợp các module cấp thấp hơn.
- D. Bắt đầu tích hợp từ các module cấp thấp nhất và dần dần tích hợp các module cấp cao hơn.
Câu 22: Đâu là một ví dụ về yêu cầu phi chức năng (Non-functional requirement) của một hệ thống thương mại điện tử?
- A. Người dùng có thể thêm sản phẩm vào giỏ hàng.
- B. Thời gian phản hồi của trang web không được vượt quá 2 giây.
- C. Hệ thống phải hỗ trợ thanh toán trực tuyến.
- D. Admin có thể quản lý danh mục sản phẩm.
Câu 23: Khi đánh giá chất lượng mã nguồn, "Code review" (duyệt mã) mang lại lợi ích gì?
- A. Tăng tốc độ viết code của lập trình viên.
- B. Tự động sửa lỗi trong mã nguồn.
- C. Thay thế kiểm thử phần mềm.
- D. Phát hiện lỗi sớm, chia sẻ kiến thức và nâng cao chất lượng mã nguồn.
Câu 24: Trong mô hình DevOps, "Continuous Integration" (CI) có vai trò gì?
- A. Tự động triển khai phần mềm lên môi trường production.
- B. Quản lý cơ sở hạ tầng (infrastructure) dưới dạng code.
- C. Tự động hóa quá trình tích hợp mã nguồn từ nhiều lập trình viên và thực hiện kiểm thử.
- D. Theo dõi hiệu suất ứng dụng trong môi trường production.
Câu 25: Phương pháp kiểm thử "Equivalence Partitioning" (phân vùng tương đương) dựa trên nguyên tắc nào?
- A. Chia dữ liệu đầu vào thành các vùng tương đương để giảm số lượng test case cần thiết.
- B. Kiểm thử tất cả các giá trị có thể của dữ liệu đầu vào.
- C. Tập trung vào kiểm thử các trường hợp biên (boundary values).
- D. Kiểm thử ngẫu nhiên dữ liệu đầu vào.
Câu 26: Trong kiến trúc 3 lớp (3-tier architecture), lớp "Presentation Layer" (lớp trình bày) đảm nhiệm chức năng gì?
- A. Xử lý logic nghiệp vụ của ứng dụng.
- B. Hiển thị giao diện người dùng và xử lý tương tác của người dùng.
- C. Quản lý và lưu trữ dữ liệu.
- D. Kết nối với các hệ thống bên ngoài.
Câu 27: Đâu là lợi ích của việc sử dụng "Microservices" so với "Monolithic" khi triển khai ứng dụng trên Cloud?
- A. Giảm chi phí triển khai và vận hành trên Cloud.
- B. Đơn giản hóa việc quản lý cơ sở hạ tầng Cloud.
- C. Khả năng mở rộng độc lập từng thành phần dịch vụ, tối ưu hóa sử dụng tài nguyên Cloud.
- D. Tăng cường tính bảo mật cho ứng dụng Cloud.
Câu 28: Trong quản lý rủi ro dự án phần mềm, "Risk mitigation" (giảm thiểu rủi ro) là gì?
- A. Xác định và phân tích các rủi ro có thể xảy ra.
- B. Lập kế hoạch dự phòng cho các rủi ro.
- C. Chấp nhận rủi ro và không làm gì cả.
- D. Thực hiện các hành động để giảm xác suất xảy ra hoặc tác động của rủi ro.
Câu 29: "Technical debt" (nợ kỹ thuật) trong phát triển phần mềm phát sinh khi nào?
- A. Khi dự án được hoàn thành đúng thời hạn và ngân sách.
- B. Khi lựa chọn các giải pháp thiết kế hoặc code không tối ưu để đáp ứng thời hạn gấp rút.
- C. Khi sử dụng các công nghệ mới nhất trong dự án.
- D. Khi thực hiện kiểm thử kỹ lưỡng trước khi phát hành.
Câu 30: Mục tiêu chính của kiểm thử chấp nhận (Acceptance testing) là gì?
- A. Tìm ra tất cả các lỗi kỹ thuật trong phần mềm.
- B. Đảm bảo hiệu suất của phần mềm đáp ứng yêu cầu.
- C. Xác nhận phần mềm đáp ứng yêu cầu của người dùng/khách hàng và sẵn sàng để nghiệm thu.
- D. Kiểm tra tính bảo mật của phần mềm.