Thiết kế và khả năng mở rộng

Một phần của tài liệu (LUẬN văn THẠC sĩ) chuyển ngôn ngữ trong biểu diễn yêu cầu phần mềm (Trang 41 - 50)

Chương III: Áp dụng và mở rộng SPSC

3.1 Phần mềm hỗ trợ

3.1.2 Thiết kế và khả năng mở rộng

Do tính chất cây của bảng hỏi, nên bảng hỏi được đưa vào file XML như ví dụ như trong bảng 3.1. Với cấu trúc này, khi bảng hỏi thay đổi chỉ cần điều chỉnh trực tiếp trong XML mà không cần lập trình lại cả phần mềm.

Ngoài ra, phần mềm được thiết kế để phù hợp với các bảng hỏi có tính chất phức tạp hơn bảng hỏi hiện tại. Đối với bảng hỏi hiện tại, mỗi yêu cầu chỉ có

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

39

một mô tả tương ứng trong SPSC. Trong tương lai, khi mở rộng bộ luật, mỗi yêu cầu có thể có nhiều mô tả tương ứng trong SPSC (nhiều luật thỏa mãn). Phần mềm này được thiết kế để thỏa mãn cả trường hợp này mà không cần lập trình lại.

Bảng 3.1: Cấu trúc file XML của bảng hỏi

<tree>

<title>SPSC Question Tree</title>

<branch id="1">

<content>Does this requirement have probabilistic quality properties?</content>

<fork next="2">No</fork>

<fork next="3">Yes</fork>

</branch>

<branch id="2">

<content>Is the behavior only required to hold within restricted interval(s) in the event sequence?</content>

<fork next="2.1">Yes</fork>

<fork next="4" target="Globally">No, the behavior is required to hold through out the entire event sequence</fork>

</branch>

<branch id="2.1">

<content>How many events are there in this scope?</content>

<fork next="2.3">One events</fork>

<fork next="2.4">Two events</fork>

</branch>

………..

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

40 3.2 Sử dụng SPSC để mô tả yêu cầu

3.2.1 Bộ yêu cầu chức năng

Bộ yêu cầu “đăng ký khóa học” của IBM gồm có 8 ca sử dụng: kết thúc quá trình đăng ký (close registration), đăng nhập (login), quản lý thông tin giáo sư (maintain professor information), quản lý thông tin sinh viên (maintain student information), đăng ký khóa học (register for courses), chọn khóa để dạy (choose courses to teach), cập nhật điểm (submit grades), xem kết quả (view report card).

Do giới hạn của việc trình bày luận văn, và do một số ca sử dụng có tính chất tương tự nhau, trong phần áp dụng này chỉ mô tả quá trình chuyển đổi của 02 ca sử dụng đại diện: ca sử dụng đăng nhập và ca sử dụng kết thúc quá trình đăng ký. Ca sử dụng đăng nhập tương đối đơn giản nên có thể dùng để mô tả quá trình chuyển đổi một cách chi tiết. Ca sử dụng kết thúc quá trình đăng ký tương đối phức tạp, nên được dùng để chứng minh khả năng mô tả của SPSC trong những trường hợp phức tạp.

3.2.1.1 Ca sử dụng Đăng nhập (login)

3.2.1.1.1 Xác định sự kiện

Dựa vào nguyên tắc đã trình bày, ta xác định được cặp sự kiện bắt đầu và kết thúc ca sử dụng là recv_login_regend_login.

Các sự kiện đơn là: show_login_interface, recv_authen_req, user_exist, login_successfully, user_not_exist, login_unsuccessfully, return_error, cancel_login.

3.2.1.1.2 Xác định quan hệ giữa các sự kiện

Ta bắt đầu thực hiện chuyển đổi lần lượt từng yêu cầu, bắt đầu từ yêu cầu đầu tiên (ký hiệu là RP1)

RP1: This use case starts when the actor wishes to log into the Course Registration.

Pre-conditions: The system is in the login state and has the login screen displayed.

Yêu cầu này cần được tinh chỉnh lại thành “After the system receive the login request, it shows the login interface”. Sau khi áp dụng bảng hỏi, ta sẽ có cách biểu diễn trong SPSC như sau:

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

41

“Globally, it is always the case that if recv_login_reg holds then show_login_interface eventually holds.”

