软件工程uml画图期末考试(新闻发布系统)
前文
學校的軟件工程考試,基本都是畫uml圖,不知道其他學校是什么樣子。這里就在學習的同時,從考試角度把各種圖簡單分析下,在網上找了找確實也不太好找各類圖的畫法,覺得我寫的有問題的可以指出來。
題目
某客戶要求開發用于新聞發布管理系統,以下是調研記錄:
記錄1:NPS主要功能:用戶選擇不同欄目及類別瀏覽、發布、評論、審核。。。
記錄2:注冊用戶瀏覽、發布、評論新聞。
記錄3:管理員對用戶、新聞、欄目(大類別)、類別(某欄目的小分類)等進行管理。
記錄4:未注冊用戶只可瀏覽新聞。
記錄5:用戶、新聞和訪問記錄等信息都存儲在數據庫系統。
記錄6:系統要求采用便于擴展的分層設計(至少客戶層、業務層、實體層等三層)、 兼容PC、移動的多端應用。
一、需求工程分析繪制需求圖RD(共8分)
根據調研記錄整理項目需求,要求: ①識別功能性和非功能性需求,②根據業務規則。③繪制系統需求圖。至少3層次,各需求描述正確、含義清晰完整。
分析
這類題有兩種畫法,一種是從角色來表達也就是圖上這種,一種是從功能來表達,這里給個例子自己領悟,考試覺得哪種方便用哪種。
這里要注意上一層的需求到下一層的子需求之間是聚合關系,要用空心的菱形連接
這一題算比較簡單的了,基本上看下圖基本都能看懂,就不再做過多介紹。
二、數據建模繪制邏輯類圖CD(8分)
根據調研記錄抽象項目的對象、屬性及實體間關系,需求:①識別出業務實體,②識別出必要的屬性,及其類型、大小,是否空:缺省值等。③識別出對象之間的聯系和權重,④圖素符號準確.布局合理。
分析
欄目、 用戶、新聞、類別之間的關系要弄清楚,中文英文都可以。
其次是他們的權屬和方向性最好標注出來,中文英文都可以。
必要的屬性就行,實體識別出來就可以了,不需要寫更多的屬性。
不需要很多方法,這是不對的,主要是業務的屬性,注意是邏輯建模。
三、架構分析與設計層次結構建模(8分)
根據調研記錄和需求分析以及業務數據邏輯類圖CD.利用分層設計架構設計系統的體系結構,要求:①至少分3層繪制結構模型圖,②標往清晰層次:不要多余和錯誤的功能,綜合考慮分層分包。
分析
首先要分層來畫。(3分)
其次用uml來表示架構的時候,我們用包來組織。(3分)
其次是關系,這里的關系主要是依賴。(2分)
包內的元素寫多寫少都沒有太大關系,因為這是分層的體系結構。
三、面向對象分析與設計用例建模
根據調研記錄整理出系統用例圖,要求:①識別出參與者,②識別出用例,③識別出系統邊界,對象屬性留息存儲于數據庫中,④繪制用例圖,圖素正確。要素齊全,井填寫用例規約,每個路徑步驟擄述要簡潔,見下表。1.繪制整個系統用例圖UCD
分析
得分點:識別出角色、識別出主要用例、各類關系正確
瀏覽新聞、登錄系統等等這些表述一定要注意動賓結構。后面的包含關系要寫出來。
用例規約 UCI(10分)
這里要求寫出 刪除新聞 的用例規約
分析
每空一分,10分
用例名稱 刪除新聞
用例編號 NEWS001
用例描述 根據新聞標號選擇刪除,確認后從數據庫刪除
參與者 管理員
前置條件 登錄系統
基本路徑 管理員登錄,選擇刪除新聞操作,選擇待刪新聞,提交刪除,系統確認是否刪除,確認后從數據庫中刪除,數據庫減少一條記錄
備選路徑 確認刪除時沒選擇取消,刪除失敗
異常路徑 1. 如果數據庫出現故障,回滾事務結果
2. 如果服務器出現故障,檢查系統日志目錄并采取相應措施
后置條件 數據庫刪除一條新聞信息
繪制分析魯棒圖RD
根據調研記錄設計開發所需要的系統類圖,要求:①識別出類及其必要的屬性和操作(重點是非屬性的訪問與設置器),②識別出類間的正確關系,③屬性和操作必須有清晰、明確的聲明和簽名,④檢制魯櫸園需給出邊界、控制、實體繪制模型中.●層的類及其依賴類的類圖,需給出接口、抽象類和具體類的符號,⑤關系和符號表達準確,所有元素為英文,出現中文扣分。
這里是添加新聞的魯棒圖。
分析
一般只要元素正確就沒問題。
繪制類及其依賴的類圖CD
繪制NewsDao及其依賴類圖
分析
跟NewsDao相依賴的 News實體類,這里的屬性可以寫多寫少,寫一個,其他…也行。
最重要的NewsDao,比如說save(News),注意save的參數是News類型,所以和News之間構成了依賴關系。
NewsDao我們可能會定義個BaseDao抽象類的實現類,這個可以不寫,但是NewsDao和News要寫。
高階活動圖
評論新聞的高階活動圖。
分析
得分點。
1.抽取出三個以上活動,分區,得4分。
2.有出點和終點,得2分
3.有決策、同步和轉移,得3分
4.內同正確,布局合理,1分
順序圖
時序圖就有點復雜了,這里給一個鏈接,是教你10分鐘學會畫時序圖
https://www.bilibili.com/video/BV12f4y127pp?from=search&seid=6737327818590504170
先給個登錄的時序圖方便邊看邊理解。(此圖有問題)
總結視頻的幾個重點:
1.序列圖顯示了系統中的對象或代碼中的類如何交互,可以理解成顯示事件的順序。
2.為每個對象添加生命線,生命線是垂直虛線,從上往下意味著時間正在過去。
3.返回信息用虛線,虛線表示返回消息或從接收對象返回到請求對象的消息。
4.備用幀象征著兩個或多個消息序列之間的選擇,這些選擇通常是互斥的。如上圖的成功、失敗。
當使用備用幀時,需要使用選擇框。
5.當表畫完后,可以添加激活框,就是上圖豎著的長條,從第一個活動消息連到最后一活動消息。激活框顯示對象執行過程的時間和持續時間。
角色是外部對象,不需要激活框,所以上圖老師給的圖有問題。。。,激活框的持續時間也不對。
這里給出視頻中的標準序列圖,例子是ATM取款。
七、面向對象分析與設計實現測試(30分)
7.1 java代碼編寫
(1)根據的NPS使用的單例模式,讀下圖完成編碼。①不考慮命名空間和導包,資源文件在項目類路徑下,②注意類間關系,重點是屬性和方法Java代碼編寫(10分),
分析
從圖上看Env繼承Properties類,依賴于InputStream。
其中有一個私有的屬性Instan,類型為Env。
一個公共的方法getInstance,類型為Env。
一個私有方法makeInstance,類型為void。
一個不帶參的構造方法Env。
答案
public final class Env extends Properties{private static Env instance;//私有的構造方法,寫公共的不給分private Env() {InputStream is = getClass().getResourceAsStream("/db.properties");try {load(is)}catch(Exception e){e.printStackTrace();System.out.println("db.properties isnot exists!");}}public static Env getInstance() {if(instance != null) {return instance;}else {makeInstance();return instance;}}//私有 同步 靜態private synchronized static void makeInstance() {//雙檢查if(instance == null) {instance = new Env();}} }總結這道題,基本上框子寫出來了,注意些細節就可以拿6分以上了。
類名寫好,私有屬性寫好,這是一個得分點。
私有的構造方法Env,里面的內容記不住就不寫,寫好方法框架就有分了。
后面兩個方法要寫出來,都是得分點。
7.2 Java多線程實現事件監聽(10分)。
(2)根據NPS用戶登錄實現見下圖,設計單元測試用例并改寫為可測程序。
public class LoginAciton extends BaseAction implements Action{protected boolean interceptorServlet(String uname,String upwd) {if(uname=="" || upwd=="") {String strLog = "System.out.println:用戶名密碼為空 LoginAction攔截了,不必去db服務了\n";System.out.println(strLog);return true;}return false;}public String login(HttpServletRequest request,HttpServletResponse response) throws Exception{String result="";String nps_username = request.getParameter("username");String nps_password = request.getParameter("username");String nps_usertype = request.getParameter("usertype");if(interceptorServlet(String uname,String upwd)) {String message = "用戶名或密碼為空!";request.setAttribute("loginmessage",message);return result = "loginError";}User voUser = new User();voUser.setNps_username(nps_username);voUser.setNps_password(nps_password);voUser.setNps_usertype(nps_usertype);LoginService loginService = new LoginService();if(loginService.login(voUser)) {request.setAttribute("currentUser",voUser);if(voUser.getNps_usertype().equals("管理員")) {List<User> userList = loginService.findAll();request.setAttribute("userList",userList);result = "loginAdmin";}else if(voUser.getNps_usertype().equals("普通用戶")) {NewsService newsService = new NewService();List<News> newsList = newsService.findAll();request.setAttribute("newsList",newsList);result = "loginUser";}}else {String message = "用戶名或密碼錯誤,登錄失敗!";request.setAttribute("loginmessage",message);result = "loginFail";}return result;} }得分點
1.每個if else2分,共6分
2.必要說明,3分
3.程序正確,1分
答案
public String login(HttpServletRequest request,HttpServletResponse response) throws Exception{String result=null;String nps_username = request.getParameter("username");String nps_password = request.getParameter("username");String nps_usertype = request.getParameter("usertype");User voUser = new User();voUser.setNps_username(nps_username);voUser.setNps_password(nps_password);voUser.setNps_usertype(nps_usertype);request.setAttribute("currentUser",voUser);//將攔截操作移至服務層LoginService loginService = new LoginService();if(loginService.login(voUser)) {if(voUser.getNps_usertype().equals("管理員")) {//將加載用戶信息移至服務層result = "loginAdmin";}else if(voUser.getNps_usertype().equals("普通用戶")) {//將加載新聞信息移至服務層result = "loginUser";}}else {String message = "用戶名或密碼錯誤,登錄失敗!";request.setAttribute("loginmessage",message);result = "loginFail";}return result;} }(2)采用白盒測試技術的路徑覆蓋方法為login設計多組測試用例,填在下表(4分)
| TC001 | 206004 osgis123! 管理員 | loginAdmin | 管理員頁面一致 |
| TC002 | 206004 osgis123! 普通用戶 | loginUser | 瀏覽新聞頁面一直 |
| TC003 | 206004 osgis123!! 管理員 | loginFail | 登陸失敗 一致 |
| TC004 | “” “” 管理員 | loginError | 異常 一致 |
總結
以上是生活随笔為你收集整理的软件工程uml画图期末考试(新闻发布系统)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode更换主题的插件_VScode
- 下一篇: es6 --- 使用yield*命令遍