Soạn câu hỏi về nhập môn công nghệ phần mềm
PHẦN 1: GIỚI THIỆU CNPM, QUY TRÌNH, PHÂN TÍCH ĐẶC TẢ YÊU CẦU
1.
Quy trình phát triển phần mềm những hoạt động chính nào? Hãy trình
bày những hoạt động này
Các quy trình phát triển phần mềm thường bao gồm 4 hoạt động quan trọng sau:
1- Đặc tả yêu cầu phần mềm (Software specification, requirements engineering): Định nghĩa
các chức năng chính của phần mềm và các ràng buộc xung quanh nó.
2- Phát triển phần mềm (Software development, còn gọi design and implementation): Phần
mềm được thiết kế và xây dựng.
3- Phát triển phần mềm (Software development, còn gọi design and implementation): Phần
mềm được thiết kế và xây dựng.
4- Tiến hóa phần mềm (Software evolution, hoặc software maintenance): Phần mềm được cập
nhật/chỉnh sửa đáp ứng theo những thay đổi yêu cầu của khách hàng.
2.
hình phát triển phần mềm Thác nước trải qua những giai đoạn nào?
Hãy trình bày về những giai đoạn này.
hình phát triển phn mềm Thác nước trải qua 5 giai đoạn gồm :
+ Định nghĩa yêu cầu (Requirements Definition): là quá trìnhc định các yêu cầu của người
dùng đối với hệ thống phần mềm. Các yêu cầu này bao gồm các chức năng, tính năng, hiệu năng,
khả năng sử dụng, và các yêu cầu khác.
+ Thiết kế hệ thống (System and Software Desgin): quá trình chuyển đổi các yêu cầu của
người dùng thành một mô hình hệ thống đáp ứng các yêu cầu đó
+ Hiện thực & kiểm thử đơn vị (Implementaion and Unit Testing): xây dựng kiểm tra từng
thành phần của hệ thống phần mềm để đảm bảo các thành phần này hoạt động chính xác và đáp
ứng các yêu cầu đã được xác định.
+ Tích hợp & kiểm thử hệ thống (Integration and System Testing): là tích hợp các thành phần
của hệ thống phần mềm đã được xây dựng kiểm tra thành một hệ thống hoàn chỉnh, đồng thời
kiểm tra hệ thống hoàn chỉnh này để đảm bảo hệ thống đáp ứng các yêu cầu đã được xác định.
+ Vận hành & bảo trì (Operation and Maintenance): đưa hệ thống phần mềm vào sử dụng
đảm bảo hệ thống hoạt động ổn định và đáp ứng các yêu cầu của người dùng.
3.
Trình bày ý tưởng chung của hình phát triển phần mềm Tiến hóa
(Evolutionary development).
Các hình phát triển phần mềm Tiếna dựa trên ý tưởng chung:
Phát triển một phiên bản đầu tiên (initial version)
Lấy phản hồi từ người dùng
Nâng cấp (tiến hóa) phần mềm thông qua các phiên bản cho đến khi hệ thống được chấp thuận.
4.
hình phát triển phần mềm Dựa trên thành phần (Component-based
software engineering) trải qua những giai đoạn nào? Hãy trình bày về
những giai đoạn này ?
hình phát triển phần mềm Dựa trên thành phần (Component-based software engineering) trải
qua 6 giai đoạn gm:
+ Định nghĩa yêu cầu (Requirements Definition): là quá trình xác định các yêu cầu của người
dùng đối với hệ thống phần mềm. Các yêu cầu này bao gồm các chức năng, tính năng, hiệu năng,
khả năng sử dụng, và các yêu cầu khác.
+ Phân tích thành phần (component analysis):
* Với bản đặc tảu cầu, nhà phát triển sẽ tìm kiếm các thành phần sẵn phân tích xem
chúng có thể đáp ứng được thế nào trong việc xây dựng hệ thống mới.
* Thông thường, các thành phần tìm thấy sẽ không đáp ứng 100% yêu cầu.
+ Chỉnh sửau cầu (Requirement Modification):
* giai đoạn này, các yêu cầu sẽ được phân tích dựa trên thông tin về các thành phần
(component) đã tìm thấy.
* Các yêu cầu thể được chỉnh sửa lại cho phù hợp với các thành phần tìm thấy.
* Nếu việc chỉnh sửau cầu không thể thực hiện được, trở lại bước tìm kiếm các thành phần
tìm giải pháp khác
+ Thiết kế hệ thống với các thành phn tái sử dụng (System design with reuse): Thiết kế kiến
trúc, nền tảng (framework) cho hệ thống với các thành phần tái sử dụng.
+ Phát triển tích hợp (Development and Integration)
* Các thành phần tái sử dụng sẽ được tích hợp vào hệ thống mới.
* Phát triển các thành phần mi
5.
Khung quy trình phát triển phần mềm Scrum gồm những giai đoạn nào?
gồm những sự kiện nào? Hãy trình bày về các giai đoạn sự kiện này.?
^ Khung quy trình phát triển phần mềm Scrum gồm 3 giai đoạn
Giai đoạn 1: Lên kế hoạch bộ, xác định các mục tiêu của dự án thiết kế kiến trúc hệ thống.
Giai đoạn 2: Các vòng Sprint, mỗi Sprint sẽ tạo ra một phần tăng trưởng.
Giai đoạn 3: Đóng dự án, tổng hợp, hoàn tất các tài liệu dự án, rút bài học kinh nghiệm...
^ Khung quy trình phát triển phần mềm Scrum gồm 5 sự kiện
Sprint (một giai đoạn, 2-4 tuần)
Sprint planning (cuộc họp lên kế hoạch cho Sprint): Trong giai đoạn này, nhóm Scrum sẽc
định các mục tiêu của Sprint và lập kế hoạch cho các nhiệm vụ cần thực hiện đ đạt được các
mục tiêu đó.
Daily Scrum (họp hằng ngày, Stand-up meeting): Trong giai đoạn này, nhóm Scrum sẽ họp
hàng ngày để thảo luận về tiến độ của Sprint xác định các công việc cần thực hiện trong ngày
hôm sau.
Sprint Review (họp demo sản phẩm): Trong giai đoạn này, nhóm Scrum sẽ trình bày kết quả của
Sprint cho khách hàng và các bên liên quan.
Sprint Retrospective (họp rút kinh nghiệm) : Trong giai đoạn này, nhóm Scrum sẽ đánh giá quá
trình thực hiện Sprint và đưa ra các cải tiến cho các Sprint tiếp theo.
6.
Scrum master Product owner đóng vai trò như thế nào trong khung quy
trình phát triển phần mềm Scrum?
Trong khung quy trình phát triển phần mềm Scrum, Scrum Master Product Owner đóng vai trò
quan trọng trong việc đảm bảo thành công của dự án.
Scrum Master có vai trò:
m cho quy trình hoạt động trôi chảy.
Loại bỏ các rào cản ảnh hưởng đến hiệu suất làm vic.
Tổ chức tạo thuận lợi cho các cuộc họp.
Product Owners:
Quản các yêu cầu (Product backlog).
Am hiểu về nghip vụ của dự án (ví dụ: Ngân hàng, Chứng khoán) không nhất thiết biết
về kỹ thuật.
Định nghĩa quyết định thứ tự ưu tiên các yêu cầu
Scrum Master Product Owner phối hợp chặt chẽ với nhau để đảm bảo rằng sản phẩm đáp
ứng nhu cầu của khách hàng và được phát triển theo cách hiệu quả.
7.
Yêu cầu phần mềm gì? Hãy phân biệt cho dụ thể hiện sự khác nhau
giữa Yêu cầu chức năng và Yêu cầu phi chức năng.
u cầu phần mềm (Software requirements) những tả về những cái hệ thống cần phải
làm:
Những chức năng (dịch vụ) mà hệ thống phải cung cấp,
Những ràng buộc đối với hệ thống.
u cầu phần mềm phản ánh nhu cầu (mong muốn) của khách hàng với hệ thống.
So sánh khác nhau giữa giữa Yêu cầu chức năng Yêu cầu phi chức ng.
*** Yêu cầu chức năng
+ u cầu chức năng (Functional requirements) những phát biểu về những chức năng (dịch vụ)
mà hệ thống cần phải cung cấp. Trong một số trường hợp, nó cũng phát biểu cụ thể những cái hệ
thống s không cung cấp
VD Người dùng thể tìm kiếmch theo ch, tiêu đề hoặc tên c giả. Hệ thống thể xuất
báo cáo thống kê số lượt mượnch trong một tháng
*** Yêu cầu phi chức năng
+ u cầu phi chức năng (non-functional requirements) những ng buộc (constraints) đối với
các chức năng (dịch vụ) mà hệ thống cung cấp. Yêu cầu phi chức năng thường áp dụng lên toàn
hệ thống hơn là lên từng chức năng riêng lẻ
VD Hệ thống phải dễ sử dụng
Hệ thống phải hot động tốt trên Firefox x.x, Chrome x.x
Hệ thống phải phn hồi trong vòng < 1s đối với tất cả các yêu cầu tìm kiếm sách
8.
Việc tả yêu cầu phần mềm thể chia thành hai mức độ: Yêu cầu người
dùng (User requirements) Yêu cầu hệ thống (System requirements). Hãy
phân biệt và cho ví dụ thể hiện sự khác nhau giữa hai mức độ này
* Yêu cầu người dùng (User requirements) : những phát biểu tổng quan, bằng ngôn ngữ tự
nhiên (hoặc được bổ sung bởi một số biểu đồ) về những dch vụ (chức năng) hệ thống cần
cung cấp cho người dung và các ràng buộc đi kèm
VD Hệ thống cho pp thêm một sản phm mới
* Yêu cầu hệ thống (System requirements) là: những tả chi tiết hơn về các chức năng ng
buộc mà hệ thống cần cung cấp. Nó mô tả chính xác những hạng mc nào cần phảim.
thểmột phần trong bản hợp đồng giữa khách hàng nhà phát triển.
VD Hệ thống cho phép thêm sản phẩm mới gồm các trường thông tin: tên sản phẩm, giá, kích
thước...
Hệ thống tự động tạo sản phm theo danh mục sản phẩm
9.
Quy trình kỹ nghệ yêu cầu (Requirements engineering process) bao gồm
những hoạt động chính nào? Hãy trình bày về những hoạt động này.
Quy trình kỹ nghệ yêu cầu (Requirements engineering process) gồm 3 hoạt động chính
+ Nhiệm v 1: Thu thập & Phân tích yêu cầu
Kết thúc giai đoạn này, người phân tích (analyst) sẽ bản hiểu được hệ thống cần phải như thế
nào:
những chức năng, các ràng buộc,c dữ liệu vào kết quả đầu ra của hệ thống.
Quá trình này thường liên quan tới rất nhiều người, gọi các bên liên quan (stackholder).
Khách hàng, người dùng cuối, người phân tích, người quản...
Trong quá trình phân tích yêu cầu, nhà phát triển (analyst) phía khách hàng, người dùng cuối
(clients, users) sẽ có một chuỗi các cuộc họp:
Các cuộc họp ban đầu, khách hàng người dùng cuối sẽ tả về công việc của họ,i
trường của họ, các quy trình...
Người phân tích sẽ lắng nghe, ghi chép, thu thập các thông tin, biểu mẫu...
Một khi đã hiểu được mức độ bản, người phân tích sẽ viết các tài liệuu cầu người dùng,
một số mô hình, một số phác thảo => để làm rõ nhng điểm chưa hiểu, hoặc để c nhn lại với
khách hàng xem có đúng ý như vậy không?
+ Nhiệm vụ 2: Đặc tả yêu cầu
Sau khi phân tích yêu cầu, người phân tích đã hiểu được về hệ thống cần phi làm.
Đặc tảu cầu việc ghi vào tài liu những tả về hệ thống (tài liệu đặc tảu cầu SRS
Software Requirement Specification)
Tại hoạt động này, nhng vấn đề như: giao diện, ngôn ng sử dụng, công cụ... cũng được bàn
tới
+ Nhiệm vụ 3: Thẩm định yêu cu
Thẩm địnhu cầu tập trung vào việc đảm bảo bản đặc tảu cầu trên đúng với những yêu
cầu /mong muốn /mục tiêu của khách hàng về hệ thống cần xây dựng.
Kết quả của hot động này một tài liệu đặc tả yêu cầu đã được thẩm định (validated SRS),
một bản đặc tả u cầu chất lượng tốt
10.
Trong quy trình kỹ nghệ yêu cầu thường gặp phải những vấn đề trở ngại
nào?
Các bên liên quan không thực sự biết mình muốn gì.
c bên liên quan diễn đạtu cầu theo thuật ngữ trong lĩnh vực của họ.
Giữa chính các bên liên quan cũng xung đột về mục tiêu, mong muốn về hệ thống cần xây
dựng.
Những yếu tố về tổ chức, pháp luật, đạo đức...ảnh hưởng đếnu cầu hệ thống.
Thay đổi yêu cầu
Môi trường kinh doanh thay đổi, nghiệp vụ thay đổi, công nghệ thay đổi...
Tại thời điểm thu thậpu cầu, khách hàng chưa nghĩ hết những điều họ muốn.
Phải sắp xếp các cuộc gặp để trao đổi => không phải lúc nào các bên cũng sẵn sàng.
PHẦN 2: THIẾT KẾ PHẦN MM, LẬP TRÌNH
11.
Kiến trúc phần mềm là gì? Kiến trúc phần mềm có ảnh hưởng gì đến chất
lượng của sản phẩm phần mềm? Nêu 3 thuộc tính chất lượng bị ảnh hưởng
bởi kiến trúc phần mềm và giải thích vì sao.
- Các hệ thống thường được hợp thành từ các hệ thống con
- Kiến trúc phần mềm xử các yêu cầu cả về chức năng cht lượng, cải thiện chất lượng
chức năng chung của hệ thống
- 3 thuộc tính chất lượng bị nh hưởng bởi kiến trúc phần mm:
+ nh đúng đắn: Kiến trúc phần mềm ảnh hưởng đến tính đúng đắn của sản phẩm phần
mềm thông qua việc xác định các thành phần mối quan hệ giữa chúng. Một kiến trúc phn
mềm tốt sẽ đảm bảo rằng các thành phần phần mềm được thiết kế và kết nối với nhau một
cách chính xác để đáp ứng các yêu cầu của người dùng.
VD: nếu một hệ thống phn mềm yêu cầu lưu trữ dữ liệu của người dùng, thì kiến trúc phần
mềm cần phải xác định các thành phần mối quan hệ cần thiết để lưu trữ dữ liệu một cách
an toàn và bảo mật.
+ nh khả dụng: Kiến trúc phần mềmnh hưởng đến tính khả dụng của sản phẩm phần
mềm thông qua việc xác định cách thức phân phối triển khai hệ thống. Một kiến trúc phn
mềm tốt sẽ đảm bảo rằng hệ thống có thể truy cập được và hot động ổn định trong các điều
kiện khác nhau.
VD: nếu một hệ thống phần mềm được yêu cầu hot động 24/7, thì kiến trúc phần mềm cần
phảic định cách thức phân phối hệ thống để đảm bảo rằng hệ thống thể được phục hồi
nhanh chóng trong trường hợp xảy ra sự cố.
+ Tính bảo trì : Kiến trúc phần mềm nh hưởng đến tính bảo trì được của sản phẩm phần
mềm thông qua việc xác định cách thức tổ chức các thành phần phần mềm. Một kiến trúc
phần mềm tốt sẽ đảm bảo rằng các thành phần phn mềm thể được sửa đổi nâng cấp
một cách dễ dàng mà không ảnh hưởng đến các thành phần khác của hệ thống.
VD: nếu một hệ thống phn mềm cần được nâng cấp thường xuyên, thì kiến trúc phần mềm
cần phải xác định cách thức tổ chc các thành phần phần mềm để đảm bảo rng các thành
phần thể được nâng cấp một cách độc lập không ảnh hưởng đến các thành phần khác.
12.
Vì sao nên sử dụng các kiểu kiến trúc có sẵn khi thiết kế phần mềm? Hãy
trình bày ý tưởng và giải thích các thành phần cũng như quan hệ giữa
chúng của một kiểu kiến trúc bạn biết. Lợi ích khi sử dụng kiểu kiến trúc
này là gì?
những kiểu kiến trúc sẵn đã được kiểm định, nghiên cứu, ứng dụngthành công qua các thế
hệ đi trước. Việc áp dụng các kiểu kiến trúc có sẵn giúp ta đánh giá được ưu nhược điểm của các
kiểu kiến trúc từ nhu cầu của mình lựa chọn phù hợp để quá trình sản xuất phần mềm được
tốt nhất.
VD: hình MVC
- Các thành phần của kiểu kiến trúc MVC bao gồm:
hình (Model): Tầng này chịu trách nhiệm lưu tr truy xuất dữ liệu. hình
thường được viết bằng ngôn nglập trình hướng đối tượng (OOP).
Quan t (View): Tầng này chịu trách nhiệm hiển thị dữ liệu cho người dùng. Quan sát
thường được viết bằng ngôn nglập trình hướng giao diện người dùng (GUI).
Điều khiển (Controller): Tầng này chịu trách nhiệm xử các yêu cầu của người dùng
truyền dữ liệu giữa hình quan sát. Điều khiển thường được viết bằng ngôn ng lập
trình hướng sự kiện (event-driven programming).
- Quan hệ giữa các thành phần của kiểu kiến trúc MVC được thể hiện như sau:
hình cung cấp dữ liệu cho quan sát.
Quan sát hiển thị d liệu cho người dùng.
Điều khiển xử các yêu cầu của người dùng truyền dữ liệu giữa hình quan sát.
- Lợi ích khi sử dụng kiểu kiến trúc MVC:
Dễ dàng quản lý và bảo trì: Kiểu kiến trúc MVC giúp dễ dàng quản lý và bảo trì phần mềm
bằng cách tách bit các tch nhiệm của phần mềm thành ba thành phần riêng biệt. Điều này
giúp các nhà phát triển dễ dàng hiểu được cách thức hoạt động của phần mềm dễng sửa
chữa các lỗi khi cần thiết.
Cải thiện kh năng mở rộng: Kiểu kiến trúc MVC giúp cải thiện khả năng mở rộng của phần
mềm bằng cách tách biệt các trách nhiệm của phần mềm thành ba thành phn riêng biệt. Điều
này giúp các nhà phát triển dễ dàng thêm các tính năng mới hoặc sửa đổi các tính năng hiện
mà không ảnh hưởng đến các phần khác của phần mềm.
Cải thiện bảo mt: Kiểu kiến trúc MVC giúp cải thiện bảo mật của phn mềm bằng cách tách
biệt các trách nhiệm của phần mềm thành ba thành phần riêng biệt. Điều này giúp các nhà
phát triển dễ dàng kiểm soát quyền truy cập vào các thành phần của phần mềm.
13.
Độ đo coupling phản ánh điều gì trong một thiết kế phần mềm? ảnh
hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo
coupling là thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc
phục là gì?
- Độ đo coupling phn ánh sự liên kết của các thành phn trong kiến trúc phần mềm.Coupling th
hiện sự phụ thuộc, sự kết nối giữa các module với nhau
- Độ coupling ảnh hưởng đến chất lượng phần mềm theo nhiều cách, bao gồm:
+ Kh năng bảo trì
+ Kh năng mở rộng
+ Kh năng kiểm tra
- Trong thiết kế, người ta hướng tới mục tiêu Low coupling
+ Low coupling (Loose coupling):
Hai modules được gọi low coupling nếu chúng ít ph thuộc vào nhau,sự thay đổi trong
module này ít làmnh hưởng hoặc khôngmnh hưởng đến module kia
- Giải pháp: Đảo ngược sự ph thuộc
14.
Độ đo cohesion phản ánh điều gì trong một thiết kế phần mềm? Nó ảnh
hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo
này thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc phục gì?
Cohesion thể hiện sức mạnh liên kết giữa các thành phần trong cùng một module
- Độ cohesion ảnh hưởng đến chất lượng phần mềm
+ Kh năng bảo trì
+ Kh năng hiu
+ Kh năng tái sử dụng
- Người thiết kế mong muốn độ đo cohesion cao trong một thiết kế phn mềm
+ High cohesion:
Một module được gọi high cohesion nếu các thành phn bên trongnó liên kết chặt chẽ
với nhau.– Nếu xét một module class, thì các thành phần bên trong nó sẽ làcác trường dữ
liệu, các phương thức.
- nhiều cách để chia hệ thống thành các module nh khác nhau.
Việc phân chia tốt sẽ làm cho hệ thống đạt được tính chất high cohesion trong mỗi module
và tính chất low coupling giữa các module
15.
Phân biệt giữa 2 cách tiếp cận trong thiết kế: hướng đối tượng và hướng
chức năng. Lấy ví dụ minh họa sự khác nhau thông qua việc thiết kế hệ
thống quản đào tạo theo tín chỉ của trường Đại học Quy Nhơn (sinh viên
có thể đề xuất hệ thống khác).
Phương pháp
Phân tích thiết kế hướng
chức năng
Phân tích thiết kế hướng
đối tượng
Cách tiếp cận
- một phương pháp thiết kế
phần mềm tập trung vào các
chức năng. Một chức năng là
một khối mã thể thực hiện
một c vụ cụ thể. Các chức
năng có thể được kết hợp với
nhau để tạo ra các chương
trình phức tạp.
-Cách thức thực hiện của
phương pháp hướng chức
năng phương pháp thiết kế
từ trên xuống (top-down).
- Phương pháp này tiến hành
phân bài toán thành các bài
toán nhỏ hơn, rồi tiếp tục
phân rã các bài toán con cho
đến khi nhn được các bài
toán có thể cài đặt được ngay
sử dụng các hàm của ngôn
ngữ lập trình hướng cấu trúc
-Hướng đối tượng tập trung
cả vào dữ liệu và hành động
của hệ thống, khác với hướng
cấu trúc chỉ tập trung o một
khía cạnh.
-Phương pháp này ánh xạ
thành phần của bài toán thành
các đối tượng trong thế giới
thực. Hệ thống được chia
thành các đối tượng độc lập,
kết hợp thông qua mối quan
hệ và tương c.
-Điều nàym nổi bật cách
tiếp cận hướng đối tượng so
với hướng cấu trúc. Thiết kế
từ dưới lên (bottom-up) bắt
đầu từ thuộc tính cụ thể của
đối tượng, sau đó trừu tượng
hóa thành các lớp đối tượng.
- Đối tượng
+ Sinh Viên: gồm thuộc tính như tê, tuổi, sinh viên,….và các hành động đăng học phẩn,
xem điểm,….
+ Khoa: gồm thuộc tính như tên khoa, khoa,….và các hành động như quản sinh viên, giảng
viên,…
+ Giảng viên: gồm tên, tuổi, giảng viên, các hành động như giảng dy học phn,
chm điểm,…
+ Học phần: gồm tên học phần, học phần,… các hành động như đăng học phần, kiểm
tra điểm,…
- Chức năng:
+ Đănghọc phần: cho pp sinh viên đăng
+ Quản sinh viên: cho phép khoa quản sinh vn
+ Quản giảng viên: cho phép khoa quản giảng viên
+ Giảng dạy học phần: cho phép giảng viên giảng dạy học phn
+ Chấm điểm: Cho pp giảng viên chấm điểm
- Cách thức hot động
Sinh viên thể đănghọc phần từ khoa.
Khoa thể quản sinh viên giảng vn.
Giảng viên thể giảng dạy học phần chm điểm.
Học phần thể được đăng học phần kiểm tra điểm.
16.
Nêu giải thích các hoạt động trong 2 quy trình viết nguồn: Quy trình
viết tăng dần (Incremental Coding Process) Quy trình viết ớng
kiểm thử (Test-Driven Development). So sánh sự giống khác nhau giữa 2
quy trình này.
Quy trình viết tăng dần
(Incremental Coding
Process)
Quy trình viết hướng kiểm
thử (Test-Driven Development).
Nêu và giải thích các hoạt
động trong 2 quy trình viết
mã ngun
Viết cho một số chức
năng ban đầu.
Viết test script để kiểm th
Chạy test script, sửa lỗi nếu
.
Tiếp tục bổ sung viết mã
cho các chức năng khác
Viết test scripts cho một số chc
năng ban đầu dựa trên các đặc t.
Viết để thỏa các test cases.
Chạy test script.
Nếu lỗi thì sửa, rồi chy lại
test scripts, lặp lại cho đến khi
thỏa.
Nếu không có lỗi, kiểm tra xem
cần cải tiến không, nếucó thì
cải tiến, rồi chạy lại test script lần
nữa.
Tiếp tục viết test scripts cho các
chức năng khác (nếu còn) dựa trên
các đặc tả
Điểm Mạnh
Dễ debug (dễ phát hiện lỗi):
vì lập trình viên viết vàchạy
test script sau mỗi lần viết
nguồn luôn đồng bộ với test
scripts.
cho chứcngmi, nên nếu
chy test script phát hiện lỗi,
thì lỗi nàythuộc về phần mã
mới bổ sung vào gần nht.
Việc viết test script có ý
nghĩa rất lớn khi mã lệnh
càngngày càng nhiều: test
script giúp kiểm tra nhanh,
chínhxác thường xuyên.
Test script là cơ sở để thực
hiện kiểm thử đơn vị
(unittesting) trước khi đưa
module lên server (repository)
Vì phải viết test cases dựa trên
các đặc tả, và viết code sau đó để
thỏa các test cases nên hệ thống
xây dựng ra sẽ đáp ứng tốt các yêu
cầu đặt ra.
Những chc năng quan trọng
thường được viết test script trước,
nên chúng sẽ được lập trình trước
và được kiểm thử nhiều nhất
Hạn Chế
- Giữa mã nguồn và test
scripts thường không đồng
bộ:Viết mã rất nhiều, nhưng
test scripts lại ít, không đủ độ
phủ kiểm tra hết các đoạn mã
đã viết ra
Tính đầy đủ của mã nguồn phụ
thuộc vào tính toàn diện, đầy đủ
của bộ test cases được thiết kế.
Thông thường, khó có thể viết các
test cases một cách đầy đủ (thường
sót đối với các trường hợp đặc
biệt).
Đôi khi việc viết để thỏa test
case sau lại phải dẫn đến việc thay
đổi thuật toán, các đoạn đã.
17.
Quy ước viết mã (có tên gọi tiếng Anh: Coding standards, Coding
conventions, Coding style guidelines) gì? ảnh hưởng thế nào đến chất
lượng phần mềm? Hãy nêu và giải thích 05 quy ước viết mã mà bạn biết.
Quy ước viết mã có giống nhau cho các ngôn ngữ lập trình không?
Code Convention được tạm dịch quy ước viết Code. thể hiểu một cách đơn giản, Code
Convention một tập hợp các quy ước vềch để viết Code,đặt tên biến, class, hàm, file rất
nhiều quy tắc khác như thụt đầu dòng, comment, cách “.” cách “,”,… để cho các khối Code tr
nênclean” hơn.
Trong một dự án phần mềm lớn, khi toàn bộ lập trình viên của dự án đều tuântheo một quy tắc
viết Code, giúp việc giao tiếp giữa các thành viên trở nên dễdàng hơn. Dự án cũng sẽ thể thêm
các module chức năng nhanh chóng hơn, việc bảo trì và phát triển hệ thống sau này cũng s dễ
dàngn.Vy, khi Code Convention chúng ta sẽ có những lợi ích như sau:
Giúp làm việc nhóm hiệu quả hơn
Thống nhất tuân thủ theo một chuẩn dễ dàng làm việc hơn
Giúp người khác nm bắt Code bạn viết nhanh hơn
Dễng nâng cấp cải tiến phần mềm
thể tái sử dụng trong nhiều phần mềm khác nhau
Thuận lợi trong việc phát triển bảo trì hệ thống sau này
- các hàm, tên biến, phương thức: camelCase
- tên class: PascalCase-Một dòng Code không nên dài quá 80 tự
- Một câu lệnh nên lồng tối đa 4 cấp
- Một hàm không nên chứa q5 tham số
- Một hàm không nên quá 30 dòng
- Một class không nên vượt 500 dòng
18.
Tái cấu trúc nguồn gì? sao cần tái cấu trúc nguồn? Hãy nêu
giải thích 03 hoạt động tái cấu trúc mã nguồn mà bạn biết. Nêu tên một
IDE bạn biết có hỗ trợ tái cấu trúc mã nguồn.
Refactoring một kỹ thuật cho việc tái cấu trúc nguồn đã, thay đổi cấu trúc bên trong
không làm thay đổi hành vi bên ngoài.
- Mục đích chính của việc tái cấu trúc nguồn khá ràng: làm cho sạch, gọn gàng,
hiệu quả hơn và thể bảo trì được.
- 03 hoạt độngi cấu trúc nguồn bạn biết
+ Tách rời các thành phần không liên quan: Hoạt động này nhmch rời các thành phần
trong nguồn không liên quan đến nhau. Điuy thể giúp cải thiện khả năng đọc
và hiểu mã nguồn, cũng như khnăng mở rộng và bảo trì mã nguồn.
+ Chuyển các hàm thành các lớp: Hoạt động này nhằm chuyển các hàm liên quan đến
nhau thành các lớp. Điều này thể giúp cải thiện khả năng đọc hiểu nguồn, cũng
như khả năng mở rộng và bảo trì mã nguồn
+ Tái sử dụng các thành phần: Hoạt động này nhằm tái sử dụng các thành phần trong mã
nguồn. Điều này thể giúp cải thiện khả năng đọc hiểu nguồn, cũng như khả năng
mở rộng và bảo trì mã nguồn.
- Tên một IDE bạn biết hỗ trợ tái cấu trúc nguồn.
+ NetBeans
+ Xcode
+ Code::Blocks
+ Microsoft Visual Studio
19.
Vì sao cần quản lý mã nguồn? Nêu tên và giới thiệu vắn tắt về một công cụ
quản nguồn bạn biết. Nêu tên mục đích của 05 hoạt quản
nguồn phổ biến. Phân loại các công cụ quản lý mã nguồn.
Trong quá trình phát triển chương trình phần mềm, sau một thời gian nguồn chương trình sẽ
ngày càng nhiều, rất khó để lập trình viên thể kiểm soát được các chức năng đã thực hiện, cũng
như quản tất c nguồn đã viết ra. Đặc biệt đối với nhóm lập trình thì vic chia sẻ nguồn,
quản lý công việc giữa các thành viên trong nhóm càng trở nên cấp thiết nhằm không bị chồng
chéo công việc cũng như tăng tốc thực hiện dự án.
- Git: Đây công cụ quản các source code được tổ chức theo dạng các dữ liệu phân tán, do
vậy được đánh giá vô cùng cao. Ngoài ra, sản phẩm này có khnăng đồng bộ các source
code của team lên 1 server mới, giúp thời gian điều chỉnh nhanh và hiệu quả. Bất cứ ai cũng
thể được GIT hỗ trợ cácthao tác về vấn đề kiểm tra source code trong qtrình m việc
- Tên mục đích của 05 hoạt quản nguồn phổ biến
+ Commit: Lưu các thay đổi từ thư mục đang làm việc (working coppy) vào server local
(local repo)
+ Push: Cập nht các thay đổi từ server local máy(local repo) lên server online (remote
repo)
+ Fetch: Để thực hiện đồng bộ mọi thứ thay đổi mới nhất từ server online (remote repo) về
server local (local repo) chúng ta sử dụng lệnh fetch (git fetch)
+ Pull: Sau đó để “áp dụng” các thay đổi đó vào source code đang sử dụng. nghĩa cập
nhật từ server local (local repo) vào thư mc đangm việc (working copy) (git pull)
+ Clone: Lấy source từ server về server local của máy (local repo) của người dùng.
- Phân loại các công cụ quản nguồn: quản phiên bản tập trung quản phiên bản
phânn
PHẦN 3: KIỂM THỬ PHẦN MỀM
20.
Kiểm thử phần mềm gì? Nêu giải thích các mức độ kiểm thử trong
một dự án phát triển phần mềm.
Kiểm thử phần mềm quá trình vận hành để tìm ra lỗi.
- Các mức độ kiểm thử trong một dự án phát triển phần mềm.
+ Kiểm thử đơn vị: Kiểm thử đơn vị quá trình kiểm tra các đơn vị nhỏ nhất của nguồn,
chng hạn như các hàm hoặc phương thức. Mục đích của kiểm thử đơn vị là xác minh rằng
các đơn vị này hoạt động chính xác theo cách mà chúng được thiết kế.
+ Kiểm thử tích hợp: Kiểm thửch hợp qtrình kiểm tra cách các đơn vị nguồn tương
tác với nhau. Mục đích của kiểm thử tích hợp là xác minh rằng các đơn vị này hoạt động
cùng nhau một cách chính xác.
+ Kiểm thử hệ thống: Kiểm thử hệ thống quá trình kiểm tra toàn bộ hệ thống phn mềm.
Mục đích của kiểm thử hệ thống xác minh rằng hệ thống đáp ứng các yêu cầu của người
dùng và không có lỗi.
+ Kiểm thử chấp nhn: Kiểm thử chấp nhận là quá trình kiểm tra hệ thống bởi người dùng
hoặc khách hàng. Mục đích của kiểm thử chấp nhận xác minh rằng hệ thống đáp ứng các
u cầu của người dùng và đáp ứng mong đợi của họ.
21.
Trình bày mục đích của việc kiểm thử phần mềm. Nêu sự khác nhau giữa
Xác minh (Software verification) và Thẩm định (Software validation).
- Tìm ra các lỗi phát sinh chương trình.
- Ngăn chặn lỗi.
- Cung cấp thông tin độc lập về chất lượng sản phẩm / phần mềm.
- Cung cấp cho khách hàng một sản phẩm phần mềm chất lượng.
- Đảm bảo rằng kết quả cuối cùng đáp ứng các u cầu kinh doanh người sử dụng
- sự khác nhau giữa Xác minh (Software verification) Thẩm định (Software validation).
Giống nhau
Phát triển đúng theo đặc tả
Đáp ứng nhu cầu của người dùng
Khác nhau
Thẩm định (validation)
là sự kiểm tra xem sản phm có đáp ứng
được nhu cầu người dùng không, tức c
trọng vào sự khác biệt giữa phần mềm m
ra cái người dùng mong đợi.
22.
Test case gì? Cấu trúc của một Test case gồm những thành phần bản
nào?
"Test case" một q trình "kiểm tra dữ liệu" đầu vào, thể một hành động hoặc một sự kiện
nào đó sau đó trả về kết quả truy vấn để kiểm tra từng chức năng của phần mềm hay ứng dụng
hoạt động đúng chứcng hay không?. Việc test case cùng cần thiết.
- Cấu trúc của một Test case gồm những thành phần bản
+ u cầu/ mã chức năng
+ Chức năng cần kiểm th
+ Điu kiện kiểm thử: thể hiện trạng thái hệ thống/môi trường dùng để kiểm th
+ Dữ liệu đầu vào
+ tả các bước thực hin
+ Kết quả mong đợi
+ Kết quả tes
23.
Test plan gì? Một bản test plan gồm những nội dung nào?
Test plan hay còn gọi một bản kế hoạch kiểm thử một tài liệu tổng quát chotoàn bộ dự án,
định nghĩa: Phạm vi kiểm thử, hướng tiếp cận để thực hiện kiểm thử, lịch trình kiểm thử, các
phần cần kiểm thử, những người phụ trách các hoạtđộng kiểm thử
- Một bản test plan gồm những nội dung
+ Định nghĩa các đơn vị kiểm th
+ Các tính năng sẽ kiểm th
+ Phương pháp kiểm th
+ Các kết quả kiểm th
+ Phân bổ nhiệm vụ lịch trình
24.
So sánh các phương pháp kiểm thử hộp đen kiểm thử hộp trắng.
Kiểm th hộp đen (Blackbox
testing)
Kiểm th hộp trắng
(Whitebox testing)
Đặc đim
-Xem phần mềm như một hộp
đen, người kiểm thử không cần
quanm đến cấu trúc và hot
động bên trong
- sở của kiểm thử hộp đen
đặc tả chức năng dữ liệu đầu
-việc kiểm tra các đoạn mã
chương trình, xem xét cấu trúc
bên trong, xem vận hành
đúng theo thiết kế hay không.
- sở của kiểm thử hộp trắng:
dựa trên mã nguồn: các rẽ
vào sử dụng
-Cách thực hiện: nhập dữ liệu
đầu vào qua giao diện, thực thi
chương trình, xem kết quả đầu
ra đúng với mong đợi không?
nhánh, vòng lặp (if, while, for...)
- Người kiểm thử u cầu phải
hiểu biết về lập trình, về sự vận
hành của chương trình
Điểm mạnh
Không cần truy cập nguồn
Không cần kiến thức về các
ngôn ngữ lập trình
Kiểm thử được thực hiện với
góc nhìn của người dùng
-> Mang tính khách quan (tách
biệt với góc nhìn của lập trình
viên)
Rất hiệu quả trong việc m
lỗi, đặc biệt các lỗi ẩn (mà
blackbox testing không phát
hiện ra)
Hạn chế
Khó thiết kế test cases
Kiểm thử tất cả các khả năng
là không khả thi.
sự kết hợp giữa Whitebox
+ Blackbox testing
Người kiểm thử không truy
cập vào mã nguồn.
Nhưng biết được về thông tin
cấu trúc bên trong (có giới hạn)
thông qua : Các tài liệu đặc tả,
tài liệu thiết kế chi tiết, thiết kế
kiến trúc, thuật toán, cấu trúc dữ
liệu sử dụng...

