軟件工程-綜合性實驗

一、需求概述

1. 引言

畢業論文選題系統的開發目的是,建立一個完備的畢業論文選題流程。通過信息化管理,方便教師出題、校內各學院審覈、學生選題、教師選定學生以及公佈最終畢業論文選題結果。

根據教育部制訂的本科教學要求,對本科生畢業論文選題的要求大體如下:

(1) 每名本科生都要寫畢業論文,否則不能畢業;

(2) 同一專業、同一屆畢業的學生,論文題目不能相同;

(3) 每個學生的畢業論文都要求有一名指導教師,一名教師可以指導多名學生。

爲此,教務處制訂出一套標準化的畢業論文選題流程基本要求,經過與系統公司雙方共同設計出一套能夠比較好地與未來所開發的信息系統相匹配的《畢業論文選題流程》,確定了相關的規則。

2. 信息描述

該系統必須解決目前該高校由於沒有使用信息系統處理業務,在畢業生選題存在諸多不便。該系統的後臺數據庫需要記錄的基本信息包括:教師信息、學生信息、畢業論文題目列表、選題記錄。

該系統的信息流和信息結構如下:

l 教師信息以及學生信息的信息流可以學校的從學籍和人事系統直接獲得。

教師信息=教師編號+教師姓名+所在學院+所在專業

學生信息=學號+學院+專業+班級+姓名

l 畢業論文題目列表由教師登錄該系統後錄入的題目構成。

畢業論文題目列表=題目編號+教師編號+題目內容+摘要說明+分類+對選題學生的條件要求+確定狀態

l 選題記錄是根據學生選擇題目,教師選定學生或者系統按照一定機制分配後,教師、畢業論文題目與學生對應關係的記錄。

選題記錄=記錄編號+題目編號+學號+學生選題時間+學生個人簡介+教師選定狀態

3. 功能描述

學校內的用戶(教師、學生、教務員)登錄後,可以使用該系統的對應角色的以下功能:

(1) 教師在系統上錄入所出的畢業論文題目,並會記錄在畢業論文題目列表中。

(2) 學院對教師所出的題目進行審覈,以避免出現雷同的題目。一旦發現雷同的題目,撤銷(刪除)較晚提交題目教師的題目,並通知該教師補錄新的題目。論文題目經過審查由教務員和教師確認後,正式生效,不允許再次變更,並將畢業論文題目列表的對應題目狀態修改爲最終。

(3) 教務員在系統中公佈最終確認的教師出題題目名單供學生選擇題目。

(4) 學生在本學院的同專業的畢業論文題目列表中,選擇自己想做的題目。學生選題時可以錄入個人簡介(向教師推介自己,增加被選中的機會),這些信息都記錄在選題記錄中。需要說明的是:

l 學生每輪最多可以選3個題目,提交後不允許撤銷。

l 第2輪選題時,系統應更新可選的論文題目清單,對於在第1輪已經確定了學生的題目,顯示被選中的學生姓名,不允許學生在第2輪選擇。

l 對第1輪已經被教師選中的學生,不允許參與第2輪選題。

(5) 教師選定學生。教師在已報名做自己所出題目的學生中,選定其中1名學生,並在選題記錄中將教師、畢業論文題目與學生對應關係進行記錄。爲避免不同教師同時選中1名學生的情況,按照“先選先得”的方式處理。教師選中學生後,不允許撤銷。沒有被選上的學生,可以進行第2輪的選題。

(6) 系統自動分配選題。兩輪選題後,仍然沒有落實題目的學生,由系統在尚未有學生報名的題目中自動分配,並在選題記錄中將自動分配的結果記錄在教師、畢業論文題目與學生對應關係進行記錄。系統自動分配遵循以下規則:

l 對於有學生報名、但是沒有被教師選中的題目,優先分配給報名的學生。

l 系統分配時儘量平衡教師的工作量,即儘量使教師指導學生的數量相近。

