一個軟件工程師的軟件工程知識技能水平高低主要體現在哪些方面?
1. 是否掌握了程序員的基本功:鍵盤輸入速度,快捷鍵,編譯和調試工具等,熟練掌握常用的工具集—VSCode/Vim、正則表達式等。
2. 嚴格規范的代碼風格,合理使用空格、空行、縮進、注釋,代碼邏輯清晰,沒有冗余和重復,遵從架構與設計原則,熟練使用各種編程庫和API,編寫出簡潔、規范、可讀性強、健壯安全的代碼。
3. 熟悉解決問題的流程:分析問題、形成方案、探索嘗試解決問題、單元測試、重構程序以滿足不斷變化的需求。
4. 在理解業務的基礎上進行需求分析,准確地表達出用戶的需求,開發出高質量的軟件。
5. 編寫的代碼結構清晰,具有良好的可靠性、魯棒性、可移植性和可重用性,滿足高內聚低耦合的要求,並掌握一些優秀的設計模式。
6. 能按時完成開發工作,在編碼完成后,對可運行的結果對照需求分析文檔進行嚴密的測試。如果測試發現問題,需要修復,最終測試完成后,形成測試報告。
7. 軟件正式運行使用后需繼續維護,修復錯誤和增加功能,交付時需要提供使用說明文檔。
針對以上內容提供一份軟件工程知識技能水平的測評試題:
一、選擇題:
1. 下列模塊獨立性最強的是( )
A、非直接耦合 B、數據耦合 C、公共耦合 D、內容耦合
參考答案:A
解析:
我們用耦合和內聚來評價模塊的獨立性,理想的情況是高內聚低耦合。耦合越松散越好,各耦合從好到壞排序為:非直接耦合(模塊之間獨立)>數據耦合(希望設計出來的耦合)>控制耦合>公共環境耦合>內容耦合(相當緊密的一種耦合,盡量不要出現)。我們的原則是:盡量使用數據耦合,少用控制耦合,限制公共環境耦合,完全不用內容耦合。
內聚是指模塊內各元素彼此結合的緊密程度(耦合是模塊之間)。內聚度越高越好,各內聚從好到壞排序為:功能內聚(理想的內聚程度)>順序內聚>通信內聚>過程內聚>時間內聚>邏輯內聚>偶然內聚。
2.