Preview text:

Soạn câu hỏi về nhập môn công nghệ phần mềm
PHẦN 1: GIỚI THIỆU CNPM, QUY TRÌNH, PHÂN TÍCH VÀ ĐẶC TẢ YÊU CẦU
1. Quy trình phát triển phần mềm có những hoạt động chính nào? Hãy trình
bày những hoạt động này
➔ Các quy trình phát triển phần mềm thường bao gồm 4 hoạt động quan trọng sau:
1- Đặc tả yêu cầu phần mềm (Software specification, requirements engineering): Định nghĩa
các chức năng chính của phần mềm và các ràng buộc xung quanh nó.
2- Phát triển phần mềm (Software development, còn gọi là design and implementation): Phần
mềm được thiết kế và xây dựng.
3- Phát triển phần mềm (Software development, còn gọi là design and implementation): Phần
mềm được thiết kế và xây dựng.
4- Tiến hóa phần mềm (Software evolution, hoặc software maintenance): Phần mềm được cập
nhật/chỉnh sửa đáp ứng theo những thay đổi yêu cầu của khách hàng.
2. Mô hình phát triển phần mềm Thác nước trải qua những giai đoạn nào?
Hãy trình bày về những giai đoạn này.
➔ Mô hình phát triển phần mềm Thác nước trải qua 5 giai đoạn gồm :
+ Định nghĩa yêu cầu (Requirements Definition): là quá trình xác định các yêu cầu của người
dùng đối với hệ thống phần mềm. Các yêu cầu này bao gồm các chức năng, tính năng, hiệu năng,
khả năng sử dụng, và các yêu cầu khác.
+ Thiết kế hệ thống (System and Software Desgin): là quá trình chuyển đổi các yêu cầu của
người dùng thành một mô hình hệ thống đáp ứng các yêu cầu đó
+ Hiện thực & kiểm thử đơn vị (Implementaion and Unit Testing): là xây dựng và kiểm tra từng
thành phần của hệ thống phần mềm để đảm bảo các thành phần này hoạt động chính xác và đáp
ứng các yêu cầu đã được xác định.
+ Tích hợp & kiểm thử hệ thống (Integration and System Testing): là tích hợp các thành phần
của hệ thống phần mềm đã được xây dựng và kiểm tra thành một hệ thống hoàn chỉnh, đồng thời
kiểm tra hệ thống hoàn chỉnh này để đảm bảo hệ thống đáp ứng các yêu cầu đã được xác định.
+ Vận hành & bảo trì (Operation and Maintenance): là đưa hệ thống phần mềm vào sử dụng và
đảm bảo hệ thống hoạt động ổn định và đáp ứng các yêu cầu của người dùng.
3. Trình bày ý tưởng chung của mô hình phát triển phần mềm Tiến hóa
(Evolutionary development).
➔ Các mô hình phát triển phần mềm Tiến hóa dựa trên ý tưởng chung:
– Phát triển một phiên bản đầu tiên (initial version)
– Lấy phản hồi từ người dùng
– Nâng cấp (tiến hóa) phần mềm thông qua các phiên bản cho đến khi hệ thống được chấp thuận.
4. Mô hình phát triển phần mềm Dựa trên thành phần (Component-based
software engineering) trải qua những giai đoạn nào? Hãy trình bày về
những giai đoạn này ?