(7) 教務員在系統中公佈最終畢業論文選題結果。系統將選題記錄生成列表並公佈,供師生查詢。

(8) 補充說明:

l 教師出題、每輪學生選題以及教師選定學生的操作,均設置1周起止時間限制。即畢業論文選題開始後,教師需在1周內上傳題目,並完成題目審查;公佈選題後,學生需在1周內完成選題,教師在該周內完成第1輪的選定學生工作,並在次周的第1天公佈第1輪的選題結果,同時開始第2輪的選題。第2輪流程與第1輪一樣。

l 教師出題數目需要大於平均每個教師需要指導學生數的2到3題。

l 從學籍和人事系統導入學生和教師信息,減輕用戶錄入基礎數據的負擔。

l 學生有2輪選題機會、每次可選3題,一年後根據實際情況再做調整。

4. 行爲描述

(1) 教師操作部分:

l 增:錄入論文題目,點擊“提交”,系統將題目的數據傳輸到後臺數據庫,並將教師姓名、學院、專業、以及題目記錄在畢業論文題目列表的關係表中。

l 改:提交後,查看自己論文題目列表,可以點擊“編輯”修改論文題目。修改完畢後,點擊“提交”,系統將題目傳輸到後臺數據庫,更新數據庫。

l 刪:提交後,查看自己論文題目列表,可以點擊“刪除”刪除論文題目,系統操作命令傳輸到後臺數據庫,刪除對應的題目。

l 確認最終畢業論文題目:教務員審查完畢後,系統通知教師確認,教師確認後,系統將指令傳輸到後臺數據庫,數據庫更新將畢業論文題目列表的對應題目狀態修改爲最終。

l 選定學生。教師可以在系統中查看自己某條畢業論文題目有哪些學生已經選擇,並可以點擊“個人簡介”查看某個學生輸入的個人簡介,並從中選出自己認爲合適的學生,點擊“選擇該生”選中,系統產生指令並傳到後臺數據庫,將教師、畢業論文題目與學生對應關係的記錄加入選題記錄的關係表中。教師一旦選定了學生則不能修改。如果某個學生已經被其他教師選定,則不會顯示在該教師題目的學生選題名單中。

(2) 教務員操作部分:

l 審查:教師上傳題目後,教務員對學院內的教師題目進行人工審查,發現雷同後,根據約定,在該教師的題目後點擊“雷同”,系統收到指令後,通知教師重新命題。審查完畢後,點擊“審查完畢”。

l 公佈最終確認的畢業論文題目列表。審查完畢後,教務員通過系統通知教師確認最終的畢業論文題目,教師確認後,系統自動公佈該題目。

l 公佈最終確定的畢業論文任務表。經過兩輪選題後,教務員點擊“系統分配”讓系統根據既定的規則自動分配沒有被選定學生的畢業論文題目,更新選題記錄,生成最終確定的畢業論文任務表並在系統中顯示,供師生查詢。

(3) 學生選題部分:

l 查看畢業論文題目。教務員公佈最終確認的畢業論文題目列表後,學生可以查看本學院同專業的畢業論文選題。但如果該題已經被教師選定學生,將不會顯示。

l 選擇畢業論文題目。學生可以在顯示出來的畢業論文題目中選擇畢業論文題目,並可以在“個人簡介”中輸入自己的個人簡介,點擊“提交”,提交選擇該題目。每個學生可以在一輪選題中,最多選出3個畢業論文題目。學生點擊提交後,系統會在後臺數據庫的選題記錄的關係表中產生記錄,並以時間爲優先級,時間越早,優先級越高,一旦提交後不允許撤銷。

l 查看選題結果。學生可以在每一輪選題後,查看自己是否已經被教師選定。如果第一輪沒有被選定,則可以參加第二輪選題。如果第二輪都沒有被選上,則需要等待系統自動分配。等待整個選題結束後,可以查看教務員公佈的最終確定畢業論文任務表。

5. 檢驗標準

測試標準主要是檢查該系統是否達到了功能描述中的所有功能,包括:

