1. Công cụ SonarQube thường được sử dụng để làm gì trong quy trình phát triển phần mềm?
A. Quản lý dự án.
B. Kiểm thử hiệu suất.
C. Phân tích chất lượng code và phát hiện lỗi tiềm ẩn.
D. Triển khai phần mềm.
2. Chỉ số 'Cyclomatic complexity' dùng để đo lường điều gì trong code?
A. Số dòng code.
B. Độ phức tạp về thời gian chạy.
C. Độ phức tạp của luồng điều khiển chương trình.
D. Mức độ trùng lặp code.
3. Đâu là một thách thức chính khi phát triển phần mềm hướng dịch vụ (Service-oriented architecture - SOA)?
A. Khó khăn trong việc viết code.
B. Đảm bảo tính nhất quán dữ liệu và quản lý giao dịch giữa nhiều dịch vụ phân tán.
C. Thiếu công cụ phát triển phù hợp.
D. Chi phí phần cứng cao.
4. Công nghệ containerization (ví dụ: Docker) mang lại lợi ích gì chính cho việc triển khai phần mềm?
A. Tăng tốc độ viết code.
B. Đơn giản hóa việc đóng gói, phân phối và chạy ứng dụng trên nhiều môi trường khác nhau.
C. Giảm thiểu lỗi cú pháp.
D. Tăng cường bảo mật code.
5. UML (Unified Modeling Language) được sử dụng để làm gì trong công nghệ phần mềm?
A. Viết mã chương trình tự động.
B. Quản lý dự án phần mềm.
C. Mô hình hóa và thiết kế hệ thống phần mềm.
D. Kiểm thử hiệu suất phần mềm.
6. Mục tiêu chính của quy trình 'Xác định yêu cầu' trong công nghệ phần mềm là gì?
A. Viết mã chương trình.
B. Kiểm thử phần mềm.
C. Thu thập và làm rõ nhu cầu của người dùng và các bên liên quan.
D. Triển khai phần mềm lên môi trường sản xuất.
7. Nguyên tắc 'DRY' (Don't Repeat Yourself) trong lập trình phần mềm khuyến khích điều gì?
A. Viết code lặp đi lặp lại để dễ hiểu.
B. Tránh lặp lại code bằng cách tái sử dụng code và trừu tượng hóa.
C. Viết tài liệu code chi tiết.
D. Kiểm thử code kỹ lưỡng.
8. CI/CD (Continuous Integration/Continuous Delivery) là gì?
A. Một phương pháp quản lý dự án phần mềm.
B. Một quy trình tự động hóa việc tích hợp, kiểm thử và triển khai phần mềm.
C. Một loại ngôn ngữ lập trình.
D. Một công cụ kiểm thử hiệu suất.
9. Đâu là một ví dụ về 'Software architecture pattern' (Mẫu kiến trúc phần mềm)?
A. Bubble sort algorithm.
B. Singleton design pattern.
C. Microservices architecture.
D. Data structure: Stack.
10. Đâu là một ví dụ về kiểm thử phi chức năng (Non-functional testing)?
A. Kiểm thử chức năng đăng nhập của người dùng.
B. Kiểm thử hiệu suất của ứng dụng khi có nhiều người dùng đồng thời.
C. Kiểm thử các trường hợp sử dụng chính của hệ thống.
D. Kiểm thử giao diện người dùng.
11. Nguyên tắc 'KISS' (Keep It Simple, Stupid) trong thiết kế phần mềm khuyến khích điều gì?
A. Sử dụng các công nghệ phức tạp nhất.
B. Thiết kế hệ thống càng phức tạp càng tốt để đáp ứng mọi yêu cầu.
C. Ưu tiên sự đơn giản trong thiết kế và code.
D. Tối ưu hóa hiệu suất bằng mọi giá.
12. Điểm khác biệt chính giữa kiểm thử Alpha và kiểm thử Beta là gì?
A. Alpha test do nhà phát triển thực hiện, Beta test do người dùng cuối thực hiện.
B. Alpha test kiểm thử chức năng, Beta test kiểm thử phi chức năng.
C. Alpha test diễn ra sau Beta test.
D. Alpha test sử dụng dữ liệu thật, Beta test sử dụng dữ liệu giả.
13. Trong mô hình Waterfall, giai đoạn nào diễn ra sau giai đoạn 'Thiết kế'?
A. Bảo trì
B. Kiểm thử
C. Triển khai
D. Hiện thực (Coding)
14. Khái niệm 'Technical feasibility' (Tính khả thi về mặt kỹ thuật) trong phân tích yêu cầu đề cập đến điều gì?
A. Liệu dự án có mang lại lợi nhuận hay không.
B. Liệu đội ngũ phát triển có đủ kỹ năng và công nghệ để xây dựng phần mềm hay không.
C. Liệu phần mềm có đáp ứng nhu cầu người dùng hay không.
D. Liệu dự án có hoàn thành đúng thời hạn hay không.
15. Khái niệm 'Tái cấu trúc mã nguồn' (Refactoring) nhằm mục đích gì?
A. Thêm chức năng mới vào phần mềm.
B. Sửa lỗi trong code.
C. Cải thiện cấu trúc và chất lượng code mà không thay đổi chức năng bên ngoài.
D. Tối ưu hiệu suất phần mềm.
16. Kiểm thử hộp đen (Black-box testing) tập trung vào việc kiểm thử khía cạnh nào của phần mềm?
A. Cấu trúc code bên trong và logic thực hiện.
B. Giao diện người dùng và chức năng bên ngoài.
C. Hiệu suất và khả năng chịu tải của hệ thống.
D. Tính bảo mật của hệ thống.
17. Mục tiêu của 'Security testing' (Kiểm thử bảo mật) là gì?
A. Đảm bảo phần mềm chạy nhanh.
B. Tìm kiếm và đánh giá các lỗ hổng bảo mật trong phần mềm.
C. Kiểm tra chức năng của phần mềm.
D. Đo lường hiệu suất sử dụng bộ nhớ.
18. Loại biểu đồ UML nào được sử dụng để mô tả tương tác giữa các đối tượng theo thời gian?
A. Use Case Diagram.
B. Class Diagram.
C. Sequence Diagram.
D. Activity Diagram.
19. Trong ngữ cảnh Agile, 'Sprint' là gì?
A. Một cuộc họp hàng ngày.
B. Một giai đoạn phát triển ngắn, lặp đi lặp lại, thường kéo dài từ 1 đến 4 tuần, để hoàn thành một phần công việc cụ thể.
C. Một loại tài liệu yêu cầu.
D. Một phương pháp kiểm thử.
20. Phương pháp phát triển phần mềm Agile nhấn mạnh điều gì?
A. Tuân thủ nghiêm ngặt kế hoạch ban đầu và tài liệu chi tiết.
B. Sự linh hoạt, khả năng thích ứng với thay đổi và hợp tác chặt chẽ với khách hàng.
C. Phân tích yêu cầu kỹ lưỡng trước khi bắt đầu giai đoạn phát triển.
D. Kiểm thử toàn diện sau khi hoàn thành toàn bộ quá trình phát triển.
21. Khái niệm 'Code smell' (Mùi code) trong công nghệ phần mềm chỉ điều gì?
A. Lỗi cú pháp trong code.
B. Đoạn code chạy chậm.
C. Dấu hiệu trong code cho thấy có thể có vấn đề thiết kế hoặc code sâu xa hơn cần được xem xét và cải thiện.
D. Code không tuân thủ chuẩn coding style.
22. Mục tiêu của việc thiết kế giao diện người dùng (UI) và trải nghiệm người dùng (UX) là gì?
A. Làm cho phần mềm chạy nhanh hơn.
B. Tối ưu hóa code.
C. Tạo ra giao diện trực quan, dễ sử dụng và mang lại trải nghiệm tốt cho người dùng.
D. Giảm chi phí phát triển phần mềm.
23. Trong kiểm thử phần mềm, 'Test case' là gì?
A. Một loại lỗi phần mềm.
B. Một điều kiện hoặc biến số đầu vào để kiểm thử.
C. Một tập hợp các bước kiểm thử cụ thể, đầu vào, điều kiện thực hiện và kết quả mong đợi.
D. Một báo cáo kết quả kiểm thử.
24. Trong bảo trì phần mềm, 'Perfective maintenance' (Bảo trì hoàn thiện) là gì?
A. Sửa lỗi trong phần mềm.
B. Thêm chức năng mới hoặc cải thiện hiệu suất.
C. Điều chỉnh phần mềm để phù hợp với môi trường mới.
D. Ngăn chặn lỗi xảy ra.
25. Mô hình xoắn ốc (Spiral Model) trong phát triển phần mềm phù hợp với loại dự án nào?
A. Dự án có yêu cầu rõ ràng và ít thay đổi.
B. Dự án nhỏ, đơn giản.
C. Dự án lớn, phức tạp và có nhiều rủi ro.
D. Dự án phát triển web tĩnh.
26. 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ợ các nhà cung cấp công nghệ.
B. 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 để đạt được tiến độ nhanh hơn.
C. Chi phí bảo trì phần mềm sau khi triển khai.
D. Sự chậm trễ trong việc phát hành phiên bản mới.
27. Phương pháp kiểm thử 'Regression testing' (Kiểm thử hồi quy) được thực hiện khi nào?
A. Trước khi phát hành phiên bản đầu tiên của phần mềm.
B. Sau khi thực hiện thay đổi code (ví dụ: sửa lỗi, thêm tính năng) để đảm bảo các thay đổi không gây ra lỗi mới hoặc làm hỏng các chức năng hiện có.
C. Trong giai đoạn thiết kế phần mềm.
D. Chỉ khi có yêu cầu từ khách hàng.
28. 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. Liskov Substitution Principle.
B. Law of Demeter.
C. Least Knowledge Principle.
D. Loose Coupling Principle.
29. Đâu là ưu điểm 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. Tăng tốc độ biên dịch code.
B. Giảm thiểu lỗi cú pháp trong code.
C. Quản lý thay đổi code, phối hợp làm việc nhóm và phục hồi phiên bản trước.
D. Tự động kiểm thử phần mềm.
30. Mục đích của việc 'Phân tích rủi ro' trong quản lý dự án phần mềm là gì?
A. Đảm bảo dự án hoàn thành đúng thời hạn.
B. Xác định, đánh giá và lập kế hoạch ứng phó với các rủi ro có thể ảnh hưởng đến dự án.
C. Tối ưu hóa chi phí dự án.
D. Cải thiện chất lượng code.