1. Trong kiểm thử phần mềm, `black box testing` (kiểm thử hộp đen) tập trung vào điều gì?
A. Kiểm tra cấu trúc code bên trong của phần mềm.
B. Kiểm tra các đường dẫn thực thi của chương trình.
C. Kiểm tra chức năng của phần mềm dựa trên đặc tả yêu cầu mà không cần biết cấu trúc bên trong.
D. Kiểm tra hiệu suất của phần mềm dưới tải cao.
2. Phương pháp luận Scrum thuộc loại mô hình phát triển phần mềm nào?
A. Waterfall.
B. Spiral.
C. Agile.
D. Big Bang.
3. Trong phát triển phần mềm, SOLID là viết tắt của những nguyên tắc thiết kế hướng đối tượng nào?
A. Simple, Organized, Logical, Intelligent, Detailed.
B. Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.
C. Safe, Optimized, Lightweight, Integrated, Documented.
D. Structured, Object-oriented, Layered, Interactive, Dynamic.
4. Đâu là mục đích của việc sử dụng Design Patterns trong phát triển phần mềm?
A. Để tăng độ phức tạp của code.
B. Để giải quyết các vấn đề thiết kế phần mềm thường gặp một cách hiệu quả và tái sử dụng.
C. Để giảm số lượng dòng code.
D. Để làm cho code khó đọc hơn.
5. 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 code.
B. Thích ứng phần mềm với môi trường mới.
C. Cải thiện hiệu năng của phần mềm.
D. Thêm chức năng mới hoặc cải thiện các chức năng hiện có để đáp ứng yêu cầu mới.
6. Đâu là một lợi ích của việc sử dụng containerization (ví dụ: Docker) trong phát triển phần mềm?
A. Giảm độ phức tạp của code.
B. Đảm bảo rằng ứng dụng chạy nhất quán trên các môi trường khác nhau.
C. Tăng chi phí phát triển.
D. Giảm hiệu suất của ứng dụng.
7. Đâu là một phương pháp để ước lượng thời gian và chi phí phát triển phần mềm?
A. Sử dụng một đồng xu để tung và quyết định.
B. COCOMO (Constructive Cost Model).
C. Đoán ngẫu nhiên.
D. Hỏi ý kiến một người không liên quan đến dự án.
8. Đâu là một lợi ích của việc sử dụng microservices architecture trong phát triển phần mềm?
A. Giảm độ phức tạp của hệ thống.
B. Tăng tính độc lập và khả năng mở rộng của các thành phần hệ thống.
C. Giảm chi phí phát triển.
D. Tăng thời gian phát triển.
9. Đâu là 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 trong phát triển phần mềm?
A. Tự động tạo tài liệu kỹ thuật cho dự án.
B. Cho phép nhiều nhà phát triển làm việc đồng thời trên cùng một codebase mà không gây xung đột và dễ dàng theo dõi thay đổi.
C. Tăng tốc độ biên dịch của chương trình.
D. Cải thiện giao diện người dùng của phần mềm.
10. Trong lập trình hướng đối tượng (OOP), `inheritance` (kế thừa) cho phép điều gì?
A. Ẩn thông tin bên trong một đối tượng để bảo vệ dữ liệu.
B. Tạo ra các đối tượng có cùng kiểu dữ liệu.
C. Một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác, tái sử dụng code và xây dựng hệ thống phân cấp.
D. Gộp nhiều đối tượng thành một đối tượng duy nhất.
11. Đâu là một phương pháp để quản lý yêu cầu phần mềm?
A. Viết tất cả các yêu cầu vào một email duy nhất.
B. Sử dụng một bảng tính đơn giản để theo dõi yêu cầu.
C. Sử dụng một hệ thống quản lý yêu cầu chuyên dụng như Jira hoặc Confluence.
D. Không ghi lại bất kỳ yêu cầu nào.
12. Đâu là một phương pháp để đảm bảo chất lượng code trong một dự án phát triển phần mềm?
A. Viết code một cách nhanh chóng và không kiểm tra.
B. Thực hiện code review (đánh giá code) bởi các thành viên khác trong nhóm.
C. Chỉ kiểm tra code sau khi phát hành.
D. Không viết tài liệu cho code.
13. Đâu là một công cụ quản lý dự án phần mềm phổ biến?
A. Microsoft Word.
B. Microsoft Excel.
C. Jira.
D. Adobe Photoshop.
14. 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. Chỉ khi phát triển một phần mềm mới từ đầu.
B. Sau khi sửa lỗi hoặc thêm chức năng mới để đảm bảo rằng các chức năng cũ vẫn hoạt động đúng.
C. Trước khi viết code.
D. Chỉ khi hiệu suất của phần mềm giảm.
15. 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.
16. Đâu là một phương pháp kiểm thử hiệu năng phần mềm?
A. Kiểm thử đơn vị (Unit testing).
B. Kiểm thử tích hợp (Integration testing).
C. Kiểm thử tải (Load testing).
D. Kiểm thử hộp đen (Black box testing).
17. Đâu là một kỹ thuật để giảm thiểu rủi ro trong phát triển phần mềm?
A. Bỏ qua tất cả các rủi ro.
B. Lập kế hoạch quản lý rủi ro và thực hiện các biện pháp phòng ngừa.
C. Chấp nhận mọi rủi ro mà không có kế hoạch.
D. Chuyển tất cả rủi ro cho khách hàng.
18. Đâu là một loại tấn công bảo mật mà một ứng dụng web có thể dễ bị tổn thương?
A. Tấn công bằng virus.
B. SQL injection.
C. Tấn công vật lý vào máy chủ.
D. Tấn công bằng tia laser.
19. Đâu là mục tiêu chính của việc tái cấu trúc code (code refactoring)?
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à khả năng đọc của code mà không thay đổi chức năng bên ngoài.
D. Tối ưu hóa hiệu suất của phần mềm.
20. Đâu là một mục tiêu của việc lập trình theo cặp (pair programming)?
A. Giảm số lượng lập trình viên cần thiết cho dự án.
B. Tăng chất lượng code thông qua việc xem xét code liên tục và chia sẻ kiến thức.
C. Tăng tốc độ phát triển code gấp đôi.
D. Giảm chi phí đào tạo lập trình viên.
21. Đâu là mục tiêu chính của việc sử dụng mô hình Agile trong phát triển phần mềm?
A. Giảm thiểu chi phí phát triển bằng cách sử dụng lại code.
B. Tăng cường sự tương tác và phản hồi liên tục từ khách hàng để đáp ứng yêu cầu thay đổi một cách linh hoạt.
C. Tối ưu hóa hiệu suất của phần mềm bằng cách sử dụng các thuật toán phức tạp.
D. Đảm bảo rằng tất cả các yêu cầu được xác định và cố định trước khi bắt đầu phát triển.
22. Trong ngữ cảnh phát triển phần mềm, CI/CD là viết tắt của cụm từ nào?
A. Creative Intelligence/Critical Design
B. Continuous Integration/Continuous Delivery (hoặc Continuous Deployment)
C. Centralized Infrastructure/Controlled Development
D. Complex Implementation/Complete Documentation
23. Đâu là một công cụ để tự động hóa quá trình xây dựng (build), kiểm thử và triển khai (deploy) phần mềm?
A. Microsoft Word.
B. Jenkins.
C. Adobe Photoshop.
D. Microsoft Excel.
24. Trong phát triển phần mềm, `technical debt` (nợ kỹ thuật) là gì?
A. Số tiền mà công ty nợ các nhà phát triển.
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, dẫn đến khó khăn trong bảo trì và phát triển trong tương lai.
C. Số lượng lỗi còn tồn tại trong phần mềm.
D. Số lượng tài liệu kỹ thuật còn thiếu.
25. Đâu là một mục tiêu của việc sử dụng kiến trúc hướng dịch vụ (Service-Oriented Architecture - SOA)?
A. Tạo ra các ứng dụng monolithic lớn.
B. Cho phép các ứng dụng khác nhau giao tiếp và trao đổi dữ liệu với nhau thông qua các dịch vụ.
C. Giảm tính tái sử dụng của code.
D. Tăng độ phức tạp của hệ thống.
26. Đâu là vai trò chính của một kiến trúc sư phần mềm (software architect)?
A. Viết code cho tất cả các module của phần mềm.
B. Thiết kế cấu trúc tổng thể của hệ thống, đảm bảo các thành phần hoạt động hài hòa và đáp ứng yêu cầu hiệu năng, bảo mật.
C. Quản lý dự án và phân công công việc cho các thành viên trong nhóm.
D. Kiểm tra và sửa lỗi code.
27. Đâu là một phương pháp để thu thập yêu cầu từ khách hàng hoặc người dùng cuối?
A. Chỉ đoán yêu cầu của họ.
B. Thực hiện phỏng vấn, khảo sát, hoặc thu thập phản hồi thông qua các buổi họp.
C. Bỏ qua ý kiến của họ.
D. Chỉ đọc tài liệu yêu cầu mà không tương tác với họ.
28. Đâu là một loại biểu đồ thường được sử dụng trong UML (Unified Modeling Language) để mô tả tương tác giữa các đối tượng?
A. Biểu đồ Gantt.
B. Biểu đồ Use Case.
C. Biểu đồ tuần tự (Sequence Diagram).
D. Biểu đồ luồng dữ liệu (Data Flow Diagram).
29. Đâu là một công cụ để phân tích code tĩnh (static code analysis)?
A. JUnit.
B. SonarQube.
C. Selenium.
D. Jenkins.
30. Đâu là đặc điểm quan trọng nhất của một use case tốt trong phân tích yêu cầu phần mềm?
A. Mô tả chi tiết cách thức các class tương tác với nhau.
B. Mô tả một mục tiêu cụ thể mà người dùng muốn đạt được khi sử dụng hệ thống.
C. Mô tả cấu trúc dữ liệu của hệ thống.
D. Mô tả giao diện người dùng của hệ thống một cách chi tiết.