l 教師能夠增刪查看畢業論文題目。

l 學生能夠正常地查看題目、選題且選題列表必須是本學院自己專業的題目;可以查看選題結果,用正確的提示信息(是否被教師選定的信息等)。

l 教務員能夠完成審覈題目過程,如果需要通知教師重新出題,系統能夠完成這個功能。

l 系統能夠完成按照既定規則自動分配學生選題。

l 該系統有較高的併發性,能夠承受至少1萬師生同時登錄使用的能力。

<span style="color:#ff0000;">需求概述有必要寫,你寫得太詳細了,概述就佔了整個需求文檔50%的內容。並且上述內容沒有用,而是應該移到合適的地方,一份好的數據流圖能夠描述系統有哪些功能、每個功能需要輸入/輸出哪些數據、有哪些數據需要保存,好的數據字典能夠對數據流圖上出現的數據流和數據文件的細節加以描述,加工說明描述每個功能的行爲。圖的作用是描述系統的整體,對圖上所出現的每個元素的細節問題,再用文字或者其它合適的方法說明。這個就是“自頂向下、逐級細化”思想的體現,在需求概述部分寫這麼多內容,不僅削弱了讀者對系統整體的關注,而且,很容易導致內容前後不一致。
對於這份作業,需求概述的主要內容應該是教育部門對本科生畢業設計選題的基本要求、與軟件客戶(指學校)商定的基本業務流程,這些內容不僅有助於讀者理解本需求文檔後面出現的內容(在數據流圖上爲什麼有這些功能、爲什麼產生這些數據流),而且,還可以避免你寫出來的需求屬於一廂情願,軟件做出來以後被客戶全盤推翻。另外,再簡單列舉系統有哪些功能,基本上就可以了。</span>

二、數據流圖

1. 畫出系統的輸入和輸出

<span style="color:#ff0000;">對於一份給客戶和軟件開發人員看的需求文檔、而不是一份案例講解或者是學習心得,以下內容有許多是不必要的,請記住,讀者看到了一些純屬多餘的內容,就不會有好的體驗,就會大段跳過,就有可能忽略了對他有用的內容。</span>

系統的輸入和輸出用頂層圖來描述,主要描述系統從外部源接收的輸入數據流和對外部宿的輸出數據流。

(1) 確定源和宿

分析系統的功能說明,系統外部的源或宿有:學校學籍和人事系統、教師、教務員和學生,他們都向系統提供信息(數據流),並接受系統輸出的信息(數據流),因此,他們既是源又是宿。

(2) 確定加工

頂層圖只有一個加工,即畢業論文選題系統。

(3) 確定數據流

頂層圖中的數據流就是系統的輸入輸出信息。根據系統的需求概述,可以確定以下輸入數據流和輸出數據流。

<span style="color:#ff0000;">以上屬於我在課堂上教你們的內容,對一份需求文檔而言沒有用。</span>

輸入數據流:

l 來自學校學籍和人事系統:學生信息、教師信息。

l 來自教師:畢業論文題目(增、刪、查)、論文審覈結果(確認最終的畢業論文題目)、選定學生信息。

l 來自教務員:論文審覈結果、自動匹配信息(讓系統自動匹配生成未選定學生選題名單)。

<span style="color:#ff0000;">以上內容在數據流圖上已經能夠體現,而且圖比文字更爲直觀,不需要。</span>

由於軟件系統應該對輸入數據進行合法性檢查,以提高系統的健壯性,避免錯誤數據對系統造成不良的後果,因此增加一些反饋的輸出數據流。因此,輸出數據流有:

l 送往學校學籍和人事系統:錯誤教師信息(數據格式錯誤時)、錯誤學生信息。

l 送往教師:畢業論文題目(教師查詢時輸出)、不合格畢業論文題目、選題學生信息、畢業論文任務表。

l 送往教務員:待審覈論文題目、自動匹配信息(自動匹配爲被選定學生的指令)。