➔ Mô hình phát triển phần mềm Dựa trên thành phần (Component-based software engineering) trải qua 6 giai đoạn gồm:
+ Định nghĩa yêu cầu (Requirements Definition): là quá trình xác định các yêu cầu của người
dùng đối với hệ thống phần mềm. Các yêu cầu này bao gồm các chức năng, tính năng, hiệu năng,
khả năng sử dụng, và các yêu cầu khác.
+ Phân tích thành phần (component analysis): là
* Với bản đặc tả yêu cầu, nhà phát triển sẽ tìm kiếm các thành phần có sẵn và phân tích xem
chúng có thể đáp ứng được thế nào trong việc xây dựng hệ thống mới.
* Thông thường, các thành phần tìm thấy sẽ không đáp ứng 100% yêu cầu.
+ Chỉnh sửa yêu cầu (Requirement Modification): là
* Ở giai đoạn này, các yêu cầu sẽ được phân tích dựa trên thông tin về các thành phần (component) đã tìm thấy.
* Các yêu cầu có thể được chỉnh sửa lại cho phù hợp với các thành phần tìm thấy.
* Nếu việc chỉnh sửa yêu cầu không thể thực hiện được, trở lại bước tìm kiếm các thành phần tìm giải pháp khác
+ Thiết kế hệ thống với các thành phần tái sử dụng (System design with reuse): Thiết kế kiến
trúc, nền tảng (framework) cho hệ thống với các thành phần tái sử dụng.
+ Phát triển và tích hợp (Development and Integration)
* Các thành phần tái sử dụng sẽ được tích hợp vào hệ thống mới.
* Phát triển các thành phần mới
5. Khung quy trình phát triển phần mềm Scrum gồm những giai đoạn nào?
gồm những sự kiện nào? Hãy trình bày về các giai đoạn và sự kiện này.?
➔ ^ Khung quy trình phát triển phần mềm Scrum gồm 3 giai đoạn
Giai đoạn 1: Lên kế hoạch sơ bộ, xác định các mục tiêu của dự án và thiết kế kiến trúc hệ thống.
Giai đoạn 2: Các vòng Sprint, mỗi Sprint sẽ tạo ra một phần tăng trưởng.
Giai đoạn 3: Đóng dự án, tổng hợp, hoàn tất các tài liệu dự án, rút bài học kinh nghiệm...
^ Khung quy trình phát triển phần mềm Scrum gồm 5 sự kiện
• Sprint (một giai đoạn, 2-4 tuần)
• Sprint planning (cuộc họp lên kế hoạch cho Sprint): Trong giai đoạn này, nhóm Scrum sẽ xác
định các mục tiêu của Sprint và lập kế hoạch cho các nhiệm vụ cần thực hiện để đạt được các mục tiêu đó.
• Daily Scrum (họp hằng ngày, Stand-up meeting): Trong giai đoạn này, nhóm Scrum sẽ họp
hàng ngày để thảo luận về tiến độ của Sprint và xác định các công việc cần thực hiện trong ngày hôm sau.
• Sprint Review (họp demo sản phẩm): Trong giai đoạn này, nhóm Scrum sẽ trình bày kết quả của
Sprint cho khách hàng và các bên liên quan.
• Sprint Retrospective (họp rút kinh nghiệm) : Trong giai đoạn này, nhóm Scrum sẽ đánh giá quá
trình thực hiện Sprint và đưa ra các cải tiến cho các Sprint tiếp theo.
6. Scrum master và Product owner đóng vai trò như thế nào trong khung quy
trình phát triển phần mềm Scrum?
➔ Trong khung quy trình phát triển phần mềm Scrum, Scrum Master và Product Owner đóng vai trò
quan trọng trong việc đảm bảo thành công của dự án. Scrum Master có vai trò:
– Làm cho quy trình hoạt động trôi chảy.
– Loại bỏ các rào cản ảnh hưởng đến hiệu suất làm việc.
– Tổ chức và tạo thuận lợi cho các cuộc họp. Product Owners:
– Quản lý các yêu cầu (Product backlog).
– Am hiểu về nghiệp vụ của dự án (ví dụ: Ngân hàng, Chứng khoán…) và không nhất thiết biết về kỹ thuật.
– Định nghĩa và quyết định thứ tự ưu tiên các yêu cầu
⇨ Scrum Master và Product Owner phối hợp chặt chẽ với nhau để đảm bảo rằng sản phẩm đáp
ứng nhu cầu của khách hàng và được phát triển theo cách hiệu quả.
7. Yêu cầu phần mềm là gì? Hãy phân biệt và cho ví dụ thể hiện sự khác nhau
giữa Yêu cầu chức năng và Yêu cầu phi chức năng.
➔ Yêu cầu phần mềm (Software requirements) là những mô tả về những cái mà hệ thống cần phải làm:
– Những chức năng (dịch vụ) mà hệ thống phải cung cấp,
– Những ràng buộc đối với hệ thống.
Yêu cầu phần mềm phản ánh nhu cầu (mong muốn) của khách hàng với hệ thống.
• So sánh khác nhau giữa giữa Yêu cầu chức năng Yêu cầu phi chức năng.
*** Yêu cầu chức năng
+ Yêu cầu chức năng (Functional requirements) là những phát biểu về những chức năng (dịch vụ)
mà hệ thống cần phải cung cấp. Trong một số trường hợp, nó cũng phát biểu cụ thể những cái hệ
thống sẽ không cung cấp
VD Người dùng có thể tìm kiếm sách theo mã sách, tiêu đề hoặc tên tác giả. Hệ thống có thể xuất
báo cáo thống kê số lượt mượn sách trong một tháng
*** Yêu cầu phi chức năng
+ Yêu cầu phi chức năng (non-functional requirements) là những ràng buộc (constraints) đối với
các chức năng (dịch vụ) mà hệ thống cung cấp. Yêu cầu phi chức năng thường áp dụng lên toàn
hệ thống hơn là lên từng chức năng riêng lẻ
VD Hệ thống phải dễ sử dụng
Hệ thống phải hoạt động tốt trên Firefox x.x, Chrome x.x
Hệ thống phải phản hồi trong vòng < 1s đối với tất cả các yêu cầu tìm kiếm sách
8. Việc mô tả yêu cầu phần mềm có thể chia thành hai mức độ: Yêu cầu người
dùng (User requirements) và Yêu cầu hệ thống (System requirements). Hãy
phân biệt và cho ví dụ thể hiện sự khác nhau giữa hai mức độ này

