|
電子產(chǎn)品軟件設(shè)計漫談
技術(shù)源于積累,成功源于執(zhí)著。
——沈輝文

一、方案的制定階段
1. 一個項目的成敗往往不是在最后一天體現(xiàn),而是在第一天就被注定了(三軍未動,糧草先行)。也就是說,方案的制定階段直接關(guān)系到項目的成敗。因此在這個階段要細(xì)致的做好準(zhǔn)備工作,這些工作主要包括以下內(nèi)容:
2. 制定技術(shù)開發(fā)要求,首先要搞明白我們到底想做什么?最害怕的就是那種沒有要求的設(shè)計項目。因為有時,沒有要求就意味著客戶隨時會提出新要求。這往往會陷開發(fā)者以兩難的境地。
3. 制定實現(xiàn)方案,進(jìn)行技術(shù)準(zhǔn)備。了解技術(shù)瓶頸和難點在哪。評估這些技術(shù)難點的風(fēng)險。能否解決?如何解決?對于有經(jīng)驗的工程師來說,技術(shù)方案的定制與論證幾乎憑直覺就能完成。而對于新手來說,這些工作切往往很難獨(dú)立完成,需要前輩給予指導(dǎo)或協(xié)助。
4.評估整個項目開發(fā)需要的各方面的資源,包括:人力、工具、材料、場地、經(jīng)費(fèi)等。并由此核算與評估項目的成本(包括研發(fā)成本和生產(chǎn)成本)。
5.評估確定開發(fā)周期。開發(fā)周期有兩個概念,一個是指工程師評估出來的開發(fā)周期。一個是指市場方面希望的完工時間期限。當(dāng)二者發(fā)生矛盾時,就必須進(jìn)行協(xié)調(diào)。要么市場方面放寬期限,要么增派人手或安排加班。
在整個立項過程中,工程師往往只把關(guān)注的目光片面地投向技術(shù)方案本身,而忽略了市場前景預(yù)估,成本核算、工具和材料的準(zhǔn)備以及人力資源的調(diào)度等等。其實這些因素同樣關(guān)系著產(chǎn)品的成敗,需要給予足夠的重視。必要時,應(yīng)該請相關(guān)人員共同參與,進(jìn)行評估和協(xié)助。
二、產(chǎn)品設(shè)計階段
在經(jīng)過多方面的綜合評估,確認(rèn)方案可行,即可立項,進(jìn)入具體的設(shè)計階段了。其實這個設(shè)計階段中包含了系統(tǒng)、程序、電路、機(jī)械結(jié)構(gòu)等多方面的內(nèi)容。由于本手記主要講電子程序設(shè)計。因此就撇開其他,只講程序。在這個階段工程師的主要任務(wù)是:
1.程序框架的規(guī)劃。
2.各個模塊功能的細(xì)分。
3.系統(tǒng)資源的分配。
4.算法的設(shè)計。
5.程序流程圖的繪制。
新手們常常喜歡跳過這個階段,蠢蠢欲動地直接上機(jī)去寫程序,邊寫邊調(diào)。滿以為這樣可以加快進(jìn)度,結(jié)果往往事倍功半,反而耽誤了時間。
其實,磨刀不誤砍柴工。這個階段付出的辛苦,將在后面幾個階段獲得N倍的報答。反之,這個階段的任何一點懈怠,都有可能為以后的工作埋下禍根。
三、代碼編寫階段
這個階段就是我們平時所謂的寫程序了,其實是最沒技術(shù)含量的活,誰都能干。這個階段最基本的要求就是盡量減少筆誤現(xiàn)象,并且嚴(yán)格遵守編程規(guī)范。
根據(jù)經(jīng)驗,筆誤現(xiàn)象是無法完全杜絕的。筆誤屬于低級錯誤,其實并不可怕。即使存在一些筆誤,也可在下一步調(diào)試階段糾正。事實上,現(xiàn)在許多編譯器已經(jīng)可以為我們發(fā)現(xiàn)許多筆誤現(xiàn)象。
真正需要注意的是遵守編程規(guī)范。一個規(guī)范的程序文本,不但是審美的要求,而且更是后續(xù)調(diào)試和修改工作得以勝利進(jìn)行的保證。 關(guān)于編程規(guī)范,如果展開來講的話,完全可以寫一本書。
1.向前兼容原則
對于單個程序員來說,效率來自于不斷積累。這時要奉行的最高原則就是向前兼容。
我們知道,許多有經(jīng)驗的編程老手,都擁有自己的程序模塊庫。當(dāng)他們需要設(shè)計一個新的程序時,只要直接從舊的項目中抽取出成熟模塊,移植到新的項目中。七拼八湊,就完成了新程序的設(shè)計。這極大提高了開發(fā)速度。
為了讓這些模塊,能夠在不同時期的不同項目中,保持較好的兼容性,必須讓它們遵守相同的規(guī)范。
因此,要盡快形成個人成熟、完善的程序風(fēng)格。
2.相互兼容原則
對于一個開發(fā)團(tuán)隊來說,效率來自于分工協(xié)作。這時要奉行的最高原則就是相互兼容。
在團(tuán)隊中,編程者個人技巧的重要性被降低。甚至這些不和規(guī)范的技巧,會成為合作者之間溝通的障礙。
團(tuán)隊中的個人英雄主義是失敗的先兆。而團(tuán)隊默契配合,才是成功的關(guān)鍵因素。
因此,有必要制定統(tǒng)一的編程規(guī)范,讓團(tuán)隊中的伙伴一起遵守,避免各自為政、一盤散沙。
四、產(chǎn)品調(diào)試階段
這個階段就是要驗證前面的工作,把程序調(diào)通。
在這里,調(diào)通的概念并不是說,程序在正常狀態(tài)下,偶然正確運(yùn)行那么一回就算萬事大吉。我們要保證,程序在各種可能的狀態(tài)(包括異常狀態(tài))下都能按預(yù)期的要求工作。
曾經(jīng)聽說,某某高手一口氣寫了N多K的程序,沒有經(jīng)過調(diào)試,一次燒片就成功了。我覺得這簡直就是神話一般不可思議。我堅信一點,就是沒有BUG的程序是不存在的。這年頭,就連Windows XP都渾身是補(bǔ)丁,誰又能宣稱自己比比爾蓋茨還牛呢?
調(diào)試階段要做的兩件重要事情:一是測試,就是要進(jìn)可能多地找出程序中的BUG;二是DEBUG,就是要解決這些BUG。
找不出BUG,或解決不了BUG,都是失敗。
程序員往往更善于解決BUG,卻不善于發(fā)現(xiàn)BUG。這是由于程序員面對自己的程序,往往會存在視覺盲點。這就像禿子看不到自己的光頭一樣。另一方面,程序員即使發(fā)現(xiàn)BUG,但由于程序是自己寫的,往往不能正視之。這是一種思維障礙,就像我們常常不愿承認(rèn)自己的缺點一樣。因此,最好的解決辦法,是在程序(產(chǎn)品樣品)交付客戶之前,請其他人員進(jìn)行測試檢驗。
在找到BUG后,需要程序員去分析問題并解決問題了。這才體現(xiàn)個人功力,拉開差距的時候呢。高手和低手的差別就在這時顯現(xiàn)出來。
五、產(chǎn)品維護(hù)階段
這個階段是指產(chǎn)品在推向市場或交付客戶后,根據(jù)市場或客戶需求,進(jìn)行升級維護(hù),當(dāng)然也包括進(jìn)一步對隱形BUG的消除。
一個得不到維護(hù)的產(chǎn)品,是沒有生命力的。就像一顆已經(jīng)死亡的樹,雖然表面上看來還枝繁葉茂,但實際上它已經(jīng)停止生長,遲早要腐化掉。
同樣道理,一款常年不更新?lián)Q代的電子產(chǎn)品,會像過去的明星漸漸被人遺忘一樣,逐漸丟失市場份額,而產(chǎn)品維護(hù),是延長產(chǎn)品生命周期的不二法門。
產(chǎn)品如何才能經(jīng)歷歲月的考驗,千錘百改,依然生機(jī)勃勃?
1.養(yǎng)成良好的編程習(xí)慣
程序應(yīng)該模塊化,就像積木一樣,便于拆卸或增加。
對于MCU的一些資源,如RAM寄存器或I/O口,甚至包括一些常數(shù),必須先定義在使用,避免直接使用。將來需要調(diào)整時,只要修改定義部分就好了。
對于相同或類似的程序段,應(yīng)該用子程序來實現(xiàn)。如果受堆棧等資源限制,不能使用子程序,則應(yīng)該用宏來實現(xiàn)。只要以后需要修改時,只需要改一點,無需改一片。
2.自覺加強(qiáng)版本管理
詳細(xì)記錄每個程序版本的修改細(xì)節(jié),形成一份歷史記錄。并且,每次改動后的版本都應(yīng)該保留,新版本不要覆蓋老版本的文件。一個基本原則是,凡是要燒片測試或送樣的程序版本,如需要再做修改,必須升級版本號。
并且,每次修改程序時,相關(guān)的注釋及輔助說明文檔也應(yīng)該同步更新。免得下次再改時,發(fā)現(xiàn)對不上號。
所有程序版本應(yīng)該妥善歸類、存檔備份。有條件最好刻成光盤,避免日久年長因病毒或硬盤損壞而丟失。

|
|