l 送往學生:畢業論文題目、不合格選題信息、畢業論文任務表。

<span style="color:#ff0000;">以上內容有的屬於不必要,例如,錯誤教師信息,系統拒絕接受不滿足完整性約束條件的數據,並向用戶提供出錯提升信息,屬於天經地義的事情,只要你在數據字典、加工說明中說明清楚規則,程序員懂得如何去做。</span>

根據以上分析,畫出該系統的頂層圖,如圖1所示。


圖 1

2. 畫出系統內部

(1) 確定加工

這裏講的加工是指對頂層圖中的加工分解而成的子加工。根據需求概述中的功能描述,可以將父圖的加工分解爲8個子加工。

<span style="color:#ff0000;">我不知道在你的心目中,是否將分解出來的8個加工,等同於軟件的8個功能,直截了當地說,就是這個軟件只要開發出來這8個功能就夠了。這是數據流圖能否正確分解的關鍵,要具備這個意識。</span>

(2) 確定數據流

0層圖中的數據流主要是繼承自頂層圖,其中有改動的輸入輸出流分別有:

l  原教師到系統的“論文審覈結果”輸入輸出流拆分爲“審覈結果”的輸出流和“確認審覈”的輸入流。

l  由於加入了“系統自動匹配學生與題目”的加工,因此將原教務員到系統的“自動匹配信息”的輸入輸出流拆分爲“未被選定學生信息”的輸出流和“自動匹配指令”的輸入流。

<span style="color:#ff0000;">(這樣不好,違反了上下層數據流圖之間保持平衡的基本原則,如果在細化過程中發現前面有考慮不周的地方,將前面的圖也同時修改)</span>

(3) 確定文件

根據需求概述,需要建立4個新文件,供加工讀寫,分別是記錄學生的信息的學生信息、記錄教師的信息的教師信息、記錄畢業論文題目的畢業論文題目列表、記錄學生選題記錄,老師選定學生記錄的選題信息表。

(4) 確定源和宿

0層的源和宿繼承於頂層圖。

因此,該畢業論文選題的0層圖如圖2所示。


圖2

<span style="color:#ff0000;">總體而言,分解後的數據流圖還是不錯的,符合規範,數據流清晰。下面提出幾條改進的建議:
1)提高可讀性,用詞規範(每個數據加工、每個數據流、每個數據文件),將錯誤信息之類的屬於天經地義的內容去掉,將數據加工按照業務流程依次排列,將基礎數據管理(指從外部系統導入學生和教師信息之類)排在一邊。請注意,提高可讀性不是爲了方便我改作業,而是爲了讓程序員能夠更加清晰地理解這個軟件的需求,這是評價一份需求文檔是否有價值的一項基本要求。
2)仔細推敲數據文件和數據加工之間的數據流,例如,軟件功能“學生選擇題目”(給你加了2個字,其意圖是不是變得更加清晰了?)沒有從數據文件“畢業論文題目列表”流入的數據流,沒有論文題目,如何選題?我之前肯定的數據流圖“符合規範,數據流清晰”,並不代表你的內容正確,而是讀者能夠比較容易地理解你的意圖,而且,也容易發現內容的錯誤。</span>

三、數據字典

1. 數據流條目

(1) 教師信息=教師編號+教師姓名+所在學院+所在專業

(2) 正確教師信息=*教師信息

(3) 學生信息=學號+學院+專業+班級+姓名

(4) 正確學生信息=*學生信息

(5) 畢業論文題目={題目編號+教師編號+{題目內容+摘要說明+分類+對選題學生的條件要求}}

(6) 合格畢業論文題目=*畢業論文題目

(7) 待審覈論文題目=*合格畢業論文題目

(8) 正式畢業論文題目=合格畢業論文題目+是否通過審覈

(9) 審覈結果=審覈教師編號+{*待審覈論文題目+是否通過審覈}

(10)選題信息={學號+{記錄編號+題目編號+學生選題時間+[學生個人簡介]}13}