* Yêu cầu người dùng (User requirements) là : những phát biểu tổng quan, bằng ngôn ngữ tự
nhiên (hoặc được bổ sung bởi một số biểu đồ) về những dịch vụ (chức năng) mà hệ thống cần
cung cấp cho người dung và các ràng buộc đi kèm
VD Hệ thống cho phép thêm một sản phẩm mới
* Yêu cầu hệ thống (System requirements) là: những mô tả chi tiết hơn về các chức năng và ràng
buộc mà hệ thống cần cung cấp. Nó mô tả chính xác những hạng mục nào cần phải làm. Nó có
thể là một phần trong bản hợp đồng giữa khách hàng và nhà phát triển.
VD Hệ thống cho phép thêm sản phẩm mới gồm các trường thông tin: tên sản phẩm, giá, kích thước...
Hệ thống tự động tạo mã sản phẩm theo mã danh mục sản phẩm
9. Quy trình kỹ nghệ yêu cầu (Requirements engineering process) bao gồm
những hoạt động chính nào? Hãy trình bày về những hoạt động này.
Quy trình kỹ nghệ yêu cầu (Requirements engineering process) gồm 3 hoạt động chính là
+ Nhiệm vụ 1: Thu thập & Phân tích yêu cầu
• Kết thúc giai đoạn này, người phân tích (analyst) sẽ cơ bản hiểu được hệ thống cần phải như thế nào:
– Có những chức năng gì, các ràng buộc, các dữ liệu vào và kết quả đầu ra của hệ thống.
• Quá trình này thường liên quan tới rất nhiều người, gọi là các bên liên quan (stackholder).
– Khách hàng, người dùng cuối, người phân tích, người quản lý...
• Trong quá trình phân tích yêu cầu, nhà phát triển (analyst) và phía khách hàng, người dùng cuối
(clients, users) sẽ có một chuỗi các cuộc họp:
– Các cuộc họp ban đầu, khách hàng và người dùng cuối sẽ mô tả về công việc của họ, môi
trường của họ, các quy trình...
– Người phân tích sẽ lắng nghe, ghi chép, thu thập các thông tin, biểu mẫu...
– Một khi đã hiểu được ở mức độ cơ bản, người phân tích sẽ viết các tài liệu yêu cầu người dùng,
một số mô hình, một số phác thảo => để làm rõ những điểm chưa hiểu, hoặc để xác nhận lại với
khách hàng xem có đúng ý như vậy không?
+ Nhiệm vụ 2: Đặc tả yêu cầu
• Sau khi phân tích yêu cầu, người phân tích đã hiểu được về hệ thống cần phải làm gì.
• Đặc tả yêu cầu là việc ghi vào tài liệu những mô tả về hệ thống (tài liệu đặc tả yêu cầu – SRS –
Software Requirement Specification)
• Tại hoạt động này, những vấn đề như: giao diện, ngôn ngữ sử dụng, công cụ... cũng được bàn tới
+ Nhiệm vụ 3: Thẩm định yêu cầu
• Thẩm định yêu cầu tập trung vào việc đảm bảo bản đặc tả yêu cầu trên là đúng với những yêu
cầu /mong muốn /mục tiêu của khách hàng về hệ thống cần xây dựng.
• Kết quả của hoạt động này là một tài liệu đặc tả yêu cầu đã được thẩm định (validated SRS),
một bản đặc tả yêu cầu chất lượng tốt
10. Trong quy trình kỹ nghệ yêu cầu thường gặp phải những vấn đề trở ngại nào?
➔ • Các bên liên quan không thực sự biết mình muốn gì.
• Các bên liên quan diễn đạt yêu cầu theo thuật ngữ trong lĩnh vực của họ.
• Giữa chính các bên liên quan cũng có xung đột về mục tiêu, mong muốn về hệ thống cần xây dựng.
• Những yếu tố về tổ chức, pháp luật, đạo đức...ảnh hưởng đến yêu cầu hệ thống. • Thay đổi yêu cầu
– Môi trường kinh doanh thay đổi, nghiệp vụ thay đổi, công nghệ thay đổi...
– Tại thời điểm thu thập yêu cầu, khách hàng chưa nghĩ hết những điều họ muốn.
• Phải sắp xếp các cuộc gặp để trao đổi => không phải lúc nào các bên cũng sẵn sàng.
PHẦN 2: THIẾT KẾ PHẦN MỀM, LẬP TRÌNH
11. Kiến trúc phần mềm là gì? Kiến trúc phần mềm có ảnh hưởng gì đến chất
lượng của sản phẩm phần mềm? Nêu 3 thuộc tính chất lượng bị ảnh hưởng
bởi kiến trúc phần mềm và giải thích vì sao.

