基于SSH架構開發的《高校大學生選課系統》的品質屬性的實作
對于可用性采取的是錯誤預防戰術,即阻止錯誤演變為故障;在本系統主要展現在以下兩個方面:(1)對于學生登入子產品,由于初次登陸,學生可能不知道自己的使用者名和密碼,此時可以在界面中顯示一個溫馨提示,進而告知學生其首測登入系統的使用者名和密碼都為其學号,而防止學生在不知情的情況下根據自己的思維方式屢屢輸入使用者名和密碼卻屢屢收到系統給出的錯誤提示,無法進入系統進行相關的操作,而由于多次輸入錯誤而導緻系統故障;當然在登陸界面中,點選“忘記密碼”超連結後,接着在跳轉的界面中輸入相應的登陸條件後即可對自己的資訊進行檢索,可以對自己的資訊進行修改,密碼修改後,其次登陸都得使用此密碼,這是考慮到人人都會有忘記密碼的時候的情形以及需要對個人資訊進行修改的情形,同樣的管理者子產品亦是如此,如若忘記密碼或需要修改個人資訊時,便可以以點選超連結的形式找回密碼以及對資訊作出修改,進而順利的進入系統:(2)當以各自的身份進入到相對應的頁面後,便可以進行相關的操作了,對于管理者來說,可以對學生和課程的資訊進行增删改查的操作,對于資訊的添加,我們都知道表中的每一條記錄都有一個唯一的辨別符來作為它們之間差異的展現,它們被其所辨別,但是畢竟一個表中主碼的值是不允許重複使用的,故在此處,我的界面上會在每一條記錄的主碼位置設計一個按鈕,目的是為了檢測此時插入的主碼是否與已存入表中的記錄的主碼重複,這就在很大程度上避免了當你已經完整的把相關資訊填完後,但是由于你重複的插入了主碼而導緻系統報錯或導緻系統故障,你又得反複重新輸入新的資訊;對于修改資訊操作,我們都知道對于每一條記錄,我們不能修改其主碼,但是有些人并沒有注意到這個問題,一旦修改了之後可能造成主碼重複等等相關問題而導緻系統報錯,并且從邏輯上講人或物的辨別碼一般是不會變的,被修改的情況是很小的,對于這種情況,我的系統會在資訊修改這個界面把相關資訊都顯示出來,但是主碼這一欄不允許編輯,将其設定為隻讀狀态。
易用性方面所采用的戰術是運作時戰術,即一旦系統執行,就可以為使用者提供關于系統正在做什麼的回報;在本系統中主要展現為以下兩個方面:(1)系統涉及到兩個角色:管理者和學生,以不同的身份進入的是不同的首頁,進行的也是不同的操作,當你進入了首頁後,我的系統會提示你是以何種身份進入的,并提示你可以做哪些操作,這其實就類似使用者使用說明手冊一樣,告訴你系統的功能,這在很大程度上為使用者無頭緒的使用減輕了負擔,更容易增強使用者的自信度和滿意度;(2)對于系統涉及到的對各個實體資訊的增删改查操作而言,隻要使用者采取了相關行動之後,系統會在使用者所要進行操作的頁面上顯示出對應的資訊操作提示,對于“删除”操作,點選“删除”按鈕後,系統會提示“是否删除目前記錄?”,選擇“是”後,系統會提示“目前資訊删除成功”,“否”則沒有删除資訊;對于學生選課這個子產品,當學生選完課後,還可以對課程進行“退選”操作,點選“退選”按鈕後,系統會提示:“是否要退選此課程?”,選擇“是”後,系統會自動提示:“已成功退選該門課程”,“否”則沒有進行退選操作。
可修改性方面所采取的戰術是防止連鎖反應,即子產品之間應盡可能的脫耦,對此可采用資訊隐藏戰術來實作,即把某個實體或系統的責任分解為更小的部分,目的是将變更隔離在一個子產品内,防止變更擴散;在本系統中主要展現在以下三個方面:(1)對于登入子產品,雖然會以不同的身份登入系統,但登陸時所進行的操作都是一樣的,都需要輸入使用者名和密碼,當使用者點選登陸按鈕後系統會對送出的資料進行校驗,一般是設計DAO類來對其進行校驗,從理念上講完全可以設計一個公共DAO類來分别讓AdminDAO類和StudentDAO類來繼承共同使用此公共父類,來對資訊進行校驗,但是考慮到後期的使用,可能會為各個角色在登陸時設定不同的限制行為,而不至于在後期更改時“牽一發而動全身”,故本系統是分别設計了AdminDAO類和StudentDAO類對登陸進行驗證;(2)同樣的,對于進入系統後對不同實體的增删改查操作而言,本來也是可以為CRUD操作提供一個公共的DAO類來作為各個實體的DAO類進行CDUD操作的父類,但是為了今後對不同實體需求變更的操作進行輕量級的修改,以此分别設計了各個實體的DAO類,很大程度上把它們之間的耦合性和内聚性都降低了;(3)本系統所采用的是SSH架構,我們知道struts負責控制Service(業務邏輯處理類),進而控制Service的生命周期,這樣層與層之間的依賴很強,屬于耦合。這時,使用spring架構就起到了控制Action對象(Strus中的)和Service類的作用,兩者之間的關系就松散了,以此就降低了它們之間的耦合度,這樣在對系統的某一業務進行修改時,就隻需找到其在ApplicationContext.xml中的配置位置,并對其進行修改即可,這樣修改省事又友善。
性能方面所采用的戰術是改進資源需求戰術,以此可以采用提高計算效率即算法的改進戰術來實作;在本系統中主要是展現在對各個實體資訊進行CRUD操作時的算法上,過去在對資料進行CRUD操作時用的是SQL語句,我們都知道SQL語句很長,執行效率也相對比較低下,對送出的資料進行相應的操作時間會很慢,針對此處本系統對資料操作采用的是Hibernate機制中的HQL查詢以及Hibernate對封裝後的資料對應的實體的CRUD操作,這屬于面向對象程式設計的思想,很明顯可以看出直接對實體進行操作的方式要比用SQL機制來對實體進行CRUD操作的方式的效率要高很多,故以此來提高系統對使用者操作的響應能力。
安全性方面采用的是抵抗攻擊戰術,即對傳輸資料進行加密,對資料提供檢驗;在本系統中展現在使用者的登入子產品,使用者在進行登陸時都要輸入自己的使用者名和密碼,使用者隻要登入系統,其所輸入的資訊,特别是密碼很容易被擷取,其隐私很容易被洩露,以此為了在一定程度上對使用者的隐私進行保護,本系統采取了這樣一個政策:首先Database中所存取的使用者密碼是已經經過MD5加密算法進行加密後的密文,接下來對于使用者在登陸界面的密碼框中所輸入的密碼,系統依然采用MD5加密算法先将其進行加密成為密文,接着對其進行校驗後才決定使用者接下來的操作,這樣使用者在向系統送出隐私資料時,為了抵抗攻擊,本系統相當于為使用者的隐私資料加了一把鎖,進而使使用者的隐私資訊更具有安全性。
對于可測試性方面,采取的是管理輸入/輸出采取将接口與實作分離的戰術;在本系統中此戰術是展現在對系統中的實體進行操作時為具體的實體的操作提供了一個公共的接口,其中定義了操作的方法,而在實體的操作類中具體去實作這些方法,這就把接口與實作進行了分離,以此來增強本系統的可測試性。