(11)合格選題信息=*選題信息

(12)正式選題信息=*選題信息+教師選定狀態

(13)選題學生信息={*學生信息+*選題信息}

(14)選定學生名單={被選中學生學號}

(15)未被選中學生信息={*學生信息}

(16)畢業論文任務表={*出題教師信息+*被選中學生信息+*畢業論文題目}

(17)出題教師信息=*教師信息

(18)被選中學生信息=*學生信息

備註:*號代表某個實體,以學生信息爲例,完整區分一個學生,包含學號、學院、專業、班級、姓名共5項信息。

2. 文件

(1) 教師信息表=教師編號+教師姓名+所在學院+所在專業

(2) 學生信息表=學號+學院+專業+班級+姓名

(3) 畢業論文題目列表=題目編號+教師編號+題目內容+摘要說明+分類+對選題學生的條件要求+是否通過審覈

(4) 選題信息表=記錄編號+題目編號+學號+學生選題時間+學生個人簡介+是否被選定

文件組織:順序文件,按學生選題時間升序排列。

<span style="color:#ff0000;">上面這句話屬於多餘,你們學過數據庫課程,應該知道這句話沒有意義。

關於數據文件在數據流分析方法中的地位,請閱讀我給2班楊偉傑同學作業寫的評語,希望你能夠理解,我就不重複寫一大段文字了。對於這份作業,我非常關注你所分析出來的數據結構,能否支持“2輪雙向選題、1輪系統自動分配”的應用模式,第1輪選題相對好辦,從第2輪開始就需要費腦筋了,舉幾個我所想到的問題:
1)第2輪學生選題目,能否只讓第1輪沒有被教師選中的學生?得到的結論是好像可以。思路是:先在《選題信息表》中找出這個學號的記錄(可能有0-3條記錄),如果所有記錄的“是否被選定”字段值均爲“否”,則讓這個學生第2輪選題目。
2)第2輪學生選題目,能否讓學生只在第1輪沒有被安排學生的題目中進行選擇?結論是好像可以。思路是:將《畢業論文題目列表》和《選題信息表》以“題目編號”爲關鍵字進行關聯,如果前表的某1個記錄,在表2中沒有出現“是否被選定”字段值爲“是”的記錄,就表明這個題目當前還沒有排定學生,可以讓學生在第2輪報名選擇。
3)第2輪教師選學生時,能否讓教師只在學生第2輪的報名中進行選擇?結論好像是不可以。思路是:①根據教師編號,可以在《畢業論文題目列表》中找出這名教師所出的題目;②按照與第2點相同的思路,可以判斷這名教師所出的題目,還有哪些在第1輪沒有被安排學生,這些題目可以讓教師在第2輪選學生;③在按照與第2點相同的思路,找出這些題目有哪些學生報名,但是,選題信息表的數據結構無法區分選題記錄到底是學生在第1輪、還是第2輪報名的,除非你的軟件設計出這樣一個規則,就是在第2輪報名前將《選題信息表》中“是否被選定”字段值爲“否”的記錄全部刪除。
我的上述講評,希望能夠使你認識到,①數據文件結構是數據流分析方法的重點和難點,要認真推敲,我不知道你在寫有關數據文件的字典詞條時,是否像我那樣下功夫?②抽象很重要,我在上面舉了3個應用場景,到數據文件找數據時都需要“迂迴曲折”,你能否抽象出一個更加合理的數據結構,一是方便程序員理解需求,二是對做好數據庫設計有幫助,你在前面不是寫了一句“該系統有較高的併發性,能夠承受至少1萬師生同時登錄使用的能力”,如果沒有做好數據庫設計,查詢數據時經常要寫一些“迂迴曲折”的SQL語句,很難實現你的願景。</span>

四、加工說明

1. 基本加工“選擇題目”的判定表

第一輪選題判定表由4個部分組成,如圖3所示,以下爲詳細說明。另外,由於第二輪選題判定表與第一輪選題判定表大致相同,如圖4所示。。

