3:開發(fā)自動(dòng)化體系的建立。
相對于過程信息化而言,開發(fā)自動(dòng)化體系的建立容易被忽視。其實(shí),隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,在開發(fā)自動(dòng)化支持方面已經(jīng)有了不少成熟的解決方案。對 軟件開發(fā)而言,最典型的莫過于自動(dòng)構(gòu)建與持續(xù)集成,其它還包括代碼自動(dòng)走查,自動(dòng)測試工具等。對硬件而言,也有不少自動(dòng)測試手段,研發(fā)在生產(chǎn)加工的自動(dòng)化 支持方面同樣有不少工作可做。其實(shí),這里之所以提出自動(dòng)化體系的建立,是指研發(fā)團(tuán)隊(duì)?wèi)?yīng)該不停審視所有的研發(fā)過程,盡量將能夠自動(dòng)化的過程自動(dòng)化。如果能夠 通過一個(gè)系統(tǒng)或計(jì)算機(jī)自動(dòng)完成,就不要用人工的方法來完成這個(gè)工作。盡管很多研發(fā)過程自動(dòng)化的建立相對而言比較耗費(fèi)時(shí)間,但是為企業(yè)研發(fā)團(tuán)隊(duì)帶來的效率的 提升卻往往非常明顯。當(dāng)然,自動(dòng)化體系的建立是一個(gè)長期而艱苦的過程,但是真正優(yōu)秀的公司的研發(fā)核心競爭力也往往會(huì)體現(xiàn)在這個(gè)方面。
對于文檔體系和信息化體系的建立,我想不用過多的闡述大家都很容易理解,但是對于“開發(fā)自動(dòng)化體系的建立”的這個(gè)概念,或許只是我的一點(diǎn)個(gè)人看 法,為了便于大家理解,我這里就用一個(gè)對電子通訊和儀器儀表等行業(yè)研發(fā)團(tuán)隊(duì)在嵌入式軟件開發(fā)領(lǐng)域非常適用的具體實(shí)例來闡述一下何謂開發(fā)自動(dòng)化思想,如果您 負(fù)責(zé)的團(tuán)隊(duì)正好也包含嵌入式軟件研發(fā),我想你會(huì)更加容易理解下面的內(nèi)容:
對嵌入式軟件來說,堆??臻g有嚴(yán)格的大小限制,而堆棧的使用狀況對編程人員來說又不能夠直觀的被觀察,這直接導(dǎo)致在嵌入式軟件系統(tǒng)中經(jīng)常會(huì)遇到堆 棧溢出問題,一些低水平的開發(fā)人員總是容易在這上面犯錯(cuò)。而這種問題一旦被引入到最終的產(chǎn)品中,其隱蔽性強(qiáng),導(dǎo)致的后果嚴(yán)重,且不易跟蹤重現(xiàn)。我們具體來 分析一下原因,從事過嵌入式軟件開發(fā)的人都知道,函數(shù)參數(shù)和函數(shù)內(nèi)的局部變量以及函數(shù)的遞歸調(diào)用層次等在函數(shù)運(yùn)行時(shí)都會(huì)對堆棧的占用產(chǎn)生影響,而一些編程 經(jīng)驗(yàn)不足的開發(fā)人員往往容易在函數(shù)實(shí)現(xiàn)時(shí)在內(nèi)部定義空間要求過大的局部變量(諸如多維數(shù)組)。大多數(shù)研發(fā)團(tuán)隊(duì)的解決思路是:將這個(gè)定義成編程規(guī)范,或者寫 成經(jīng)典案例,或者將這個(gè)檢查作為代碼審查的CheckList的一部分。但是,我要說的是這些方法都不是最優(yōu)的終極解決方案。這里我推薦我以前負(fù)責(zé)的研發(fā) 團(tuán)隊(duì)中采用的一種做法給大家參考:函數(shù)對堆棧的大小依賴是可以被靜態(tài)檢查的,在函數(shù)編譯的中間過程文件中,你可以分析一下里面的匯編語言,然后通過正則表 達(dá)式匹配找出函數(shù)實(shí)現(xiàn)的地方,并分析出函數(shù)對堆棧的使用情況。通過寫一小段堆棧使用檢測的掃描腳本,在每次軟件編譯后,自動(dòng)運(yùn)行該腳本,然后將掃描的異常 結(jié)果發(fā)給相關(guān)人review。這個(gè)自動(dòng)處理的過程在我們的系統(tǒng)中引入后,幾乎再也沒有出現(xiàn)過堆棧耗盡溢出問題。我總結(jié)一下上面的過程:開發(fā)人員 checkin代碼->自動(dòng)構(gòu)建腳本運(yùn)行->構(gòu)建完成后自動(dòng)運(yùn)行代碼靜態(tài)掃描腳本(這里可以是任何靜態(tài)檢查工具,如PCLINT和 C++Test以及我上面提到的堆棧檢測掃描代碼)->自動(dòng)運(yùn)行測試腳步(如冒煙測試,Unit測試等)->自動(dòng)保存build結(jié)果供后續(xù)人 工測試。上面的任何步驟失敗都會(huì)自動(dòng)通知相關(guān)人。 以上過程說復(fù)雜也有些復(fù)雜,說簡單也簡單,畢竟你要做的僅僅是整合各種現(xiàn)成的工具,然后開發(fā)一點(diǎn)點(diǎn)自動(dòng)腳本,但是這條自動(dòng)生成線一旦建立,卻能夠切實(shí)提升 研發(fā)效率。
我上面只提到一個(gè)軟件開發(fā)的實(shí)例,其實(shí)在開發(fā)過程中,有很多具體的環(huán)節(jié)都可以通過一些自動(dòng)化的手段顯著提高研發(fā)效率。如何發(fā)現(xiàn)哪些研發(fā)過程需要或 可以自動(dòng)化呢?這個(gè)需要仔細(xì)觀察團(tuán)隊(duì)的實(shí)際工作情況,找出開發(fā)過程中重復(fù)的手工勞動(dòng)比重大的工作,然后研究一下自動(dòng)化是否可行,然后實(shí)施推廣。
上述三個(gè)方面的內(nèi)容談的都非?;\統(tǒng),任何一方面的工作展開來探討都是一大堆內(nèi)容,希望今后有機(jī)會(huì)能夠與大家共同探討一下這些方面的工作如何開展。