2.4.1.1 Split shared requirements if possible
Mục đích cho quá trình này là kết hợp requirements với chỉ một theme. Chúng ta không muốn chức năng lặp lại trong các theme khác nhau. Ta xem xét liệu requirement chia sẻ có thể viết lại để các theme sẽ không còn liên kết với nhau. Nếu có thể tách requirement thành các requirement mới thì làm mịn các theme với các requirement mới.
Xét R4 trong ví dụ EES: các hoạt động check-syntax, display, và evaluation nên được ghi lại – logged. Ta thử phân tách theme này ra thành các câu: log có khả năng ghi lại hoạt động check-syntax; log có khả năng ghi lại hoạt động display; log có khả năng ghi lại hoạt động evaluation. Khi đó tập các câu này lại có ý nghĩa như requirement ban đầu, đặc điểm log vẫn được mô tả liên quan đến check-syntax, display, và evaluation. R4 là requirement chia sẻ không thể bị phân tách.
2.4.1.2 Dominance means association:
Khi requirement chia sẻ không thể phân tách để gỡ rối cho các theme thì chúng ta đi tới bước tiếp theo: tìm theme chi phối chịu trách nhiệm cho requirement chia sẻ.
Có nhiều cách để kết luận một theme chi phối một requirement.
-Trong requirement ta xem xét theo mặt: theme nào nên biết về các hành vi của
requirement. Với R4, các hoạt động: check-syntax, display, và evaluation không cần biết là chúng đang được ghi lại. Nhưng theme log cần biết về cái mà nó ghi để điều chỉnh hành vi cho phù hợp. Trong requirement này có theme log là cần biết về hành vi đã miêu tả nên theme log sẽ chi phối requirement.
-Xem xét tập các requirement khác kết hợp với mỗi theme, ta có thể kết luận
theme nào quan tâm, cần biết về requirement chia sẻ nhiều hơn. Theme đó sẽ chi phối requirement chia sẻ.
Theme nào chi phối requirement chia sẻ sẽ là theme aspect.
2.4.1.3 Base triggers aspect
Ta đã chọn được theme nào là theme aspect, và bây giờ áp dụng qui tắc base- triggers-aspect. Hành vi của aspect sẽ được tự động kích hoạt bởi một số hành vi trong theme base. Việc kích hoạt hành vi của aspect sẽ thể hiện ngầm định tại vị trí kích hoạt. Nếu không có mối quan hệ aspect-base thì hành vi aspect phải được kích hoạt rõ ràng ở trong base. Log là aspect được kích hoạt bởi các theme base: check-syntax, display , và evaluation.
24
2.4.1.4 Đủ là aspect crosscutting
Sau khi kiểm tra các ngyên tắc split/dominace/trigger ta tìm ra được một aspect và xem xét nó có là crosscutting.
Aspect là hành vi bị kích hoạt được tách riêng với hành vi kích hoạt. Thuật ngữ crosscutting có nghĩa là tách riêng hành vi mà được trải rộng khắp trong hệ thống . Một aspect mà cắt ngang tại nhiều vị trí trong hệ thống (có thể cắt ngang tại nhiều vị trí mà chỉ thuộc một theme) thì aspect đó là một crosscutting. Một aspect mà chỉ được kích hoạt ở một vị trí thì nó không là crosscutting. Hành vi mà chỉ được kích hoạt tại một vị trí thì không nhất thiết phải quan tâm nó có phải là aspect, nó có thể tách riêng ra là một theme, hoặc đặt tại vị trí chính xác trong theme base.
Ta có theme log được kích hoạt trong ba tình huống khác nhau, nên aspect log đủ là một crosscutting.
2.4.1.5 Make the association
Trong khung nhìn crosscutting thì giao kết là mũi tên mầu xám đi từ theme aspect tới các theme khác liên quan trong requirement. Các requirement chia sẻ giờ chỉ liên kết đến theme aspect.
Sử dụng các nguyên tắc split/dominance/trigger ta xác dịnh được theme log cắt ngang các theme: check-syntax, display , và evaluation. Trong hình 2-12 vẽ các mũi tên màu xám đi từ theme log tới các theme mà nó cắt ngang, requirement chia sẻ (R4) giữa theme log và các theme đó bây giờ chỉ được liên kết với duy nhất theme log, không liên kết với các theme base nữa.
25
2.4.1.6 Chuỗi của crosscutting
Khi xác định được một theme cắt ngang một theme khác, không có nghĩa là theme crosscutting đó sẽ luôn cắt ngang các theme khác, hoặc các theme base được xác định sẽ luôn là theme base. Theme có thể vừa bị theme khác cắt ngang, vừa cắt ngang một theme khác.
Khi themeA cắt ngang themeB, themeA là crosscutting. Trong một requirement chia sẻ khác thì themeA lại là theme base kích hoạt một theme crosscutting là themeC. Khi đó themeC là aspect của aspect.