Mô tả này đã được lấy làm ví dụ để mô tả chức năng trong phần “3.1.1. Chức năng của phần mềm”, do đó người đọc có thể quay lại phần này để hình dung rõ hơn về cách thức phần mềm hoạt động.

RP2: The actor enters his/her name and password. The system validates the entered name and password and logs the actor into the system

Yêu cầu này cũng cần được tinh chỉnh lại thành: “After the system receive login request, it validates the entered name and password and logs the actor into the system”. Ta đã xác định được các sự kiện là recv_authen_req, validate_user, user_exist, login_successfully.

Khi sử dụng bảng hỏi, chúng ta sẽ thấy đường đi của các câu hỏi và trả lời như sau:

--- Is the behavior only required to hold within restricted interval(s) in the event sequence?

--- No (  Scope = Globally)

--- How many events of primary interest are there in this behavior?

--- Two events

--- Which of the following choices best describes how recv_authen_req and validate_user interact?

--- Both statements above: If recv_authen_req occurs, validate_user is required to occur subsequently; and validate_user is not allowed to occur until after recv_authen_req occurs

(  Behavior = Precedence and Response)

Với mong muốn thể hiện được mối quan hệ của càng nhiều sự kiện càng tốt, trong thực tế người dùng có thể sẽ chọn ba hoặc bốn sự kiện thay vì hai sự kiện như bảng hỏi và trả lời bên trên. Tuy nhiên, ngay khi thấy không phù hợp người dùng sẽ quay lại và lựa chọn từng cặp hai sự kiện để biểu diễn.

Với hai sự kiện đầu tiên (recv_authen_reqvalidate_user), theo cách trả lời như trên, kết quả trong SPSC sẽ như sau:

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

42

“Globally, it is always the case that if receive_login_req holds then validate_user eventually holds.

Globally, it is always the case that if validate_user holds then receive_login_req previously held.”

Tiếp tục áp dụng bảng hỏi cho cặp sự kiện tiếp theo, ta sẽ có:

“After validate_user, it is always the case that if user_exist holds then login_successfully eventually holds.”

Tương tự như vậy, ta áp dụng cho tất cả các yêu cầu còn lại:

RP3: If, in the Basic Flow, the actor enters an invalid name and/or password, the system displays an error message. The actor can choose to either return to the beginning of the Basic Flow or cancel the login, at which point the use case ends.

After validate_user, it is always the case that if user_not_exist holds then login_unsuccessfully eventually holds and is succeeded by return_error.

After login_unsuccessfully, if return_error holds then there is at least one execution sequence such that cancel_login holds.

After login_unsuccessfully, it is always the case that if return_error holds then there is at least one execution sequence such that recv_login_req holds.

After login_unsuccessfully, it is always the case that if return_error holds and is succeeded by cancel_login, then end_login eventually holds after cancel_login.”

RP4: Post-conditions: If the use case was successful, the actor is now logged into the system. If not, the system state is unchanged.

Hai yêu cầu này đã được thể hiện trong các phần mô tả bên trên. Trạng thái login_successfully thể hiện người dùng đã đăng nhập vào hệ thống. Trong quá trình thực hiện, nếu không thành công thì không thay đổi gì trạng thái của hệ thống.

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

43

3.2.1.2 Ca sử dụng Kết thúc việc đăng ký (Close registration)

Thay vì mô tả chi tiết việc chuyển đổi như ca sử dụng đăng nhập, trong ca sử dụng này chỉ liệt kê yêu cầu và kết quả chuyển đổi, nhằm mục đích thể hiện khả năng mô tả của SPSC đối với các ca sử dụng phức tạp

RP5: The use case starts when the Registrar requests that the system close registration. Pre-conditions: The Registrar must be logged onto the system in order for this use case to begin.

“After login_successfully, it is always the case that if recv_close_req holds then curuser_is_Registrar previously held.”

RP6: The system checks to see if registration is in progress. If it is, then a message is displayed to the Registrar, and the use case terminates. The Close Registration processing cannot be performed if registratioin is in progress.

“Between start_registration and close_registration, it is always the case that if recv_close_req holds, then return_error eventually holds and is succeeded by end_close_reg, where no_event holds between display_error and end_close_reg.”

RP7: For each course offering, the system checks if a professor has signed up to teach the course offering and at least three students have registered. If so, the system commits the course offering for each schedule that contains it.

