1. Phương pháp phát triển phần mềm Agile nhấn mạnh yếu tố nào hơn so với phương pháp Waterfall?
A. Lập kế hoạch chi tiết và tài liệu đầy đủ trước khi bắt đầu phát triển.
B. Tuân thủ nghiêm ngặt quy trình và các giai đoạn phát triển.
C. Khả năng thích ứng với thay đổi và sự tương tác thường xuyên với khách hàng.
D. Phân công công việc rõ ràng và trách nhiệm cá nhân cao.
2. Phương pháp 'Tái cấu trúc mã' (Code refactoring) nên được thực hiện khi nào?
A. Khi phát hiện lỗi nghiêm trọng trong code.
B. Khi thêm chức năng mới vào phần mềm.
C. Khi code hoạt động đúng nhưng cấu trúc code trở nên phức tạp, khó hiểu và khó bảo trì.
D. Trước khi kiểm thử phần mềm.
3. Khái niệm 'Tích hợp liên tục' (Continuous Integration - CI) trong DevOps là gì?
A. Quá trình kiểm thử phần mềm liên tục sau khi triển khai.
B. Việc tích hợp mã nguồn từ các thành viên trong nhóm phát triển một cách thường xuyên và tự động.
C. Việc triển khai phần mềm lên môi trường production liên tục.
D. Quá trình thu thập phản hồi từ người dùng liên tục.
4. Đâu là mục tiêu chính của Công nghệ phần mềm?
A. Tạo ra phần mềm phức tạp nhất có thể.
B. Phát triển và duy trì các hệ thống phần mềm chất lượng cao, đáp ứng nhu cầu người dùng.
C. Tối đa hóa lợi nhuận từ việc bán phần mềm.
D. Sử dụng công nghệ mới nhất trong mọi dự án phần mềm.
5. Mô hình thác nước (Waterfall) trong quy trình phát triển phần mềm phù hợp nhất với loại dự án nào?
A. Dự án có yêu cầu thay đổi liên tục và không rõ ràng.
B. Dự án có thời gian phát triển ngắn và yêu cầu linh hoạt cao.
C. Dự án có yêu cầu được xác định rõ ràng và ít thay đổi trong suốt quá trình phát triển.
D. Mọi loại dự án phần mềm đều phù hợp với mô hình thác nước.
6. Đâu là một thách thức khi chuyển đổi từ mô hình phát triển Waterfall sang Agile trong một tổ chức đã quen với Waterfall?
A. Khó khăn trong việc tìm kiếm công cụ quản lý dự án Agile phù hợp.
B. Sự thay đổi về văn hóa làm việc, tư duy và quy trình, đòi hỏi sự thích ứng từ cả nhóm phát triển và khách hàng.
C. Chi phí đầu tư ban đầu cho Agile thấp hơn Waterfall.
D. Agile không phù hợp với các dự án lớn.
7. Yêu cầu phi chức năng (Non-functional requirements) trong kỹ thuậ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ách thức phần mềm thực hiện các chức năng đó, ví dụ như hiệu suất, bảo mật, khả năng sử dụng.
C. Dữ liệu mà phần mềm sẽ xử lý và lưu trữ.
D. Giao diện người dùng và trải nghiệm người dùng.
8. Phương pháp phát triển hướng kiểm thử (Test-Driven Development - TDD) có quy trình như thế nào?
A. Viết code trước, sau đó viết test case.
B. Viết test case trước, sau đó viết code để pass test case.
C. Viết code và test case song song.
D. Kiểm thử phần mềm sau khi đã hoàn thành code.
9. Phương pháp kiểm thử hồi quy (Regression testing) được sử dụng khi nào?
A. Khi phát triển một phần mềm hoàn toàn mới.
B. Khi thực hiện thay đổi hoặc sửa lỗi trong phần mềm đã có.
C. Khi kiểm thử hiệu suất của phần mềm.
D. Khi kiểm thử bảo mật của phần mềm.
10. Công cụ quản lý phiên bản (Version control system) như Git giúp ích gì trong quá trình phát triển phần mềm?
A. Tự động viết code cho lập trình viên.
B. Quản lý và theo dõi các thay đổi của mã nguồn, giúp cộng tác hiệu quả và dễ dàng quay lại các phiên bản trước.
C. Tăng tốc độ biên dịch và chạy chương trình.
D. Tự động kiểm thử phần mềm.
11. Nguyên tắc SOLID trong thiết kế hướng đối tượng giúp đạt được mục tiêu nào?
A. Tăng tốc độ phát triển phần mềm.
B. Giảm chi phí kiểm thử phần mềm.
C. Thiết kế phần mềm dễ bảo trì, mở rộng và tái sử dụng hơn.
D. Tăng tính bảo mật của phần mềm.
12. Trong mô hình DevOps, 'Triển khai liên tục' (Continuous Deployment - CD) mở rộng khái niệm 'Tích hợp liên tục' (CI) như thế nào?
A. CD tập trung vào kiểm thử phần mềm liên tục, còn CI tập trung vào tích hợp code.
B. CD tự động triển khai code đã qua kiểm thử lên môi trường production, còn CI chỉ dừng lại ở việc tích hợp và kiểm thử.
C. CD bao gồm cả CI, nhưng tập trung vào việc thu thập phản hồi từ người dùng.
D. CD và CI là hai khái niệm hoàn toàn độc lập.
13. Trong kiểm thử hiệu suất (Performance testing), 'khả năng mở rộng' (Scalability) của hệ thống được đánh giá như thế nào?
A. Thời gian phản hồi của hệ thống dưới tải bình thường.
B. Khả năng của hệ thống duy trì hiệu suất chấp nhận được khi số lượng người dùng hoặc khối lượng công việc tăng lên.
C. Số lượng lỗi phát sinh trong quá trình kiểm thử.
D. Mức độ sử dụng tài nguyên hệ thống (CPU, bộ nhớ) dưới tải bình thường.
14. Loại bảo trì phần mềm nào tập trung vào việc sửa chữa các lỗi phát sinh sau khi phần mềm đã được triển khai?
A. Bảo trì thích ứng (Adaptive maintenance).
B. Bảo trì hoàn thiện (Perfective maintenance).
C. Bảo trì phòng ngừa (Preventive maintenance).
D. Bảo trì sửa lỗi (Corrective maintenance).
15. Phương pháp kiểm thử 'Alpha testing' thường được thực hiện bởi ai?
A. Người dùng cuối.
B. Nhóm kiểm thử độc lập.
C. Nhóm phát triển nội bộ.
D. Khách hàng.
16. Trong thiết kế hướng đối tượng (Object-Oriented Design), khái niệm 'tính đóng gói' (Encapsulation) nhằm mục đích gì?
A. Cho phép một đối tượng kế thừa các thuộc tính và phương thức từ đối tượng khác.
B. Ẩn giấu thông tin chi tiết bên trong đối tượng và chỉ cho phép truy cập thông qua giao diện công khai.
C. Tạo ra các đối tượng có thể thay đổi hành vi của mình trong quá trình chạy.
D. Phân loại các đối tượng vào các lớp và phân cấp khác nhau.
17. Đâu là một ưu điểm của việc sử dụng cơ sở dữ liệu NoSQL so với cơ sở dữ liệu quan hệ (Relational database) trong một số trường hợp?
A. Đảm bảo tính toàn vẹn dữ liệu cao hơn.
B. Hỗ trợ tốt hơn cho các giao dịch phức tạp.
C. Khả năng mở rộng ngang (horizontal scaling) dễ dàng hơn và hiệu suất tốt hơn với dữ liệu phi cấu trúc hoặc bán cấu trúc.
D. Dễ dàng hơn trong việc thực hiện các truy vấn phức tạp.
18. Trong quy trình phát triển phần mềm, 'phân tích rủi ro' (Risk analysis) được thực hiện để làm gì?
A. Đánh giá hiệu suất của phần mềm.
B. Xác định, đánh giá và lập kế hoạch ứng phó với các rủi ro tiềm ẩn có thể ảnh hưởng đến dự án.
C. Kiểm tra tính bảo mật của phần mềm.
D. Xác định yêu cầu của người dùng.
19. Trong 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 giả mạo yêu cầu (Cross-Site Request Forgery).
C. 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.
D. Tấn công bằng cách khai thác lỗ hổng tràn bộ đệm.
20. Đâu là một thách thức chính khi phát triển phần mềm theo mô hình Agile cho các dự án lớn và phức tạp?
A. Khó khăn trong việc lập kế hoạch chi tiết từ đầu dự án.
B. Yêu cầu tài liệu quá nhiều.
C. Khó khăn trong việc duy trì sự nhất quán và tích hợp giữa các nhóm phát triển lớn.
D. Thời gian phát triển dự án kéo dài hơn.
21. Trong kiểm thử phần mềm, kiểm thử hộp đen (Black-box testing) tập trung vào điều gì?
A. Cấu trúc code bên trong của phần mềm.
B. Yêu cầu chức năng và hành vi bên ngoài của phần mềm.
C. Hiệu suất và khả năng chịu tải của phần mềm.
D. Giao diện người dùng và trải nghiệm người dùng.
22. 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ế hệ thống.
C. Giai đoạn lập trình (coding).
D. Giai đoạn triển khai và bảo trì.
23. Khái niệm 'nợ kỹ thuật' (Technical debt) trong phát triển phần mềm đề cập đến điều gì?
A. Chi phí phát sinh do sử dụng công nghệ cũ và lạc hậu.
B. Hậu quả của việc đưa ra các quyết định thiết kế hoặc lập trình không tối ưu trong ngắn hạn để đạt được tiến độ nhanh hơn.
C. Số lượng lỗi còn tồn tại trong phần mềm sau khi đã kiểm thử.
D. Chi phí bảo trì phần mềm trong tương lai.
24. Công cụ phân tích tĩnh mã nguồn (Static code analysis tools) giúp phát hiện loại lỗi nào?
A. Lỗi logic trong chương trình chỉ xuất hiện khi chạy.
B. Lỗi cú pháp và các vấn đề tiềm ẩn trong code mà không cần thực thi chương trình.
C. Lỗi hiệu suất và khả năng chịu tải của hệ thống.
D. Lỗi bảo mật do tấn công từ bên ngoài.
25. Trong mô hình Scrum, 'Sprint' là gì?
A. Một cuộc họp hàng ngày của nhóm phát triển.
B. Một khoảng thời gian cố định (thường từ 1 đến 4 tuần) trong đó nhóm phát triển hoàn thành một lượng công việc nhất định.
C. Danh sách tất cả các yêu cầu và công việc cần thực hiện trong dự án.
D. Người chịu trách nhiệm quản lý và ưu tiên các yêu cầu của sản phẩm.
26. Trong UML (Unified Modeling Language), sơ đồ lớp (Class diagram) được sử dụng để mô hình hóa điều gì?
A. Quy trình nghiệp vụ.
B. Cấu trúc tĩnh của hệ thống, bao gồm các lớp, thuộc tính và mối quan hệ giữa chúng.
C. Luồng dữ liệu trong hệ thống.
D. Hành vi động của hệ thống theo thời gian.
27. Đâu là một ví dụ về công cụ quản lý dự án phần mềm phổ biến?
A. Microsoft Word.
B. Microsoft Excel.
C. Jira.
D. PowerPoint.
28. Đâu là lợi ích chính của việc sử dụng kiến trúc Microservices?
A. Giảm độ phức tạp của code.
B. Tăng tính bảo mật của hệ thống.
C. Tăng khả năng mở rộng, linh hoạt và độc lập trong phát triển và triển khai các thành phần của ứng dụng.
D. Đơn giản hóa việc quản lý cơ sở dữ liệu.
29. Khái niệm 'Code smell' (mùi code xấu) trong lập trình ám chỉ điều gì?
A. Code có nhiều lỗi cú pháp.
B. Code hoạt động chậm và kém hiệu quả.
C. Code có cấu trúc kém, khó hiểu, khó bảo trì, dù có thể vẫn hoạt động đúng.
D. Code không tuân thủ coding convention.
30. Mục đích chính của việc lập kế hoạch kiểm thử (Test plan) là gì?
A. Viết các test case chi tiết.
B. Xác định phạm vi, mục tiêu, nguồn lực và lịch trình cho hoạt động kiểm thử.
C. Thực hiện kiểm thử phần mềm.
D. Báo cáo kết quả kiểm thử.