Mô hình hóa đặc tả hệ thống

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu và ứng dụng VDM++ cho mô hình hóa và kiểm thử hệ thống IMP tại NTTDATA việt nam (Trang 58 - 63)

3.2.1. Đặc tả kiến trúc

Lược đồ quan hệ giữa các lớp được thiết kế bằng công cụ Modelio. Sau khi thiết kế xong, các lớp ở mức trừu tượng và mối liên hệ giữa chúng thì bước tiếp theo là đặc tả các lớp này trong VDM++. Dựa vào kiến trúc của Framework sẽ định nghĩa các lớp liên quan. Các lớp ở các tầng controller và model sẽ phải được thừa kế từ các lớp nền tảng (basic…). Các lớp basic này sẽ định nghĩa và cài đặt các thuộc tính và phương thức dùng chung. Lược đồ lớp được thể hiện như sau:

class impdb

types

instance variables

--SCHEDULE_ANNUAL_TBL

public ScheduleAnnual_Table: setof ScheduleAnnual_Entity;

--SCHEDULE_ANNUAL_PLN_DETAIL_TBL

public ScheduleAnnualPlnDetail_Table: setof ScheduleAnnualPlnDetail_Entity;

--SCHEDULE_ANNUAL_ACT_DETAIL_TBL

public ScheduleAnnualActDetail_Table: setof ScheduleAnnualActDetail_Entity;

--SCHEDULE_MONTHLY_TBL

public ScheduleMonthly_Table: setof ScheduleMonthly_Entity;

--SCHEDULE_MONTHLY_DETAIL_TBL

public ScheduleMonthlyDetail_Table: setof ScheduleMonthlyDetail_Entity;

--INSPECTION_CHECKLIST_TBL

public InspectionChecklist_Table: setof InspectionChecklist_Entity;

--INSPECTION_APPROVAL_TBL

public InspectionApproval_Table: setof InspectionApproval_Entity;

--INSPECTION_APPROVAL_DETAIL_TBL

public InspectionApprovalDetail_Table: setof InspectionApprovalDetail_Entity;

--INSPECTION_DEFECT_TBL

public DefectDetail_Table: setof DefectDetail_Entity;

--MST_ITEM_TBL

public MstItem_Table: setof MstItem_Entity;

--MST_LOCATION_TBL

public MstLocation_Table: setof MstLocation_Entity;

--WORKING_CALENDAR_TBL

public WorkingCalendar_Table: setof WorkingCalendar_Entity;

Hình 3. 6. Lược đồ lớp trừu tượng trong Modelio

3.2.2. Đặc tả nghiệp vụ

Dựa vào tài liệu đặc tả màn hình, rằng buộc dữ liệu và yêu cầu nghiệp vụ (Business rule) bước tiếp theo là thực hiện thiết kế luồng xử lý nghiệp vụ cho từng sự kiện (Event). Tài liệu thiết kế lược đồ activity như sau:

DB

Front End Back End

Processing Design Online Design Document Processing

(flow)

System name IMP system

Business ID/Business name B02 Monthly Schedule

Function ID/Function name F_B02_02 処理ID/処理名 S_B02_02 Create 作成者 作成日 更新者 更新日 TungNX TungNX 13/11/2014 Information Type: Group Restricted

Company: NTT DATA Corporation Information Owner: Research and Development Headquarters

Get request Monthly Schedule Create

<<EXIT_STATUS>> [Screen] A99_06

$monthlyRequestNo = generate ID <<COM00001>>

<<EXPECTED>> Pass value: $monthlyRequestNo $annualRequestNo $year = Current year $monthStage $maintenanceType = Constants.CORRECTIVE_MAINTENACE_TYPE $itemCode = $arItemCode[$i] $locationLevel1 = $arLocationLevel1[$i] $resourceAmount = $arResourceAmount[$i] $duration = $arDuration[$i] $plnStartDate = $arPlnStartDate[$i] $plnStartEnd = $arPlnStartEnd[$i] $percentComplete = $arPercentComplete[$i] $inspectStatus = Constants.INS_PLANNING_STATUS $updatedBy = current user loged in $functionId $clientIp Return

<<EXPECTED>>

Return ~MsgID M.INF.F_COMMON.003 {Monthly Schedule}

Pass value SQL 3.0: Insert monthly schedule detail

<<EXPECTED>> $annualRequestNo $year $maintenanceType $monthStage $arItemCode[] $arLocationLevel1[] $arResourceAmount[] $arDuration[] $arPlnStartDate[] $arPlnStartEnd[] $arActStartDate[] $arActEndDate[] End $arLocationLevel1[] Begin $arLocationLevel1[] [Return 10] Return <<EXIT_STATUS>> [Screen] S_B02_02 <<EXPECTED>>

MsgID M.ERR.F_COMMON.028 [Monthly Schedule] Input Check [$scheduleObj != Null]

[$scheduleObj == Null]

Pass value Begin arLocationLevel1[] SQL 9.0: Get list location level 2

<<EXPECTED>> Pass value: $year=current year $locationLevel1=arItemLocation[i].[LOCATION_NO] Get value <<EXPECTED>> Get value: $arLocationLevel2[] Add warning [$arLocationLevel2.length = 0] <<EXPECTED>>

Add ~MsgID M.ERR.F_COMMON.xxx ({0} must have location level 2)

End arLocationLevel1[] [$arLocationLevel2.length > 0]

Error? Warning message [Y]

