1. Trong kiểm thử phần mềm, 'Performance Testing' (Kiểm thử hiệu suất) nhằm mục đích gì?
A. Kiểm tra chức năng của phần mềm.
B. Đảm bảo phần mềm dễ sử dụng.
C. Đánh giá tốc độ, khả năng mở rộng, độ ổn định và khả năng đáp ứng của phần mềm dưới các điều kiện tải khác nhau.
D. Kiểm tra tính bảo mật của phần mềm.
2. Phương pháp 'Phát triển hướng kiểm thử' (Test-Driven Development - TDD) hoạt động như thế nào?
A. Viết mã nguồn trước, sau đó viết kiểm thử.
B. Viết kiểm thử trước khi viết mã nguồn, sau đó viết mã nguồn để vượt qua các kiểm thử này.
C. Viết kiểm thử và mã nguồn song song cùng một lúc.
D. Không cần viết kiểm thử, chỉ tập trung vào viết mã nguồn.
3. Trong mô hình Scrum, 'Sprint' là gì?
A. Một cuộc họp hàng ngày để nhóm phát triển cập nhật tiến độ.
B. Một giai đoạn phát triển ngắn, lặp đi lặp lại (thường từ 1 đến 4 tuần) để tạo ra một phiên bản phần mềm có thể sử dụng được.
C. Danh sách các công việc cần thực hiện trong dự án.
D. Vai trò của người quản lý dự án trong nhóm Scrum.
4. Nguyên tắc SOLID trong thiết kế hướng đối tượng (Object-Oriented Design) là tập hợp các nguyên tắc nhằm mục đích gì?
A. Tăng tốc độ phát triển phần mềm.
B. Nâng cao hiệu suất của phần mềm khi chạy.
C. Giúp thiết kế phần mềm dễ bảo trì, mở rộng và tái sử dụng.
D. Giảm thiểu chi phí kiểm thử phần mềm.
5. Kiểm thử hồi quy (Regression Testing) được thực hiện khi nào?
A. Sau khi phát hiện lỗi trong quá trình kiểm thử đơn vị (Unit testing).
B. Trước khi triển khai phần mềm cho người dùng cuối.
C. Sau khi có thay đổi mã nguồn (ví dụ: sửa lỗi, thêm chức năng mới) để đảm bảo rằng các thay đổi này không gây ra lỗi mới hoặc làm hỏng các chức năng đã hoạt động trước đó.
D. Trong giai đoạn phân tích yêu cầu để đảm bảo yêu cầu không mâu thuẫn.
6. Đâu là một ví dụ về 'kiến trúc phần mềm' (Software Architecture) phổ biến?
A. Mô hình thác nước (Waterfall).
B. Kiến trúc hướng dịch vụ (Service-Oriented Architecture - SOA).
C. Kiểm thử hộp đen (Black-box testing).
D. Tái cấu trúc mã nguồn (Refactoring).
7. Phương pháp 'Đánh giá mã nguồn' (Code Review) mang lại lợi ích nào?
A. Tăng tốc độ viết mã.
B. Giảm số lượng dòng mã.
C. Phát hiện lỗi sớm, cải thiện chất lượng mã nguồn và chia sẻ kiến thức giữa các thành viên trong nhóm.
D. Tự động sửa lỗi cú pháp.
8. Khái niệm 'Design Pattern' (Mẫu thiết kế) trong kỹ nghệ phần mềm là gì?
A. Một sơ đồ cơ sở dữ liệu tối ưu.
B. Một đoạn mã mẫu có thể sao chép và sử dụng lại.
C. Một giải pháp đã được chứng minh cho các vấn đề thiết kế phần mềm thường gặp, trong một ngữ cảnh cụ thể.
D. Một tiêu chuẩn mã hóa bắt buộc phải tuân theo.
9. 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ó rủi ro cao và cần thử nghiệm nhiều giải pháp.
C. Dự án có yêu cầu rõ ràng, ổn định và ít thay đổi trong suốt quá trình phát triển.
D. Dự án cần triển khai nhanh chóng và linh hoạt để đáp ứng thị trường.
10. Khái niệm 'Technical Debt' (Nợ kỹ thuật) có thể dẫn đến hậu quả tiêu cực nào trong dài hạn?
A. Tăng tốc độ phát triển phần mềm trong tương lai.
B. Giảm chi phí bảo trì phần mềm.
C. Khó khăn hơn trong việc bảo trì, mở rộng và thêm chức năng mới, tăng nguy cơ phát sinh lỗi và giảm chất lượng phần mềm.
D. Đơn giản hóa cấu trúc mã nguồn.
11. Mục tiêu của 'Kiểm thử tích hợp' (Integration Testing) là gì?
A. Kiểm tra từng module riêng lẻ.
B. Đảm bảo phần mềm đáp ứng yêu cầu của người dùng.
C. Kiểm tra sự tương tác và luồng dữ liệu giữa các module khác nhau khi chúng được kết hợp lại với nhau.
D. Đánh giá hiệu suất tổng thể của hệ thống.
12. Đâu là một ví dụ về 'yêu cầu phi chức năng' (Non-functional requirement) của phần mềm?
A. Hệ thống phải cho phép người dùng đăng nhập bằng tên người dùng và mật khẩu.
B. Hệ thống phải xử lý ít nhất 1000 giao dịch mỗi giây.
C. Hệ thống phải tính toán và hiển thị tổng doanh thu hàng ngày.
D. Hệ thống phải gửi email xác nhận đơn hàng cho khách hàng.
13. Đâu là một ví dụ về công cụ 'Quản lý vòng đời ứng dụng' (Application Lifecycle Management - ALM)?
A. Microsoft Word.
B. Adobe Photoshop.
C. Jira.
D. Google Chrome.
14. Đâ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?
A. Tăng tốc độ biên dịch mã nguồn.
B. Giảm thiểu nguy cơ mất dữ liệu và dễ dàng theo dõi, quản lý thay đổi mã nguồn.
C. Tự động phát hiện và sửa lỗi cú pháp trong mã nguồn.
D. Cải thiện hiệu suất của ứng dụng sau khi triển khai.
15. Đâu là mục đích chính của giai đoạn 'Phân tích yêu cầu' (Requirements Analysis) trong quy trình phát triển phần mềm?
A. Viết mã nguồn chương trình.
B. Thiết kế giao diện người dùng.
C. Thu thập, làm rõ và ghi lại chi tiết các yêu cầu của người dùng và hệ thống.
D. Kiểm thử và sửa lỗi phần mềm.
16. 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 và tài liệu chi tiết.
B. Ưu tiên quy trình và công cụ hơn con người và tương tác.
C. Linh hoạt, thích ứng với thay đổi và hợp tác chặt chẽ với khách hàng.
D. Tập trung vào việc hoàn thành tất cả các giai đoạn phát triển trước khi có sản phẩm.
17. Phương pháp 'Ước tính theo điểm chức năng' (Function Point Analysis) được sử dụng để làm gì?
A. Đo lường hiệu suất của phần mềm.
B. Ước tính kích thước và độ phức tạp chức năng của phần mềm, từ đó ước tính nỗ lực, thời gian và chi phí phát triển.
C. Đánh giá chất lượng mã nguồn.
D. Lập kế hoạch kiểm thử phần mềm.
18. Trong kiểm thử phần mềm, 'Unit test' có mục đích chính là gì?
A. Kiểm tra sự tương tác giữa các module khác nhau của hệ thống.
B. Đảm bảo phần mềm hoạt động đúng theo yêu cầu của người dùng cuối.
C. Kiểm tra từng đơn vị (unit) nhỏ nhất của mã nguồn (ví dụ: hàm, lớp) để đảm bảo chúng hoạt động đúng như mong đợi.
D. Đánh giá hiệu suất và khả năng chịu tải của toàn bộ hệ thống.
19. Đâu là một ví dụ về 'mô hình quy trình phát triển phần mềm lặp lại và gia tăng' (Iterative and Incremental Development)?
A. Mô hình thác nước (Waterfall).
B. Mô hình chữ V (V-Model).
C. Mô hình Scrum.
D. Mô hình Big Bang.
20. Khái niệm 'Cohesion' (Độ gắn kết) trong thiết kế phần mềm đề cập đến điều gì?
A. Mức độ phụ thuộc giữa các module.
B. Mức độ liên quan và tập trung của các chức năng bên trong một module.
C. Số lượng module trong hệ thống.
D. Mức độ phức tạp của giao diện người dùng.
21. 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í bảo trì phần mềm sau khi triển khai.
B. Khối lượng công việc kiểm thử phần mềm còn tồn đọng.
C. Hậu quả của việc đưa ra các quyết định thiết kế hoặc mã hóa không tối ưu trong ngắn hạn để đạt được tiến độ nhanh hơn.
D. Tổng số lỗi và bug còn tồn tại trong phần mềm.
22. Trong mô hình Scrum, 'Product Backlog' là gì?
A. Bảng theo dõi tiến độ công việc hàng ngày.
B. Danh sách ưu tiên các tính năng, cải tiến, sửa lỗi và các yêu cầu khác có thể có trong sản phẩm.
C. Thời gian cố định cho mỗi Sprint.
D. Nhóm phát triển chịu trách nhiệm thực hiện công việc.
23. Khái niệm 'Tái sử dụng mã nguồn' (Code Reusability) mang lại lợi ích gì?
A. Tăng độ phức tạp của mã nguồn.
B. Giảm thời gian và chi phí phát triển, tăng tính nhất quán và độ tin cậy của phần mềm.
C. Khuyến khích việc viết mã trùng lặp.
D. Làm cho mã nguồn khó bảo trì hơn.
24. 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 mã nguồn và logic bên trong của phần mềm.
B. Giao diện người dùng và chức năng bên ngoài của phần mềm.
C. Hiệu suất và khả năng mở rộng của phần mềm.
D. Tính bảo mật và an toàn của phần mềm.
25. 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 phát triển phần mềm.
B. Nhóm kiểm thử chuyên nghiệp (QA team).
C. Người dùng cuối hoặc khách hàng.
D. Quản lý dự án.
26. Mục tiêu chính của Kỹ nghệ Phần mềm là gì?
A. Giảm thiểu chi phí phát triển phần mềm.
B. Tối ưu hóa tốc độ phát triển phần mềm.
C. Sản xuất phần mềm chất lượng cao, đúng thời hạn và trong ngân sách.
D. Tạo ra phần mềm với giao diện người dùng đẹp mắt nhất.
27. Khái niệm 'Coupling' (Độ liên kết) trong thiết kế phần mềm đề cập đến điều gì?
A. Mức độ tương đồng về chức năng giữa các module.
B. Mức độ phụ thuộc lẫn nhau giữa các module.
C. Số lượng dòng mã trong một module.
D. Thời gian thực thi của một module.
28. Đâu là một thách thức chính khi phát triển phần mềm cho hệ thống phân tán (Distributed System)?
A. Sự phức tạp trong quản lý bộ nhớ.
B. Sự phức tạp trong việc xử lý đồng thời, đảm bảo tính nhất quán dữ liệu và xử lý lỗi mạng.
C. Khó khăn trong việc thiết kế giao diện người dùng.
D. Giới hạn về ngôn ngữ lập trình có thể sử dụng.
29. Trong ngữ cảnh 'phát triển phần mềm hướng dịch vụ' (Service-Oriented Development), 'API' (Application Programming Interface) đóng vai trò gì?
A. Giao diện người dùng để người dùng tương tác với phần mềm.
B. Một cơ sở dữ liệu để lưu trữ dữ liệu của ứng dụng.
C. Một tập hợp các định nghĩa và giao thức cho phép các thành phần phần mềm khác nhau giao tiếp và trao đổi dữ liệu với nhau.
D. Công cụ để kiểm thử hiệu suất của ứng dụng.
30. Phương pháp 'Tái cấu trúc mã nguồn' (Refactoring) được thực hiện khi nào?
A. Khi phát hiện lỗi trong quá trình kiểm thử.
B. Khi thêm chức năng mới vào phần mềm.
C. Khi mã nguồn hoạt động đúng chức năng nhưng cấu trúc bên trong kém, khó hiểu hoặc khó bảo trì.
D. Khi cần tối ưu hóa hiệu suất của phần mềm.