Trước khi bắt đầu mình sẽ giới thiệu lại quy trình tính toán FP như sau:
- Xác định kiểu đo lường (ước lượng cho dự án mới, nâng cấp dự án hay chỉ đánh giá một dự án đã có)
- Xác định phạm vi của dự án.
- Xác định số lượng Function Points thô (Unadjusted Function Points)
- Xác định hệ số cân đối (Value Adjusted Factors).
- Xác định số lượng Function Points cân đối (Adjusted Function Points).
Step 1: Xác định kiểu đo lường (Type of Count)
Bước đầu tiên trong phương pháp FPA đó là xác định loại dự án cần ước lượng. Do đó, việc xác định số lượng FPs có thể là việc xác định số lượng FPs của một dự án hoàn toàn mới (Development Project FP Count), số lượng FPs của việc nâng cấp một dự án (Enhancement Project FP Count) hoặc đơn giản chỉ là đánh giá lại một dự án hoàn thành (Application FP Count).
Step 2: Xác định đường biên (boundary) của ứng dụng
- Ứng dụng mà bạn đang xây dựng là ứng dụng độc lập (standalone) hay chỉ là một phần trong một gói (suite) ứng dụng. Nghĩa là nguồn cung cấp dữ liệu để ứng dụng của bạn hoạt động là “nguồn tự cung tự cấp” hay là từ một ứng dụng nào đó. Chẳng hạn như khi một trường đại học muốn gửi thông báo về kết quả của một sinh viên cho gia đình của sinh viên đó, thì nó “hệ thống quản lý điểm thi” phải lấy dữ liệu (tức là thông tin liên lạc của sinh viên đó) từ hệ thống “quản lý sinh viên”.
- Việc xác định đường biên của ứng dụng là rất quan trọng, nó ảnh hưởng trực tiếp lên độ phức tạp của ứng dụng, bởi vì việc phát triển một ứng dụng standalone bao giờ cũng đơn giản hơn các ứng dụng trong các “gói” ứng dụng. “Tiền của tui tui xài!”, dĩ nhiên là cảm thấy “thoải mái” hơn là sử dụng tiền của người khác vì bạn không bị phụ thuộc, và rõ ràng những thay đổi xảy ra đối với cá nhân khác không làm ảnh hưởng lớn đến “việc xài” của bạn. Nó cũng tương tự như trong một dự án, sự trì trệ tại một khâu, một giai đoạn nào đó trong chu trình phát triển sẽ ảnh hưởng lên toàn bộ chu trình. Hay như việc phát triển các phần mềm quản lý nhân viên, quản lý tiền lương riêng lẻ bao giờ cũng đơn giản hơn là việc phát triển một gói giải pháp ERP cho doanh nghiệp rồi! Dĩ nhiên ưu điểm của ERP là tài nguyên được sử dụng hiệu quả hơn song đó cũng chính là vấn đề của nó, làm thế nào để sử dụng hiệu quả nguồn tài nguyên đó!
- Giả sử chúng ta cần xây dựng một ứng dụng “đơn giản” nhằm quản lý điểm cho sinh viên, đồng thời khi có yêu cầu, ứng dụng sẽ in ra kết quả thi và gửi đến gia đình sinh viên đó. Chúng ta giả định rằng, không hề có một ràng buộc nào về một học kỳ phải học những môn học nào, đơn giản, chúng ta có một danh sách các sinh viên, danh sách các môn học và chi tiết điểm của sinh viên cho tất cả các môn học đó (không giống như thực tế lắm vì nếu có một số môn chưa học thì kết quả bằng “zero”… nhưng giả định để cho đơn giản mà).
- Như vậy về mặt CSDL ta sẽ có như sau
- SinhVien(MaSV, HoTen, MaLop)
- MonHoc(MaMH, TenMH, SoTinChi)
- KetQua(MaSV, MaMH, Diem)
- Một lưu ý là thông tin chi tiết của một SinhVien có thể truy xuất từ hệ thống quản lý SinhVien với CSDL như sau (đã lược bỏ một số thông tin)
- SinhVien(MaSV, HoTen, NgaySinh, DiaChiNha, PhuongXa, QuanHuyen, TinhThanhPho)
Như vậy bạn có thể xác định được boundary của ứng dụng của bạn như sau
Step 3a: Xác định FP thô (UFP)
Độ phức tạp của ứng dụng phụ thuộc vào hai yếu tố, đó là mức độ phức tạp của dữ liệu (data) và mức độ phức tạp của việc xử lý (transaction). Do đó, việc xác định UFP là công việc xác định số FPs của dữ liệu (Data Function Points)và số FPs của xử lý (Transaction Function Point).
Data FPs thể hiện khía cạnh dữ liệu trong các chức năng cung cấp cho khách hàng. Nó đặc trưng bởi hai yếu tố ILF (Internal Logical File) và EIF (External Interface File). Việc xác định ILF hay EIF cần được thực hiện trước khi tiến hành chuẩn hóa (normalize) dữ liệu.
- Một ILF là một nhóm các dữ liệu được lưu trữ và bảo trì trong phạm vi hệ thống (bên trong boundary). Thông thường nó là một bảng (table) trong cơ sở dữ liệu của ứng dụng.
- Một EIF cũng là một nhóm dữ liệu nhưng được lưu trữ và bảo trì bởi một ứng dụng khác (bên ngoài boundary). Dĩ nhiên, một EIF này có thể là một ILF của một ứng dụng khác. Thông thường EIF được cung cấp thông qua các services. Chẳng hạn như các services chứng khoán, bảng ngoại tệ, thời tiết…
Transaction FPs thể hiện khía cạnh xử lý của ứng dụng trong các chức năng cung cấp cho khách hàng. Nó đặc trưng bởi ba yếu tố EI (External Inputs), EO (External Outputs), External Inquiries (EQ).
- Một EI là một tiến trình căn bản (element process) trong đó dữ liệu được truyền từ bên ngoài vào bên trong của boundary. Thông thường EI là các thao tác thêm, xóa, cập nhập dữ liệu trong cơ sở dữ liệu
- Một EO là một tiến trình căn bản (element process) trong đó dữ liệu phát sinh (derived data) được truyền từ bên trong ra bên ngoài boundary. Dữ liệu phát sinh đó thường là các dữ liệu được kết hợp với nhau bằng các công thức tính toán như SUM, AVERAGE… Dĩ nhiên, các dữ liệu phát sinh này không xuất hiện trong các ILF hay IEF. Thông thường các EO là bảng báo cáo (reports), các thông báo hay dữ liệu gửi tới các ứng dụng khác.
- Một EQ là một tiến trình căn bản (element process) có hai chiều nhập dữ liệu (input) và xuất dữ liệu (output) nhằm truy xuất dữ liệu từ một hay nhiều ILF/EIF. Trong đó dữ liệu nhập (input) không làm thay đổi dữ liệu của ILF/EIF và dữ liệu xuất không chứa các dòng dữ liệu phát sinh (derived data). Thông thường, EQ là các thao tác tìm kiếm, truy vấn dữ liệu từ các ILF/EIF.
Lưu ý: Tiến trình căn bản (element process) là một xử lý đơn vị đối với người dùng (có nghĩa với họ). Ví dụ, người dùng yêu cầu chức năng thêm một sinh viên với mô tả là một sinh viên có mã số sinh viên, họ tên sinh viên… thì tiến trình căn bản chính là “thêm một sinh viên” chứ không phải là thêm một họ tên, mã số sinh viên…
Cách tính UFP
- Xác định độ phức tạp cho các ILF và EIF: Gồm việc xác định số lượng ILF và độ phức tạp (Complexity) của mỗi ILF thông qua việc xác định số lượng RETs và DET
- Xác định số lượng ILF.
- Xác định độ phức tạp của mỗi ILF bằng cách tính số lượng DETs (Data Element Type) và số lượng RETs (Record Element Type). Trong đó, DETs là các cột (field) dữ liệu, còn RETs là nhóm các cột dữ liệu (có quan hệ phụ thuộc vào nhau, được cập nhập cùng nhau). Để xác định các RETs, thông thường người ta sử dụng phương pháp chuẩn hóa cơ sở dữ liệu.
- Từ độ phức tạp tính được số FP tương ứng.
- Xác định độ phức tạp cho các EI: Căn cứ vào số lượng FTR (File Types Referenced) và DET (Data Element Types) để quyết định độ phức tạp của mỗi EI.
- Xác định các EI có trong dự án.
- Tính FTRs và DET cho mỗi EI. Trong đó, mỗi FTR phải là một ILF hoặc một IEF mà EI đó tương tác. Còn DET là mỗi dòng dữ liệu nhập (Data Input Field), thông báo lỗi(error message), thông báo xác nhận (confirm message), buttons, mỗi nhóm radio buttons, check boxes, listbox…
- Xác định độ phức tạp cho các EO: Hoàn toàn tương tự như cách xác định FP cho EI.
- Xác định các EO có trong dự án.
- Tính FTRs và DETs cho mỗi EI để suy ra độ phức tạp và số lượng FPs tương ứng. Trong đó số lượng DET được xác định như sau:
- Mỗi cột dữ liệu đọc được từ ILF, EIF được tính là 1 DET.
- Mỗi dữ liệu phát sinh (derived data) được tính là 1 DET.
- Các error message được tính là 1 DET.
- Các Confirm message được tính là 1 DET.
- KHÔNG TÍNH tiêu đề (heading) của cột, ngày tháng ngày lập báo cáo. Chỉ tính ngày tháng là một DET nếu nó là dữ liệu có ý nghĩa trong kinh doanh (như lập hóa đơn, ngày đăng ký…
- Xác định độ phức tạp cho các EI: Như đã biết, mỗi EI là một tiến trình xử lý gồm hai chiều (thể hiểu như gồm EI và EO). Do đó số lượng FTRs và DETs cuối cùng là sự kết hợp giữa FTRs và DÉTs phía EI và EO. Điều này có nghĩa là nếu cả phía EI và EO cùng sử dụng một FTR thì FTR đó chỉ được tính là MỘT. Tương tự như đối với DET.

Sau khi xác định được độ phức tạp của ta sẽ tính được số lượng FP tương ứng với mỗi EI, EQ, EO.
Cuối cùng ta tính được UFP dựa vào bảng sau. Tạm thời ta chỉ quan tâm tới Total Number of Unadjusted Function Points (Trong bài viết sau sẽ trình bày cách tính Value Adjustment Factor và Total Adjusted Function Points)







Tháng Năm 21, 2009 lúc 1:10 chiều
y nghia lam, nhung neu lam 1 cai vi du that su nua thi se hay hon ^_^
Tháng Năm 26, 2009 lúc 12:12 sáng
Ban lay mot vi du, mot UI sau do tinh FPs tren do, de hieu hon rat nhieu.
Tháng Năm 26, 2009 lúc 3:17 sáng
Chào bạn!
Mình đang làm bài tập môn học môn Quản lý dự án. Theo yêu cầu thì mình vẽ use case, làm Work Breakdown Structure (WBS), rồi ước lượng dự án theo 2 phương pháp là Delphi và Function Point. Khi làm Function Point mình rất lúng túng. Ở chỗ: Thường thì tính số FP dựa trên giao diện và Database dự kiến, nhưng mỗi chức năng trong wbs lại không hẳn ứng với một giao diện củ thể. Và mỗi chức năng thì có thể nằm ở nhiều trang… Nên muốn tính số FP cho mỗi chức năng, rồi tính thời gian, và sau đó đưa thời gian vào Microsoft Project thì làm bằng cách nào?
Đầu tiên thì mình nghĩ, sẽ phân nhỏ ra, mỗi chức năng trong wbs sẽ tương ứng với một giao diện, từ đó tính FP cho mỗi chức năng đó(mỗi chức năng khi phân rã cuối cùng mình xem là 1 transaction). Nhưng mình lại thắc mắc: tính thời lượng dựa trên FP mỗi chức năng đó có được hay không? Hay cố FP phải tổng hợp cuối cùng cho tổng dự án. Làm sao tính thời gian cho mỗi giai đoạn thực hiện(lấy yêu cầu, thiết kế, code, test….) của từng chức năng đó.
Mình rối hết cả lên về cách lập thời biểu cho một dự án dựa trên ước lượng FP. Rất mong bạn cho mình ý kiến.
Tháng Năm 28, 2009 lúc 7:49 sáng
Đúng rồi, mục đích của WBS là phân chia một chức năng thành nhiều tác vụ con, gọi là tác vụ đơn vị. Từ đó, làm căn cứ cho việc tính FP cho mỗi tác vụ cũng như tổng số FP cho một dự án.
Có thể tính thời lượng dựa trên mỗi chức năng. Việc ước lượng này dựa vào việc lượng giá thời gian cho một FP. Chẳng hạn để hoàn thành 1 FP cần 8 giờ (gồm lấy yêu cầu, phân tích, thiết kế, thực hiện, kiểm thử). Để có con số 8giờ này thường dựa vào kinh nghiệm của PM.
Để tính thời gian cho mỗi giai đoạn thực hiện cũng lại phục thuộc vào kinh nghiệm của PM đối với từng dự án. Tùy yêu cầu, đặc điểm của dự án đó mà thời gian dành cho mỗi giai đoạn là khác nhau. (Một dự án kiểu “mì ăn liền” thì thời gian dành cho phân tích gần như là con số 0 rồi còn gì!) Tuy nhiên, một vài con số mà bạn có thể tham khảo đó là: Giai đoạn Lấy yêu cầu (%R) chiếm 10%; phân tích thiết kế (%D) chiếm 15%; giai đoạn hiện thực (%I) chiếm 50%; kiểm thử (%T) chiếm 20%. Đem nhân số FP của từng chức năng với % của từng giai đoạn sẽ ra FP của từng giai đoạn. Quy đổi ra số FP ra giờ (ví dụ 1FP = 8hrs) ta sẽ được thời gian cho từng giai đoạn ứng với việc thực hiện một FP. Dĩ nhiên, nếu muốn tính thời lượng dành cho từng giai đoạn của cả dự án, chỉ việc lấy tổng số FP của dự án đem nhân cho % của từng giai đoạn.
Hiện tại mình cũng đang rất bận nên chưa thể viết hoàn chỉnh một ví dụ (đang còn nháp). Nhưng hy vọng, chúng mình có thể trao đổi thêm!
Tháng Sáu 15, 2009 lúc 3:46 sáng
dan HUTECH vao day nhieu qua!
Tháng Sáu 16, 2009 lúc 7:49 sáng
hixxhixx chờ hoài hok có thấy ví dụ. buồn ghê mình đang rất muốn tìm một ví dụ
Tháng Bảy 22, 2009 lúc 11:51 sáng
Cam on tac gia cua bai viet nay.
Bai viet rat hay.