➔ - Các hệ thống thường được hợp thành từ các hệ thống con -
Kiến trúc phần mềm xử lý các yêu cầu cả về chức năng và chất lượng, cải thiện chất lượng và
chức năng chung của hệ thống -
3 thuộc tính chất lượng bị ảnh hưởng bởi kiến trúc phần mềm:
+ Tính đúng đắn: Kiến trúc phần mềm ảnh hưởng đến tính đúng đắn của sản phẩm phần
mềm thông qua việc xác định các thành phần và mối quan hệ giữa chúng. Một kiến trúc phần
mềm tốt sẽ đảm bảo rằng các thành phần phần mềm được thiết kế và kết nối với nhau một
cách chính xác để đáp ứng các yêu cầu của người dùng.
VD: nếu một hệ thống phần mềm yêu cầu lưu trữ dữ liệu của người dùng, thì kiến trúc phần
mềm cần phải xác định các thành phần và mối quan hệ cần thiết để lưu trữ dữ liệu một cách an toàn và bảo mật.
+ Tính khả dụng: Kiến trúc phần mềm ảnh hưởng đến tính khả dụng của sản phẩm phần
mềm thông qua việc xác định cách thức phân phối và triển khai hệ thống. Một kiến trúc phần
mềm tốt sẽ đảm bảo rằng hệ thống có thể truy cập được và hoạt động ổn định trong các điều kiện khác nhau.
VD: nếu một hệ thống phần mềm được yêu cầu hoạt động 24/7, thì kiến trúc phần mềm cần
phải xác định cách thức phân phối hệ thống để đảm bảo rằng hệ thống có thể được phục hồi
nhanh chóng trong trường hợp xảy ra sự cố.
+ Tính bảo trì : Kiến trúc phần mềm ảnh hưởng đến tính bảo trì được của sản phẩm phần
mềm thông qua việc xác định cách thức tổ chức các thành phần phần mềm. Một kiến trúc
phần mềm tốt sẽ đảm bảo rằng các thành phần phần mềm có thể được sửa đổi và nâng cấp
một cách dễ dàng mà không ảnh hưởng đến các thành phần khác của hệ thống.
VD: nếu một hệ thống phần mềm cần được nâng cấp thường xuyên, thì kiến trúc phần mềm
cần phải xác định cách thức tổ chức các thành phần phần mềm để đảm bảo rằng các thành
phần có thể được nâng cấp một cách độc lập mà không ảnh hưởng đến các thành phần khác.
12. Vì sao nên sử dụng các kiểu kiến trúc có sẵn khi thiết kế phần mềm? Hãy
trình bày ý tưởng và giải thích các thành phần cũng như quan hệ giữa
chúng của một kiểu kiến trúc mà bạn biết. Lợi ích khi sử dụng kiểu kiến trúc này là gì?