解析:深度為4,寬度為3。A的扇出為3,t的扇入為2。扇入:該模塊被上級模塊調用的次數,扇入大,說明該模塊的復用性好。扇出是一個模塊調用其他模塊的數目,如果扇出過大,說明該模塊的業務邏輯復雜,一般增加調用層數來降低扇出,一般設計高扇入合理扇出(3到4)的模塊。
3. 小汽車類與紅旗轎車類的關系是( )
A、泛化關系 B、聚合關系 C、關聯關系 D、實現關系
參考答案:A
解析:
UML中的圖(9種圖):
用例圖:用例圖描述外部執行者(actor)與系統的交互,表達系統功能,即系統提供的服務。主要元素:用例(表示系統某一個完整的功能)和執行者。
類圖:類圖是面向對象建模最常用的圖,描述類與類間的靜態關系。類名+屬性+操作。公有(+),私有(-),保護(#)。邊界類,控制類,實體類,接口類(不包含屬性,只包含方法的聲明,不包含方法的實現)。
對象圖:對象圖表示一組對象之間的聯系,對象圖是類圖的實例。
UML中類之間的的關系:
依賴關系:依賴關系是一種使用關系。
關聯關系(Association):指類之間有某種聯系。
聚合關系(Aggregation):是整體與部分的較弱關系。
組合關系(Composition):是整體與部分的較強關系,即部分是完全依賴於整體的,整體消失的話部分也會消失。
泛化(繼承)關系:一般與特殊的關系,例如“交通工具”和“汽車”,“船”。
實現關系:是一種特殊的泛化關系,從接口的繼承。
4. 下列哪個階段不屬於軟件生存周期的三大階段( )。
A、計划階段 B、開發階段
C、編碼階段 D、維護階段
參考答案:C
解析:軟件生存周期的三大階段包括:計划階段、開發階段、維護階段。編碼只是開發階段的一部分,開發階段還包括單元測試等。
5. 確認測試主要涉及的文檔是( )
A、需求規格說明書 B、概要設計說明書 C、詳細設計說明書 D、源程序
參考答案:A
解析:用戶提的需求形成一個需求規格說明書,需求規格說明書上明確指出了我們的軟件需要實現哪些功能,可以對照進行功能測試。需求規格說明書是整個軟件生存周期中最重要的一份文檔。
二、判斷題:
1. 模塊化,信息隱藏,抽象和逐步求精的軟件設計原則有助於得到高內聚,低耦合度的軟件產品。(√)
2. 按照瀑布模型開發軟件的一條指導思想是清楚地區分邏輯設計與物理設計,以便盡早開始程序的物理實現。(×)
解析:瀑布模型的一個非常重要的觀點就是推遲實現,盡量讓編碼靠后,瀑布模型在編碼前設置系統分析、系統設計,推遲程序物理實現,保證前期工作扎實,做充分了再開始編碼。
3. 模塊內的高內聚往往意味着模塊間的松耦合。(√)
4. 面向對象的真正威力是封裝,而非繼承。(√)
5. 在需求分析階段,對外部進行用例建模,產出為用例圖;對內部進行領域建模,產出為設計類圖。(×)
解析:領域建模的產出為業務類圖,不是設計類圖。此時仍處於業務的分析階段,還沒有進入到軟件系統的設計階段。
什么是領域建模?業務領域建模是開發團隊用於獲取相關領域知識的過程。(來自ppt)(why?軟件工程師工作在不同的領域,需要開發不同領域的軟件,因此需要相關領域的知識。)
領域建模的四個步驟:收集領域信息,頭腦風暴,分類,使用UML類圖進行可視化。
三、名詞解釋題:(來自教學PPT)
1. 重構 Refactoring
答:重構就是通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。
2. 觀察者模式 Observer Pattern
答:觀察者模式又稱為發布/訂閱模式,它是軟件設計模式中的一種。觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都將得到通知並被自動更新。
3. 發布訂閱的架構風格 Publish-Subscribe
答:在軟件架構中,發布訂閱是一種消息范式,消息的發送者(稱為發布者)不會將消息直接發送給特定的接收者(稱為訂閱者)。而是將發布的消息分為不同的類別,無需了解哪些訂閱者可能存在。同樣的,訂閱者可以表達對一個或多個類別的興趣,只接收感興趣的消息,無需了解哪些發布者存在。
4. 設計模式 Design Pattern
答:軟件設計模式(Software Design Pattern),又稱設計模式,是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。它描述了在軟件設計過程中的一些不斷重復發生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的代碼設計經驗的總結,具有一定的普遍性,可以反復使用。其目的是為了提高代碼的可重用性、代碼的可讀性和代碼的可靠性。
23種設計模式,大多數基於多態。包括:外觀模式、適配器模式、模板方法模式、策略模式、橋接模式、觀察者模式、簡單工廠模式、抽象工廠模式等。
5. 對象組合 object composition
答:對象組合要求被組合的對象具有良好的接口,並且通過從其他對象得到的引用在運行時運態定義。所以可以將對象組合到其他對象中,以構建更加復雜的功能。由於對象的內部細節對其他對象不可見,它們看上去為“黑箱”,這種類型的復用稱為黑箱復用。使用對象組合來替代繼承,優先使用組合而不是繼承,它的耦合程度更低,內聚程度更高。
四、簡答題:
1. 簡述軟件模塊設計原則?(來自教學PPT)
答:模塊設計的6個原則為:模塊化、接口、信息隱藏、增量開發、抽象、通用性。
2. 什么是統一過程?(來自教學PPT)
答:統一過程是用例驅動,以架構為中心,增量且迭代的過程。(不斷有新版本的發布)
3. 什么是單元測試,集成測試,白盒測試,黑盒測試?(來自教學PPT)
答:單元測試:是指對軟件中的最小可測試單元進行檢查和驗證。(局部)
集成測試:是將經過單元測試的模塊組裝起來進行測試。(全局)
黑盒測試:如果知道產品應該具有的功能,可以通過測試來檢驗是否每個功能都能正常使用。(內部不可見,又稱功能測試)
白盒測試:如果知道產品的內部工作過程,可以通過測試來檢驗產品內部動作是否按照規格說明書的規定正常進行。(內部細節可見,又稱結構測試)
4. 常見的軟件開發過程模型(軟件生存周期模型)有哪些?
解析:瀑布模型,快速原型模型(用於需求不確定的軟件開發),增量模型,螺旋模型(加入了風險分析,對大型的軟件項目開發有較好的風險控制),噴泉模型(面向對象),統一過程(Rational公司的,用的較多),微軟公司軟件開發過程。。。
