1. Mô hình phát triển phần mềm Waterfall (Thác nước) thường được áp dụng tốt nhất trong trường hợp nào?
A. Khi yêu cầu của dự án thường xuyên thay đổi và không rõ ràng.
B. Khi dự án có quy mô nhỏ và thời gian phát triển rất ngắn.
C. Khi yêu cầu của dự án được xác định rõ ràng và ổn định ngay từ đầu.
D. Khi đội ngũ phát triển có kinh nghiệm làm việc theo mô hình Agile.
2. Trong kiến trúc Microservices, mỗi 'service' thường đại diện cho điều gì?
A. Toàn bộ ứng dụng phần mềm.
B. Một chức năng nghiệp vụ độc lập và có thể triển khai riêng biệt.
C. Một module thư viện dùng chung cho nhiều ứng dụng.
D. Một thành phần giao diện người dùng.
3. Đâ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?
A. Giảm thiểu số lượng dòng code cần viết.
B. Tăng tốc độ thực thi của chương trình.
C. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế thường gặp, giúp code dễ đọc, dễ bảo trì và tái sử dụng.
D. Tự động sinh code hoàn chỉnh cho ứng dụng.
4. Trong ngữ cảnh của bảo mật phần mềm, '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).
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 (Phishing).
D. Tấn công brute-force (thử mọi mật khẩu).
5. Lợi ích của việc sử dụng 'Continuous Integration' (Tích hợp liên tục) trong DevOps là gì?
A. Giảm thiểu sự phụ thuộc vào kiểm thử thủ công.
B. Tự động hóa quá trình triển khai ứng dụng lên production.
C. Phát hiện lỗi sớm và thường xuyên hơn bằng cách tích hợp code thường xuyên và chạy kiểm thử tự động.
D. Cải thiện bảo mật cho ứng dụng.
6. Phương pháp phát triển phần mềm nào chú trọng vào việc giao tiếp và hợp tác chặt chẽ giữa khách hàng và nhóm phát triển trong suốt quá trình?
A. Waterfall.
B. Agile.
C. V-Model.
D. Big Bang.
7. Trong mô hình V-Model, giai đoạn 'Unit Testing' tương ứng với giai đoạn nào trong pha phân tích và thiết kế?
A. System Design (Thiết kế hệ thống).
B. Architectural Design (Thiết kế kiến trúc).
C. Detailed Design (Thiết kế chi tiết/module).
D. Requirements Analysis (Phân tích yêu cầu).
8. Loại sơ đồ UML nào thường được sử dụng để mô tả luồng tương tác giữa các đối tượng trong một use case?
A. Class Diagram (Sơ đồ lớp).
B. Use Case Diagram (Sơ đồ ca sử dụng).
C. Sequence Diagram (Sơ đồ tuần tự).
D. Deployment Diagram (Sơ đồ triển khai).
9. Phương pháp 'Refactoring' (Tái cấu trúc mã) được thực hiện nhằm mục đích gì?
A. Thêm các tính năng mới vào phần mềm.
B. Sửa lỗi (bug) trong phần mềm.
C. Cải thiện cấu trúc bên trong của code mà không thay đổi chức năng bên ngoài của nó, giúp code dễ đọc, dễ bảo trì và mở rộng hơn.
D. Tăng tốc độ phát triển phần mềm.
10. Mục tiêu chính của kiểm thử hồi quy (Regression testing) là gì?
A. Tìm kiếm các lỗi mới phát sinh trong quá trình phát triển.
B. Đảm bảo rằng các thay đổi hoặc sửa lỗi mới không gây ra lỗi ở các chức năng đã hoạt động tốt trước đó.
C. Kiểm tra hiệu suất của phần mềm dưới tải lớn.
D. Đánh giá mức độ thân thiện với người dùng của giao diện phần mềm.
11. Kiểm thử đơn vị (Unit testing) thường được thực hiện ở giai đoạn nào của quy trình phát triển phần mềm?
A. Giai đoạn phân tích yêu cầu.
B. Giai đoạn thiết kế.
C. Giai đoạn coding (lập trình).
D. Giai đoạn triển khai.
12. UML (Unified Modeling Language) được sử dụng để làm gì trong công nghệ phần mềm?
A. Viết mã nguồn chương trình.
B. Mô tả và trực quan hóa thiết kế của hệ thống phần mềm.
C. Quản lý dự án phần mềm.
D. Kiểm thử hiệu suất phần mềm.
13. Khái niệm 'Technical Debt' (Nợ kỹ thuật) trong công nghệ phần mềm đề cập đến điều gì?
A. Chi phí mua bản quyền các công cụ và phần mềm hỗ trợ phát triển.
B. Các quyết định thiết kế và code vội vàng, chưa tối ưu, được thực hiện để đáp ứng tiến độ ngắn hạn, nhưng có thể gây ra vấn đề trong tương lai.
C. Số lượng lỗi (bug) còn tồn đọng trong phần mềm.
D. Thời gian và chi phí cần thiết để đào tạo nhân viên mới.
14. Trong quy trình phát triển phần mềm Agile, 'Sprint' là gì?
A. Một cuộc họp hàng ngày để báo cáo tiến độ và thảo luận vấn đề.
B. Một giai đoạn kiểm thử phần mềm kéo dài 1-2 tuần.
C. Một khoảng thời gian ngắn (thường từ 1 đến 4 tuần) mà nhóm phát triển làm việc để hoàn thành một tập hợp các công việc cụ thể.
D. Một tài liệu mô tả yêu cầu của người dùng.
15. Đâu là định nghĩa chính xác nhất về Công nghệ phần mềm?
A. Một lĩnh vực khoa học máy tính chỉ tập trung vào việc viết mã.
B. Một tập hợp các nguyên tắc, phương pháp và công cụ để phát triển, bảo trì và vận hành phần mềm một cách hiệu quả và kinh tế.
C. Quy trình cài đặt và cấu hình phần mềm trên máy tính.
D. Công việc kiểm thử phần mềm sau khi phát triển xong.
16. Đâu là ưu điểm chính của việc sử dụng mô hình Agile so với mô hình Waterfall?
A. Dễ dàng quản lý tiến độ dự án hơn.
B. Linh hoạt hơn trong việc thích ứng với các thay đổi yêu cầu trong suốt quá trình phát triển.
C. Chi phí phát triển thấp hơn.
D. Đảm bảo tài liệu dự án đầy đủ và chi tiết hơn.
17. Sự khác biệt chính giữa 'Verification' và 'Validation' trong kiểm thử phần mềm là gì?
A. Verification kiểm tra xem phần mềm có đáp ứng yêu cầu của người dùng không, còn Validation kiểm tra xem code có đúng cú pháp không.
B. Verification kiểm tra xem 'chúng ta có xây dựng sản phẩm đúng cách không?', còn Validation kiểm tra xem 'chúng ta có xây dựng đúng sản phẩm không?'
C. Verification thực hiện bởi lập trình viên, còn Validation thực hiện bởi kiểm thử viên.
D. Verification chỉ áp dụng cho mô hình Waterfall, còn Validation chỉ áp dụng cho mô hình Agile.
18. Yêu cầu phi chức năng (Non-functional requirements) trong đặc tả yêu cầu phần mềm mô tả điều gì?
A. Các chức năng cụ thể mà phần mềm phải thực hiện.
B. Các ràng buộc và phẩm chất của hệ thống, ví dụ như hiệu suất, bảo mật, khả năng mở rộng, và khả năng sử dụng.
C. Giao diện người dùng của phần mềm.
D. Cơ sở dữ liệu mà phần mềm sử dụng.
19. Phương pháp kiểm thử 'Acceptance Testing' (Kiểm thử chấp nhận) thường được thực hiện bởi ai?
A. Nhóm phát triển.
B. Nhóm kiểm thử độc lập.
C. Khách hàng hoặc người dùng cuối.
D. Quản lý dự án.
20. Phương pháp kiểm thử hộp đen (Black-box testing) tập trung vào khía cạnh nào của phần mềm?
A. Cấu trúc code bên trong và logic của chương trình.
B. Giao diện và chức năng của phần mềm từ góc độ người dùng.
C. Hiệu suất và khả năng chịu tải của hệ thống.
D. Mức độ bảo mật của phần mềm trước các tấn công mạng.
21. Trong ngữ cảnh kiểm thử hiệu suất (Performance testing), 'Load testing' và 'Stress testing' khác nhau như thế nào?
A. Load testing kiểm tra chức năng, còn Stress testing kiểm tra hiệu suất.
B. Load testing kiểm tra hệ thống dưới tải trọng bình thường dự kiến, còn Stress testing kiểm tra hệ thống vượt quá giới hạn chịu tải để xác định điểm gãy và khả năng phục hồi.
C. Load testing thực hiện tự động, còn Stress testing thực hiện thủ công.
D. Load testing chỉ kiểm tra hiệu suất ở phía máy chủ, còn Stress testing kiểm tra cả máy chủ và máy khách.
22. Mục đích của việc tạo 'Use Case Diagram' (Sơ đồ ca sử dụng) là gì?
A. Mô tả cấu trúc dữ liệu của hệ thống.
B. Mô tả các chức năng mà hệ thống cung cấp cho người dùng và tương tác giữa người dùng và hệ thống.
C. Mô tả luồng dữ liệu trong hệ thống.
D. Mô tả kiến trúc phần cứng và phần mềm của hệ thống.
23. Trong quy trình phát triển phần mềm, 'Requirement Elicitation' (Thu thập yêu cầu) là giai đoạn nào?
A. Giai đoạn viết code.
B. Giai đoạn kiểm thử phần mềm.
C. Giai đoạn đầu tiên, tập trung vào việc tìm hiểu và thu thập yêu cầu từ khách hàng và người dùng.
D. Giai đoạn triển khai phần mềm.
24. Vai trò của 'Product Owner' trong Scrum là gì?
A. Quản lý nhóm phát triển và đảm bảo tiến độ dự án.
B. Viết code và kiểm thử phần mềm.
C. Đại diện cho tiếng nói của khách hàng và người dùng, quản lý Product Backlog và ưu tiên các mục trong Backlog để tối đa hóa giá trị sản phẩm.
D. Đảm bảo chất lượng kỹ thuật của code.
25. Trong mô hình Scrum, 'Product Backlog' là gì?
A. Danh sách các lỗi cần sửa.
B. Danh sách ưu tiên các tính năng, cải tiến, và yêu cầu của sản phẩm cần được phát triển.
C. Bản kế hoạch chi tiết cho mỗi Sprint.
D. Tài liệu mô tả kiến trúc hệ thống.
26. Khái niệm 'Code Smell' (Mùi code) trong lập trình đề cập đến điều gì?
A. Lỗi cú pháp trong code.
B. Đoạn code chạy chậm và kém hiệu quả.
C. Các dấu hiệu trong code có thể cho thấy có vấn đề tiềm ẩn về thiết kế hoặc chất lượng code, cần được xem xét và cải thiện.
D. Code không có comment (chú thích).
27. Trong Scrum, 'Daily Scrum' (hay Daily Stand-up) là cuộc họp diễn ra như thế nào?
A. Cuộc họp kéo dài hàng giờ để thảo luận chi tiết về mọi vấn đề.
B. Cuộc họp hàng ngày, ngắn gọn (thường 15 phút), để nhóm phát triển đồng bộ hóa công việc và lập kế hoạch cho ngày làm việc.
C. Cuộc họp cuối mỗi Sprint để đánh giá kết quả Sprint.
D. Cuộc họp chỉ dành cho Product Owner và Scrum Master.
28. Công cụ 'Docker' thường được sử dụng để làm gì trong quy trình DevOps?
A. Quản lý mã nguồn.
B. Tự động hóa kiểm thử.
C. Đóng gói và triển khai ứng dụng trong các container.
D. Giám sát hiệu suất hệ thống.
29. Nguyên tắc 'SOLID' trong thiết kế hướng đối tượng là viết tắt của những nguyên tắc nào?
A. Single responsibility, Open-closed, Liskov substitution, Interface segregation, Dependency inversion.
B. Scalability, Observability, Load balancing, Isolation, Durability.
C. Security, Optimization, Understandability, Linearity, Documentation.
D. Speed, Originality, Logic, Integrity, Design.
30. Công cụ quản lý phiên bản Git được sử dụng để làm gì chủ yếu trong phát triển phần mềm?
A. Tự động hóa quy trình kiểm thử phần mềm.
B. Theo dõi và quản lý các thay đổi của mã nguồn theo thời gian, hợp tác làm việc nhóm.
C. Triển khai ứng dụng lên môi trường production.
D. Phân tích hiệu suất và tối ưu hóa cơ sở dữ liệu.