軟件工程是一門一級學科,在其下面又有着許多方向,例如:Web開發方向、大數據方向、雲計算方向、網絡安全等方向。班上的同學也都是各個方向的學生。所以如果在評測軟件工程知識技能太過於偏向某個方向可能會造成成績的不公平。所以對於評測不同方向的學生的軟件工程知識技能水平時,一定需要保證不會出現偏袒。
由於不能太過於偏向某門技術方向,所以本次評測將注重於測試學生的軟件工程基礎水平。我們將從軟件工程、代碼分析能力、場景分析能力等幾方面對學生經行考查。
軟件工程知識考察
這方面主要是考察學生對軟件工程開發流程的掌握。作為一個研究生,我們不僅僅需要掌握代碼編寫能力,還需要掌握團隊管理能力。因此就需要學習了解整個軟件工程的開發流程控制,甚至是整個軟件公司運營管理。這對我們學生以后升為管理層或自主創業有一定的幫助。
選擇題題:
1、下面不是常用的開發模型有(D)
( 解釋:
常用模型有:瀑布模型、原型模型、噴泉模型,沒有流水模型
)
A:瀑布模型 B:原型模型 C:噴泉模型 D:流水模型
2、下面代碼中A和B的關系可以用什么表示(C)
public class A {
private B b;
}
(
解釋:
泛化關系是一般用繼承來表示extends
實現關系用實現結構implement表示
關聯一般表示作為類的成員
依賴一般屬於在方法中使用到來表示
)
A:泛化 B:實現 C:關聯 D:依賴
3、下面代碼中A和B的關系可以用什么表示(D)
public class A {
public void test() {
B b = new B();
···
}
}
(
解釋:
泛化關系是一般用繼承來表示extends
實現關系用實現結構implement表示
關聯一般表示作為類的成員
依賴一般屬於在方法中使用到來表示
)
A:泛化 B:實現 C:關聯 D:依賴
4、在軟件生命周期中,能准確確定軟件系統的體系結構的功能階段是 C 。
A、概要設計 B、詳細設計 C、需求分析 D、可行性分析
5、軟件測試的目的是 C
(
解釋:
軟件不可能沒錯,而且也不可能找出所有的錯誤
)
A.證明軟件無錯 B.發現軟件中的所有錯誤 C.盡可能發現軟件
6、以下哪項不是UML建模中的圖 C
(解釋:
UML中包括類圖 ·對象圖 ·組件圖 ·部署圖 用例圖 ·時序圖 ·協作圖 ·狀態圖 ·活動圖
不包括流程圖
)
A、協作圖 B、類圖 C、流程圖 D、時序圖
7.下面哪些UML圖描述系統行為? A
(解釋:
UML的圖分為兩類·結構圖 ·行為圖
結構圖包括:類圖 ·對象圖 ·組件圖 ·部署圖
行為圖包括:用例圖 ·時序圖 ·協作圖 ·狀態圖 ·活動圖
)
A.用例圖 B.類圖 C.對象圖 D、部署圖
8、UML 圖中描述系統結構的是 A
(解釋:
UML的圖分為兩類·結構圖 ·行為圖
結構圖包括:類圖 ·對象圖 ·組件圖 ·部署圖
行為圖包括:用例圖 ·時序圖 ·協作圖 ·狀態圖 ·活動圖
)
A.組件圖 B.順序圖 C.狀態圖
9、單元測試的計划應該在什么階段完成? C
(解釋:
首先了解單元測試原理: 單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工作。
而需求分析與概要設計是在軟件生命周期的“軟件定義”階段,此時還未進行軟件開發,自然而然無法進行代碼函數的測試
)
A.需求分析 B.概要設計 C.詳細設計
10、以下哪些是軟件體系結構? D
(
解釋:
常見的體系結構有:分層模式、客戶端 - 服務器模式、主從模式、管道過濾器模式、經紀人模式、點對點模式、事件總線模式、模型 - 視圖 - 控制器模式、黑板模式、解釋器模式
其中黑板模式為:應用中的多種不同數據處理邏輯相互影響和協同來完成數據分析處理。就好像多位不同的專家在同一黑板上交流思想,每個專家都可以獲得別的專家寫在黑板上的信息,同時也可以用自己的分析去更新黑板上的信息,從而影響其它專家。
所以本題應選D,沒有白板模式應該為黑板模式
)
A、客戶端 - 服務器模式 B、管道過濾器模式 C、點對點模式 D、白板模式
11、適合需求模糊或需求不確定系統開發的軟件開發模型是 B
(
解釋:
快速原型模型需要迅速建造一個可以運行的軟件原型 ,以便理解和澄清問題,使開發人員與用戶達成共識,最終在確定的客戶需求基礎上開發客戶滿意的軟件產品。
)
A.瀑布模型 B.快速原型模型 C.原型模型
名詞解釋
1.設計模式:
答案:是普通面向對象設計問題的解決方案,這類問題以一組交互類的形式出現,用戶根據需要定制這些交互類以形成專門的設計。所有設計模式均可以從四個方面加以描述:模式名稱、問題描述、解決方案和效果。
2.集成測試
答案:也稱組裝測試或聯調。是指在單元測試的基礎上,將所有模塊按照概要設計要求組裝成一個完整的系統而進行的測試。模塊組裝的方式有兩種:漸增式和非漸增式。
簡答題:
簡述下軟件工程生命周期
軟件的生命周期可以分為6個階段:
計划:軟件開發方與需求方確定軟件的開發目標及其可行性。
需求分析:對軟件需要實現的各個功能進行詳細分析。
設計:根據需求對整個軟件系統進行設計。
編碼:將軟件設計的結果轉換成計算機可運行的程序代碼。
軟件測試:發現軟件在整個設計過程中存在的問題並加以糾正。
運行維護:延續軟件的使用壽命。
1.某網絡學院決定開發一個管理所有學生和教師信息的交互式網絡系統,該系統提供如下服務:
(1)瀏覽學生信息:網絡學院的任何人員,包括學生和老師,均可以瀏覽學院任何學生的信息,包括姓名、學號和專業名稱。
(2)瀏覽教師信息:網絡學院的任何人,包括學生和老師,均可以瀏覽學院任何教師的信息,包括姓名、工號和職稱。
(3)登錄:網絡學院給學院每個人一個賬號。擁有授權帳號的學生和老師,可以使用系統提供的頁面設置個人密碼,並使用該賬號和密碼向系統注冊。
(4)修改個人信息:學生或老師向系統注冊后,可以發送電子郵件或使用系統提供的頁面,對個人信息進行修改。
(5)刪除個人信息:只有網絡學院的管理人員才能刪除不再是學院學生或老師的人員的有關信息。
試問哪些是參與者?哪些是用例?並用UML的用例圖描述系統行為。
(
解釋:從上面文檔可以看出參與者有:學生、老師、管理人員,而學生與老師有多個共用功能,所以可以從學生和老師中提取一個基本參與者:網絡學院人員。
然后分析具有哪些用例,可以從文中了解到:學生和老師可以登錄、修改個人信息、瀏覽學生信息、瀏覽教師信息等。
只有網絡學院管理員才能夠刪除個人信息
)
答案:
代碼分析能力
為了提升學生對技術的積累能力,要鍛煉學生的源碼閱讀能力。我們不僅僅要會用別人的api,還要知其原理。以后成為Leader后,更需要經常審查剛入職員工的代碼。所以代碼閱讀分析能力是一名軟件工程師在走向優秀的道路上必不可少的一門技能。而通過畫流程圖,能夠讓代碼一目了然。所以本部分將以畫流程圖的形式讓學生分析源碼,最后說出自己對這段代碼的理解。
private static int xxxFunction(char[] a, int fromIndex, int toIndex,
char key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
char midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
請畫出上面代碼的流程圖,並根據流程圖說出上面代碼的作用
上面代碼是在一個數組中查找key