➔ Vì những kiểu kiến trúc có sẵn đã được kiểm định, nghiên cứu, ứng dụngthành công qua các thế
hệ đi trước. Việc áp dụng các kiểu kiến trúc có sẵn giúp ta đánh giá được ưu nhược điểm của các
kiểu kiến trúc và từ nhu cầu của mình mà lựa chọn phù hợp để quá trình sản xuất phần mềm được tốt nhất. VD: Mô hình MVC -
Các thành phần của kiểu kiến trúc MVC bao gồm:
• Mô hình (Model): Tầng này chịu trách nhiệm lưu trữ và truy xuất dữ liệu. Mô hình
thường được viết bằng ngôn ngữ lập trình hướng đối tượng (OOP).
• Quan sát (View): Tầng này chịu trách nhiệm hiển thị dữ liệu cho người dùng. Quan sát
thường được viết bằng ngôn ngữ lập trình hướng giao diện người dùng (GUI).
• Điều khiển (Controller): Tầng này chịu trách nhiệm xử lý các yêu cầu của người dùng và
truyền dữ liệu giữa mô hình và quan sát. Điều khiển thường được viết bằng ngôn ngữ lập
trình hướng sự kiện (event-driven programming). -
Quan hệ giữa các thành phần của kiểu kiến trúc MVC được thể hiện như sau:
• Mô hình cung cấp dữ liệu cho quan sát.
• Quan sát hiển thị dữ liệu cho người dùng.
• Điều khiển xử lý các yêu cầu của người dùng và truyền dữ liệu giữa mô hình và quan sát. -
Lợi ích khi sử dụng kiểu kiến trúc MVC:
• Dễ dàng quản lý và bảo trì: Kiểu kiến trúc MVC giúp dễ dàng quản lý và bảo trì phần mềm
bằng cách tách biệt các trách nhiệm của phần mềm thành ba thành phần riêng biệt. Điều này
giúp các nhà phát triển dễ dàng hiểu được cách thức hoạt động của phần mềm và dễ dàng sửa
chữa các lỗi khi cần thiết.
• Cải thiện khả năng mở rộng: Kiểu kiến trúc MVC giúp cải thiện khả năng mở rộng của phần
mềm bằng cách tách biệt các trách nhiệm của phần mềm thành ba thành phần riêng biệt. Điều
này giúp các nhà phát triển dễ dàng thêm các tính năng mới hoặc sửa đổi các tính năng hiện
có mà không ảnh hưởng đến các phần khác của phần mềm.
• Cải thiện bảo mật: Kiểu kiến trúc MVC giúp cải thiện bảo mật của phần mềm bằng cách tách
biệt các trách nhiệm của phần mềm thành ba thành phần riêng biệt. Điều này giúp các nhà
phát triển dễ dàng kiểm soát quyền truy cập vào các thành phần của phần mềm.
13. Độ đo coupling phản ánh điều gì trong một thiết kế phần mềm? Nó ảnh
hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo
coupling là thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc phục là gì?

➔ - Độ đo coupling phản ánh sự liên kết của các thành phần trong kiến trúc phần mềm.Coupling thể
hiện sự phụ thuộc, sự kết nối giữa các module với nhau -
Độ coupling ảnh hưởng đến chất lượng phần mềm theo nhiều cách, bao gồm: + Khả năng bảo trì + Khả năng mở rộng + Khả năng kiểm tra -
Trong thiết kế, người ta hướng tới mục tiêu Low coupling
+ Low coupling (Loose coupling):
– Hai modules được gọi là low coupling nếu chúng ít phụ thuộc vào nhau,sự thay đổi trong
module này ít làm ảnh hưởng hoặc không làm ảnh hưởng đến module kia -
Giải pháp: Đảo ngược sự phụ thuộc
14. Độ đo cohesion phản ánh điều gì trong một thiết kế phần mềm? Nó ảnh
hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo
này thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc phục là gì?

➔ Cohesion thể hiện sức mạnh liên kết giữa các thành phần trong cùng một module -
Độ cohesion ảnh hưởng đến chất lượng phần mềm + Khả năng bảo trì + Khả năng hiểu
+ Khả năng tái sử dụng -
Người thiết kế mong muốn độ đo cohesion là cao trong một thiết kế phần mềm + High cohesion:
– Một module được gọi là high cohesion nếu các thành phần bên trongnó có liên kết chặt chẽ
với nhau.– Nếu xét một module là class, thì các thành phần bên trong nó sẽ làcác trường dữ liệu, các phương thức. -
Có nhiều cách để chia hệ thống thành các module nhỏ khác nhau.
• Việc phân chia tốt sẽ làm cho hệ thống đạt được tính chất high cohesion trong mỗi module
và tính chất low coupling giữa các module
15. Phân biệt giữa 2 cách tiếp cận trong thiết kế: hướng đối tượng và hướng
chức năng. Lấy ví dụ minh họa sự khác nhau thông qua việc thiết kế hệ
thống quản lý đào tạo theo tín chỉ của trường Đại học Quy Nhơn (sinh viên
có thể đề xuất hệ thống khác).
Phương pháp
Phân tích thiết kế hướng
Phân tích thiết kế hướng chức năng đối tượng Cách tiếp cận
-Là một phương pháp thiết kế
-Hướng đối tượng tập trung
phần mềm tập trung vào các
cả vào dữ liệu và hành động
chức năng. Một chức năng là
của hệ thống, khác với hướng
một khối mã có thể thực hiện cấu trúc chỉ tập trung vào một
một tác vụ cụ thể. Các chức khía cạnh.
năng có thể được kết hợp với -Phương pháp này ánh xạ
nhau để tạo ra các chương
thành phần của bài toán thành trình phức tạp.
các đối tượng trong thế giới
-Cách thức thực hiện của
thực. Hệ thống được chia
phương pháp hướng chức
thành các đối tượng độc lập,
năng là phương pháp thiết kế
kết hợp thông qua mối quan
từ trên xuống (top-down). hệ và tương tác.
- Phương pháp này tiến hành
-Điều này làm nổi bật cách
phân rã bài toán thành các bài
tiếp cận hướng đối tượng so
toán nhỏ hơn, rồi tiếp tục
với hướng cấu trúc. Thiết kế
phân rã các bài toán con cho
từ dưới lên (bottom-up) bắt
đến khi nhận được các bài
đầu từ thuộc tính cụ thể của
toán có thể cài đặt được ngay
đối tượng, sau đó trừu tượng
sử dụng các hàm của ngôn
hóa thành các lớp đối tượng.
ngữ lập trình hướng cấu trúc ➔ - Đối tượng
+ Sinh Viên: gồm thuộc tính như tê, tuổi, mã sinh viên,….và các hành động đăng ký học phẩn, xem điểm,….
+ Khoa: gồm thuộc tính như tên khoa, mã khoa,….và các hành động như quản lý sinh viên, giảng viên,…
+ Giảng viên: gồm có tên, tuổi, mã giảng viên,… và các hành động như giảng dạy học phần, chấm điểm,…
+ Học phần: gồm tên học phần, mã học phần,… và các hành động như đăng ký học phần, kiểm tra điểm,… - Chức năng:
+ Đăng ký học phần: cho phép sinh viên đăng ký
+ Quản lý sinh viên: cho phép khoa quản lý sinh viên
+ Quản lý giảng viên: cho phép khoa quản lý giảng viên
+ Giảng dạy học phần: cho phép giảng viên giảng dạy học phần
+ Chấm điểm: Cho phép giảng viên chấm điểm - Cách thức hoạt động
• Sinh viên có thể đăng ký học phần từ khoa.
• Khoa có thể quản lý sinh viên và giảng viên.
• Giảng viên có thể giảng dạy học phần và chấm điểm.
• Học phần có thể được đăng ký học phần và kiểm tra điểm.
16. Nêu và giải thích các hoạt động trong 2 quy trình viết mã nguồn: Quy trình
viết mã tăng dần (Incremental Coding Process) và Quy trình viết mã hướng
kiểm thử (Test-Driven Development). So sánh sự giống và khác nhau giữa 2 quy trình này.

