1. Phương pháp 'pair programming' (lập trình cặp đôi) mang lại lợi ích gì?
A. Giảm chi phí nhân công
B. Tăng tốc độ viết code
C. Cải thiện chất lượng code và chia sẻ kiến thức
D. Giảm sự phụ thuộc vào một developer duy nhất
2. Mô hình phát triển phần mềm nào phù hợp nhất cho các dự án có yêu cầu không rõ ràng và có khả năng thay đổi thường xuyên?
A. Mô hình thác nước
B. Mô hình chữ V
C. Mô hình xoắn ốc
D. Mô hình Agile
3. Khi nào thì mô hình phát triển phần mềm 'Spiral' (xoắn ốc) được ưu tiên sử dụng?
A. Khi yêu cầu rất rõ ràng và ổn định
B. Khi dự án có rủi ro cao và yêu cầu quản lý rủi ro chặt chẽ
C. Khi thời gian phát triển là yếu tố quan trọng nhất
D. Khi đội phát triển có kinh nghiệm hạn chế
4. Mục tiêu của việc 'code review' (đánh giá code) là gì?
A. Đánh giá hiệu năng của code
B. Tìm lỗi và cải thiện chất lượng code
C. Đánh giá tốc độ lập trình của developer
D. Xác định người viết code
5. Trong ngữ cảnh kiểm thử hiệu năng, 'load testing' (kiểm thử tải) nhằm mục đích gì?
A. Đánh giá khả năng chịu tải tối đa của hệ thống
B. Mô phỏng tải trọng người dùng dự kiến để kiểm tra hiệu năng
C. Tìm ra điểm yếu hiệu năng của hệ thống khi chịu tải lớn
D. Kiểm tra bảo mật khi hệ thống chịu tải
6. Trong kiểm thử phần mềm, 'regression testing' (kiểm thử hồi quy) được thực hiện khi nào?
A. Sau khi phát hiện lỗi và sửa lỗi
B. Trước khi phát hành phần mềm
C. Trong giai đoạn phân tích yêu cầu
D. Khi thiết kế giao diện người dùng
7. Phương pháp thiết kế hướng đối tượng (Object-Oriented Design) tập trung vào việc tổ chức code dựa trên yếu tố nào?
A. Chức năng của chương trình
B. Cấu trúc dữ liệu
C. Đối tượng và tương tác giữa các đối tượng
D. Luồng điều khiển của chương trình
8. Công cụ SonarQube thường được sử dụng cho mục đích gì trong phát triển phần mềm?
A. Quản lý cơ sở dữ liệu
B. Phân tích chất lượng code và phát hiện lỗi
C. Kiểm thử giao diện người dùng
D. Triển khai ứng dụng web
9. Đâu là một yếu tố quan trọng để đảm bảo tính bảo trì của phần mềm?
A. Sử dụng công nghệ mới nhất
B. Viết code phức tạp và tối ưu hiệu năng
C. Code rõ ràng, dễ đọc và có cấu trúc tốt
D. Phát triển phần mềm nhanh chóng để kịp tiến độ
10. Trong quy trình CI/CD, 'Continuous Integration' (Tích hợp liên tục) tập trung vào giai đoạn nào?
A. Triển khai phần mềm lên môi trường production
B. Tự động hóa quá trình build và kiểm thử code
C. Giám sát hiệu năng phần mềm sau triển khai
D. Thu thập phản hồi từ người dùng cuối
11. Kiểm thử hộp đen (Black-box testing) dựa trên yếu tố nào để thiết kế test case?
A. Cấu trúc code bên trong của phần mềm
B. Yêu cầu và đặc tả chức năng của phần mềm
C. Hiệu năng của phần mềm trên các môi trường khác nhau
D. Ý kiến chủ quan của người kiểm thử
12. Đâu là giai đoạn đầu tiên trong quy trình phát triển phần mềm theo mô hình thác nước?
A. Kiểm thử
B. Bảo trì
C. Phân tích yêu cầu
D. Thiết kế hệ thống
13. Phương pháp luận Agile tập trung vào điều gì?
A. Lập kế hoạch chi tiết và tuân thủ nghiêm ngặt kế hoạch
B. Linh hoạt, thích ứng và phản hồi nhanh với thay đổi
C. Tài liệu hóa đầy đủ mọi khía cạnh của dự án
D. Phân chia công việc rõ ràng và ít tương tác giữa các thành viên
14. Trong kiểm thử bảo mật, 'penetration testing' (kiểm thử xâm nhập) nhằm mục đích gì?
A. Kiểm tra hiệu năng của hệ thống bảo mật
B. Đánh giá lỗ hổng bảo mật bằng cách mô phỏng tấn công
C. Xác minh tính tuân thủ các tiêu chuẩn bảo mật
D. Kiểm tra khả năng phục hồi sau sự cố bảo mật
15. Mục tiêu chính của việc tái cấu trúc code (refactoring) là gì?
A. Thêm chức năng mới cho phần mềm
B. Sửa lỗi và cải thiện hiệu năng của phần mềm
C. Cải thiện cấu trúc và khả năng đọc hiểu của code mà không thay đổi chức năng
D. Tăng tốc độ phát triển phần mềm
16. Mục tiêu 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
B. Xác định và ghi lại yêu cầu của người dùng và các bên liên quan
C. Lập kế hoạch kiểm thử
D. Viết code ban đầu của phần mềm
17. Đâu là một ví dụ về 'code smell' (mùi code) trong lập trình?
A. Code có comment rõ ràng
B. Hàm quá dài và phức tạp
C. Code được kiểm thử đầy đủ
D. Code tuân thủ coding standards
18. Nguyên tắc 'DRY' (Don't Repeat Yourself) trong lập trình khuyến khích điều gì?
A. Viết code chi tiết và tường minh
B. Tái sử dụng code và tránh lặp lại code
C. Tập trung vào tốc độ phát triển
D. Viết code ngắn gọn và khó hiểu
19. Đâu không phải là một loại kiểm thử phi chức năng?
A. Kiểm thử hiệu năng (Performance testing)
B. Kiểm thử bảo mật (Security testing)
C. Kiểm thử tích hợp (Integration testing)
D. Kiểm thử khả năng sử dụng (Usability testing)
20. Khái niệm 'design pattern' (mẫu thiết kế) trong công nghệ phần mềm là gì?
A. Một loại ngôn ngữ lập trình mới
B. Một framework để phát triển web
C. Giải pháp thiết kế đã được kiểm chứng cho các vấn đề thường gặp
D. Một công cụ quản lý dự án
21. Trong kiểm thử phần mềm, 'acceptance testing' (kiểm thử chấp nhận) được thực hiện bởi ai?
A. Lập trình viên
B. Kiểm thử viên
C. Khách hàng hoặc người dùng cuối
D. Quản lý dự án
22. Đâu là lợi ích chính của việc sử dụng kiến trúc microservices?
A. Giảm chi phí phát triển ban đầu
B. Tăng tính ổn định và khả năng mở rộng của ứng dụng
C. Đơn giản hóa việc triển khai và bảo trì
D. Giảm sự phức tạp của code
23. Công cụ nào sau đây thường được sử dụng để quản lý dự án phần mềm theo phương pháp Agile?
A. Microsoft Word
B. Microsoft Project
C. Jira
D. Microsoft Excel
24. Trong mô hình chữ V, giai đoạn 'Unit Testing' (kiểm thử đơn vị) tương ứng với giai đoạn nào trong pha yêu cầu?
A. Phân tích hệ thống
B. Thiết kế kiến trúc
C. Thiết kế module
D. Thu thập yêu cầu
25. Đâu là một thách thức chính khi phát triển phần mềm nhúng (embedded software)?
A. Thiếu công cụ phát triển
B. Giới hạn về tài nguyên phần cứng (bộ nhớ, CPU)
C. Khó khăn trong việc kiểm thử
D. Ít ngôn ngữ lập trình hỗ trợ
26. Công cụ quản lý phiên bản Git được sử dụng để làm gì?
A. Viết code phần mềm
B. Kiểm thử phần mềm
C. Theo dõi và quản lý các thay đổi của code
D. Triển khai phần mềm lên server
27. Trong kiến trúc phần mềm, 'layering' (phân lớp) giúp đạt được mục tiêu nào?
A. Tăng hiệu năng xử lý
B. Giảm độ phức tạp và tăng tính module hóa
C. Đơn giản hóa việc triển khai
D. Giảm chi phí phát triển
28. Nguyên tắc SOLID nào khuyến khích việc một class chỉ nên có một và chỉ một lý do để thay đổi?
A. Single Responsibility Principle (SRP)
B. Open/Closed Principle (OCP)
C. Liskov Substitution Principle (LSP)
D. Interface Segregation Principle (ISP)
29. 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. Số tiền nợ ngân hàng để phát triển phần mềm
B. Chi phí bảo trì phần mềm sau khi phát hành
C. Hậu quả của việc đưa ra các quyết định thiết kế hoặc code không tối ưu trong ngắn hạn
D. Thời gian cần thiết để học các công nghệ mới
30. Trong kiểm thử phần mềm, 'boundary value analysis' (phân tích giá trị biên) là kỹ thuật thuộc loại kiểm thử nào?
A. Kiểm thử hộp trắng
B. Kiểm thử hộp đen
C. Kiểm thử hiệu năng
D. Kiểm thử bảo mật