<<EXIT_STATUS>> [Screen] S_B02_02

<<EXPECTED>> Return error message

Pass value <<EXPECTED>> Pass value: $year $monthStage $maintenanceType = Constants.CORRECTIVE_MAINTENACE_TYPE

$status = Constants.DB_TRUE_FLAG SQL 8.0: Get list related location level 1 (distinct) Get value

Get value: $arLocationLevel1[]

[N] Click “Confirm”

Hình 3. 7. Lược đồ luồng nghiệp vụ xử lý tạo mới kế hoạch

Khi người dùng click vào nút “Xác nhận” yêu cầu được chuyển tới lớp xử lý event tương ứng. Dữ liệu người dùng được kiểm tra đảm bảo các rằng buộc cơ sở dữ liệu (khóa chính, bắt buộc phải nhập, độ dài, …). Hệ thống chỉ cho phép tạo kế hoạch khi đã các hạng mục được cài đặt mức kiểm tra ở mức hai, vì vậy, luồng nghiệp vụ sẽ kiểm tra sự tồn tại của vị trí cấp 2. Nếu dữ liệu đúng đắn theo yêu cầu nghiệp vụ sẽ được lưu vào cơ sở dữ liệu và hiển thị thông báo tạo kế hoạch thành công, kết thúc luồng nghiệp vụ.

Để đảm bảo tính đúng đắn của tài liệu phân tích, cần tránh những sai sót của tài liệu thiết kế VDM++ được sử dụng để đặc tả tài liệu thiết kế. Việc thực hiện mô hình hóa trong VDM++ cũng tương tự như việc cài đặt trong các ngôn ngữ bậc cao Java. Tuy nhiên, kiểu dữ liệu ở mức trừu tượng và không tập trung nhiều vào các xử lý cơ sở dữ liệu.

Hình 3. 8. Mô hình hóa lớp trừu tượng ScheduleAnnualModel

class ScheduleAnnualModel

operations

public getLastAnnualRequest : () ==> ScheduleAnnual_Entity

getLastAnnualRequest() == issubclassresponsibility;

public getItemsByStatus : CommonType`String ==> setof ScheduleAnnual_Entity

getItemsByStatus(sStatus) == issubclassresponsibility;

public getItemsByYear : CommonType`String ==> setof ScheduleAnnual_Entity

getItemsByYear(sYear) == issubclassresponsibility;

Hình 3. 9. Mô hình hóa lớp cài đặt ScheduleAnnualModelImpl

Lớp này cài đặt toàn bộ các xử lý liên quan đến bảng cơ sở dữ liệu Imp_Schedule_Annual. Gồm các thao tác thêm mới, sửa, xóa và một số kiểm tra ràng buộc (khóa chính, tính duy nhất, trường bắt buộc,…).

class ScheduleAnnualModelImpl is subclass of ScheduleAnnualModel

instance variables

impDB: impdb;

operations

public ScheduleAnnualModelImpl: impdb ==> ScheduleAnnualModelImpl

ScheduleAnnualModelImpl(db) == setDB(db);

public setDB: impdb ==> ()

setDB (db) == ( impDB:= db ); --Check primary key

public checkPrimaryKey : ScheduleAnnual_Entity ==> bool

checkPrimaryKey (obj) == (

return not checkExisting(obj)

);

--Check existing

public checkExisting : ScheduleAnnual_Entity ==> bool

checkExisting (obj) == (

returnexists row in set impDB.ScheduleAnnual_Table

& obj.annualRequestNo = row.annualRequestNo );

public getAllScheduleAnnuals : () ==> setof ScheduleAnnual_Entity

getAllScheduleAnnuals() == (

return impDB.ScheduleAnnual_Table

);

public findByKey : CommonType`String ==> ScheduleAnnual_Entity

findByKey(sKey) == (

return (iota sAnnual in set impDB.ScheduleAnnual_Table &

sAnnual.annualRequestNo = sKey)

);

public insert : ScheduleAnnual_Entity ==> CommonType`String

insert(obj) == (

impDB.ScheduleAnnual_Table := impDB.ScheduleAnnual_Table union {obj};

return obj.annualRequestNo

)

prenotexists row in set impDB.ScheduleAnnual_Table

& obj.annualRequestNo = row.annualRequestNo;

public update : ScheduleAnnual_Entity ==> CommonType`String

update(obj) == (

dcl sAnnualTemp : ScheduleAnnual_Entity;

sAnnualTemp := findByKey (obj.annualRequestNo);

impDB.ScheduleAnnual_Table := (impDB.ScheduleAnnual_Table \ {sAnnualTemp}) union

{obj};

return obj.annualRequestNo

)

preexists row in set impDB.ScheduleAnnual_Table

& obj.annualRequestNo = row.annualRequestNo;

public getLastAnnualRequest : () ==> ScheduleAnnual_Entity

getLastAnnualRequest() == (

dcl lastRow:ScheduleAnnual_Entity;

for all tmp in set impDB.ScheduleAnnual_Table do (

lastRow := tmp;

);

Mô hình hóa tầng controller (xử lý yêu cầu người dùng)

Hình 3. 10. Mô hình hóa lớp xử lý yêu cầu B0102ServiceController

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu và ứng dụng VDM++ cho mô hình hóa và kiểm thử hệ thống IMP tại NTTDATA việt nam (Trang 58 - 63)

Tải bản đầy đủ (PDF)

(71 trang)