Quy trình viết mã tăng dần
Quy trình viết mã hướng kiểm (Incremental Coding
thử (Test-Driven Development). Process)
Nêu và giải thích các hoạt
Viết mã cho một số chức
Viết test scripts cho một số chức
động trong 2 quy trình viết năng ban đầu.
năng ban đầu dựa trên các đặc tả. mã nguồn
• Viết test script để kiểm thử
• Viết mã để thỏa các test cases.
• Chạy test script, sửa lỗi nếu • Chạy test script. có.
• Nếu có lỗi thì sửa, rồi chạy lại
• Tiếp tục bổ sung viết mã
test scripts, lặp lại cho đến khi cho các chức năng khác thỏa.
• Nếu không có lỗi, kiểm tra xem
có cần cải tiến mã không, nếucó thì
cải tiến, rồi chạy lại test script lần nữa.
• Tiếp tục viết test scripts cho các
chức năng khác (nếu còn) dựa trên các đặc tả Điểm Mạnh
– Dễ debug (dễ phát hiện lỗi): – Mã nguồn luôn đồng bộ với test
vì lập trình viên viết vàchạy scripts.
test script sau mỗi lần viết mã
cho chức năngmới, nên nếu
– Vì phải viết test cases dựa trên
chạy test script phát hiện lỗi,
các đặc tả, và viết code sau đó để
thì lỗi nàythuộc về phần mã
thỏa các test cases nên hệ thống
mới bổ sung vào gần nhất.
xây dựng ra sẽ đáp ứng tốt các yêu
– Việc viết test script có ý cầu đặt ra.
nghĩa rất lớn khi mã lệnh
càngngày càng nhiều: test
– Những chức năng quan trọng
script giúp kiểm tra nhanh,
thường được viết test script trước,
chínhxác và thường xuyên.
nên chúng sẽ được lập trình trước –
và được kiểm thử nhiều nhất
Test script là cơ sở để thực
hiện kiểm thử đơn vị
(unittesting) trước khi đưa
module lên server (repository) Hạn Chế - Giữa mã nguồn và test
– Tính đầy đủ của mã nguồn phụ
scripts thường không đồng
thuộc vào tính toàn diện, đầy đủ
bộ:Viết mã rất nhiều, nhưng
của bộ test cases được thiết kế.
test scripts lại ít, không đủ độ
Thông thường, khó có thể viết các
phủ kiểm tra hết các đoạn mã
test cases một cách đầy đủ (thường đã viết ra
sót đối với các trường hợp đặc biệt).
– Đôi khi việc viết mã để thỏa test
case sau lại phải dẫn đến việc thay
đổi thuật toán, các đoạn mã đã có.
17. Quy ước viết mã (có tên gọi tiếng Anh: Coding standards, Coding
conventions, Coding style guidelines) là gì? Nó ảnh hưởng thế nào đến chất
lượng phần mềm? Hãy nêu và giải thích 05 quy ước viết mã mà bạn biết.
Quy ước viết mã có giống nhau cho các ngôn ngữ lập trình không?

➔ Code Convention được tạm dịch là quy ước viết Code. Có thể hiểu một cách đơn giản, Code
Convention là một tập hợp các quy ước về cách để viết Code,đặt tên biến, class, hàm, file và rất
nhiều quy tắc khác như thụt đầu dòng, comment, cách “.” cách “,”,… để cho các khối Code trở nên “clean” hơn.
➔ Trong một dự án phần mềm lớn, khi toàn bộ lập trình viên của dự án đều tuântheo một quy tắc
viết Code, giúp việc giao tiếp giữa các thành viên trở nên dễdàng hơn. Dự án cũng sẽ có thể thêm
các module chức năng nhanh chóng hơn, việc bảo trì và phát triển hệ thống sau này cũng sẽ dễ
dàng hơn.Vậy, khi Code Convention chúng ta sẽ có những lợi ích như sau:
• Giúp làm việc nhóm hiệu quả hơn
• Thống nhất và tuân thủ theo một chuẩn dễ dàng làm việc hơn
• Giúp người khác nắm bắt Code bạn viết nhanh hơn
• Dễ dàng nâng cấp và cải tiến phần mềm
• Có thể tái sử dụng trong nhiều phần mềm khác nhau
• Thuận lợi trong việc phát triển và bảo trì hệ thống sau này
- các hàm, tên biến, phương thức: camelCase
- tên class: PascalCase-Một dòng Code không nên dài quá 80 ký tự
- Một câu lệnh nên lồng tối đa 4 cấp
- Một hàm không nên chứa quá 5 tham số
- Một hàm không nên quá 30 dòng
- Một class không nên vượt 500 dòng
18. Tái cấu trúc mã nguồn là gì? Vì sao cần tái cấu trúc mã nguồn? Hãy nêu và
giải thích 03 hoạt động tái cấu trúc mã nguồn mà bạn biết. Nêu tên một
IDE bạn biết có hỗ trợ tái cấu trúc mã nguồn.

➔ Refactoring là một kỹ thuật cho việc tái cấu trúc mã nguồn đã có, thay đổi cấu trúc bên trong mà
không làm thay đổi hành vi bên ngoài. -
Mục đích chính của việc tái cấu trúc mã nguồn là khá rõ ràng: làm cho mã sạch, gọn gàng,
hiệu quả hơn và có thể bảo trì được. -
03 hoạt động tái cấu trúc mã nguồn mà bạn biết
+ Tách rời các thành phần không liên quan: Hoạt động này nhằm tách rời các thành phần
trong mã nguồn mà không liên quan đến nhau. Điều này có thể giúp cải thiện khả năng đọc
và hiểu mã nguồn, cũng như khả năng mở rộng và bảo trì mã nguồn.
+ Chuyển các hàm thành các lớp: Hoạt động này nhằm chuyển các hàm có liên quan đến
nhau thành các lớp. Điều này có thể giúp cải thiện khả năng đọc và hiểu mã nguồn, cũng
như khả năng mở rộng và bảo trì mã nguồn
+ Tái sử dụng các thành phần: Hoạt động này nhằm tái sử dụng các thành phần trong mã
nguồn. Điều này có thể giúp cải thiện khả năng đọc và hiểu mã nguồn, cũng như khả năng
mở rộng và bảo trì mã nguồn. -
Tên một IDE bạn biết có hỗ trợ tái cấu trúc mã nguồn. + NetBeans + Xcode + Code::Blocks + Microsoft Visual Studio
19. Vì sao cần quản lý mã nguồn? Nêu tên và giới thiệu vắn tắt về một công cụ
quản lý mã nguồn mà bạn biết. Nêu tên và mục đích của 05 hoạt quản lý mã
nguồn phổ biến. Phân loại các công cụ quản lý mã nguồn.