(1) 條件樁

第一輪選課判定表的條件樁由第一輪題目選擇情況、個人簡歷和選擇時間三個條件對象組成。

其中,第一輪題目選擇情況反映當前題目是否可供選擇的情況。此對象影響着學生是否有第二輪選題的資格等問題;

個人簡歷反映該學生是否有錄入個人簡歷的操作,用以影響提高選題成功率的功能實現。

選擇時間反映學生選題時間的差異,用以遵循以時間優先原則的功能實現。

(2) 條件條目

l 第一輪題目選擇情況有可供選擇和不可選擇兩項取值;

l 個人簡歷有錄入和不錄入兩項取值;


圖 3

選擇時間有前期和後期兩項取值。

(3) 動作樁

由條件組合觸發的動作反映,在第一輪選題的判定表中設定有以下動作樁:

l 發提示錄入簡歷通知。觸發條件組合:沒有錄入簡歷的學生;

l 發第一輪首輪選擇成功通知。觸發條件組合:題目可供選擇+前期選擇;

l 發第一輪次輪選擇等待通知。觸發條件組合:題目可供選擇+後期選擇;

l 發第一輪次輪選擇成功通知。觸發條件組合:題目可供選擇+後期選擇;

l 發第二輪選擇資格。觸發條件組合:題目不可選擇;


圖 4
發出已選題目清單。觸發條件組合:題目可供選擇。

(4) 動作條目

具體組合可見動作樁說明的觸發條件組合。

<span style="color:#ff0000;">時間關係,就不對上述判斷樹是否正確作出點評了。可以看出,你花了很多功夫,試圖在加工說明中將“學生選擇題目”的規則寫清楚,這個意識非常重要,是寫好加工說明的基礎。之所以我不對上述內容的正確性作出點評,主要原因是你的描述還是不夠直觀清晰,可以思考一下如何改進。針對這個案例,我提出自己的思路:
1)從業務的角度將規則列出來,讓讀者清楚其背景。我在“需求概述”部分的點評中提出,將有關功能、行爲的大部分內容移到加工說明,對照這個案例,你應該明白有什麼道理吧。
2)做好抽象,對“學生選擇題目”而言,最重要的判斷問題就是:在第2輪,哪些學生有資格選題、哪些題目可以讓學生選擇,只要你在前面做好對數據結構的分析,抽象出合理的數據結構,能夠很方便地寫出如何實現上述2個判斷,一切就變得很簡單了。我在課堂上講過“抽象”這個名稱,這個名詞太抽象了,不好理解,對照這個例題,不知道能否給你一些啓示,抽象包含數據抽象和過程抽象,前者往往更重要,從編程的角度,語句跟着數據結構走,從需求分析的角度,行爲是針對數據的,數據抽象好了,行爲描述就變得簡單了。</span>

2. 基本加工“系統自動匹配學生的題目”的判定樹

系統自動分配選題判定樹的組成和判定表的組成是相同的,知識表示形式不同。如圖5所示。

(1) 條件樁

系統自動分配選題的條件樁由分配次序、學生選題情況和選題人數情況三條件對象組成。

(2) 條件條目

l 分配次序:首輪分配、次輪分配;

l 學生選題情況:有自選、沒自選;

l 選題人數情況:已滿、未滿。

(3) 動作樁

l發成功選題通知

l發次輪分配資格

l發等待人工分配通知

(4) 動作條目

l 發成功選課通知=首輪分配+學生有自選+選題人數未滿

或 次輪分配+選題人數未滿

l 發次輪分配資格=首輪分配+學生有自選+選題人數已滿

或 首輪分配+學生沒自選


發等待人工分配通知=次輪分配+選題人數已滿


圖 5


感謝老師的指正,說句實話,你表揚的加工說明不是我寫的,上學這麼久還沒有人對我這麼不客氣過,不過我很欣賞、也很感謝你對我這麼直白地說出你的感受,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章