“Between recv_close_req and end_close_reg, there are transitions to states in which start_check_course holds at most 1 times.

Between recv_close_req and end_close_reg, if start_check_course holds, then end_check_course eventually holds.

Between recv_close_req and end_close_reg, if end_check_course holds, then start_check_course previously held.

Between start_check_course and end_check_course, start_check_a_course holds exactly n times (n is the number of course).

Between start_check_course and end_check_course, it is always the case that if start_check_a_course holds then end_check_a_course eventually holds.

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

44

Between start_check_course and end_check_course, it is always the case that if end_check_a_course holds then start_check_a_course previously held.

Between start_check_a_course and end_check_a_course, it is always the case that if course_is_signup and course_has_more3stds hold simutaniously then commit_course eventually holds.”

RP8: If, in the Basic Flow, there is no professor signed up to teach the course offering, the system will cancel the course offering. The system cancels the course offering for each schedule that contains it.

“Between start_check_a_course and end_check_a_course, it is always the case that if course_not_signup holds, then cancel_course eventually holds and is succeeded by cancel_course_in_schedule.”

RP9: For each schedule, the system “levels” the schedule: if the schedule does not have the maximum primary courses selected, the system attempts to select

alternates from the schedule’s list of alternates. The first available alternate course offerings will be selected. If no alternates are available, the no substitution will be made.

Có thể nhận thấy việc bắt đầu tinh chỉnh lịch học (start_level_schedule) chỉ được thực hiện sau khi kết thúc toàn bộ việc kiểm tra khóa học (end_check_course), nhưng việc này không được mô tả tường minh trong tài liệu mà thể hiện bằng tính chất thứ tự (đánh chỉ mục), vì vậy ta bổ sung thêm mối quan hệ giữa hai sự kiện này như bên dưới.

“Between recv_close_req and end_close_reg, there are transistions to states in which start_level_schedule holds occur at most once.

Between recv_close_req and end_close_reg, it is always the case that if start_level_schedule holds then end_check_course previously held.

Between recv_close_req and end_close_reg, it is always the case that if start_level_schedule holds then end_level_schedule eventually holds.

Between recv_close_req and end_close_reg, it is always the case that if end_level_schedule holds then start_level_schedule previously held.

TIEU LUAN MOI download : skknchat@gmail.com

(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem(LUAN.van.THAC.si).chuyen.ngon.ngu.trong.bieu.dien.yeu.cau.phan.mem

45

Between start_level_schedule and end_level_schedule, it is always the case that start_check_a_schedule occurs exactly k times (k is the number of students).

Between start_level_schedule and end_level_schedule, it is always the case that if start_check_a_schedule holds, then end_check_a_schedule eventually holds.

Between start_level_schedule and end_level_schedule, it is always that if end_check_a_schedule holds then start_check_a_schedule previously held.

Between start_check_a_schedule and end_check_a_schedule, if course_not_enough and has_alternatives holds simutaniously then select_first_alternative eventually holds.”

RP11: For each course offering, the system closed all course offerings. If the course offerings do not have at least three students at this point (some may have been added as a result of leveling), then the system cancels the course offering. The system cancels the course offering for each schedule that contains it.

“Between recv_close_req and end_close_reg, there are transitions to states in which start_close_course holds occur at most 1 times.

Between recv_close_req and end_close_reg, it is always the case that if start_close_course holds then end_close_course eventually holds.

Between recv_close_req and end_close_reg, it is always the case that if end_close_course holds then start_close_course previously held.

Between start_close_course and end_close_course, it is always the case that start_close_a_course occurs exactly n times (n is the number of course).

Between start_check_course and end_check_course, it is always the case that if start_close_a_course holds, then end_close_a_course eventually holds.

Between start_check_course and end_check_course, it is always the case that if end_close_a_course holds then start_close_a_course previously held.

Between start_close_a_course and end_close_a_course, it is always the case that if course_not_more3stds holds, then cancel_course eventually holds and is succeeded by cancel_course_in_schedule.”

TIEU LUAN MOI download : skknchat@gmail.com

Một phần của tài liệu (LUẬN văn THẠC sĩ) chuyển ngôn ngữ trong biểu diễn yêu cầu phần mềm (Trang 41 - 50)

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

(82 trang)