➔ Trong quá trình phát triển chương trình phần mềm, sau một thời gian mã nguồn chương trình sẽ
ngày càng nhiều, rất khó để lập trình viên có thể kiểm soát được các chức năng đã thực hiện, cũng
như quản lý tất cả mã nguồn đã viết ra. Đặc biệt đối với nhóm lập trình thì việc chia sẻ mã nguồn,
quản lý công việc giữa các thành viên trong nhóm càng trở nên cấp thiết nhằm không bị chồng
chéo công việc cũng như tăng tốc thực hiện dự án. -
Git: Đây là công cụ quản lý các source code được tổ chức theo dạng các dữ liệu phân tán, do
vậy nó được đánh giá vô cùng cao. Ngoài ra, sản phẩm này có khả năng đồng bộ các source
code của team lên 1 server mới, giúp thời gian điều chỉnh nhanh và hiệu quả. Bất cứ ai cũng
có thể được GIT hỗ trợ cácthao tác về vấn đề kiểm tra source code trong quá trình làm việc -
Tên và mục đích của 05 hoạt quản lý mã nguồn phổ biến
+ Commit: Lưu các thay đổi từ thư mục đang làm việc (working coppy) vào server local (local repo)
+ Push: Cập nhật các thay đổi từ server local ở máy(local repo) lên server online (remote repo)
+ Fetch: Để thực hiện đồng bộ mọi thứ thay đổi mới nhất từ server online (remote repo) về
server local (local repo) chúng ta sử dụng lệnh fetch (git fetch)
+ Pull: Sau đó để “áp dụng” các thay đổi đó vào source code đang sử dụng. Có nghĩa là là cập
nhật từ server local (local repo) vào thư mục đang làm việc (working copy) (git pull)
+ Clone: Lấy source từ server về server local của máy (local repo) của người dùng. -
Phân loại các công cụ quản lý mã nguồn: quản lý phiên bản tập trung và quản lý phiên bản phân tán
PHẦN 3: KIỂM THỬ PHẦN MỀM
20. Kiểm thử phần mềm là gì? Nêu và giải thích các mức độ kiểm thử trong
một dự án phát triển phần mềm.
➔ Kiểm thử phần mềm là quá trình vận hành để tìm ra lỗi. -
Các mức độ kiểm thử trong một dự án phát triển phần mềm.
+ Kiểm thử đơn vị: Kiểm thử đơn vị là quá trình kiểm tra các đơn vị nhỏ nhất của mã nguồn,
chẳng hạn như các hàm hoặc phương thức. Mục đích của kiểm thử đơn vị là xác minh rằng
các đơn vị này hoạt động chính xác theo cách mà chúng được thiết kế.
+ Kiểm thử tích hợp: Kiểm thử tích hợp là quá trình kiểm tra cách các đơn vị mã nguồn tương
tác với nhau. Mục đích của kiểm thử tích hợp là xác minh rằng các đơn vị này hoạt động
cùng nhau một cách chính xác.
+ Kiểm thử hệ thống: Kiểm thử hệ thống là quá trình kiểm tra toàn bộ hệ thống phần mềm.
Mục đích của kiểm thử hệ thống là xác minh rằng hệ thống đáp ứng các yêu cầu của người dùng và không có lỗi.
+ Kiểm thử chấp nhận: Kiểm thử chấp nhận là quá trình kiểm tra hệ thống bởi người dùng
hoặc khách hàng. Mục đích của kiểm thử chấp nhận là xác minh rằng hệ thống đáp ứng các
yêu cầu của người dùng và đáp ứng mong đợi của họ.
21. Trình bày mục đích của việc kiểm thử phần mềm. Nêu sự khác nhau giữa
Xác minh (Software verification) và Thẩm định (Software validation).
➔ - Tìm ra các lỗi phát sinh chương trình. - Ngăn chặn lỗi. -
Cung cấp thông tin độc lập về chất lượng sản phẩm / phần mềm. -
Cung cấp cho khách hàng một sản phẩm phần mềm chất lượng. -
Đảm bảo rằng kết quả cuối cùng đáp ứng các yêu cầu kinh doanh và người sử dụng -
sự khác nhau giữa Xác minh (Software verification) và Thẩm định (Software validation). Giống nhau
Phát triển đúng theo đặc tả
Đáp ứng nhu cầu của người dùng Khác nhau
Xác minh (verification)
Thẩm định (validation)
là sự kiểm tra xem sản phầm có đúng với
là sự kiểm tra xem sản phẩm có đáp ứng
đặctả không, tức là chú trọng vào việc phát
được nhu cầu người dùng không, tức là chú hiện lỗi phần mềm
trọng vào sự khác biệt giữa phần mềm làm
ravà cái người dùng mong đợi.
22. Test case là gì? Cấu trúc của một Test case gồm những thành phần cơ bản nào?
➔ "Test case" là một quá trình "kiểm tra dữ liệu" đầu vào, có thể là một hành động hoặc một sự kiện
nào đó sau đó trả về kết quả truy vấn để kiểm tra từng chức năng của phần mềm hay ứng dụng có
hoạt động đúng chức năng hay không?. Việc test case là vô cùng cần thiết. -
Cấu trúc của một Test case gồm những thành phần cơ bản
+ Mã yêu cầu/ mã chức năng
+ Chức năng cần kiểm thử
+ Điều kiện kiểm thử: thể hiện trạng thái hệ thống/môi trường dùng để kiểm thử + Dữ liệu đầu vào
+ Mô tả các bước thực hiện + Kết quả mong đợi + Kết quả tes
23. Test plan là gì? Một bản test plan gồm những nội dung nào?
➔ Test plan hay còn gọi là một bản kế hoạch kiểm thử là một tài liệu tổng quát chotoàn bộ dự án,
định nghĩa: Phạm vi kiểm thử, hướng tiếp cận để thực hiện kiểm thử, lịch trình kiểm thử, các
phần cần kiểm thử, những người phụ trách các hoạtđộng kiểm thử -
Một bản test plan gồm những nội dung
+ Định nghĩa các đơn vị kiểm thử
+ Các tính năng sẽ kiểm thử + Phương pháp kiểm thử
+ Các kết quả kiểm thử
+ Phân bổ nhiệm vụ và lịch trình
24. So sánh các phương pháp kiểm thử hộp đen và kiểm thử hộp trắng.
Kiểm thử hộp đen (Blackbox
Kiểm thử hộp trắng testing) (Whitebox testing) Đặc điểm
-Xem phần mềm như một hộp
-Là việc kiểm tra các đoạn mã
đen, người kiểm thử không cần
chương trình, xem xét cấu trúc
quan tâm đến cấu trúc và hoạt
bên trong, xem nó có vận hành động bên trong
đúng theo thiết kế hay không.
-Cơ sở của kiểm thử hộp đen là
- Cơ sở của kiểm thử hộp trắng:
đặc tả chức năng và dữ liệu đầu
dựa trên mã nguồn: các rẽ vào mà nó sử dụng
nhánh, vòng lặp (if, while, for...)
-Cách thực hiện: nhập dữ liệu
- Người kiểm thử yêu cầu phải
đầu vào qua giao diện, thực thi
hiểu biết về lập trình, về sự vận
chương trình, xem kết quả đầu hành của chương trình
ra có đúng với mong đợi không? Điểm mạnh
– Không cần truy cập mã nguồn – Rất hiệu quả trong việc tìm
lỗi, đặc biệt là các lỗi ẩn (mà
– Không cần kiến thức về các blackbox testing không phát ngôn ngữ lập trình hiện ra)
– Kiểm thử được thực hiện với
góc nhìn của người dùng
-> Mang tính khách quan (tách
biệt với góc nhìn của lập trình viên) Hạn chế
– Khó thiết kế test cases
– Là sự kết hợp giữa Whitebox + Blackbox testing
– Kiểm thử tất cả các khả năng là không khả thi.
– Người kiểm thử không truy cập vào mã nguồn.
– Nhưng biết được về thông tin
cấu trúc bên trong (có giới hạn)
thông qua : Các tài liệu đặc tả,
tài liệu thiết kế chi tiết, thiết kế
kiến trúc, thuật toán, cấu trúc dữ liệu sử dụng...
Document Outline

  • 1. Quy trình phát triển phần mềm có những hoạt động chính nào? Hãy trình bày những hoạt động này
  • 2. Mô hình phát triển phần mềm Thác nước trải qua những giai đoạn nào? Hãy trình bày về những giai đoạn này.
  • 3. Trình bày ý tưởng chung của mô hình phát triển phần mềm Tiến hóa (Evolutionary development).
  • 4. Mô hình phát triển phần mềm Dựa trên thành phần (Component-based software engineering) trải qua những giai đoạn nào? Hãy trình bày về những giai đoạn này ?
  • 5. Khung quy trình phát triển phần mềm Scrum gồm những giai đoạn nào? gồm những sự kiện nào? Hãy trình bày về các giai đoạn và sự kiện này.?
  • 6. Scrum master và Product owner đóng vai trò như thế nào trong khung quy trình phát triển phần mềm Scrum?
  • 7. Yêu cầu phần mềm là gì? Hãy phân biệt và cho ví dụ thể hiện sự khác nhau giữa Yêu cầu chức năng và Yêu cầu phi chức năng.
  • 8. Việc mô tả yêu cầu phần mềm có thể chia thành hai mức độ: Yêu cầu người dùng (User requirements) và Yêu cầu hệ thống (System requirements). Hãy phân biệt và cho ví dụ thể hiện sự khác nhau giữa hai mức độ này
  • 9. Quy trình kỹ nghệ yêu cầu (Requirements engineering process) bao gồm những hoạt động chính nào? Hãy trình bày về những hoạt động này.
  • 10. Trong quy trình kỹ nghệ yêu cầu thường gặp phải những vấn đề trở ngại nào?
  • 11. Kiến trúc phần mềm là gì? Kiến trúc phần mềm có ảnh hưởng gì đến chất lượng của sản phẩm phần mềm? Nêu 3 thuộc tính chất lượng bị ảnh hưởng bởi kiến trúc phần mềm và giải thích vì sao.
  • 12. Vì sao nên sử dụng các kiểu kiến trúc có sẵn khi thiết kế phần mềm? Hãy trình bày ý tưởng và giải thích các thành phần cũng như quan hệ giữa chúng của một kiểu kiến trúc mà bạn biết. Lợi ích khi sử dụng kiểu kiến trúc này là gì?
  • 13. Độ đo coupling phản ánh điều gì trong một thiết kế phần mềm? Nó ảnh hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo coupling là thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc phục là gì?
  • 14. Độ đo cohesion phản ánh điều gì trong một thiết kế phần mềm? Nó ảnh hưởng thế nào đến chất lượng phần mềm? Người thiết kế mong muốn độ đo này thấp hay cao trong một thiết kế phần mềm? Giải pháp khắc phục là gì?
  • 15. Phân biệt giữa 2 cách tiếp cận trong thiết kế: hướng đối tượng và hướng chức năng. Lấy ví dụ minh họa sự khác nhau thông qua việc thiết kế hệ thống quản lý đào tạo theo tín chỉ của trường Đại học Quy Nhơn (sinh viên có thể đề xuất hệ thống khác).
  • 16. Nêu và giải thích các hoạt động trong 2 quy trình viết mã nguồn: Quy trình viết mã tăng dần (Incremental Coding Process) và Quy trình viết mã hướng kiểm thử (Test-Driven Development). So sánh sự giống và khác nhau giữa 2 quy trình này.
  • 18. Tái cấu trúc mã nguồn là gì? Vì sao cần tái cấu trúc mã nguồn? Hãy nêu và giải thích 03 hoạt động tái cấu trúc mã nguồn mà bạn biết. Nêu tên một IDE bạn biết có hỗ trợ tái cấu trúc mã nguồn.
  • 19. Vì sao cần quản lý mã nguồn? Nêu tên và giới thiệu vắn tắt về một công cụ quản lý mã nguồn mà bạn biết. Nêu tên và mục đích của 05 hoạt quản lý mã nguồn phổ biến. Phân loại các công cụ quản lý mã nguồn.
  • 20. Kiểm thử phần mềm là gì? Nêu và giải thích các mức độ kiểm thử trong một dự án phát triển phần mềm.
  • 21. Trình bày mục đích của việc kiểm thử phần mềm. Nêu sự khác nhau giữa Xác minh (Software verification) và Thẩm định (Software validation).
  • 22. Test case là gì? Cấu trúc của một Test case gồm những thành phần cơ bản nào?
  • 23. Test plan là gì? Một bản test plan gồm những nội dung nào?