Professional Documents
Culture Documents
Module 1: Introduction
Phần mềm
Sản phẩm phần mềm là phần mềm và tài liệu kèm theo được sản xuất và được thể hiện hay lưu
trữ ở bất kỳ một dạng vật thể nào, có thể được mua bán hoặc chuyển giao cho đối tượng khác
khai thác, sử dụng.
Khái niệm: Sản phẩm phần mềm & Hệ thống thông tin
Sản phẩm phần mềm:
Mã nguồn
Mã máy
Tài liệu
Bao gồm phần cứng, phần mềm, dữ liệu, thủ tục và chính con người
Nhiều yếu tố có mối liên hệ mật thiết với nhau, cùng làm nhiệm vụ thu thập, xử lý, lưu trữ và phân phối thông tin,
dữ liệu; cung cấp một cơ chế phản hồi để đạt được một mục tiêu định trước.
Phần mềm tạo ra sự khác biệt trong các tổ chức, bao gồm phong cách làm việc hiện đại và tự động hóa hơn, năng
suất lao động được tối ưu, giảm thiểu đáng kể…
Với xu hướng tin học hóa toàn bộ các hoạt động của hầu hết các lĩnh vực, phần mềm đóng vai trò vô cùng quan trọng
trong cuộc sống con người ngày nay, và con người ngày càng phụ thuộc vào phần mềm.
Được phát triển theo nhóm, do nhiều người tham gia phát triển
Module 1: Introduction 1
Tiêu chí chất lượng
Tính năng Tính khả dụng Khả năng bảo trì
Tính tương tác Tính hấp dẫn Khả năng kiểm định
Tính hoàn thiện Tiết kiệm thời gian Khả năng tương hợp
Khả năng sửa lỗi Sử dụng tài nguyên hợp Khả năng cài đặt
lý
Khả năng phục hồi Khả năng chung sống
Phần mềm được thay đổi trong quá trình phát triển và trong quá trình sử dụng.
Quá trình thu thập, phân tích và đặc tả yêu cầu có vấn đề
Tăng chi phí cho doanh nghiệp trong quá trình bảo trì
Ngành công nghiệp liên quan đến mọi khía cạnh của việc phát triển phần mềm
Cố gắng tạo ra các giải pháp giải quyết vấn đề ngay cả khi không có lý thuyết, công cụ
Tổng quan về SE
Mục tiêu:
Được ứng dụng, trở thành một ngành của các nền kinh tế
Phương pháp (Methods): Cách làm cụ thể để xây dựng phần mềm
Công cụ (Tools): Trợ giúp các phương pháp, bao gồm CASE - các công cụ trợ giúp các công đoạn khác nhau trong
tiến trình phát triển phần mềm
Module 1: Introduction 2
→ Nhằm tạo ra phần mềm hiệu quả với các ràng buộc cho trước
Lập kế hoạch
Thẩm định
Phát triển
Thiết kể
Kiểm thử
Tiến hóa
Những phần mềm quy mô lớn khó đáp ứng kịp thời nhu cầu thay đổi của người dùng.
Nếu không có phương pháp luận thiết kế nhất quán mà thiết kế theo cách riêng thì sẽ suy giảm chất lượng phần mềm
do phụ thuộc nhiều vào con người.
Nếu coi thường việc lập trình hơn thiết kế → giảm chất lượng phần mềm
Nếu coi thường việc tái sử dụng phần mềm → giảm năng suất lao động, …
Module 1: Introduction 3
Module 2: Process Models
Đặc tả Specification
Mô hình tiến trình (process model): thể hiện trừu tượng của tiến trình
Thác nước Waterfall Phân tách các giai đoạn đặc tả và phát triển
Tiến hóa Evolutionary Development Đặc tả, phát triển và kiểm định xen kẽ nhau
Phân tích & Xác định yêu cầu ↔ Thiết kế ↔ Cài đặt và Kiểm thử đơn vị ↔ Tích hợp và Kiểm
thử hệ thống ↔ Vận hành và bảo trì
Tiến trình lặp (iteration): sự lặp lại tiến trình để đạt tới mục tiêu
//dattrinh, bổ sung cho tiến trình lặp: Kết quả của một lần lặp được sử dụng như điểm bắt đầu của lần lặp tiếp theo.
Throw-away Prototyping: Bản mẫu. Mục tiêu là để hiễu yêu cầu khách hàng từng bước và hiểu sâu dần.
Đòi hỏi phải thường xuyên trao đổi với khách hàng, đưa khách hàng trải nghiệm các phiên bản trung gian để thẩm
định,…
Hạn chế
Cho các phần của hệ lớn (VD: giao diện người dùng)
Thành phần phần mềm (software components) là 1 đơn vị phần mềm (gói, hoặc module) đóng
gói 1 tập các dịch vụ có liên quan tới nhau. Mỗi thành phần đều có tên, giao diện và code.
Dựa trên việc sử dụng lại 1 cách có hệ thống, phần mềm được phát triển theo hướng thành phần. Hệ thống được tích
hợp từ những thành phần có sẵn.
Các bước (Có sự tương đồng, phát triển từ 4 hoạt động chung nhất)
source
Component Qualification (Đánh giá thành phần): Đảm bảo kiến trúc hệ thống xác định các yêu cầu của các thành
phần để trở thành 1 phần có thể tái sử dụng
Component Adaptation (Kiểm thử thành phần): Đảm bảo kiến trúc xác định các điều kiện thiết kế cho các thành
phần và các phương thức kết nối của chúng
Component Composition (Tích hợp thành phần): Đảm bảo hệ thống tích hợp với các thành phần phần mềm và tạo
thành 1 hệ thống làm việc
Component Update (Cập nhật thành phần): Đảm bảo cập nhật các thành phần có thể tái sử dụng
Phương pháp này ngày càng được ưa chuộng và sử dụng nhiều do các quy chuẩn về thành phần nổi lên mạnh mẽ.
II. Các hoạt động chung nhất của mọi tiến trình
4 hoạt động chung nhất:
Đặc tả: Định nghĩa các dịch vụ (chức năng) và các ràng buộc cho phần mềm
Thu thập và phân tích yêu cầu (Requirements elicitation and analysis)
Thẩm định & kiểm định yêu cầu (Requirements Validation & Verification)
Định nghĩa các dịch vụ (chức năng) và các ràng buộc cho phần mềm.
Note:
Verification Validation
Kiểm tra hệ thống trong khi và sau khi Đánh giá phần mềm dựa trên mức độ
phát triển liệu có thỏa mãn tiêu chí hoàn thiện của sản phẩm, có đáp ứng
được đặt ra hay không. → Tập trung đầy đủ các mong muốn của người
vào sự chính xác của phần mềm so dùng hay không. → Dựa trên phản hồi
với đặc tả của nó. của khách hàng
Đặt ra câu hỏi: “Chúng ta có đang làm Đặt ra câu hỏi: “Chúng ta có đang làm
sản phẩm đó đúng cách không?” đúng sản phẩm đó không?”
Ngăn chặn lỗi trong sản phẩm Phát hiện lỗi trong sản phẩm
Thiết kế: Chuyển hóa các đặc tả yêu cầu thành một biểu diễn thiết kế kiến trúc, cấu trúc, module
của hệ thống, có thể ánh xạ nó ra một chương trình chạy được.
Thiết kế
Có thể chia làm 3 mức độ khác nhau dựa trên độ chi tiết hay khái quát mà nó diễn tả:
Thiết kế kiến trúc phần mềm (Architecture)
Tập trung vào tổng thể cấu trúc hệ thống, những hệ thống con và module, và những mối quan hệ giữa chúng, cùng
với cách chúng được phân bố
Cài đặt
Viết các dòng lệnh chỉ dẫn máy tính thực hiện theo.
Khi cài đặt phải tuân theo các quy tắc cụ thể và những quy chuẩn lập trình.
Lập trình dựa trên model (Model-based Programming), e.g: Ngôn ngữ truy vấn cơ sở dữ liệu (SQL)…
Validation
Thẩm định: Chỉ ra rằng hệ thống thỏa mãn yêu cầu khách hàng, cài đặt dễ dàng, chạy ổn định
trong môi trường thực tế.
Mục đích
Sau khi hoàn thành nhiều lần kiểm định (verification), sản phẩm đã được hoàn thành nhằm đáp ứng đặc tả yêu cầu.
Bước thẩm định (validation) sẽ được thực hiện sau đó nhằm xác định xem hệ thống có phù hợp với yêu cầu và thực
hiện các chức năng mà nó được dự định và đáp ứng các mục tiêu, nhu cầu của người dùng hay không.
Kiểm tra dựa trên đánh giá của người dùng (User Acceptance Testing)
Evolution
Tiến hóa: Làm thích nghi, cải tiến hệ thống với nghiệp vụ mới, môi trường vận hành mới,…
Mục đích
Sự thay đổi phần mềm là không thể tránh khỏi, và việc quản lí thay đổi, cập nhật với những yêu cầu mới là vô cùng quan
trọng. Từ đó, việc liên tục tiến hóa qua chuỗi các bản ra mắt mới là điều thường thấy ở các phần mềm.
Làm thích nghi, cải tiến hệ thống với nghiệp vụ mới, môi trường vận hành mới,
Bảo trì phần mềm cũng là một hình thức tiến hóa phần mềm. Nó chú trọng vào việc thay đổi phần mềm sau khi đã
đưa phần mềm vào sử dụng. Có một số loại bảo trì phần mềm sau:
Bảo trì để thích ứng với môi trường làm việc khác
Bảo trì để thêm hoặc chỉnh sửa chức năng phần mềm
Thay đổi yêu cầu là chắc chắn xảy ra với mọi dự án phần mềm, gây ra tốn chi phi cho việc làm lại các phần liên quan. Các
cách tiếp cận để giảm chi phi cho việc làm lại:
Tránh sự thay đổi: Làm bản mẫu để xác nhận và làm mịn yêu cầu
Chấp nhận thay đổi: Chuyển giao dần từng phần của hệ thống.
Quá trình phát triển được chia ra làm các increments với mỗi increment phân phối 1 phần các yêu cầu.
Khi làm 1 increment thì yêu cầu của increment này bị đóng băng nhưng yêu cầu của các increments khác vẫn phát
triển.
Kết hợp cả tránh sự thay đổi và chấp nhận sự thay đổi, đồng thời rủi ro được đánh giá và
được giải quyết ở mỗi lần lặp. Bốn khu vực của mô hình bao gồm: đặt mục tiêu, đánh giá và
giảm thiểu rủi ro, phát triển và thẩm định, lập kế hoạch cho pha tiếp theo.
Mô hình xoắn ốc với các phần tư thể hiện cho quá trình liên tục tiến hóa của phần mềm
Là một mô hình tiến trình hiện đại tách riêng pha và hoạt động, đi theo 3 quan điểm: dynamic - theo các pha, static -
theo quy trình, practice - theo thực tế. Kết hợp của 3 mô hình tiến trình cơ bản: thác nước, tiến hóa và phát triển phần
mềm dựa trên thành phần.
Là một tiến trình cho phép tạo ra phần mềm chất lượng cao đáp ứng yêu cầu của khách hàng trong một khung thời
gian và ngân sách đã được định trước.
Các pha:
Inception: Định nghĩa phạm vi dự án
Nhận ra các thực thể bên ngoài hệ thống. Đó có thể là con người, hoặc hệ thống khác, chúng sẽ tương tác với hệ
thống
Từ những thông tin đó, đánh giá mức độ đóng góp của hệ thống với nghiệp vụ
Elaboration: Lập kế hoạch, đặc tả các đặc tính và kiến trúc cơ bản
Các phần của hệ thống được phát triển song song và tích hợp ở pha này
Tạo ra chương trình vận hành được và các tài liệu sẵn sàng cho pha chuyển giao phần mềm
Chuyển giao phần mềm từ môi trường của đội phát triển sang môi trường vận hành thực tế của khách hàng
Đảm bảo vận hành tốt trên môi trường của khách hàng
Các bước:
1. Business Modelling: Mô hình hóa các tiến trình nghiệp vụ, các ca sử dụng nghiệp vụ.
2. Requirements: Chỉ ra các tác nhân và mô tả chi tiết các ca sử dụng để mô hình hóa các yêu cầu của hệ thống.
4. Implementation: Cài đặt các thành phần của hệ thống, áp dụng mã tự động từ thiết kế.
5. Testing: Thực hiện nhiều lần kiểm thử, cài đặt. Sau khi hoàn thành việc cài đặt, thực hiện kiểm thử ở mức độ hệ
thống.
6. Deployment: Đưa ra các bản phát hành sản phẩm tới người dùng cuối.
7. Configuration & Change Management: Không chỉ áp dụng trong việc theo dõi phiên bản sản phẩm mà còn được
dùng trong việc kiểm soát các thay đổi.
8. Project Management: Tập trung chủ yếu vào các khía cạnh quan trọng trong quá trình phát triển lặp lại của phần
mềm. Thường được thực thi ở 2 mức độ khác nhau:
Mức độ ở mô hình thô, tập trung vào lên kế hoạch các pha trong dự án
Mức độ ở chuỗi mô hình tinh xảo hơn, quản lí tiến độ các tiến trình lặp trong dự án qua các thông số
9. Environment: Tập trung vào những hành động cần thiết nhằm cung cấp môi trường phát triển hệ thống, bao gồm các
quá trình và các công cụ khác nhau, trải dài ở các pha.
Trong các bước nêu trên, chỉ có 6 bước quan trọng không thể thiếu là 1, 2, 3, 4 ,5, 6. Các bước
7, 8 và 9 đóng vai trò hỗ trợ để phát triển phần mềm hiệu quả và thuận lợi.
2. Quản lý yêu cầu: Bao gồm làm tài liệu các yêu cầu, lưu giữ vết của sự thay đổi yêu cầu, phân tích tầm ảnh hưởng của
các thay đổi trước khi chấp nhận thay đổi đó.
4. Mô hình phần mềm trực quan: Sử dụng UML để thể hiện đủ các khía cạnh tĩnh và động của hệ thống.
5. Kiểm chứng chất lượng phần mềm: Đảm bảo phần mềm đáp ứng chuẩn chất lượng.
6. Kiểm soát sự thay đổi cho phần mềm: Sử dụng hệ thống quản lý thay đổi, Áp dụng các thủ tục và công cụ quản lý
cấu hình hệ thống.
Các hoạt động tự động: biên tập đồ họa cho các mô hình phát triển hệ thống, từ điển dữ liệu để quản lý các objects,
thiết kế, gỡ lỗi,…
CASE dẫn đến cải tiến quan trọng trong tiến trình phần mềm. Tuy nhiên, đây không phải thứ tự cường độ cải tiến đã
được định trước. Đặc biệt, công nghệ phần mềm là hoạt động, tương tác nhóm nhưng CASE không hỗ trợ điều này.
Functional perspective: Phân chia tương ứng với chức năng của chúng
Process perspective: Phân chia tương ứng với hoạt động tiến trình chúng hỗ trợ
Integration perspective: Phân chia tương ứng với tổ chức của chúng thành các đơn vị tích hợp.
Tools: Hỗ trợ các nhiệm vụ riêng như kiểm tra nhất quán thiết kế, text editing,…
Workbenches: Hỗ trợ các pha đặc tả, thiết kế,… Thường bao gồm 1 số tools.
Môi trường: Hỗ trợ tất cả hoặc 1 phần của phần mềm. Thường bao gồm 1 số workbenches.
II. Agile
Bối cảnh ra đời
Phần mềm là một phần vận hành của doạnh nghiệp trong môi trường mới với nhiều cơ hội mới, vấn đề thị trường mới, cần
được phát triển nhanh để đáp ứng. Bên cạnh đó, yêu cầu ban đầu cho phần mềm chắc chắn sẽ thay đổi, việc thiết kế và
cài đặt phải được làm lại và kiểm thử lại, gây phá vỡ lịch trình và chi phí dự kiến. Từ đó, tiến trình phát triển nhanh phù hợp
với các phần mềm nghiệp vụ.
Tiến trình phát triển nhanh: Thường là yêu cầu quan trọng nhất cho một hệ thống phần mềm.
Gồm những đặc trưng:
- Đặc tả, thiết kế, cài đặt được thực hiện đan xen nhau
- Không có đặc tả hệ thống chi tiết
- Tài liệu thiết kế được tối giản, hoặc được phát sinh tự động
- Tài liệu yêu cầu người dùng chỉ mô tả các đặc điểm quan trọng nhất của hệ thống
- Hệ thống phát triển nhiều phiên bản
- Người dùng và nhà đầu tư có thể tham gia vào việc đặc tả, đánh giá phiên bản và đề xuất sự
thay đổi yêu cầu, thêm yêu cầu mới cho phiên bản tiếp theo.
- Giao diện người dùng thường được phát triển nhanh:
+ Sử dụng công cụ phát triển tương tác
+ Vẽ, kéo, thả, đặt các biểu tượng trên công cụ
+ Phát sinh tự động giao diện cho ứng dụng Web hoặc ứng dụng chạy trên nền hệ điều hành
cụ thể.
Hướng tới chuyển giao nhanh → đáp ứng yêu cầu thay đổi
Giảm phụ phí, đáp ứng nhanh các thay đổi mà không phải làm lại toàn bộ
Hạn chế tài liệu → trao đổi thường xuyên giữa các thành viên đội phát triển với nhau và với khách hàng
Khó xếp thứ tự ưu tiên các yêu cầu, đặc biệt khi có nhiều nhà đầu tư
Khó xây dựng được phần mềm cấu trúc tốt và đơn giản, dễ hiểu.
Khó thay đổi văn hóa làm việc từ truyền thống sang Agile.
Thành viên đội phát triển cộng tác chặt chẽ với nhau rời nhóm
Nhận xét: Agile ứng dụng hợp lý trong các sản phẩm phần mềm vừa và nhỏ được phát triển để
bán, khó áp dụng đối với các phần mềm phức tạp hơn. Các phần mềm có yêu cầu về tính an
toàn và an ninh cao sẽ rất khó để áp dụng phương pháp Agile.
Đề cao việc viết mã có cấu trúc tốt, dễ đọc, đầu tư vào cải tiến mã
Mô tả yêu cầu: phi hình thức; không tạo tài liệu yêu cầu nhất quán
Do duy trì sản phẩm sẽ được ưu tiên hơn là làm mới, cần xem xét 2 vấn đề:
Agile có hiệu quả cho hệ thống trong việc đáp ứng yêu cầu thay đổi không?
Question Answer
Agile Framework:
eXtreme Programming (XP)
Áp dụng lối phát triển tăng dần qua nhiều phiên bản. XP yêu cầu khách hàng tham gia toàn bộ thời gian với
đội ngũ phát triển. Cùng với phương pháp lập trình đôi, XP hướng tới chấp nhận thay đổi ở các phiên bản.
“Extreme”: Thể hiện mục đích cuối cùng của XP là phát triển những phần mềm với:
Ít lỗi nhất
Ngoài ra còn một số nguyên tắc mở rộng góp phần tham gia quy định và điều chỉnh các hoạt động của
đội ngũ phát triển.
Kiểm thử
Lập trình đôi: Lập trình viên làm việc theo cặp → Mọi lập trình viên đều có trách nhiệm và hiểu bất
kỳ đoạn mã nào, thuận lợi trong việc cải tiến mã nguồn. Hiệu suất tương đương làm việc độc lập.
Đội phát triển phân chia yêu cầu thành các nhiệm vụ
Khách hàng chọn các câu chuyện sẽ được thực thi ở phiên bản kế tiếp, phụ thuộc theo độ ưu tiên và ước
lượng lịch trình.
Gồm 6 bước:
Chuyển giao
Đánh giá
Quy trình dự án XP
Scrum
Định nghĩa:
Scrum là một agile framework hỗ trợ con người có thể giải quyết các vấn đề phức tạp và chúng cung cấp
các sản phẩm có giá trị cao nhất theo cách hiệu quả và sáng tạo.
Scrum làm rõ hiệu quả tương đối của quản lý sản phẩm và kỹ thuật làm việc để có thể liên tục cải tiến sản
phẩm, nhóm và môi trường làm việc.
Trong Scrum, công việc được thực hiện bởi Nhóm Scrum thông qua từng phân đoạn lặp liên tiếp nhau
được gọi là Sprint.
Người làm những công việc bắt đầu cho dự án, tạo ra các yêu cầu trong quá trình phát triển dự án.
Phân tích mục tiêu, giải phóng các kế hoạch.
Xác định những gì cần làm và sắp xếp độ ưu tiên để đưa ra kết quả có giá trị cao nhất.
Tối ưu hóa giá trị mà đội ngũ phát triển thực hiện
Scrum Master:
Tạo điều kiện thuận lợi cho mọi giao tiếp và hợp tác giữa ban lãnh đạo và thành viên trong nhóm để tối
đa hóa giá trị được tạo bởi Scrum-team.
Với nhóm Scrum do mình quản lý, Scrum Master có trách nhiệm:
Giúp nhóm tập trung tạo ra các bước tiến có giá trị cao, đáp ứng yêu cầu sản phẩm
Đảm bảo các sự kiện Scrum diễn ra tích cực, hiệu quả và được lưu giữ ở timebox.
Đảm bảo mục tiêu, phạm vi và lĩnh vực sản phẩm được truyển đạt cho các thành viên trong nhóm
Scrum hiểu rõ nhất có thể.
Tìm kiếm kỹ thuật giúp Product Owner quản lý Product Backlog hiệu quả.
Giúp thiết lập kế hoạch, quy hoạch sản phẩm trong môi trường phức tạp
Tạo điều kiện cho sự hợp tác với các bên liên quan khi được yêu cầu hoặc cần thiết.
Development Team
Tự tổ chức (Self-organizing): Nhóm phát triển tự lên kế hoạch, ước lượng và quản lý công việc.
Hoạt động chéo (Cross-functional): Nhóm phát triển có đầy đủ các kỹ năng cần thiết của một nhóm
cho sự phát triển của sản phẩm
Các thành viên trong nhóm có thể có các kỹ năng chuyên môn riêng và tập trung vào một số việc
nhất định, nhưng trách nhiệm thuộc về nhóm phát triển nói chung.
Initiation: Khởi tạo dự án, xác định tầm nhìn cho dự án, phân chia nhân lực vào các nhóm Scrum, xây
dựng Product Backlog bao gồm những thứ phải làm để hoàn thành sản phẩm.
Planning & Estimation: Lên kế hoạch cho Sprint, lựa chọn những item liên quan từ Product Backlog
→ Sprint Backlog để thực hiện. Bên cạnh đó, ước tính kết quả và thời gian hoàn thành Sprint.
Implementation: Thực hiện cài đặt theo Sprint đã lên kế hoạch từ trước, liên tục cập nhật backlog,
tăng cường giao tiếp giữa các thành viên.
Reviewing: Duyệt các công việc được hoàn thiện, tìm cách tối ưu kết quả đạt được. Điều chỉnh các
quy trình và phương pháp để thuận lợi chuyển giao sang pha lên kế hoạch và ước tính tiếp theo.
Releasing: Phát hành sản phẩm cuối cùng tới stakeholder, tổ chức nhìn lại (Retrospective) hiệu năng
làm việc qua các Sprint để tìm hướng nâng cao chất lượng làm việc.
2. Đội phát triển ngồi với nhau để lập kế hoạch cho Sprint
a. Xác định yêu cầu sẽ được thực hiện trong thời gian tới
b. Mục tiêu là hoàn thiện một vài chức năng để chuyển giao trong thời gian trên.
3. Tổng hợp kết quả của buổi họp kế hoạch bao gồm mục tiêu và những việc cần làm trong thời gian tới
vào Sprint Backlog.
4. Thành viên đội làm việc được giao và cộng tác chặt chẽ với các thành viên khác. Tổ chức họp hàng
ngày (Daily Scrum) để nắm tiến độ, phát hiện trở ngại hay chỉnh sửa số lượng công việc, cập nhật bản
kế hoạch (Product Backlog Refinement).
5. Khi kết thúc khung thời gian của Sprint, đưa ra được một phiên bản chạy tốt của phần mềm, hoặc một
bước phát triển sản phẩm có tiềm năng chuyển giao.
6. Cùng ngồi với nhau để xem lại hiệu năng làm việc của đội phát triển trong Sprint vừa rồi và tìm ra điều
cần cải tiến.
Yêu cầu chức năng mức người dùng thường bao gồm các phát biểu chung về những gì hệ thống cần làm
Yêu cầu chức năng mức hệ thống tập trung mô tả ở mức chi tiết hơn các dịch vụ hệ thống
Đôi khi yêu cầu phi chức năng quan trọng hơn yêu cầu chức năng vì khi đó, nếu chúng không được thỏa mãn, hệ
thống sẽ trở thành vô dụng.
Tính chính xác: Yêu cầu được mô tả chính xác, tránh nhập nhằng
Tính đầy đủ: Tính năng và dịch vụ yêu cầu được mô tả đầy đủ
Tính nhất quán: Tính năng và dịch vụ yêu cầu được mô tả nhất quán
Tính đo được: Yêu cầu phi chức năng phải được lượng hóa dựa trên các tiêu chí thỏa mãn để kiểm tra và thẩm
định tính thỏa mãn của sản phẩm
Yêu cầu về tổ chức: Hệ quả của các chính sách (policy) và thủ tục (procedure), e.g. yêu cầu về quy trình
Yêu cầu bên ngoài: Phát sinh bên ngoài hệ thống, e.g yêu cầu pháp lý
Các ràng buộc xuất phát từ miền hoạt động của hệ thống
Đặt ra các yêu cầu mới về chức năng hay phi chức năng cho hệ thống
Hệ thống có thể không thể hoạt động khi không thỏa mãn các yêu cầu miền
Phát biểu chính thống về những gì cần phải đạt được để phát triển phần mềm
Yêu cầu người dùng: Dành cho người quản lý khách hàng, người dùng cuối, quản lý hợp đồng, …
Yêu cầu hệ thống: Người dùng cuối, kỹ sư khách hàng, người phát triển phần mềm, kiến trúc sư hệ thống,…
Tài liệu yêu cầu ảnh hưởng tới bản mẫu phần mềm, hướng dẫn sử dụng, tài liệu phần mềm, …
Thông tin trong tài liệu yêu cầu phụ thuộc vào loại hệ thống và phương pháp tiếp cận hệ thống.
✅ Agile Perspective
Agile cho rằng việc viết tài liệu yêu cầu phần mềm là phí thời gian
Quá trình tổng hợp, đưa yêu cầu người dùng và hệ thống vào tài liệu yêu cầu.
Yêu cầu người dùng: Phục vụ người dùng cuối, khách hàng
Yêu cầu hệ thống: Chi tiết hơn, nhiều thông tin kỹ thuật hơn
Nhược điểm: Khó phân biệt yêu cầu chức năng/phi chức năng, khó đảm bảo đồng thời tính chính xác và dễ đọc
Dùng ngôn ngữ tự nhiên, bảng biểu dựa trên định dạng nào đó
Dùng ngôn ngữ tựa ngôn ngữ lập trình để mô tả hoạt động hệ thống
Dùng biểu đồ đồ họa bổ trợ cho diễn đạt ngôn ngữ tự nhiên
Dùng ngôn ngữ, mô hình toán học đặc tả hoạt động hệ thống
Đảm bảo các yêu cầu xác định đúng hệ thống mà khách hàng mong đợi
⚠ Khâu quan trọng, vì chi phí sửa lỗi yêu cầu tăng lên nhiều lần nếu được phát hiện muộn
Sinh ca kiểm thử: Tạo ra các ca kiểm thử cho các yêu cầu để kiểm tra tính toán
Các bên liên quan hợp đồng cùng tham gia kiểm tra đánh giá
Kiểm tra đánh giá hình thức hoặc phi hình thức, đòi hỏi giao tiếp tốt với người phát triển, khách hàng và người
dùng cuối
Là quá trình quản lý các thay đổi yêu cầu trong quy trình kỹ nghệ yêu cầu và khi phát triển
hệ thống
Duy trì phụ thuộc giữa các yêu cầu để phân tích tầm ảnh hưởng của các thay đổi
Thiết lập quy trình tiếp nhận đề xuất thay đổi & liên kết với yêu cầu hệ thống
Người dùng cuối thường không phải là người chi trả cho phát triển hệ thống
→ Yêu cầu thay đổi từ 2 phía thường xảy ra xung đột
Phức tạp khi cộng đồng người dùng cuối đa dạng và lớn
Công cụ hỗ trợ
Được dùng nhiều trong hệ thống quản lý yêu cầu chuyên viên tới cơ sở dữ liệu đơn giản
💡 Cần quyết định về việc chấp nhận thay đổi yêu cầu
2. Phân tích tầm ảnh hưởng & chi phí thay đổi
Kỹ nghệ yêu cầu (Engineering Processes) thường gồm các hoạt động lặp lại và gối lên nhau.
💡 Hệ thống bao gồm các thành phần (thiết bị, phần mềm, con người), hoạt động trong môi trường, và hướng mục
đích
Hệ thống hiện thời (system-as-is): đang vận hành, có vấn đề, nhu cầu cần cải tiến
Hệ thống được phát triển (system-to-be): cần được phát triển, tiến hóa từ hệ thống hiện thời
Mục đích
Hiểu tổng thể hệ thống (chức năng, cấu trúc) và giao tiếp giữa các bên liên quan
Mô hình hệ thống hiện thời: giúp thu thập và phân tích yêu cầu (kỹ nghệ yêu cầu)
Tác dụng
Để hiểu: Hình dung ý tưởng và hình thành hình ảnh giản lược về đối tượng được tìm hiểu. Ngược lại, việc sử dụng
các mô hình giúp nhận thức vấn đề dễ dàng, nhanh chóng.
Để trao đổi: Mô hình giống như một loại ngôn ngữ chung giữa những người cùng quan tâm tới một vấn đề.
Để hoàn chỉnh: Dễ dàng đánh giá mức độ phù hợp với nhu cầu hay mức độ hoàn thiện của hệ thống. Từ đó tiếp
tục phát triển phần mềm và kiểm định, mô phỏng, thực hiện.
Ảnh hưởng đến cách vấn đề được giải quyết: Cung cấp cái nhìn tổng quan, xác định yếu tố quan trọng, hỗ trợ
đưa ra quyết định.
Có thể được biểu diễn ở các mức độ chính xác khác nhau: Trừu tượng (tiếp cận vấn đề tổng quan) → Chi tiết
(tiếp cận các chi tiết cần thiết)
Mô hình tốt nhất khi được kết nối với thực tế: Phản ánh thực tế và kết nối với các khía cạnh thực tế của hệ
thống.
Sử dụng một mô hình duy nhất thường không đủ: Sử dụng nhiều mô hình khác nhau có thể giúp hiểu sâu hơn
các khía cạnh và yếu tố của hệ thống phức tạp.
✅ UML (Unified Modeling Language) là một ngôn ngữ mô hình gồm các ký hiệu đồ họa để thiết kế các hệ thống
thông tin một cách nhanh chóng
Biểu đồ ca sử dụng: biểu diễn tương tác giữa hệ thống và môi trường
Biểu đồ tuần tự: biểu diễn tương tác giữa tác nhân và hệ thống, hay giữa các thành phần hệ thống
Biểu đồ lớp: biểu diễn các lớp đối tượng và quan hệ giữa chúng
Biểu đồ trạng thái: biểu diễn cách hệ thống phản ứng với các sự kiện từ bên trong và bên ngoài
Góc nhìn tương tác: giữa môi trường và hệ thống, giữa các thành phần hệ thống
Góc nhìn cấu trúc: mô hình hóa tổ chức, biểu diễn cấu trúc dữ liệu của hệ thống
Góc nhìn hành vi: mô hình hóa hành vi động của hệ thống và cách hệ thống phản hồi các sự kiện
Việc xác định biên hệ thống chịu ảnh hưởng của các yếu tố tổ chức và xã hội.
💡 Dạng mô hình kiến trúc chỉ mối quan hệ của hệ thống với các hệ thống khác
Biên hệ thống
Biên hệ thống xác định những gì thuộc về hệ thống, hay thuộc về môi trường
→ Ảnh hưởng sâu sắc đến yêu cầu của hệ thống
Mô hình hóa tương tác hệ thống giúp đặc tả giao thức tương tác
Mô hình hóa tương tác thành phần giúp hiểu cấu trúc của hệ thống và khả năng đáp ứng các yêu cầu phi chức năng
(về hiệu năng và tính tin cậy)
Mô hình ca sử dụng
Mỗi ca sử dụng đại diện cho một tác vụ có tương tác bên ngoài với hệ thống.
Các tác nhân tham gia có thể là người hoặc các hệ thống khác.
Thường ở dạng kết hợp biểu đồ trực quan và các mô tả văn bản chi tiết.
Quan hệ tổng quát hóa (Generalization): Tác nhân kế thừa lớp tổng quát hơn
Quan hệ bao gộp (Include): Diễn đạt các chi tiết của ca sử dụng khác
Quan hệ mở rộng (Extend): Thêm chức năng cho ca sử dụng trong điều kiện nào đó
Mô hình hóa tương tác giữa tác nhân và các đối tượng trong hệ thống
→ Đặc tả kịch bản ca sử dụng
Đường sông (1): Biểu diễn các thể hiện của lớp, thành phần, tác nhân,…
Thông điệp (3, 4, 6, 7): Gửi từ đối tượng gửi đến đối tượng nhận
Thông điệp đồng bộ (3): Mô tả tương tác trong đó đối tượng gửi chờ đến khi nhận được phản
hồi của đối tượng nhận
Thông điệp bất đồng bộ (4): Mô tả tương tác trong đó đối tượng gửi có thể tiếp tục công việc
mà không phải chờ phản hồi từ đối tượng nhận.
Khoảng thực thi (5): Xuất hiện ở đối tượng nhận thông điệp
Ở dạng mô hình động: Phản ánh cấu trúc hệ thống khi thực thi
Thường được dùng khi thảo luận và thiết kế kiến trúc hệ thống
Tổng quát hóa: Lớp con chi tiết hóa lớp cha
Mô hình hành vi
Mô tả hành vi động của hệ thống khi thực hiện
→ Làm rõ cách thức hệ thống phản hồi kích thích từ môi trường
Được hỗ trợ bởi biểu đồ hoạt động UML 2.0 hoặc biểu đồ tuần tự
Khi bên cung cấp không biết nhiều về bên tiêu dùng
Phù hợp kịch bản một sự kiện có thể được xử lý bởi nhiều người sử dụng khác nhau
Các sự kiện có thể được xâu chuỗi thành 1 sự kiện phức tạp hơn
Overview
Pros Cons
💡 Thường dùng cho các hệ thống thời gian thực (real-time system)
Biểu diễn cách hệ thống phản hồi các sự kiện từ bên ngoài & bên trong
Khi bên cung cấp không biết nhiều về bên tiêu dùng
Phù hợp kịch bản một sự kiện có thể được xử lý bởi nhiều người sử dụng khác nhau
Các sự kiện có thể được xâu chuỗi thành 1 sự kiện phức tạp hơn
Overview
Pros Cons
Sự kiện có thể được xử lý ở các mức độ khác nhau Khó khăn trong xử lý bất đồng bộ
💡 Mô hình máy trạng thái (State Machine Model) mô hình hóa hệ thống, biểu diễn các hệ thống phản hồi
các sự kiện từ bên ngoài và bên trong.
Mô hình máy trạng thái mô tả hành vi của một đối tượng, hệ thống dựa trên trạng thái của nó và các quy tắc
chuyển đổi trạng thái
Overview
Pros Cons
Rõ ràng, trực quan và dễ hiểu Không phù hợp với hệ thống phức tạp
Kiểm soát, quản lý hành vi hệ thống Khó thay đổi và bảo trì
Dễ kiểm tra và dỡ lỗi, theo dõi → Kiểm tra, xác định Phức tạp khi hệ thống có nhiều trạng thái và quy tắc
vấn đề khi chuyển đổi trạng thái chuyển đổi phức tạp
💡 Phát triển phần mềm trong đó các mô hình được xem là các chế tác đầu ra cơ bản của quy trình phát triển
Các chương trình tương ứng với nền tảng thực thi nào đó thường được sinh tự động từ các mô hình bởi chuyển đổi mô
hình
Hướng tiếp cận này cho phép các kỹ sư làm việc ở cấp độ trừu tượng cao
→ Dễ giao tiếp với chuyên gia miền, giảm nỗ lực ánh xạ thiết kế sang diễn đạt chi tiết ở cấp độ ngôn ngữ lập trình
Pros Cons
💡 Kiến trúc phần mềm của hệ thống là tập hợp của các cấu trúc cần thiết để lập luận hệ thống bao gồm các phần tử,
các mối quan hệ giữa chúng và thuộc tính của cả 2
Xác định các ràng buộc cho việc hiện thực hóa
Nâng cao độ chính xác của việc dự đoán chi phí và thời gian xây dựng hệ thống
Mỗi loại cấu trúc thể hiện một khía cạnh khác nhau của hệ thống và chúng liên quan đến nhau
Ví dụ: phân lớp (layered pattern), chia sẻ dữ liệu (shared-data), khách-chủ (client-server)
Tính linh hoạt: Chúng ta có thể thay đổi thành phần X không?
Tính khả chuyển: Chúng ta có thể triển khai trên một máy khác không?
Tính sử dụng lại: Chúng ta có thể sử dụng lại một phần hay toàn bộ cho ứng dụng khác không?
Quản lý lượng và tần suất dữ liệu truyền nhận giữa các tiến trình
Để có an ninh tốt
Phân quyền chức năng, bảo mật dữ liệu, an toàn khi sử dụng.
Không lặp lại: Mỗi một chức năng chỉ được hiện thực hóa bởi một thành phần
Hạn chế thiết kế trước: chỉ thiết kế khi cần và có đủ thông tin
Cho ai?
Thể hiện sự “đánh đổi” giữa các thuộc tính chất lượng
Khía cạnh quan tâm chung: authentication, authorization, caching, exception handling,…
Trước đây, Client thường là ứng dụng chạy trên desktop; hiện nay có thêm Web browser và ứng dụng di động
Application server: một dạng khách/chủ đặc biệt với phía chủ chứa các ứng dụng và dịch vụ cho các ứng dụng
khách dạng Web hoặc dạng khác
Chỉ lớp trên mới sử dụng chức năng của lớp dưới
Các ứng dụng có thể được xây dựng dựa trên các dịch vụ (sử dụng các dịch vụ có trước)
Các dịch vụ có kết nối mềm dẻo, giao diện được chuẩn hóa, có thể được xuất bản (pubished), tìm kiếm (discovered),
gọi (invoked)
Người dùng thường đánh giá về hệ thống bằng cách đánh giá UI hơn là đánh giá về tính năng
Thiết kế UI tồi
Có thể là lý do dẫn đến việc phần mềm không bao giờ được sử dụng.
Tài liệu đặc tả yêu cầu (e.g. biểu đồ ca sử dụng, mô tả chi tiết ca sử dụng)
Đầu ra
Kịch bản người dùng tương tác với phần mềm thông qua giao diện
Khi thiết kế không nên chỉ nhắm vào một đối tượng người dùng cá biệt
Có người thích sự sôi động, nhiều màu sắc, người khác thích sự đơn giản.
Hệ thống cung cấp và biểu diễn dữ liệu ra sao cho người dùng như thế nào
→ (trực quan, dễ hiểu, giàu giá trị thông tin,…)
V. Một số lưu ý
Trọng tâm cần xem xét khi thiết kế UI
Người dùng đưa dữ liệu/thông tin vào hệ thống như thế nào
Hệ thống cung cấp và biểu diễn dữ liệu ra sao cho người dùng như thế nào
Vd:
Vd1:
Người học điển hình học mất bao lâu để học các thao tác của một tác vụ?
Công việc làm thước đo (benchmark tasks): cần bao nhiêu thời gian để thực hiện một tác vụ?
Người sử dụng mắc lỗi nào và bao nhiêu lần khi thực hiện các công việc?
Nhớ được
Người dùng có nhớ được các kiến thức đã học bao lâu, vài giờ, vài ngày, hay vài tuần?
Mức độ hài lòng của người sử dụng với các khía cạnh của giao diện: màu sắc, bố trí thông tin, thao tác thuận tiện
dễ dùng,…?
Có thể thu thập thông tin này qua phỏng vấn, thu thập phản hồi không theo mẫu hoặc dùng thang điểm
Một số lưu ý
Người thiết kế muốn làm tốt trên mọi phương diện, nhưng thường phải cân đối ở mức độ nào đó (trade-off)
Ví dụ:
Các thiết kế khác nhau cần được đánh giá bởi người thiết kế và người sử dụng thông qua các bản mẫu.
Nhất quán ( Các thứ tương tự nhau nên hoạt động theo cách giống nhau (e.g., các dòng lệnh/các thực đơn nên có
cùng định dạng, cùng kiểu)
Không nên gây sự bất ngờ lớn cho người dùng ( E.g., người dùng nên dự đoán trước được các tương tác của những
chức năng tương tự nhau.)
Khả năng phục hồi : Cho phép người dùng quay về trạng thái trước khi gây ra lỗi (e.g., undo, xác nhận trước khi xóa,
…)
Đảm bảo tính an toàn (safety): các thao tác quan trọng phải đảm bảo người dùng luôn được lưu ý, nhắc nhở kịp thời,…
Nội dung thông báo nên lịch sự, rõ ràng, nhất quán và có tính xây dựng
Thiết kế thông báo lỗi sao cho phù hợp với kỹ năng và kinh nghiệm của người dùng.
Thông báo lỗi tốt: thông báo lỗi hướng người dùng
1. Thiết kế trong quy trình truyền thống (Phương pháp hướng cấu trúc)
Thiết kế xử lý
DFD (Data Flow Diagram) được sử dụng để phân
tích và thiết kế
Làm mịn các biểu đồ cấu trúc đến mức có thể biểu
diễn bằng mã giả hoặc lưu đồ
Thiết kế dữ liệu
Mô hình thực thể (ERM)
Khái niệm:
Đây là một mô hình dữ liệu được sử dụng để mô tả các thực thể trong một hệ thống và các quan hệ giữa chúng.
Trong ER model, các thực thể được biểu diễn dưới dạng các hộp (có thể đại diện cho các đối tượng, nhưng thường là
các bảng trong cơ sở dữ liệu). Các mối quan hệ giữa các thực thể được biểu diễn bằng các đường nối hoặc các mũi
tên, và có thể có các ràng buộc và quan hệ phụ thuộc giữa chúng.
Khái niệm:
Mô hình dữ liệu logic là một khái niệm trong lĩnh vực quản lý cơ sở dữ liệu để biểu diễn và mô tả các mối quan hệ
giữa các đối tượng dữ liệu trong một cơ sở dữ liệu. Nó định nghĩa cấu trúc, các quy tắc và ràng buộc dữ liệu trong cơ
sở dữ liệu mà không phụ thuộc vào bất kỳ hệ quản trị cơ sở dữ liệu cụ thể nào.
Một quan hệ có thể được biểu diễn ở dạng bảng hoặc ở dạng cấu trúc của lược đồ quan hệ
Mối quan hệ bậc 2, dạng 1-1: lấy khóa của một bên để vào bên còn lại
Mối quan hệ bậc 2, dạng 1-nhiều và không có thuộc tính riêng: lấy khóa của bên “1” để vào bên “nhiều”
Quá trình thiết kế hệ thống là quá trình định nghĩa các lớp đối tượng và sự tương tác giữa chúng
Phân tích theo khía cạnh ngữ pháp mô tả hệ thống (lớp đối tượng và thuộc tính thường là các danh từ)
Phân tích các ngữ cảnh sử dụng để xác định các lớp
đối tượng
Ở giai đoạn thiết kế, các lớp được có trong giai đoạn phân tích có thể được bỏ đi (controllers)
Thiết kế xử lý
Xác định phương thức (method) của lớp đối tượng
Một số phương thức được xác định trong quá trình
phân tích
– Thêm các phương thức để truy xuất thuộc tính
– Thêm các phương thức lấy các giá trị tính toán từ các
thuộc tính
– Thêm các phương thức do kinh nghiệm thấy cần thiết
– Thêm các phương thức do yêu cầu của framework,
pattern được sử dụng
Xác định mức độ truy xuất của các thuộc tính và phương thức
Private: chỉ trong lớp đối tượng
Package: trong cùng gói
Protected: lớp con và cùng gói
Public: mọi nơi
DIP (The Dependency Inversion Principle): Phụ thuộc vào lớp trừu tượng thay vì lớp cụ thể
UML
Sẽ có 2 loại mô hình được thiết kế
Tĩnh: thể hiện cấu trúc tĩnh của hệ thống (các lớp đối tượng và quan hệ giữa chúng)
Động: thể hiện sự tương tác giữa các đối tượng trong hệ thống
Trong giai đoạn đầu, có thể sử dụng 3 mô hình cho quá trình thiết kế
Mô hình cấu trúc (thể hiện các nhóm lớp đối tượng có liên quan) → Biểu đồ lớp - Class Diagram
Mô hình tuần tự (thể hiện sự tương tác giữa các đối tượng) → Sequence Diagram, Communication Diagram - Biểu đồ
tuần tự, Biểu đồ giao tiếp
Mô hình máy trạng thái (thể hiện sự chuyển trạng thái của từng đối tượng) → State machine Diagram - Mô hình trạng thái
máy
1. Giới Thiệu:
Định nghĩa:
quá trình chuyển đổi thiết kế và ý tưởng của một phần mềm thành mã nguồn thực tế, có thể chạy được trên một hệ thống
máy tính
Mã nguồn dễ bảo trì: dễ hiểu, dễ sửa lỗi được, nâng cấp – thay đổi dễ dàng.
Tuân theo các chuẩn viết mã nguồn (coding styles, coding convention, programming styles)
mẫu thiết kế
Dùng tiền tố để chỉ kiểu dữ liệu: i.e., sName (string), iCount (int), dTotal (double)
Câu lệnh:
Hạn chế truyền tham số là kết quả của hàm, biểu thức:
Ví dụ:
Vd1:
Vd2:
4.Chú thích:
Chú thích rất quan trọng: hỗ trợ đáng kể tính dễ đọc và dễ bảo trì của mã nguồn.
2. Các câu lệnh phức tạp: i.e., gọi đến hàm khác
Cách viết :
Lưu ý:
Working copies
Update: Cập nhật thay đổi từ thành viên khác về máy cục bộ
Merge: Nhiều thành viên cập nhật trên một tệp tin
….
Tập trung:
Mỗi người dùng lấy bản sao làm việc của riêng mình, nhưng chỉ có một kho lưu trữ trung tâm.
Phân tán:
Mỗi người dùng có kho lưu trữ của riêng mình và bản sao làm việc.
Git, Mercurial
Phân tích lỗi của chương trình xuất phát từ nguyên do gì.
Debugging Tool:
Printlining:
Logging:
Ghi lại những thông tin sau khi chương trình thực thi
Yêu cầu khách hàng được biểu diễn bằng đặc tả yêu cầu (requirements)
Thất bại ⇒ Phần mềm không đáp ứng đúng như đặc tả yêu cầu
Nguyên nhân
Đặc tả sai?
Thiết kế sai?
Kiểm tra sản phẩm có được cài đặt đúng thiết kế không?
Kiểm tra xem sản phẩm có đáp ứng yêu cầu KH không? (chức năng và phi chức năng)
Phân loại
V&V tĩnh:
Là cách duy kiểm tra các yêu cầu phi chức năng
Độ tin cậy
Dễ học, dễ sử dụng
Dễ bảo trì
Là độ đo quan trọng
Có thể chỉ ra lỗi, không thể khẳng định không còn lỗi
Có thể khẳng định hết lỗi bằng kiểm thử vét cạn, nhưng cách này không khả thi trên thực tế
Một kiểm thử thành công là một kiểm thử phát hiện ra lỗi
Còn gọi là kiểm thử hàm, kiểm thử chức năng Còn gọi là kiểm thử cấu trúc, kiểm thử logic
Thay vì thử hết đầu vào, ta sẽ giảm số lượng ca Kiểm tra những gì đã được làm, tuy nhiên
kiểm thử bằng việc chia không gian đầu vào đường đi nhiều khi vô hạn Tiêu chuẩn bao phủ: -
thành các miền tương đương – Sau đó chọn một Dòng lệnh - Nhánh - Đường thực thi(Tất cả các
ca kiểm thử từ mỗi miền tương đương này. khả năng chạy của chương trình) - Vòng lặp
Kiểm tra những gì đã làm, không phải những gì cần được làm
Hộp đen
Thường không chắc ca kiểm thử này có phát hiện được lỗi cụ thể
hay không
Cần cả hai
Việc lựa chọn ca kiểm thử nằm giữa và phụ thuộc vào
Đảm bảo các tính năng đang hoạt động tốt không bị ảnh hưởng bởi chỉnh sửa
Kiểm thử lại tự động trước khi lưu thay đổi vào kho (repository.)
Cần các chiến lược kiểm thử tăng dần với hệ thống lớn
Gỡ lỗi
Kiểm thử
– Khẳng định có lỗi → có phát hiện tồn tại lỗi không, với đầu vào như thế nào.
Gỡ lỗi (debugging)
– Định vị và sửa lỗi → phân tích và tìm nguyên nhân gây ra lỗi
Gỡ lỗi thông thường phải lập giả thuyết về hành vi của chương trình và kiểm tra các giả thuyết này để tìm lỗi
5 Nghiêm trọng Mất yêu cầu trong quá trình thực hiện
7 Cực kỳ nghiêm trọng Lỗi rất nghiêm trọng xảy ra thương xuyên
Các vấn đề
Bên ngoài:
Tương tác
Hiệu năng
Cơ sở: mong muốn của người dùng (không xét đến tài liệu đặc tả)
Các đầu vào chương trình là miền xác định của hàm
Phân tích giá trị biên (boundary value analysis - BVA) là kỹ thuật kiểm thử hàm phổ biến nhất
Mục tiêu của kiểm thử hàm là sử dung kiến thức về hàm để xác định các ca kiểm thử
Trước kia chủ yếu tập trung vào miền xác định, nhưng nay đã dựa trên cả miền giá trị của hàm để xác định ca
kiểm thử
Chương trình viết bằng ngôn ngữ không có kiểm tra kiểu mạnh càng cần kiểm thử giá trị biên (VD : JavaScirpt,
Php, Visual Basic)
Tính rời rạc không bị chặn (không có cận trên và cận dưới rõ ràng)
Biến logic
Ưu nhược điểm
Ưu điểm
BVA hiệu quả với các chương trình có các đầu vào độc lập nhau và biểu diễn đại lượng vật lý bị chặn
Nhược điểm
BVA lấy các ca kiểm thử mà không tính đến chức năng của hàm, hay ý nghĩa của các biến
Ngoài năm giá trị biên bổ sung thêm hai giá trị ngoài biên:
Mục đích chính là xem chương trình có kiểm tra giá trị hợp lệ của đầu vào không.
Khi các biến có tương tác với nhau thì cần kiểm tra các bộ giá trị kết hợp các cực trị này
Có thể kết hợp với kiểm thử mạnh để có bộ kiểm thử trường hợp xấu nhất mạnh
Sử dụng kỹ nghệ và kiến thức miền ứng dụng để phán đoán và đưa ra ca kiểm thử
Mặc dù mang tính chủ quan cao, đây vẫn là phương pháp hiệu quả để phát hiện khiếm khuyết của chương trình
Ý tưởng
Ý tưởng của ECT (Elementary comparison testing) là chỉ kiểm thử với một phần tử của mỗi miền tương đương
Giảm rất nhiều dư thừa tiềm tàng nếu các lớp tương đương được chọn hợp lý
Mấu chốt là làm sao chọn được quan hệ tương đương để từ đó xác định được các lớp tương đương (phân hoạch)
Cần hiểu biết về miền xác định, thường không thể xác định dựa vào đặc tả thiết kế giao diện
Phải hiểu đầu vào phụ thuộc nhau như thế nào
Số ca kiểm thử tối thiểu sẽ bằng số lớp của phân hoạch có nhiều tập con nhất
Gắn các điều kiện với các hành động tương ứng
DT có thể liên kết nhiều điều kiện độc lập với vài hành động một cách dễ hiểu
Khác các cấu trúc điều khiển trong các ngôn ngữ lập trình
Có thể dùng để
Sinh ca kiểm thử, còn gọi là kiểm thử dựa trên logic
Kiểm thử cấu trúc khi áp dụng cho các cấu trúc chương trình
(Vd luồng điều khiển)
1. Mỗi điều kiện tương ứng với một biến, một quan hệ, hoặc một
mệnh đề (predicate)
3. Mỗi hành động là một thủ tục hoặc thao tác phải thực hiện
Khi một luật thỏa mãn và được chọn thì không cần xét luật khác
Các hạn chế trên không ảnh hưởng đến việc sử dụng bảng
Trong hầu hết các ứng dụng thứ tự các mệnh đề được xét là không quan trọng
Một số lưu ý
Trước khi sử dụng bảng cần đảm bảo:
Có mọi tổ hợp
Mọi tổ hợp giá trị chân lý chỉ gây ra một hoặc một tập hành động
Nếu có k luật và n mệnh đề đúng/sai, thì có ít nhất k trường hợp và nhiều nhất là 2^n trường hợp phải xét.
Có thể dựa trên các luật chưa mở rộng hoặc các luật đã mở rộng với 2^n ca
Để xác định ca kiểm thử, chúng ta chuyển các điều kiện thành đầu vào, hành động thành đầu ra.
Một số điều kiện sẽ tham chiếu đến các lớp tương đương đầu vào, và hành động tham chiếu đến các phần xử lý
chức năng chính của cột đang xét.
Nội dung công việc, nguồn lực thay đổi tùy theo
từng pha
Đa số các dự án ở VN là dự án CNTT
Dự án phần mềm
Quản lý dự án
Tiêu chí của một dự án thành công
Thỏa mãn phạm vi, thời gian và kinh phí
Quản lý dự án
Định nghĩa
Là áp dụng các nguyên lý, phương pháp, kỹ thuật, công cụ, và đặc biệt là kinh nghiệm nhằm:
Định nghĩa dự án
Lập kế hoạch
Kết thúc dự án
Là lập thế hoạch và thực hiện các công việc theo đúng kế hoạch đã lập
Vai trò
Tăng khả năng thành công của dự án, giảm thiểu rủi ro
Đảm bảo có một kế hoạch đúng đắn để thực hiện các mục tiêu của dự án
Khách hàng có thể theo dõi được những gì bạn thực hiện có đúng với mục tiêu ban đầu không
Học được từ những thành công và thất bại của quá khứ
etc …
Cần phát triển các kỹ năng mềm: suy nghĩ, trao đổi, giao tiếp, trình bày, …
Lập kế hoạch dự án
Kết thúc dự án
Tài trợ dự án
Tổ dự án
Khách hàng
Cố gắng thực hiện theo kế hoạch ( nếu có vấn đề: điều tra nguyên nhân, tìm giải pháp khắc phục và thay đổi kế
hoạch (nếu cần) )
Đầu ra?
Tạo không khí/môi trường làm việc để các vấn đề dễ dàng được bộc lộ
Có báo cáo, đảm bảo các người liên quan được biết và có cơ chế phản hồi
Nhiều công việc trùng lặp/làm lại -> tải công việc tăng
Chậm trễ/hủy bỏ trong việc đưa ra các gói PM theo lịch trình
Chuẩn bị dữ liệu
IV. Một số bài học rút ra từ thực tiễn quản lý dự án CNTT ở Việt Nam
Một số vấn đề
Các dự án CNTT ở VN được coi là các dự án đầu tư cơ bản và mua sắm trang thiết bị (không tính đến đầu tư vào con
người)
Quản lý dự án thường kiêm nhiệm nhiều việc -> không có QLDA thực sự, không được đào tạo bài bản, thiếu tri thức,
kinh nghiệm
Không coi trọng vai trò tư vấn hoặc khoán trắng cho nhóm dự án
Ngân sách eo hẹp -> khó có kinh phí vận hành, bảo trì
Chủ yếu gọi thầu, khoán ngoài: chất lượng không đảm bảo
Lập HT hồ sơ giám sát hợp đồng khoán ngoài chặt chẽ, đầy đủ
Kiểm soát đầu ra của dự án: tiêu chuẩn nghiệm thu sản phẩm, tài liệu, …
Phạm vi công việc là gì? Thời hạn hoàn thành ntn? Chi phí để thực hiện? Các tiêu chí và quy trình để đảm bảo
chất lượng?
Ai sẽ thực hiện? Cách giao tiếp như thế nào? Các rủi ro và cách quản lý? Quản lý thay đổi ntn? Có những bên
liên quan nào và quản lý như thế nào?
Cuối cùng, làm thế nào để tích hợp các vấn đề trên trong một quy trình quản lý thống nhất?
Là người đưa ra nhiều thay đổi cho dự án liên quan đến thiết kế, tài chính, nhân sự...
Do bận công việc nên thường phản hồi chậm các vấn đề liên quan đến dự án, làm ra tăng sức ép về tiến độ
Profile tốt: trên 5 năm kinh nghiệm, 10 năm là tốt nhất, có năng lực hiện tại tốt, lãnh đạo mạnh, tài chính tốt
Đã làm các dự án tương tự cho các khách hàng có yêu cầu cao
Tham quan văn phòng, công trình, gặp gỡ khách hàng và lãnh đạo của đối tác tiềm năng
Tập hợp trí tuệ nhóm, giải pháp bất ngờ, hiệu quả
Giảm bớt gánh nặng công việc và tư duy cho người quản lý
Tăng cường nhiệt huyết của mọi người, tạo được động lực trong công việc
Triết lý: giỏi mấy cũng không thể biết hết mọi việc
Quyết định sai có thể gây hậu quả nặng nề về chất lượng, chi phí và việc vận hành, khai thác sản phẩm của dự án
trong tương lai
Ý kiến của chuyên gia giỏi là cơ sở để ra quyết định và thuyết phục lãnh đạo cấp trên
PM không thể thay đổi con người họ → cách tốt nhất là đúng người, đúng việc
Biết được điểm mạnh của cán bộ dự án thông qua CV, quá trình làm việc, trao đổi trực tiếp và thử nghiệm
Thực tế rất phong phú và khác khá xa so với những gì bạn biết trong phòng họp
Luôn biết đâu là việc đúng cần phải làm (danh sách công việc, WBS, Project network, Grant chart là các công cụ
hữu ích)
Luôn biết ai là người phù hợp. Cổ vũ, động viên kịp thời
Tiến độ thường là sức ép lớn nhất dành cho dự án và có rất nhiều nguyên nhân gây chậm chễ tiến độ
Làm gương
Nhân viên không tin tưởng, anh không thể làm được gì.
Đặc biệt là với lãnh đạo của đối tác (họ quyết định trong mọi công việc)
Làm việc với lãnh đạo sẽ quyết được nhiều việc, nhanh và hiệu quả
Bạn có thể mang lại lợi ích lớn cho cty thông qua đàm phán
Làm cho đối tác tin tưởng và tôn trọng dù có đạt được thỏa thuận hay không
Chất lượng chỉ thật sự cao khi mọi nội dung của quản trị dự án rch hợp được hoàn tất tốt
Cần rất sâu sát và sử dụng chuyên gia, không bao giờ chỉ nghe báo cáo