NỘI DUNG ÔN TẬP
NHẬP MÔN CÔNG NGHỆ PHẦN MỀM
A. LÝ THUYẾT
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 những hoạt động chính nào? Hãy trình
bày những hoạt động này.
=> Có 4 hđ :
- : Đặ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ó
- 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.
- : Xác minh và thẩm định phần mềm (verification and validation, aka V&V)
Phần mềm được kiểm tra xem có đúng theo đặc tả và có đáp ứng theo nhu cầu của
người dùng không
- : PhầnTiến hóa phần mềm (Software evolution, hoặc software maintenance)
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 trải qua những giai đoạn nào?Thác nước
Hãy trình bày về những giai đoạn này.
=> Trải qua 5 giai đoạn:
1. : thảo luận để nắm rõ đc các yêu cầu, thử nghiệm tất cả cácĐịnh nghĩa yêu cầu
yêu cầu để đảm bảo chúng có thể kiểm cứng được hay k
2. theo yêu cầu để tạo ra thiết kế, thảo luận về phần cứng,Thiết kế hệ thống:
phần mềm, tài liệu thiết kế
3. : từ thiết kế tạo ra các ctrinh, tích hợp code choHiện thực kiểm thử đơn vị
giai đoạn tiếp theo, unit testing
4. chắc chắn hđông chạy trong mtruong tươngTích hợp kiểm thử hệ thống:
ứng, không lỗi server, đảm bảo các tiêu chí test đc đáp ứng k sự cố
xảy ra khi hệ thống được triển khai
5. Vận hành bảo trì: trường hợp ng dùng gặp lỗi phải chắc chắn khắc phục
được, hệ thống luôn đc cập nhật các tính năng mới để nâng cao hiệu quả
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 hoạt động (specification, development, validation) ,đan xen nhau
Sản phẩm được bàn giao cho khách hàng trải qua nhiều phiên bản (các phiên bản
này được gọi là các , phần tăng trưởng increment)
Nhà phát triển sẽ đưa ra nhanh nhất dựa trên phiên bản đầu tiên các đặc tả ban
đầu lấy phản hồi để từ khách hàng. Các phiên bản sau là sự nâng cấp, bổ sung
tính năng so với phiên bản trước.
4. hình phát triển phần mềm còn gọi hướng tái sửDựa trên thành phần
dụng trải qua những giai đoạn nào?(Component-based software engineering)
Hãy trình bày về những giai đoạn này.***************************
=> Ý tưởng chung: hướng tiếp cận này dựa trên một số component (các thư viện,
các module…) đã có.
Người ta tìm cách chúng lại với nhau, để xây dựng thành hệ thống mớitích hợp
(thay vì phát triển từ “con số 0”)
5. Khung quy trình phát triển phần mềm gồm những giai đoạn nào?Scrum
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.
=> Gồm 3 giai đoạn:
GĐ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
GĐ2: các vòng Sprint, mỗi Sprint sẽ tạo ra một phần tăng trưởng
GĐ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,...
- Các sự kiện trong scrum:
+ Sprint : 1 giai đoạn, 2-4 tuần
+ Sprint planning: cuộc họp lên kế hoạch cho sprint
+ Daily Scrum: họp hằng ngày
+ Sprint Review: họp demo sản phẩm
+ Sprint Retrospective: họp ruits kinh nghiệm
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
=> * Scrum master:
- 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
- Định nghĩa và quyết định thứ tự ưu tiên các yêu cầu
7. Yêu cầu phần mềmgì? Hãy phân biệt và cho dụ thể hiện sự khác nhau
giữa .Yêu cầu chức năng Yêu cầu phi chức năng
=> * Yêu cầu phần mềm 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.
* Phân biệt yêu cầu chức năng và phi chức năng:
Yêu cầu chức năng Yêu cầu phi chức năng
- những phát biểu về những chức - những ràng buộc đối với các chức
năng(dịch vụ) hệ thống cần phải cung
cấp
- Trong một số trường hợp, cũng phát
biểu cụ thể những cái hệ thống sẽ không
cung cấp
năng(dịch vụ) mà hệ thống cung cấp
Các ràng buộc như: về thời gian, hiệu
năng, quy trình phát triển phần mềm....
- Thường áp dụng lên toàn hệ thống hơn
lên từng hệ thống
VD:
- Người dùng 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
VD:
- Hệ thống phải dễ sử dụng
- 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ệctả 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) (System requirements). HãyYêu cầu hệ thống
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 Yêu cầu hệ thống
- Những tả yêu cầu mức cao, trừu
tượng
- Ngôn ngữ tự nhiên
- Đối tượng: người dùng
- Những mô tả yêu cầu mức chi tiết
- Ngôn ngữ kỹ thuật
- Đối tượng: nhà phát triển
VD: Hệ thống cho phép thêm sản phẩm
mới
VD: Hệ thống cho phép thêm sản phẩm
mới gồm các thông tin: tên sản phẩm, giá,
kích thước ....
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 bao gồm các hoạt động nhằm tạo ra bản đặc tả yêu cầu
chất lượng. Gồm 3 hđông:
HĐ1: Thu thập và phân tích yêu cầu
- Kết thúc giai đoạn này, ng phân tích sẽ cơ bản hiểu được hệ thống cần phải có những
chức năng gì và kết quả đầu ra của hệ thống
- Quá trình này thường liên quan tới nhiều người => các bên liên quan: khách hàng, ng
dùng cuối, ng phân tích, ng quản lý...
- Trong quá trình phân tích yêu cầu thì các bên liên quan sẽ có 1 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ọ, 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?
HĐ2: Đặc tả yêu cầu
- Là việc ghi vào tài liệu những mô tả về hệ thống
- Những vấn đề như giao diện, ngôn ngữ sdung, công cụ... cũng đc bàn tới
HĐ3: 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 đúng với những yêu cầ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 ,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 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 gì? Kiến trúc phần mềm ảnh hưởng đế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.*********************
=>
- Kiến trúc phần mềm: Kiến trúc phần mềm của một chương trình máy
tính hay một hệ thống tính toán là cấu trúc của các thành phần trong
hệ thống đó. Kiến trúc phần mềm bao gồm các phần tử phần mềm, các
thuộc tính và mối quan hệ giữa chúng
- Kiến trúc phần mềm cung cấp một cái nhìn tổng quan về các thành phần
con cấu thành nên một hệ thống và cách chúng tương tác, phối hợp với
nhau.
Kiến trúc phần mềm cung cấp các góc nhìn khác nhau về hệ thống cần xây
dựng
+ Góc nhìn thể hiện các thành phần (component) và mối liên
hệ giữa chúng (về khía cạnh logic)
+ Góc nhìn về sự phân bố các thành phần lên các tài nguyên hệ thống (về khía cạnh vật
lý)
+ Góc nhìn chi tiết về các mô-dun và mối liên hệ giữa chúng
12.Vì sao nên sử dụng các kiểu kiến trú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ụng
thà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
tả( ý tưởng) : Tách phần presentation interaction từ hệ thống data. Hệ thống
được tổ chức thành 3 phần tương tác qua lại lẫn nhau.
Giải thích:
- Model: có thể là cơ sở dữ liệu, file hay một đối tượng đơn giản.
- View: View phương tiện hiển thị các đối tượng trong một ứng dụng. Chẳng hạn
như hiển thị một cửa sổ, nút hay văn bản trong một cửa sổ khác. Nó bao gồm bất cứ thứ
gì mà người dùng có thể nhìn thấy được.
- Controller: Một controller bao gồm cả Model lẫn View. nhận input thực hiện
các tương tác. Được sử dụng khi: nhiều cách để xem tương tác với dữ liệu
cũng được sử dụng khi không về những yêu cầu về tương tác trình bày dữ liệu
trong tương lai
Ưu điểm( lợi ích):
- Hỗ trợ quá trình phát triển nhanh chóng: Với đặc điểm hoạt động độc lập của từng
thành phần, các lập trình viên có thể làm việc đồng thời trên từng bộ phận khác nhau
của mô hình này. MVC giúp tiết kiệm rất nhiều thời gian.
- Khả năng cung cấp đồng thời nhiều khung View: Với mô hình MVC=>tạo ra
đồng thời nhiều khung View cho Model.
- Hỗ trợ các kỹ thuật không đồng bộ: MVC có thể hoạt động trên nền tảng JavaScript.
Điều này có nghĩa là các ứng dụng MVC có thể hoạt động với các file PDF, các trình
duyệt web cụ thể, và cả các widget máy tính.
- Dễ dàng thao tác chỉnh sửa: Bộ phận Model hoạt động tách biệt với View đồng nghĩa
với việc bạn có thể đưa ra các thay đổi, chỉnh sửa hoặc cập nhật dễ dàng ở từng bộ
phận.
13.Độ đo coupling phản ánh điều 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ì?
- 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, kết nối giữa các module với nhau
- Nó ảnh hưởng khá đáng kể : khả năng bảo trì, mở rộng, thử nghiệm...
- Người thiết kế mong muốn độ đo coupling là thấp ( low coupling)
- Giải pháp: đảo ngược sự phụ thuộc
14.Độ đo cohesion phản ánh điều 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
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ì?
- Phản ánh sức mạnh liên kết giữa các thành phần trong cùng một module
- Ảnh hưởng theo nhiều cách: độ dễ hiểu: một module độ cohesion càng cao thì
sẽ dễ hiểu hơn cho ng lập trình=> giảm tgian cần thiết cho việc bảo trì; độ dễ kiểm
tra và dễ mở rộng tương tự độ dễ hiểu
- Mong muốn độ cohesion cao ( High cohesion)
- Giải pháp: chia hệ thống thành các modul nhỏ khác nhau
15.Phân biệt giữa 2 cách tiếp cận trong thiết kế: hướng đối tượng hướng
chức năng. Lấy 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).
Hướng đối tượng Hướng chức năng
-Tập hợp các đối tượng
- Tiêu chí: trạng thái và hành vi của đối
tượng
- Tập hợp các chức năng
- Tiêu chí: nhiệm vụ cần
thực hiện
- Dễ hiểu, dễ bảo trì, dễ mở rộng
- Khó viết cho các hệ thống phức tạp
- Dễ viết, dễ ktra
- khó hiểu, khó bảo trì, khó
mở rộng
Ví dụ: - Các đối tượng:
+ Sinh viên: các thuộc tính: họ tên,
msv, lớp học.. các pthuc như đăng
môn học, xem lịch học...
+ Giảng viên: họ tên, giảng viên,
khoa.... chấm điểm, giảng dạy môn
học...
+ Môn học: mã môn học, tên môn... đky
môn học, xem lịch học...
+ Lớp học: lớp, tên lớp, số sinh
viên.... xem lịch học
- Mối quan hệ:
+ SV có thể đki môn học
+ Môn học đc giảng dạy trong lớp học
- Các chức năng:
Đăng ký môn học, xem lịch
học, giảng dạy môn học,
chấm điểm, xem lịch học...
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 mã tăng dần (Incremental Coding Process)Quy trình viếthướ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 mã tăng dần (Incremental Coding Process)
-Viết mã 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 có.
- Tiếp tục bổ sung viết mã cho các chức năng khác.
- Điểm mạnh:
– Dễ debug (dễ phát hiện lỗi): lập trình viên viết chạy test script sau mỗi lần viết
mã cho chức năng mới, nên nếu chạy test script phát hiện lỗi, thì lỗi này
thuộc về phần mã mới bổ sung vào gần nhất.
Việc viết test script ý nghĩa rất lớn khi lệnh càng ngày càng nhiều: test script
giúp kiểm tra nhanh, chính xác và thường xuyên.
Test script sở để thực hiện kiểm thử đơn vị (unit testing) trước khi đưa module
lên server (repository)
- Hạn chế: Giữa nguồn test scripts thường không đồng bộ: Viết 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.
Quy trình viết mã hướng kiểm thử (Test-Driven Development) TDD
• TDD là quy trình viết mã ngược với hướng tiếp cận thông thường khi viết mã:
– Đầu tiên, viết các test cases để kiểm tra mã trước.
– Sau đó mới viết mã để thỏa các test cases này
- Viết test scripts cho một số chức năng ban đầu dựa trên các đặc tả.
- Viết mã để thỏa các test cases.
- Chạy test script.
- Nếu có lỗi thì sửa, rồi chạy 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ó cần cải tiến mã không, nếu
có 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:
– Mã nguồn luôn đồng bộ với test scripts.
– 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 chức 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ế:
– 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 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ó
Sự giống nhau giữa quy trình viết tăng dần quy trình viết hướng kiểm
thử
Cả hai quy trình đều chú trọng đến việc kiểm thử mã ngay từ giai đoạn đầu tiên của quá
trình phát triển.
Cả hai quy trình đều được thực hiện theo cách tiếp cận lặp đi lặp lại, trong đó các chức
năng của phần mềm được phát triển dần dần.
Cả hai quy trình đều thể được áp dụng cho các dự án phần mềm quy độ
phức tạp khác nhau.
Sự khác nhau giữa quy trình viết tăng dần quy trình viết hướng kiểm
thử
Cách tiếp cận: Quy trình viết tăng dần bắt đầu bằng việc viết cho một số chức
năng ban đầu, sau đó viết test script để kiểm thử sửa lỗi nếu có. Quy trình viết
hướng kiểm thử bắt đầu bằng việc viết test script, sau đó viết mã để thỏa các test case.
Thời điểm viết test script: Trong quy trình viết tăng dần, test script thường được
viết sau khi đã được viết xong. Trong quy trình viết hướng kiểm thử, test script
thường được viết trước khi mã được viết.
Tính đồng bộ giữa nguồn test script: Trong quy trình viết tăng dần,
nguồn test script thường không đồng bộ. Trong quy trình viết hướng kiểm thử,
mã nguồn và test script luôn đồng bộ.
Tính đầy đủ của nguồn: Trong quy trình viết tăng dần, tính đầy đủ của
nguồn phụ thuộc vào sự đầy đủ của test script. Trong quy trình viết mã hướng kiểm thử,
tính đầy đủ của mã nguồn phụ thuộc vào tính toàn diện của bộ test cases.
17.Quy ước viết (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 giải thích 05 quy ước viết 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?
- Quy ước viết mã là một tập hợp các quy tắc chung về cách viết mã nguồn. Các quy
tắc này bao gồm cách đặt tên biến, hàm, class, file, cách định dạng mã, cách sử dụng
chú thích,...
- Ảnh hưởng: tích cực: Tăng khả năng đọc hiểu mã, giảm thiểu lỗi, tăng khả năng
abor trì...
- 5 quy ước
Tên biến, hàm, class, file: Các tên biến, hàm, class, file phải ngắn gọn, dễ hiểu
mô tả đúng chức năng của chúng.
Định dạng mã: Mã nguồn phải được định dạng một cách rõ ràng và nhất quán. Điều
này giúp cho mã nguồn trở nên dễ đọc và dễ hiểu hơn.
Chú thích: Chú thích nên được sử dụng để giải thích chức năng của mã nguồn. Chú
thích giúp cho mã nguồn trở nên dễ hiểu và dễ bảo trì hơn.
Khả năng tái sử dụng:nguồn nên được viết theo cách có thể tái sử dụng được.
Điều này giúp cho mã nguồn trở nên ngắn gọn và dễ bảo trì hơn.
Tính kiểm tra: Mã nguồn nên được viết theo cách thể kiểm tra được. Điều này
giúp cho mã nguồn trở nên an toàn và đáng tin cậy hơn.
- Nhìn chung, các quy ước viết thể giống nhau cho các ngôn ngữ lập trình.
Tuy nhiên, cũng một số quy ước khác nhau giữa các ngôn ngữ lập trình. dụ,
quy ước đặt tên biến trong ngôn ngữ C# khác với quy ước đặt tên biến trong ngôn
ngữ Java.
18.Tái cấu trúcnguồn là gì? sao cần tái cấu trúc mã 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.
- Tái cấu trúc (refactoring) là quá trình thay đổi hệ thống phần mềm theo cách không
làm thay đổi hành vi bên ngoài của code nhưng vẫn cải thiện cấu trúc bên trong của
nó. Đó là một cách có kỷ luật để làm sạch code, giúp giảm thiểu cơ hội tạo ra lỗi. Về
bản chất, khi bạn cấu trúc lại, bạn đang cải thiện thiết kế của mã sau khi nó đã được
viết.
- Cần tái cấu trúc mã nguồn vì:
Để cải thiện tính dễ hiểu của mã: Mã nguồn dễ hiểu sẽ dễ dàng bảo trì, mở rộng và nâng
cấp hơn.
Để cải thiện tính hiệu quả của mã: Mã được tái cấu trúc có thể được thực thi nhanh hơn
và sử dụng ít tài nguyên hơn.
Để cải thiện tính linh hoạt của mã: Mã được tái cấu trúc có thể dễ dàng thích ứng với
những thay đổi trong yêu cầu.
- 3 hđ tái cấu trúc:
Phân tách mã: Phân tách mã thành các thành phần nhỏ hơn, rõ ràng hơn.
Chuyển đổi mã: Chuyển đổi mã từ một định dạng sang định dạng khác.
Xóa mã: Xóa mã không cần thiết hoặc không sử dụng.
- Các IDE: Netbeans, Microsoft Visual Studio, Eclipse...
19.Vì sao cần quản nguồn? Nêu tên 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ý
nguồn phổ biến. Phân loại các công cụ quản lý mã nguồn.
- nguồn một tài sản quý giá của các dự án phát triển phần mềm. thể tốn
nhiều thời gian và công sức để tạo ra, và nếu bị mất hoặc hư hỏng, có thể gây ra những
hậu quả nghiêm trọng. Quản lý mã nguồn giúp bảo vệ mã nguồn khỏi những rủi ro này,
đồng thời giúp cho việc phát triển phần mềm trở nên hiệu quả hơn.
- Nêu tên và giới thiệu: Git: Đâycô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 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ác
thao tác về vấn đề kiểm tra source code trong quá trình làm việc
- 5 hoạt động:
Thêm mã mới: Thêm mã mới vào dự án.
Sửa đổi mã: Sửa lỗi, cải thiện hiệu năng, hoặc thêm tính năng mới cho mã nguồn.
Xóa mã: Xóa mã không cần thiết hoặc lỗi thời.
Tạo nhánh: Tạo một phiên bản mới của mã nguồn để thử nghiệm các thay đổi mới.
Gộp nhánh: Gộp các thay đổi từ các nhánh khác nhau vào nhánh chính của dự án.
- Phân loại:
Theo cách lưu trữ mã nguồn:
Hệ thống kiểm soát phiên bản tập trung (CVCS): nguồn được lưu trữ trên một máy
chủ trung tâm.
Hệ thống kiểm soát phiên bản phân tán (DVCS): nguồn được lưu trữ trên máy tính
của mỗi lập trình viên.
Theo tính năng:
Công cụ bản: Chỉ cung cấp các tính năng bản như theo dõi lịch sử thay đổi
cộng tác.
Công cụ nâng cao: Cung cấp các tính năng nâng cao như kiểm soát chất lượng, quản lý
phiên bản, và tích hợp với các công cụ khác.
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.
- Khái niệm: là quá trình vận hành để tìm ra lỗi.
+ Một ca kiểm thử (test case) tốt: là ca kiểm thử có xác suất cao tìm ra lỗi
chưa phát hiện.
+ Mục tiêu: thiết kế các ca kiểm thử để có thể phát hiện ra một cách có hệ
thống các loại lỗi khác nhau với chi phí thời gian và công sức ít nhất có thể.
- 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.
+ unit testing (Kiểm thử đơn vị): thường do Developer phụ trách, họ sẽ đi kiểm tra các
module, các hàm, các phương thức, các lớp,… họ viết ra nhằm gia tăng sự tin cậy
cho các chức năng mà mình viết.
+ Integration testing (Kiểm thử tích hợp): Kiểm thử tích hợp kiểm thử sự tương tác
giữa các chức năng với nhau trong hệ thống và được thực hiện bởi Tester
+ System testing (Kiểm thử hệ thống): Kiểm thử hệ thống là kiểm thử một hệ thống đã
hoàn thành, đã tích hợp đầy đủ các chức năng nhằm kiểm tra xem hệ thống phần mềm
đó có đáp ứng đầy đủ các yêu cầu chức năng theo bản đặc tả yêu cầu phần mềm (SRS)
hay không. Người thực hiện test level này thường là Tester.
- Acceptance testing (Kiểm thử chấp nhận): Mức độ kiểm thử phần mềm cuối cùng
chính Acceptance Test (Kiểm thử chấp nhận) kiểm tra xem hệ thống đáp ứng
đúng nhu cầu mong đợi của khách hàng hay không. Kiểm thử chấp nhận thường
trách nhiệm của người dùng hoặc khách hàng. Trong kiểm thử hệ thống, khách hàng sẽ
kiểm tra xem phần mềm được
viết có hoạt động đúng như mong đợi của mình không, có đảm bảo tính tiện dụng, hiệu
suất hoạt động có như mong đợi không, có bảo mật tốt hay không,…
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 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" 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ả test
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 cho
toà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.
B. BÀI TẬP
1. Viết mô tả Use cases
2. Vẽ biểu đồ hoạt động (Activity diagram)
3. Xây dựng các Test cases
-- HẾT --

Preview text:

NỘI DUNG ÔN TẬP
NHẬP MÔN CÔNG NGHỆ PHẦN MỀM A. LÝ THUYẾT
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ó 4 hđ :
- Đặ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ó
- 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.
- Xác minh và thẩm định phần mềm (verification and validation, aka : V&V)
Phần mềm được kiểm tra xem có đúng theo đặc tả và có đáp ứng theo nhu cầu của người dùng không
- 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.
=> Trải qua 5 giai đoạn:
1. Định nghĩa yêu cầu: thảo luận để nắm rõ đc các yêu cầu, thử nghiệm tất cả các
yêu cầu để đảm bảo chúng có thể kiểm cứng được hay k
2. Thiết kế hệ thống: theo yêu cầu để tạo ra thiết kế, thảo luận về phần cứng,
phần mềm, tài liệu thiết kế
3. Hiện thực và kiểm thử đơn vị: từ thiết kế tạo ra các ctrinh, tích hợp code cho
giai đoạn tiếp theo, unit testing
4. Tích hợp và kiểm thử hệ thống: chắc chắn hđông chạy trong mtruong tương
ứng, không có lỗi server, đảm bảo các tiêu chí test đc đáp ứng và k có sự cố gì
xảy ra khi hệ thống được triển khai
5. Vận hành và bảo trì: trường hợp ng dùng gặp lỗi phải chắc chắn khắc phục
được, hệ thống luôn đc cập nhật các tính năng mới để nâng cao hiệu quả
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 hoạt động (specification, development, validation) đan xen nhau,
Sản phẩm được bàn giao cho khách hàng trải qua nhiều phiên bản (các phiên bản
này được gọi là các phần tăng trưởng, increment)
Nhà phát triển sẽ đưa ra phiên bản đầu tiên nhanh nhất dựa trên các đặc tả ban
đầu để lấy phản hồi từ khách hàng. Các phiên bản sau là sự nâng cấp, bổ sung
tính năng so với phiên bản trước.
4. Mô hình phát triển phần mềm Dựa trên thành phần còn gọi là hướng tái sử
dụng (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.***************************
=> Ý tưởng chung: hướng tiếp cận này dựa trên một số component (các thư viện, các module…) đã có.
Người ta tìm cách tích hợp chúng
lại với nhau, để xây dựng thành hệ thống mới
(thay vì phát triển từ “con số 0”)
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. => Gồm 3 giai đoạn:
GĐ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
GĐ2: các vòng Sprint, mỗi Sprint sẽ tạo ra một phần tăng trưởng
GĐ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,...
- Các sự kiện trong scrum:
+ Sprint : 1 giai đoạn, 2-4 tuần
+ Sprint planning: cuộc họp lên kế hoạch cho sprint
+ Daily Scrum: họp hằng ngày
+ Sprint Review: họp demo sản phẩm
+ Sprint Retrospective: họp ruits kinh nghiệm 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? => * Scrum master:
- 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
- Định nghĩa và quyết định thứ tự ưu tiên các yêu cầu
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 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.
* Phân biệt yêu cầu chức năng và phi chức năng: Yêu cầu chức năng Yêu cầu phi chức năng
- Là những phát biểu về những chức - Là những ràng buộc đối với các chức
năng(dịch vụ) mà hệ thống cần phải cung năng(dịch vụ) mà hệ thống cung cấp cấp
Các ràng buộc như: về thời gian, hiệu
năng, quy trình phát triển phần mềm....
- Trong một số trường hợp, nó cũng phát - Thường áp dụng lên toàn hệ thống hơn là
biểu cụ thể những cái hệ thống sẽ không lên từng hệ thống cung cấp VD: VD:
- Người dùng có thể tìm kiếm sách theo - Hệ thống phải dễ sử dụng
mã sách, tiêu đề hoặc tên tác giả
- Hệ thống phải phản hồi trong vòng <1s
- Hệ thống có thể xuất báo cáo thống kê số đối với tất cả các yêu cầu tìm kiếm sách
lượt mượn sách trong một thá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. => Yêu cầu người dùng Yêu cầu hệ thống
- Những mô tả yêu cầu mức cao, trừu - Những mô tả yêu cầu mức chi tiết tượng - Ngôn ngữ kỹ thuật - Ngôn ngữ tự nhiên
- Đối tượng: nhà phát triển
- Đối tượng: người dùng
VD: Hệ thống cho phép thêm sản phẩm VD: Hệ thống cho phép thêm sản phẩm mới
mới gồm các thông tin: tên sản phẩm, giá, kích thước ....
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 bao gồm các hoạt động nhằm tạo ra bản đặc tả yêu cầu
chất lượng. Gồm 3 hđông:
HĐ1: Thu thập và phân tích yêu cầu
- Kết thúc giai đoạn này, ng phân tích sẽ cơ bản hiểu được hệ thống cần phải có những
chức năng gì và kết quả đầu ra của hệ thống
- Quá trình này thường liên quan tới nhiều người => các bên liên quan: khách hàng, ng
dùng cuối, ng phân tích, ng quản lý...
- Trong quá trình phân tích yêu cầu thì các bên liên quan sẽ có 1 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? HĐ2: Đặc tả yêu cầu
- Là việc ghi vào tài liệu những mô tả về hệ thống
- Những vấn đề như giao diện, ngôn ngữ sdung, công cụ... cũng đc bàn tới
HĐ3: 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 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 ,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.********************* =>
- Kiến trúc phần mềm: Kiến trúc phần mềm của một chương trình máy
tính hay một hệ thống tính toán là cấu trúc của các thành phần trong
hệ thống đó. Kiến trúc phần mềm bao gồm các phần tử phần mềm, các
thuộc tính và mối quan hệ giữa chúng
- Kiến trúc phần mềm cung cấp một cái nhìn tổng quan về các thành phần
con cấu thành nên một hệ thống và cách chúng
tương tác, phối hợp với nhau.
Kiến trúc phần mềm cung cấp các góc nhìn khác nhau về hệ thống cần xây dựng
+ Góc nhìn thể hiện các thành phần (component) và mối liên
hệ giữa chúng (về khía cạnh logic)
+ Góc nhìn về sự phân bố các thành phần lên các tài nguyên hệ thống (về khía cạnh vật lý)
+ Góc nhìn chi tiết về các mô-dun và mối liên hệ giữa chúng
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ụng
thà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
Mô tả( ý tưởng) : Tách phần presentation và interaction từ hệ thống data. Hệ thống
được tổ chức thành 3 phần tương tác qua lại lẫn nhau. Giải thích:
- Model: có thể là cơ sở dữ liệu, file hay một đối tượng đơn giản.
- View: View là phương tiện hiển thị các đối tượng trong một ứng dụng. Chẳng hạn
như hiển thị một cửa sổ, nút hay văn bản trong một cửa sổ khác. Nó bao gồm bất cứ thứ
gì mà người dùng có thể nhìn thấy được.
- Controller: Một controller bao gồm cả Model lẫn View. Nó nhận input và thực hiện
các tương tác. Được sử dụng khi: có nhiều cách để xem và tương tác với dữ liệu và
cũng được sử dụng khi không rõ về những yêu cầu về tương tác và trình bày dữ liệu trong tương lai Ưu điểm( lợi ích):
- Hỗ trợ quá trình phát triển nhanh chóng: Với đặc điểm hoạt động độc lập của từng
thành phần, các lập trình viên có thể làm việc đồng thời trên từng bộ phận khác nhau
của mô hình này. MVC giúp tiết kiệm rất nhiều thời gian.
- Khả năng cung cấp đồng thời nhiều khung View: Với mô hình MVC=>tạo ra
đồng thời nhiều khung View cho Model.
- Hỗ trợ các kỹ thuật không đồng bộ: MVC có thể hoạt động trên nền tảng JavaScript.
Điều này có nghĩa là các ứng dụng MVC có thể hoạt động với các file PDF, các trình
duyệt web cụ thể, và cả các widget máy tính.
- Dễ dàng thao tác chỉnh sửa: Bộ phận Model hoạt động tách biệt với View đồng nghĩa
với việc bạn có thể đưa ra các thay đổi, chỉnh sửa hoặc cập nhật dễ dàng ở từng bộ phận.
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ì?
- 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, kết nối giữa các module với nhau
- Nó ảnh hưởng khá đáng kể : khả năng bảo trì, mở rộng, thử nghiệm...
- Người thiết kế mong muốn độ đo coupling là thấp ( low coupling)
- 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ì?
- Phản ánh sức mạnh liên kết giữa các thành phần trong cùng một module
- Ảnh hưởng theo nhiều cách: độ dễ hiểu: một module có độ cohesion càng cao thì
sẽ dễ hiểu hơn cho ng lập trình=> giảm tgian cần thiết cho việc bảo trì; độ dễ kiểm
tra và dễ mở rộng tương tự độ dễ hiểu
- Mong muốn độ cohesion cao ( High cohesion)
- Giải pháp: chia hệ thống thành các modul nhỏ khác nhau
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). Hướng đối tượng Hướng chức năng
-Tập hợp các đối tượng
- Tập hợp các chức năng
- Tiêu chí: trạng thái và hành vi của đối - Tiêu chí: nhiệm vụ cần tượng thực hiện
- Dễ hiểu, dễ bảo trì, dễ mở rộng - Dễ viết, dễ ktra
- Khó viết cho các hệ thống phức tạp
- khó hiểu, khó bảo trì, khó mở rộng Ví dụ: - Các đối tượng: - Các chức năng:
+ Sinh viên: có các thuộc tính: họ tên, Đăng ký môn học, xem lịch
msv, lớp học.. các pthuc như đăng ký học, giảng dạy môn học,
môn học, xem lịch học...
chấm điểm, xem lịch học...
+ Giảng viên: họ tên, mã giảng viên,
khoa.... chấm điểm, giảng dạy môn học...
+ Môn học: mã môn học, tên môn... đky
môn học, xem lịch học...
+ Lớp học: mã lớp, tên lớp, số sinh viên.... xem lịch học - Mối quan hệ: + SV có thể đki môn học
+ Môn học đc giảng dạy trong lớp họ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.
Quy trình viết mã tăng dần (Incremental Coding Process)
-Viết mã 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 có.
- Tiếp tục bổ sung viết mã cho các chức năng khác. - Đ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
mã cho chức năng mới, nên nếu chạy test script phát hiện lỗi, thì lỗi này
thuộc về phần mã mới bổ sung vào gần nhất.
– Việc viết test script có ý nghĩa rất lớn khi mã lệnh càng ngày càng nhiều: test script
giúp kiểm tra nhanh, chính xác và thường xuyên.
– Test script là cơ sở để thực hiện kiểm thử đơn vị (unit testing) trước khi đưa module lên server (repository)
- 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.
Quy trình viết mã hướng kiểm thử (Test-Driven Development) TDD
• TDD là quy trình viết mã ngược với hướng tiếp cận thông thường khi viết mã:
– Đầu tiên, viết các test cases để kiểm tra mã trước.
– Sau đó mới viết mã để thỏa các test cases này
- Viết test scripts cho một số chức năng ban đầu dựa trên các đặc tả.
- Viết mã để thỏa các test cases. - Chạy test script.
- Nếu có lỗi thì sửa, rồi chạy 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ó cần cải tiến mã không, nếu
có 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:
– Mã nguồn luôn đồng bộ với test scripts.
– 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 chức 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ế:
– 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 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ó
Sự giống nhau giữa quy trình viết mã tăng dần và quy trình viết mã hướng kiểm thử
Cả hai quy trình đều chú trọng đến việc kiểm thử mã ngay từ giai đoạn đầu tiên của quá trình phát triển.
Cả hai quy trình đều được thực hiện theo cách tiếp cận lặp đi lặp lại, trong đó các chức
năng của phần mềm được phát triển dần dần.
Cả hai quy trình đều có thể được áp dụng cho các dự án phần mềm có quy mô và độ phức tạp khác nhau.
Sự khác nhau giữa quy trình viết mã tăng dần và quy trình viết mã hướng kiểm thử
Cách tiếp cận: Quy trình viết mã tăng dần bắt đầu bằng việc viết mã cho một số chức
năng ban đầu, sau đó viết test script để kiểm thử và sửa lỗi nếu có. Quy trình viết mã
hướng kiểm thử bắt đầu bằng việc viết test script, sau đó viết mã để thỏa các test case.
Thời điểm viết test script: Trong quy trình viết mã tăng dần, test script thường được
viết sau khi mã đã được viết xong. Trong quy trình viết mã hướng kiểm thử, test script
thường được viết trước khi mã được viết.
Tính đồng bộ giữa mã nguồn và test script: Trong quy trình viết mã tăng dần, mã
nguồn và test script thường không đồng bộ. Trong quy trình viết mã hướng kiểm thử,
mã nguồn và test script luôn đồng bộ.
Tính đầy đủ của mã nguồn: Trong quy trình viết mã tăng dần, tính đầy đủ của mã
nguồn phụ thuộc vào sự đầy đủ của test script. Trong quy trình viết mã hướng kiểm thử,
tính đầy đủ của mã nguồn phụ thuộc vào tính toàn diện của bộ test cases.
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?
- Quy ước viết mã là một tập hợp các quy tắc chung về cách viết mã nguồn. Các quy
tắc này bao gồm cách đặt tên biến, hàm, class, file, cách định dạng mã, cách sử dụng chú thích,...
- Ảnh hưởng: tích cực: Tăng khả năng đọc hiểu mã, giảm thiểu lỗi, tăng khả năng abor trì... - 5 quy ước
Tên biến, hàm, class, file: Các tên biến, hàm, class, file phải ngắn gọn, dễ hiểu và
mô tả đúng chức năng của chúng.
Định dạng mã: Mã nguồn phải được định dạng một cách rõ ràng và nhất quán. Điều
này giúp cho mã nguồn trở nên dễ đọc và dễ hiểu hơn.
Chú thích: Chú thích nên được sử dụng để giải thích chức năng của mã nguồn. Chú
thích giúp cho mã nguồn trở nên dễ hiểu và dễ bảo trì hơn.
Khả năng tái sử dụng: Mã nguồn nên được viết theo cách có thể tái sử dụng được.
Điều này giúp cho mã nguồn trở nên ngắn gọn và dễ bảo trì hơn.
Tính kiểm tra: Mã nguồn nên được viết theo cách có thể kiểm tra được. Điều này
giúp cho mã nguồn trở nên an toàn và đáng tin cậy hơn.
- Nhìn chung, các quy ước viết mã có thể giống nhau cho các ngôn ngữ lập trình.
Tuy nhiên, cũng có một số quy ước khác nhau giữa các ngôn ngữ lập trình. Ví dụ,
quy ước đặt tên biến trong ngôn ngữ C# khác với quy ước đặt tên biến trong ngôn ngữ Java.
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.
- Tái cấu trúc (refactoring) là quá trình thay đổi hệ thống phần mềm theo cách không
làm thay đổi hành vi bên ngoài của code nhưng vẫn cải thiện cấu trúc bên trong của
nó. Đó là một cách có kỷ luật để làm sạch code, giúp giảm thiểu cơ hội tạo ra lỗi. Về
bản chất, khi bạn cấu trúc lại, bạn đang cải thiện thiết kế của mã sau khi nó đã được viết.
- Cần tái cấu trúc mã nguồn vì:
Để cải thiện tính dễ hiểu của mã: Mã nguồn dễ hiểu sẽ dễ dàng bảo trì, mở rộng và nâng cấp hơn.
Để cải thiện tính hiệu quả của mã: Mã được tái cấu trúc có thể được thực thi nhanh hơn
và sử dụng ít tài nguyên hơn.
Để cải thiện tính linh hoạt của mã: Mã được tái cấu trúc có thể dễ dàng thích ứng với
những thay đổi trong yêu cầu. - 3 hđ tái cấu trúc:
Phân tách mã: Phân tách mã thành các thành phần nhỏ hơn, rõ ràng hơn.
Chuyển đổi mã: Chuyển đổi mã từ một định dạng sang định dạng khác.
Xóa mã: Xóa mã không cần thiết hoặc không sử dụng.
- Các IDE: Netbeans, Microsoft Visual Studio, Eclipse...
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.
- Mã nguồn là một tài sản quý giá của các dự án phát triển phần mềm. Nó có thể tốn
nhiều thời gian và công sức để tạo ra, và nếu bị mất hoặc hư hỏng, có thể gây ra những
hậu quả nghiêm trọng. Quản lý mã nguồn giúp bảo vệ mã nguồn khỏi những rủi ro này,
đồng thời giúp cho việc phát triển phần mềm trở nên hiệu quả hơn.
- Nêu tên và giới thiệu: 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ác
thao tác về vấn đề kiểm tra source code trong quá trình làm việc - 5 hoạt động:
Thêm mã mới: Thêm mã mới vào dự án.
Sửa đổi mã: Sửa lỗi, cải thiện hiệu năng, hoặc thêm tính năng mới cho mã nguồn.
Xóa mã: Xóa mã không cần thiết hoặc lỗi thời.
Tạo nhánh: Tạo một phiên bản mới của mã nguồn để thử nghiệm các thay đổi mới.
Gộp nhánh: Gộp các thay đổi từ các nhánh khác nhau vào nhánh chính của dự án. - Phân loại:
Theo cách lưu trữ mã nguồn:
Hệ thống kiểm soát phiên bản tập trung (CVCS): Mã nguồn được lưu trữ trên một máy chủ trung tâm.
Hệ thống kiểm soát phiên bản phân tán (DVCS): Mã nguồn được lưu trữ trên máy tính
của mỗi lập trình viên. Theo tính năng:
Công cụ cơ bản: Chỉ cung cấp các tính năng cơ bản như theo dõi lịch sử thay đổi và cộng tác.
Công cụ nâng cao: Cung cấp các tính năng nâng cao như kiểm soát chất lượng, quản lý
phiên bản, và tích hợp với các công cụ khác.
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.
- Khái niệm: là quá trình vận hành để tìm ra lỗi. +
Một ca kiểm thử (test case) tốt: là ca kiểm thử có xác suất cao tìm ra lỗi chưa phát hiện. +
Mục tiêu: thiết kế các ca kiểm thử để có thể phát hiện ra một cách có hệ
thống các loại lỗi khác nhau với chi phí thời gian và công sức ít nhất có thể.
- 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.
+ unit testing (Kiểm thử đơn vị): thường do Developer phụ trách, họ sẽ đi kiểm tra các
module, các hàm, các phương thức, các lớp,… mà họ viết ra nhằm gia tăng sự tin cậy
cho các chức năng mà mình viết.
+ Integration testing (Kiểm thử tích hợp): Kiểm thử tích hợp là kiểm thử sự tương tác
giữa các chức năng với nhau trong hệ thống và được thực hiện bởi Tester
+ System testing (Kiểm thử hệ thống): Kiểm thử hệ thống là kiểm thử một hệ thống đã
hoàn thành, đã tích hợp đầy đủ các chức năng nhằm kiểm tra xem hệ thống phần mềm
đó có đáp ứng đầy đủ các yêu cầu chức năng theo bản đặc tả yêu cầu phần mềm (SRS)
hay không. Người thực hiện test level này thường là Tester.
- Acceptance testing (Kiểm thử chấp nhận): Mức độ kiểm thử phần mềm cuối cùng
chính là Acceptance Test (Kiểm thử chấp nhận) – kiểm tra xem hệ thống có đáp ứng
đúng nhu cầu và mong đợi của khách hàng hay không. Kiểm thử chấp nhận thường là
trách nhiệm của người dùng hoặc khách hàng. Trong kiểm thử hệ thống, khách hàng sẽ
kiểm tra xem phần mềm được
viết có hoạt động đúng như mong đợi của mình không, có đảm bảo tính tiện dụng, hiệu
suất hoạt động có như mong đợi không, có bảo mật tốt hay không,…
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?
- "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ả test
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 cho
toà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. B. BÀI TẬP 1. Viết mô tả Use cases
2. Vẽ biểu đồ hoạt động (Activity diagram) 3. Xây dựng các Test cases -- HẾT --