習(xí)資料:核心考點(diǎn)、過(guò)程模型與測(cè)試方法全攻略)
老實(shí)說(shuō)軟件工程這門(mén)課的復(fù)習(xí)資料是我見(jiàn)過(guò)的課程資料里最好寫(xiě)、卻也最難寫(xiě)的一種。說(shuō)它好寫(xiě)是因?yàn)榻滩睦锩恳徽露加星逦母拍詈投x直接摘出來(lái)就能做成要點(diǎn)集說(shuō)它難寫(xiě)是因?yàn)橹R(shí)點(diǎn)之間的勾連太密——過(guò)程模型和需求工程有關(guān)需求規(guī)格又直接影響設(shè)計(jì)和測(cè)試你把每章單獨(dú)背完合上書(shū)照樣不知道案例題怎么答。這篇內(nèi)容就是圍繞“軟件工程復(fù)習(xí)資料”這個(gè)主題把手頭整理過(guò)的資料思路、考點(diǎn)清單、背誦方法和踩坑記錄一起分享出來(lái)適合考前突擊的在校生也適合準(zhǔn)備面試時(shí)需要系統(tǒng)過(guò)一遍軟件工程基礎(chǔ)的朋友。1. 復(fù)習(xí)資料怎么整理才不亂先搭框架再填細(xì)節(jié)1.1 軟件工程這門(mén)課的主線邏輯我先從自己整理資料的經(jīng)驗(yàn)說(shuō)起。最開(kāi)始我也試過(guò)“按章節(jié)摘名詞解釋”的笨辦法結(jié)果復(fù)習(xí)到一半就崩了近兩百個(gè)術(shù)語(yǔ)仿佛每個(gè)都認(rèn)識(shí)但一問(wèn)“軟件開(kāi)發(fā)為什么要分階段”就答不上來(lái)。后來(lái)我把問(wèn)題反過(guò)來(lái)想——軟件工程這門(mén)課的使命是什么一句話為了應(yīng)對(duì)軟件危機(jī)在預(yù)算內(nèi)、按時(shí)地交出質(zhì)量合格的軟件。它的一切內(nèi)容本質(zhì)上都圍繞兩個(gè)核心矛盾展開(kāi)質(zhì)量與效率。抓住這條主線之后你就會(huì)發(fā)現(xiàn)教材其實(shí)不是在羅列概念而是在講一個(gè)完整的故事先有需求于是需要工程化方法來(lái)獲取和分析需求有了需求需要用設(shè)計(jì)方法把它變成可實(shí)現(xiàn)的方案有了實(shí)現(xiàn)需要用測(cè)試手段證明它能正確工作在整個(gè)過(guò)程中還要用過(guò)程模型把階段串起來(lái)、用項(xiàng)目管理來(lái)管進(jìn)度和風(fēng)險(xiǎn)、用配置管理控制變更。這個(gè)認(rèn)識(shí)很值錢(qián)。我整理復(fù)習(xí)資料時(shí)把它做成了一張很粗的鏈路過(guò)程 → 需求 → 設(shè)計(jì) → 編碼 → 測(cè)試 → 維護(hù)旁邊另派兩個(gè)支線項(xiàng)目管理、配置管理。之后所有細(xì)碎知識(shí)點(diǎn)都能掛到這張圖上。遇到一個(gè)不認(rèn)識(shí)的術(shù)語(yǔ)先問(wèn)一句它服務(wù)于這條主線上的哪個(gè)環(huán)節(jié)這個(gè)問(wèn)題一回答概念就不再是一盤(pán)散沙。1.2 把資料拆成三層概念層、方法層、應(yīng)用層資料整理的第二件事是把知識(shí)點(diǎn)按考察深度分成三層。這個(gè)習(xí)慣是某次和同學(xué)互相抽背時(shí)總結(jié)出來(lái)的后來(lái)我?guī)У拿恳粚每记懊媸谛〗M都沿用這套方法。第一層是概念層對(duì)應(yīng)名詞解釋和基礎(chǔ)選擇題比如“軟件危機(jī)是什么”“什么是基線與配置項(xiàng)”。這一層的要求是能用自己的話給出一個(gè)準(zhǔn)確、完整的定義。第二層是方法層對(duì)應(yīng)簡(jiǎn)答題和分析題比如“比較瀑布模型與螺旋模型”“如何對(duì)某需求設(shè)計(jì)等價(jià)類測(cè)試用例”。這一層的要求是不僅知道定義還要知道步驟、優(yōu)缺點(diǎn)和適用場(chǎng)景。第三層是應(yīng)用層對(duì)應(yīng)案例題和計(jì)算題比如“給一個(gè)外賣訂餐系統(tǒng)請(qǐng)你指出風(fēng)險(xiǎn)點(diǎn)并選擇開(kāi)發(fā)模型”“用COCOMO公式估一下某項(xiàng)目的工作量”。三層分好之后復(fù)習(xí)就變成了“逐層突破”。我先集中火力解決概念層把定義背熟再針對(duì)方法層做歸納對(duì)比該畫(huà)表的畫(huà)表最后進(jìn)入應(yīng)用層拿真實(shí)案例練手。對(duì)于軟件工程這門(mén)重概念、輕計(jì)算、案例靈活的課這個(gè)分層方法能直接避免做一個(gè)“背了書(shū)卻不會(huì)用”的人。實(shí)際操作中我還會(huì)給每個(gè)知識(shí)點(diǎn)打一個(gè)標(biāo)記比如“概念層-高頻”“方法層-易混淆”“應(yīng)用層-需訓(xùn)練”。這個(gè)標(biāo)記不是隨便打的是根據(jù)歷年考試真題和老師反復(fù)強(qiáng)調(diào)的重點(diǎn)做的頻次統(tǒng)計(jì)。沒(méi)有真題也不慌教材每章開(kāi)頭的學(xué)習(xí)目標(biāo)和最后的習(xí)題可以當(dāng)線索把PPT中花費(fèi)頁(yè)數(shù)最多、反復(fù)出現(xiàn)的話題單獨(dú)標(biāo)出來(lái)大概率就是重點(diǎn)。2. 核心考點(diǎn)拆解過(guò)程模型、需求、設(shè)計(jì)、測(cè)試一個(gè)都不能少這一章是復(fù)習(xí)資料的主體也是全篇最值得花時(shí)間的地方。我按主線順序把四個(gè)最???、也最容易拉開(kāi)差距的知識(shí)塊拆開(kāi)說(shuō)。2.1 開(kāi)發(fā)過(guò)程模型怎么比較怎么選過(guò)程模型是軟件工程的基礎(chǔ)考點(diǎn)。瀑布模型大家都會(huì)背需求分析、設(shè)計(jì)、編碼、測(cè)試、維護(hù)階段之間順序銜接文檔驅(qū)動(dòng)。但考試一般不會(huì)讓你只寫(xiě)定義更常見(jiàn)的問(wèn)法是“某項(xiàng)目需求穩(wěn)定、用戶希望盡快看到雛形你會(huì)選擇哪種模型并說(shuō)明理由”。所以背模型的時(shí)候一定要把“適用場(chǎng)景”和“缺點(diǎn)”一起帶上。瀑布模型適合需求明確、變更少的項(xiàng)目好處是階段清晰、易管理缺點(diǎn)是等到測(cè)試階段才發(fā)現(xiàn)問(wèn)題返工代價(jià)極高。原型模型適合需求模糊的項(xiàng)目先出一個(gè)快速原型讓用戶確認(rèn)但原型如果控制不好容易被當(dāng)作最終產(chǎn)品導(dǎo)致工程質(zhì)量差。增量模型把系統(tǒng)拆成子集每個(gè)增量都有完整的開(kāi)發(fā)周期能較早交付部分功能但增量劃分需要很強(qiáng)的架構(gòu)設(shè)計(jì)能力。螺旋模型每輪循環(huán)都做風(fēng)險(xiǎn)分析適合大型復(fù)雜高風(fēng)險(xiǎn)的開(kāi)發(fā)問(wèn)題是流程重不適合小項(xiàng)目。敏捷開(kāi)發(fā)則強(qiáng)調(diào)輕流程、快速迭代、用戶持續(xù)參與近些年在創(chuàng)新類業(yè)務(wù)中應(yīng)用極其普遍。我整理考點(diǎn)時(shí)做了一張對(duì)比表列了模型、核心思想、優(yōu)點(diǎn)、缺點(diǎn)、適用場(chǎng)景五列。表格不用打得很復(fù)雜能提醒自己就行。真正考試的時(shí)候答題邏輯比背完整表格更重要。另外一個(gè)高性價(jià)比的復(fù)習(xí)點(diǎn)是記住每個(gè)模型對(duì)“變更”的態(tài)度瀑布模型怕變更原型模型用變更當(dāng)工具螺旋模型每次循環(huán)都在主動(dòng)識(shí)別變更風(fēng)險(xiǎn)敏捷模型把變更當(dāng)成正常狀態(tài)。這個(gè)角度在論述題中經(jīng)常能當(dāng)?shù)梅贮c(diǎn)用。2.2 需求工程需求為什么總在變需求是軟件工程的起點(diǎn)也是后期返工的最大來(lái)源。一個(gè)需求沒(méi)弄清楚后面設(shè)計(jì)、編碼、測(cè)試全都建立在沙地上。需求工程包含獲取、分析、規(guī)格說(shuō)明、驗(yàn)證和管理五個(gè)環(huán)節(jié)。需求獲取最常用的手段包括用戶訪談、問(wèn)卷調(diào)查、現(xiàn)場(chǎng)觀察、聯(lián)合應(yīng)用開(kāi)發(fā)JAD和原型法。這里有個(gè)復(fù)習(xí)要點(diǎn)不是讓你背每種方法的定義而是要能從描述中判斷哪種方法更合適。比如用戶說(shuō)不清楚需求但能對(duì)界面和交互給出直觀反饋那就應(yīng)該優(yōu)先考慮原型法。需求分析階段面向?qū)ο蠓椒从美龍D、領(lǐng)域模型面向數(shù)據(jù)流方法看數(shù)據(jù)流圖DFD和數(shù)據(jù)字典。需求規(guī)格說(shuō)明書(shū)里功能需求好寫(xiě)非功能需求最容易被漏??荚囂貏e喜歡讓你列舉非功能需求的例子性能需求響應(yīng)時(shí)間、可靠性需求可用性比例、可維護(hù)性、可移植性、安全需求等這些例子在案例題里幾乎必用。需求管理部分的高頻考點(diǎn)是變更控制流程。為什么軟件需求總在變因?yàn)橛脩?、市?chǎng)、技術(shù)都在變。標(biāo)準(zhǔn)流程是變更請(qǐng)求提交 → 影響分析成本、進(jìn)度、范圍 → 變更控制委員會(huì)CCB審批 → 批準(zhǔn)后實(shí)施 → 更新文檔和基線 → 通知相關(guān)干系人。把這個(gè)流程默寫(xiě)出來(lái)再加一句“不能隨意變更否則會(huì)引發(fā)范圍蔓延和項(xiàng)目失控”簡(jiǎn)答題基本就穩(wěn)了。我復(fù)習(xí)時(shí)還額外記了一個(gè)點(diǎn)需求變更不可怕可怕的是沒(méi)有記錄和追溯機(jī)制所以配置管理里“基線”概念和需求管理是天然綁定的。2.3 軟件設(shè)計(jì)高內(nèi)聚低耦合的底層邏輯軟件設(shè)計(jì)大概是整門(mén)課里最“工程”的部分。復(fù)習(xí)資料里這塊最容易出現(xiàn)的問(wèn)題是貪多把架構(gòu)風(fēng)格、模塊化、詳細(xì)設(shè)計(jì)工具全塞進(jìn)去反而抓不住主干。我覺(jué)得主干就一條模塊化設(shè)計(jì)核心原則是高內(nèi)聚、低耦合。內(nèi)聚是指模塊內(nèi)部各元素之間的聯(lián)系強(qiáng)度。從低到高常見(jiàn)的是偶然內(nèi)聚、邏輯內(nèi)聚、時(shí)間內(nèi)聚、過(guò)程內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚、功能內(nèi)聚。耦合是指模塊與模塊之間的聯(lián)系程度從低到高是非直接耦合、數(shù)據(jù)耦合、標(biāo)記特征耦合、控制耦合、外部耦合、公共公共環(huán)境耦合、內(nèi)容耦合??荚囎類?ài)考“內(nèi)聚越高越好耦合越低越好請(qǐng)對(duì)給定模塊劃分進(jìn)行評(píng)價(jià)”這類題。復(fù)習(xí)時(shí)至少要能舉出兩個(gè)例子功能內(nèi)聚就好比一個(gè)“計(jì)算訂單總額”的函數(shù)只干一件事內(nèi)容耦合就好比一個(gè)模塊直接修改另一個(gè)模塊的內(nèi)部數(shù)據(jù)一旦出錯(cuò)很難排查。架構(gòu)設(shè)計(jì)部分常考的是架構(gòu)風(fēng)格。通俗地理解風(fēng)格就是軟件的“組織方式”數(shù)據(jù)流風(fēng)格像流水線適合編譯器和批處理系統(tǒng)調(diào)用/返回風(fēng)格像函數(shù)調(diào)用樹(shù)適合大部分業(yè)務(wù)系統(tǒng)數(shù)據(jù)中心風(fēng)格倉(cāng)庫(kù)/黑板適合專家系統(tǒng)和數(shù)據(jù)共享應(yīng)用獨(dú)立構(gòu)件風(fēng)格事件驅(qū)動(dòng)適合需求變化頻繁、組件松耦合的系統(tǒng)。答題時(shí)能說(shuō)明白“這種風(fēng)格把什么和什么分開(kāi)了”比背一堆術(shù)語(yǔ)定義更能拿分。詳細(xì)設(shè)計(jì)工具比較??嫉氖浅绦蛄鞒虉D、NS圖、PAD圖、偽代碼。記憶技巧是看它們?cè)趺幢磉_(dá)控制結(jié)構(gòu)流程圖直觀但容易形成“不可控”的跳轉(zhuǎn)NS圖強(qiáng)制規(guī)范化結(jié)構(gòu)、不允許隨意跳轉(zhuǎn)PAD圖邏輯層次清晰可以像樹(shù)一樣展開(kāi)偽代碼最接近編程語(yǔ)言??荚囈话悴粫?huì)讓你畫(huà)但給個(gè)圖能讓你選出它是哪種工具。順帶提一句“信息隱藏”和“開(kāi)閉原則”這兩個(gè)設(shè)計(jì)原則幾乎年年有簡(jiǎn)答題前者強(qiáng)調(diào)把易變細(xì)節(jié)封裝起來(lái)后者強(qiáng)調(diào)對(duì)擴(kuò)展開(kāi)放、對(duì)修改關(guān)閉別只知道口號(hào)最好能配一個(gè)Java或接口層面的小例子。2.4 軟件測(cè)試覆蓋率和用例設(shè)計(jì)如何得分測(cè)試這個(gè)知識(shí)塊最容易失分原因是同學(xué)普遍只記住了“黑盒測(cè)試不管內(nèi)部”“白盒測(cè)試不管外部”一旦遇到具體的用例設(shè)計(jì)題就不知道從哪里下手。我建議把測(cè)試相關(guān)復(fù)習(xí)資料拆成三條線。第一條線是測(cè)試層次。單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試、驗(yàn)收測(cè)試對(duì)應(yīng)開(kāi)發(fā)的不同階段。單元測(cè)試關(guān)注模塊內(nèi)部邏輯通常由開(kāi)發(fā)人員完成集成測(cè)試關(guān)注模塊間的接口策略有自頂向下需要樁模塊、自底向上需要驅(qū)動(dòng)模塊、三明治組合式系統(tǒng)測(cè)試關(guān)注整個(gè)系統(tǒng)是否滿足需求驗(yàn)收測(cè)試由用戶主導(dǎo)Alpha測(cè)試在公司內(nèi)部模擬用戶環(huán)境Beta測(cè)試在真實(shí)環(huán)境中由真實(shí)用戶完成。自頂向下和自底向上的“樁模塊”“驅(qū)動(dòng)模塊”經(jīng)常被搞混我記的時(shí)候用一句話頂上需要下方配合所以打樁底下需要上方調(diào)用所以驅(qū)動(dòng)。第二條線是測(cè)試用例設(shè)計(jì)方法。黑盒方法最??嫉葍r(jià)類和邊界值。舉個(gè)例子某系統(tǒng)要求用戶輸入年齡合法范圍是18到60。有效等價(jià)類是18到60之間的整數(shù)無(wú)效等價(jià)類是小于18、大于60的整數(shù)再加一個(gè)非數(shù)值輸入的無(wú)效類。邊界值分析則補(bǔ)充測(cè)試17、18、60、61這幾個(gè)臨界點(diǎn)因?yàn)檫吔绺浇腻e(cuò)誤發(fā)生概率最高。白盒方法則要記住六種邏輯覆蓋語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋、路徑覆蓋覆蓋能力從弱到強(qiáng)。這里的坑在于滿足條件覆蓋不一定滿足判定覆蓋很多考生拿這兩類覆蓋的標(biāo)準(zhǔn)答案來(lái)答結(jié)果丟分。我復(fù)習(xí)時(shí)額外記了下判斷方法條件覆蓋看的是“判定中的每個(gè)條件的真假是否都出現(xiàn)過(guò)”判定覆蓋看的是“整個(gè)判定的真假分支是否都走過(guò)”。第三條線是測(cè)試與管理的關(guān)系。V模型把測(cè)試與開(kāi)發(fā)階段掛鉤左側(cè)是需求、設(shè)計(jì)、編碼右側(cè)是單元、集成、系統(tǒng)、驗(yàn)收測(cè)試強(qiáng)調(diào)了“測(cè)試要和開(kāi)發(fā)同步計(jì)劃”的思想。復(fù)習(xí)時(shí)補(bǔ)一句W模型思想開(kāi)發(fā)和測(cè)試的每一個(gè)環(huán)節(jié)都是并行的——這句話在很多簡(jiǎn)答題里都能當(dāng)亮點(diǎn)。答題時(shí)再加上一句“測(cè)試越早介入發(fā)現(xiàn)缺陷的成本越低”整體邏輯就完整了。3. 把復(fù)習(xí)資料用起來(lái)筆記法、刷題法與答題話術(shù)整理好的資料不能只躺在文件夾里得真正“用”起來(lái)。這個(gè)部分說(shuō)說(shuō)我是怎么把厚厚一疊資料壓縮成最后幾天能看的東西。3.1 三色筆筆記法把資料濃縮成考點(diǎn)卡我的做法是把資料里每個(gè)考點(diǎn)的關(guān)鍵詞、易混點(diǎn)、常錯(cuò)點(diǎn)濃縮到一張A4大小的“考點(diǎn)卡”上??键c(diǎn)卡直接決定復(fù)習(xí)效率。具體操作分三步第一步先抄概念層的核心定義只抄主干不抄解釋性廢話第二步把每個(gè)知識(shí)點(diǎn)的“適用場(chǎng)景”和“反例”寫(xiě)在對(duì)側(cè)——比如瀑布模型的反例是“需求頻繁變更的項(xiàng)目”邊界值分析的反例是“只測(cè)區(qū)間中間值不測(cè)臨界值”第三步用不同顏色做標(biāo)記紅色標(biāo)記憶類內(nèi)容藍(lán)色標(biāo)理解類內(nèi)容綠色標(biāo)易混淆內(nèi)容。這么做的好處非常直接一門(mén)軟件工程最少有幾十個(gè)高頻考點(diǎn)全背一遍至少三天壓縮成考點(diǎn)卡之后考前一個(gè)晚上就能過(guò)兩遍。而且做卡片的這個(gè)動(dòng)作本身就是在強(qiáng)制你提煉信息提煉的過(guò)程就是深度記憶的過(guò)程。這里有個(gè)小建議卡片不要做得太密每張卡最多覆蓋三到五個(gè)考點(diǎn)留出大量空白用來(lái)補(bǔ)充“這句話考試時(shí)怎么說(shuō)”比塞滿字的“百科全書(shū)式筆記”有用得多。3.2 高頻題型與答題框架軟件工程考試離不開(kāi)名詞解釋、簡(jiǎn)答、分析設(shè)計(jì)、計(jì)算四類題。不同題型有不同解法別用一套思路硬套。名詞解釋題標(biāo)準(zhǔn)格式是“一句話定義 一句關(guān)鍵特征”。比如“基線是指軟件配置項(xiàng)在某個(gè)特定時(shí)間點(diǎn)被正式確定下來(lái)形成的版本后續(xù)變更必須經(jīng)過(guò)正式控制流程”。加粗關(guān)鍵詞給分點(diǎn)自然就到手了。我總結(jié)的套路是定義里必須包含“對(duì)象是誰(shuí)、狀態(tài)是什么、為什么要這樣做”三個(gè)元素缺一個(gè)就不完整。簡(jiǎn)答題先答主干再分點(diǎn)補(bǔ)充。問(wèn)“瀑布模型有什么缺點(diǎn)”時(shí)直接列出三點(diǎn)即可階段順序性強(qiáng)前期需求不明時(shí)風(fēng)險(xiǎn)高開(kāi)發(fā)中后期發(fā)現(xiàn)問(wèn)題返工成本巨大用戶要到后期才能看到可運(yùn)行的原型。三點(diǎn)之間角度盡量拉開(kāi)不要全說(shuō)一件事?;卮饡r(shí)每一點(diǎn)盡量用“如果……那么……”的句式展開(kāi)比如“如果需求理解有偏差那么到測(cè)試階段才發(fā)現(xiàn)時(shí)返工要跨越多個(gè)階段”這種表達(dá)會(huì)讓閱卷人覺(jué)得你是真的理解了。分析設(shè)計(jì)題可以套一個(gè)固定劇本先識(shí)別環(huán)境和約束再定義核心需求然后選擇合適的過(guò)程模型并說(shuō)明理由最后指出可能的風(fēng)險(xiǎn)和驗(yàn)證方式。套的時(shí)候注意“小而具體”能算出數(shù)字的算出來(lái)能指出具體模塊的指出模塊不要只喊“高內(nèi)聚低耦合”這種口號(hào)。計(jì)算題則要認(rèn)真背公式。成本估算里基本COCOMO公式是 E a × (KLOC)^b其中 E 是工作量人月。三種項(xiàng)目類型系數(shù)常常要考組織型 a2.4、b1.05半分離型 a3.0、b1.12嵌入式 a3.6、b1.20。進(jìn)度管理里關(guān)鍵路徑法CPM要能看懂網(wǎng)絡(luò)圖并計(jì)算最早時(shí)間、最晚時(shí)間與浮動(dòng)時(shí)間。算錯(cuò)一步扣半分所以做題時(shí)必須把步驟寫(xiě)清楚、單位帶完整。以一個(gè)小例子來(lái)說(shuō)任務(wù)A耗時(shí)5天任務(wù)B耗時(shí)3天且其后續(xù)任務(wù)C耗時(shí)4天A與B并行則項(xiàng)目最短工期是max(5, 34)7天關(guān)鍵路徑是B→C這條鏈。這種簡(jiǎn)單計(jì)算在考試中很常見(jiàn)平時(shí)練三遍就熟了。3.3 用真題和錯(cuò)題反向修補(bǔ)資料復(fù)習(xí)資料不是一次成型的它要在刷題過(guò)程中持續(xù)迭代。我做真題的時(shí)候凡做錯(cuò)的題不會(huì)急著改答案而是先找到錯(cuò)題對(duì)應(yīng)的知識(shí)點(diǎn)再回到資料里給那個(gè)知識(shí)點(diǎn)加“錯(cuò)題標(biāo)記”。同一個(gè)知識(shí)點(diǎn)錯(cuò)兩次證明理解有偏差就得回到教材重新啃一遍。這里分享一個(gè)省時(shí)間的辦法找一套近幾年的考試真題先只做名詞解釋和簡(jiǎn)答題把暴露出來(lái)的知識(shí)盲點(diǎn)標(biāo)紅再做分析和計(jì)算題時(shí)就能很快發(fā)現(xiàn)哪些方法是“看著會(huì)、動(dòng)手廢”。標(biāo)紅的知識(shí)點(diǎn)優(yōu)先級(jí)最高進(jìn)入沖刺階段的背誦清單。就算沒(méi)有真題用每章后面的習(xí)題也可以效果差不到哪里去。錯(cuò)題記錄不要只記正確答案要記“我當(dāng)時(shí)為什么錯(cuò)”——是概念混淆、審題偏差還是計(jì)算失誤這個(gè)原因診斷比答案本身重要得多。4. 復(fù)習(xí)階段那些坑概念混淆、案例分析不會(huì)做、計(jì)劃爛尾最后這部分是比資料本身更值錢(qián)的“實(shí)戰(zhàn)避坑指南”。4.1 高頻混淆點(diǎn)速查軟件工程有個(gè)現(xiàn)象幾組概念長(zhǎng)得像含義差得遠(yuǎn)。我把最容易混淆的整理成一張速查表放資料首頁(yè)每次考前都先過(guò)它一遍。易混概念核心區(qū)別一句話記憶驗(yàn)證 vs 確認(rèn)驗(yàn)證是“是否按規(guī)格構(gòu)建”確認(rèn)是“是否構(gòu)建了正確的東西”驗(yàn)證做得對(duì)確認(rèn)做對(duì)了東西黑盒 vs 白盒測(cè)試黑盒基于需求規(guī)格、不關(guān)心內(nèi)部白盒基于內(nèi)部邏輯結(jié)構(gòu)黑盒看外白盒看內(nèi)自頂向下 vs 自底向上集成自頂向下先測(cè)上層、配樁模塊自底向上先測(cè)底層、配驅(qū)動(dòng)模塊頂配樁底配驅(qū)改正性 vs 適應(yīng)性 vs 完善性維護(hù)修缺陷、適應(yīng)環(huán)境、新增改進(jìn)壞、變、好測(cè)試用例 vs 測(cè)試場(chǎng)景用例關(guān)注單一輸入輸出路徑場(chǎng)景關(guān)注多步驟交互流程用例單點(diǎn)場(chǎng)景成線內(nèi)聚 vs 耦合內(nèi)部聯(lián)系 vs 模塊間聯(lián)系內(nèi)部聚外面合這張表打印出來(lái)貼在墻上刷題前掃一眼能少走很多彎路。我自己考前那幾天每天睡前就默寫(xiě)一遍這張表第二天早上醒過(guò)來(lái)再看一眼一周下來(lái)基本滾瓜爛熟。4.2 案例分析總抓不住考點(diǎn)怎么辦案例題是軟件工程考試的分水嶺。很多同學(xué)考完說(shuō)“感覺(jué)題不難就是答不到點(diǎn)子上”根因是沒(méi)學(xué)會(huì)按“問(wèn)題—過(guò)程—產(chǎn)出物”去讀案例。以某課程小組做的一款外賣訂餐小程序虛構(gòu)項(xiàng)目為例用戶掃碼點(diǎn)餐、后廚出餐、騎手配送需求每天可能會(huì)有菜品和優(yōu)惠調(diào)整希望一周內(nèi)能看到一個(gè)能下單的原型。讀題時(shí)先找約束條件需求會(huì)變、時(shí)間緊張、希望快速驗(yàn)證這時(shí)候選原型模型或敏捷開(kāi)發(fā)就合理。再往下看如果題目接著問(wèn)“請(qǐng)用等價(jià)類為金額輸入設(shè)計(jì)用例”你就知道要用無(wú)效等價(jià)類覆蓋負(fù)數(shù)和超限金額用邊界值覆蓋臨界金額最后寫(xiě)出幾條具體的測(cè)試用例。一題拆完知識(shí)點(diǎn)之間是串聯(lián)的不再孤立。我平時(shí)練案例題有個(gè)“三遍法”第一遍自己做完第二遍對(duì)照參考答案把參考答案里每一條結(jié)論都和題目中的哪句話對(duì)應(yīng)起來(lái)——這個(gè)過(guò)程非??简?yàn)?zāi)托牡Ч麡O好第三遍合上答案用自己的話重新寫(xiě)一遍完整的答題框架。三遍下來(lái)案例分析的能力基本就穩(wěn)了。對(duì)于那些“看完答案也看不懂”的案例我的做法是先跳過(guò)它等兩天后再做一遍往往能突然想通因?yàn)橹虚g隔著的這兩天你腦子的后臺(tái)還在自動(dòng)加工這個(gè)案例的邏輯。4.3 復(fù)習(xí)計(jì)劃為什么總是爛尾最后說(shuō)一個(gè)最常見(jiàn)的坑復(fù)習(xí)計(jì)劃排得太滿。我見(jiàn)過(guò)不少同學(xué)把計(jì)劃精確到“今天背第一章明天背第二章”結(jié)果三天后遇到一個(gè)難懂的概念就卡住整個(gè)計(jì)劃全線潰爛。復(fù)習(xí)計(jì)劃的本質(zhì)不是時(shí)間表而是優(yōu)先級(jí)排序。我常用的計(jì)劃分三輪。第一輪花兩天把全書(shū)過(guò)一遍只看概念層和高頻方法目標(biāo)是能畫(huà)出主線圖第二輪花三天做專題復(fù)習(xí)重點(diǎn)攻需求、設(shè)計(jì)、測(cè)試和大題的答題套路配合真題練習(xí)第三輪在考前一晚只復(fù)習(xí)考點(diǎn)卡和易混表不再攝入任何新內(nèi)容。這個(gè)安排不追求把每個(gè)字都背下來(lái)而是確保核心考點(diǎn)全被覆蓋臨考狀態(tài)也更好。如果你第一輪就發(fā)現(xiàn)某個(gè)知識(shí)點(diǎn)特別難懂果斷標(biāo)記成“低優(yōu)先級(jí)第二輪再處理”先往前走別在一棵樹(shù)上吊死。如果復(fù)習(xí)時(shí)間只有一個(gè)晚上那就不要再貪全了。抽出三章最核心的內(nèi)容——過(guò)程模型、測(cè)試方法、需求分析把它們過(guò)熟遠(yuǎn)勝于把全書(shū)的標(biāo)題掃一遍但什么都沒(méi)記住。這門(mén)課的期末復(fù)習(xí)最怕的不是知識(shí)量大而是結(jié)構(gòu)太碎導(dǎo)致的心理崩潰。只要主線在碎一點(diǎn)反而更容易記。自己在實(shí)際帶考前面授小組時(shí)最深的感受是軟件工程這門(mén)課概念固然要背但真正能拉開(kāi)分的是把概念串成一條線、在案例里靈活運(yùn)用的能力。整理這套復(fù)習(xí)資料的過(guò)程其實(shí)就是一個(gè)把書(shū)從厚讀薄的過(guò)程。如果這份分享能讓你少走點(diǎn)彎路考試時(shí)少丟幾分那它就算值了??记安环涟奄Y料合上先試著對(duì)著白紙把“過(guò)程、需求、設(shè)計(jì)、測(cè)試、維護(hù)、管理”這條線默寫(xiě)出來(lái)默寫(xiě)得出來(lái)說(shuō)明你真的把資料裝進(jìn)了腦子里默寫(xiě)不出來(lái)就回去繼續(xù)補(bǔ)框架遠(yuǎn)比一遍遍抄定義要有用得多。