Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Công Nghệ Phần Mềm - Đề 04 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 quy trình phát triển phần mềm, giai đoạn nào tập trung vào việc chuyển đổi yêu cầu của người dùng thành một kế hoạch chi tiết về cách phần mềm sẽ hoạt động và được xây dựng?
- A. Giai đoạn Lập kế hoạch (Planning)
- B. Giai đoạn Thiết kế (Design)
- C. Giai đoạn Thực hiện (Implementation)
- D. Giai đoạn Kiểm thử (Testing)
Câu 2: Mô hình phát triển phần mềm Agile Manifesto ưu tiên điều gì hơn là tài liệu toàn diện?
- A. Quy trình và công cụ
- B. Hợp đồng và đàm phán
- C. Phần mềm chạy tốt (Working software)
- D. Tuân thủ kế hoạch
Câu 3: Kỹ thuật kiểm thử hộp đen (Black-box testing) tập trung chủ yếu vào khía cạnh nào của phần mềm?
- A. Cấu trúc dữ liệu bên trong
- B. Thuật toán và logic nghiệp vụ
- C. Đoạn mã nguồn và cấu trúc chương trình
- D. Chức năng và hành vi bên ngoài
Câu 4: Trong mô hình UML, loại biểu đồ nào được sử dụng để mô hình hóa tương tác giữa các đối tượng theo trình tự thời gian?
- A. Biểu đồ Tuần tự (Sequence Diagram)
- B. Biểu đồ Lớp (Class Diagram)
- C. Biểu đồ Ca sử dụng (Use Case Diagram)
- D. Biểu đồ Trạng thái (State Diagram)
Câu 5: Nguyên tắc SOLID trong thiết kế hướng đối tượng "Nguyên tắc thế chỗ Liskov (Liskov Substitution Principle)" phát biểu rằng:
- A. Mỗi lớp chỉ nên có một lý do duy nhất để thay đổi.
- B. Các module cấp cao không nên phụ thuộc vào các module cấp thấp, cả hai nên phụ thuộc vào abstraction.
- C. Các lớp con có thể thay thế các lớp cha mà không làm thay đổi tính đúng đắn của chương trình.
- D. Interface của một lớp nên được chia nhỏ thành các interface nhỏ hơn, đặc biệt cho client.
Câu 6: Khi nào mô hình thác nước (Waterfall) là một lựa chọn phù hợp cho dự án phát triển phần mềm?
- A. Khi yêu cầu của khách hàng chưa được xác định rõ ràng và có thể thay đổi thường xuyên.
- B. Khi yêu cầu đã được xác định rõ ràng, ổn định và ít có khả năng thay đổi.
- C. Khi dự án đòi hỏi tốc độ phát triển nhanh và linh hoạt.
- D. Khi dự án có rủi ro cao và cần được quản lý chặt chẽ.
Câu 7: Điều gì KHÔNG phải là một lợi ích chính của việc sử dụng hệ thống quản lý phiên bản (Version Control System) như Git?
- A. Cho phép nhiều người cùng làm việc trên cùng một dự án một cách hiệu quả.
- B. Theo dõi và quản lý thay đổi của mã nguồn theo thời gian.
- C. Dễ dàng khôi phục lại các phiên bản trước của dự án khi cần.
- D. Tự động viết mã chương trình nhanh hơn.
Câu 8: Trong kiểm thử phần mềm, kiểm thử tích hợp (Integration testing) nhằm mục đích kiểm tra điều gì?
- A. Tính đúng đắn của từng đơn vị mã nguồn riêng lẻ.
- B. Hiệu năng và khả năng chịu tải của toàn bộ hệ thống.
- C. Sự tương tác và giao tiếp giữa các module hoặc thành phần của hệ thống.
- D. Tính bảo mật của hệ thống trước các mối đe dọa bên ngoài.
Câu 9: Khái niệm "Technical Debt" (Nợ kỹ thuật) trong phát triển phần mềm đề cập đến điều gì?
- A. Hậu quả của việc đưa ra các quyết định thiết kế hoặc mã hóa không tối ưu trong ngắn hạn để đạt được tiến độ nhanh hơn.
- B. Số tiền mà dự án phần mềm nợ các nhà cung cấp bên thứ ba.
- C. Thời gian cần thiết để sửa lỗi và cải thiện chất lượng mã nguồn.
- D. Chi phí phát sinh do sử dụng các công nghệ lạc hậu.
Câu 10: Điều gì là mục tiêu chính của việc tái cấu trúc mã nguồn (Code Refactoring)?
- A. Thêm chức năng mới vào phần mềm.
- B. Cải thiện cấu trúc bên trong và khả năng bảo trì của mã nguồn.
- C. Sửa lỗi và vá các lỗ hổng bảo mật.
- D. Tăng hiệu năng và tốc độ thực thi của phần mềm.
Câu 11: Trong kiểm thử hiệu năng (Performance testing), loại kiểm thử nào đo lường khả năng của hệ thống khi chịu tải trọng cao hơn mức bình thường?
- A. Kiểm thử độ bền (Endurance testing)
- B. Kiểm thử khả năng mở rộng (Scalability testing)
- C. Kiểm thử tải (Load testing)
- D. Kiểm thử ứng suất (Stress testing)
Câu 12: Phương pháp ước tính COCOMO (Constructive Cost Model) được sử dụng để làm gì trong quản lý dự án phần mềm?
- A. Ước tính chi phí, nỗ lực và thời gian cần thiết cho dự án phát triển phần mềm.
- B. Đánh giá rủi ro và lập kế hoạch ứng phó rủi ro.
- C. Quản lý phạm vi và yêu cầu của dự án.
- D. Theo dõi tiến độ và hiệu suất của dự án.
Câu 13: Khi nào thì việc sử dụng kiến trúc Microservices trở nên đặc biệt hữu ích?
- A. Cho các ứng dụng nhỏ và đơn giản với ít chức năng.
- B. Cho các dự án có đội ngũ phát triển nhỏ và ít kinh nghiệm.
- C. Cho các ứng dụng có yêu cầu bảo mật thấp.
- D. Cho các ứng dụng lớn, phức tạp, đòi hỏi khả năng mở rộng và triển khai độc lập cho từng chức năng.
Câu 14: Trong kiểm thử chấp nhận (Acceptance testing), ai là người chịu trách nhiệm chính trong việc quyết định phần mềm có đạt yêu cầu và được chấp nhận hay không?
- A. Nhóm phát triển phần mềm.
- B. Khách hàng hoặc người dùng cuối.
- C. Nhóm kiểm thử chất lượng (QA).
- D. Quản lý dự án.
Câu 15: Công cụ phân tích mã tĩnh (Static Code Analysis) giúp ích gì trong quá trình phát triển phần mềm?
- A. Tự động sinh mã nguồn từ thiết kế.
- B. Kiểm tra hiệu năng và tốc độ thực thi của phần mềm.
- C. Phát hiện sớm các lỗi tiềm ẩn, lỗ hổng bảo mật và vấn đề về chất lượng mã nguồn mà không cần thực thi chương trình.
- D. Tự động triển khai phần mềm lên môi trường sản xuất.
Câu 16: Điều gì là quan trọng nhất cần xem xét khi lựa chọn một ngôn ngữ lập trình cho một dự án phần mềm?
- A. Sự phù hợp của ngôn ngữ với yêu cầu và mục tiêu của dự án.
- B. Mức độ phổ biến và thịnh hành của ngôn ngữ.
- C. Sở thích cá nhân của lập trình viên.
- D. Chi phí bản quyền của công cụ phát triển ngôn ngữ.
Câu 17: Trong quy trình Scrum, "Sprint Review" (Đánh giá Sprint) được tổ chức để làm 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 nhóm phát triển.
- D. Trình bày kết quả công việc đã hoàn thành trong Sprint cho các bên liên quan và thu thập phản hồi.
Câu 18: Kỹ thuật "Pair Programming" (Lập trình cặp đôi) mang lại lợi ích gì?
- A. Giảm thời gian phát triển phần mềm xuống một nửa.
- B. Cải thiện chất lượng mã nguồn, giảm lỗi và tăng cường chia sẻ kiến thức trong nhóm.
- C. Tiết kiệm chi phí nhân công vì chỉ cần hai lập trình viên cho một công việc.
- D. Tăng tính cạnh tranh giữa các lập trình viên.
Câu 19: "Tính trừu tượng" (Abstraction) là một nguyên tắc quan trọng trong lập trình hướng đối tượng. Nó có nghĩa là gì?
- A. Khả năng một đối tượng thuộc nhiều lớp khác nhau.
- B. Khả năng một lớp kế thừa các thuộc tính và phương thức từ lớp khác.
- C. Ẩn giấu các chi tiết phức tạp và chỉ hiển thị những thông tin cần thiết cho người sử dụng.
- D. Khả năng một phương thức có thể hoạt động khác nhau tùy thuộc vào đối tượng gọi nó.
Câu 20: Điều gì KHÔNG phải là một loại yêu cầu phi chức năng (Non-functional requirement) của phần mềm?
- A. Hệ thống phải cho phép người dùng đăng nhập bằng tên người dùng và mật khẩu.
- B. Hệ thống phải có thời gian phản hồi dưới 2 giây cho 99% yêu cầu.
- C. Hệ thống phải có khả năng hoạt động liên tục 24/7 với thời gian chết tối thiểu.
- D. Hệ thống phải tuân thủ tiêu chuẩn bảo mật PCI DSS.
Câu 21: Trong mô hình xoắn ốc (Spiral model), điều gì được lặp lại trong mỗi vòng xoắn?
- A. Giai đoạn kiểm thử và triển khai.
- B. Giai đoạn phân tích yêu cầu và thiết kế.
- C. Lập kế hoạch, đánh giá rủi ro, phát triển và đánh giá.
- D. Giai đoạn bảo trì và nâng cấp phần mềm.
Câu 22: Khi nào thì việc sử dụng cơ sở dữ liệu NoSQL có thể phù hợp hơn so với cơ sở dữ liệu quan hệ (RDBMS)?
- A. Khi dữ liệu có cấu trúc rõ ràng và mối quan hệ phức tạp giữa các thực thể.
- B. Khi xử lý lượng lớn dữ liệu phi cấu trúc hoặc bán cấu trúc và yêu cầu khả năng mở rộng cao.
- C. Khi yêu cầu tính toàn vẹn dữ liệu (ACID properties) là ưu tiên hàng đầu.
- D. Khi dự án có ngân sách hạn chế và cần sử dụng cơ sở dữ liệu mã nguồn mở.
Câu 23: "Containerization" (Ví dụ: Docker) mang lại lợi ích gì trong việc triển khai ứng dụng?
- A. Tăng tốc độ phát triển mã nguồn.
- B. Cải thiện chất lượng mã nguồn.
- C. Giảm chi phí phát triển phần mềm.
- D. Đóng gói ứng dụng và các phụ thuộc của nó thành một đơn vị duy nhất, đảm bảo tính nhất quán và khả năng di động giữa các môi trường.
Câu 24: Trong ngữ cảnh kiểm thử API (Application Programming Interface), kiểm thử hợp đồng (Contract testing) nhằm mục đích gì?
- A. Đảm bảo rằng API provider và API consumer tuân thủ theo hợp đồng (contract) đã được thỏa thuận về định dạng dữ liệu và giao thức giao tiếp.
- B. Kiểm tra hiệu năng và khả năng chịu tải của API.
- C. Phát hiện các lỗ hổng bảo mật trong API.
- D. Kiểm tra tính đúng đắn của logic nghiệp vụ bên trong API.
Câu 25: Điều gì là một thách thức chính khi phát triển phần mềm hướng sự kiện (Event-driven architecture)?
- A. Khó khăn trong việc lựa chọn công nghệ phù hợp.
- B. Chi phí phát triển và triển khai cao hơn.
- C. Khó khăn trong việc theo dõi luồng sự kiện và gỡ lỗi khi có vấn đề xảy ra.
- D. Khả năng mở rộng hệ thống bị hạn chế.
Câu 26: Trong kiểm thử bảo mật (Security testing), "SQL Injection" là loại tấn công nào?
- A. Tấn công từ chối dịch vụ (Denial of Service - DoS).
- B. Tấn công bằng cách chèn mã SQL độc hại vào truy vấn cơ sở dữ liệu.
- C. Tấn công giả mạo yêu cầu (Cross-Site Request Forgery - CSRF).
- D. Tấn công leo thang đặc quyền (Privilege Escalation).
Câu 27: "Continuous Integration" (Tích hợp liên tục) và "Continuous Delivery" (Phân phối liên tục) (CI/CD) giúp ích gì cho quy trình phát triển phần mềm?
- A. Giảm số lượng lập trình viên cần thiết cho dự án.
- B. Loại bỏ hoàn toàn nhu cầu kiểm thử phần mềm.
- C. Đảm bảo phần mềm luôn luôn hoàn hảo và không có lỗi.
- D. Tự động hóa quy trình xây dựng, kiểm thử và triển khai phần mềm, giúp phát hành các phiên bản mới nhanh chóng và thường xuyên hơn.
Câu 28: Điều gì KHÔNG phải là một vai trò phổ biến trong nhóm Scrum?
- A. Product Owner (Chủ sở hữu sản phẩm).
- B. Scrum Master (Chuyên gia Scrum).
- C. Project Manager (Quản lý dự án).
- D. Development Team (Nhóm phát triển).
Câu 29: Trong thiết kế giao diện người dùng (UI), nguyên tắc "Khả năng tiếp cận" (Accessibility) đề cập đến điều gì?
- A. Giao diện phải đẹp mắt và hấp dẫn về mặt thị giác.
- B. Giao diện phải dễ sử dụng và có thể tiếp cận được với tất cả mọi người, bao gồm cả người khuyết tật.
- C. Giao diện phải được thiết kế theo phong cách tối giản và hiện đại.
- D. Giao diện phải tương thích với nhiều loại thiết bị và kích thước màn hình khác nhau.
Câu 30: Phương pháp "Ước tính bằng ba điểm" (Three-point estimation) (Ví dụ: PERT) giúp cải thiện độ chính xác của ước tính thời gian dự án như thế nào?
- A. Bằng cách xem xét ba kịch bản (lạc quan, bi quan và có khả năng xảy ra nhất) để tính toán thời gian ước tính trung bình, giúp ước tính thực tế và ít bị ảnh hưởng bởi sự chủ quan.
- B. Bằng cách chia nhỏ công việc thành các phần nhỏ hơn và ước tính thời gian cho từng phần.
- C. Bằng cách sử dụng dữ liệu lịch sử từ các dự án tương tự để ước tính thời gian.
- D. Bằng cách tham khảo ý kiến của nhiều chuyên gia để có được ước tính chính xác hơn.