系統(tǒng)開發(fā)的規(guī)范化問題
隨著人才流動的加快和研發(fā)周期的縮短,我們個人需要快速高效的完成自己的設(shè)計,維護(hù)和升級,公司需要人走不影響項目進(jìn)度、新員工很快就能接手。這就需要:一個系統(tǒng)設(shè)計完成以后,它不應(yīng)該僅僅是一些源代碼,還應(yīng)該包括各種各樣的開發(fā)文檔。(這對以后自己對系統(tǒng)的維護(hù)和升級都有很好的參考作用。而且能最大情況的避免一種情況:你改了一個BUG,卻發(fā)現(xiàn)又出現(xiàn)了很多個BUG。)一個系統(tǒng)開發(fā)完成,它究竟應(yīng)該包含那些文檔,這些文檔一般是怎么完成的,應(yīng)該包含哪些內(nèi)容?這就是系統(tǒng)開發(fā)的規(guī)范化問題。系統(tǒng)開發(fā)的規(guī)范化不僅有利于自己,也有利于公司,更有利于新手。規(guī)范化的設(shè)計讓工程師工作更高效,這已經(jīng)是不用爭論的事實?,F(xiàn)在在大型軟件工程開發(fā)方面,這已經(jīng)做得相當(dāng)好。但在單片機和嵌入式系統(tǒng)的開發(fā)方面,規(guī)范化的工作卻有待我們共同探討。一個不容否認(rèn)的事實是:國內(nèi)的大部分小系統(tǒng)開發(fā)工程師從來不寫文檔,一開始就是以功能完成為中心進(jìn)行代碼設(shè)計。
在香港的一些公司也是這樣一種設(shè)計模式。在國內(nèi),一些公司的研發(fā)管理人員也有一種誤導(dǎo)——快寫代碼,快讓我看見功能,不要你做其他的,完成功能就好。這些都把我們的設(shè)計導(dǎo)入一種誤區(qū):大部分時間都在寫代碼,改代碼。
在此提出系統(tǒng)開發(fā)的規(guī)范化問題,也是我個人的一點想法而已。僅供參考。不過,一切還得從實際出發(fā),倒沒有必要硬要把設(shè)計從寫某些文檔開始,太教條了不好。如果你感覺寫某些文檔是浪費時間,那就別寫吧。
在這里,我給出一個小系統(tǒng)大致包括的文檔,僅作參考。
PRODUCT SPECIFICATION 一般是市場部或者是客戶提供的
PRODUCT SPECIFICATION ——》 PROJECT LEADER
PROJECT LEADER 給工程師分配方案
SOFTWARE SPECIFICATION ——》 HARDWARE ENGINEERS
HARDWARE SPECIFICATION ——》 SOFTWARE ENGINEERS
MECHANICAL SPECIFICATION ——》 MECHANICAL ENGINEER
一、 硬件工程師的芯片選擇,原理圖的設(shè)計
硬件工程師根據(jù)HARDWARE SPECIFICATION 來選擇芯片(也可能是PROJECT LEADER 早已為你定了),再根據(jù)芯片說明來設(shè)計各功能模塊電路。出一份文檔
HARDWARE IMPLEMENTATION
并進(jìn)行SCHEMATIC DESIGN
再把這些資料提供給SOFTWARE ENGINEER。
PCB LAYER 當(dāng)然不需要文檔了。
但有跟隨的HARDWARE UPDATE REPORT
包括調(diào)試修改和最后的軟硬聯(lián)調(diào),所做的任何工作都要出相應(yīng)的說明。
(呵,呵,你自己保存一表格天天填吧,改動地方,修改原因,就兩項,不難寫的)
軟件工程師得到芯片和電路資料,開始根據(jù)SOFTWARE SPECIFICATION 進(jìn)行設(shè)計
首先我們應(yīng)該出一文檔:
SOFTWARE IMPLEMENTATION 這里大致包括軟件采用的芯片,軟件的功能模塊及使用系統(tǒng)端口功能情況,仿真系統(tǒng),原始數(shù)據(jù)資料,自己用其他語言寫的數(shù)據(jù)處理工具。
在此文檔完成后,我們進(jìn)入了詳細(xì)設(shè)計階段:
MODULE DESIGN 開始寫各模塊的實現(xiàn),包括各模塊所要實現(xiàn)的功能,用到的系統(tǒng)資源(包括變量的定義,常量的定義),與其他模塊的聯(lián)系(*對系統(tǒng)的維護(hù)和升級很重要的)和時間間隔圖(有固定時間點用固定時間點,沒有固定時間點,就用時間間隔 ,用來設(shè)計主循環(huán)的)。這里表現(xiàn)的其實是你的思路,如果你思路清晰,做起事情來自然是事半功倍了。
MAINLOOP DESIGN:
主要是根據(jù)時間間隔圖和各模塊的重要性及響應(yīng)優(yōu)先級進(jìn)行主監(jiān)控程序的設(shè)計,確保各功能能順利完成。
MIAN CHART FLOW
畫出程序流程圖
SOURCE CODE DESIGN。
這一部分才是代碼的實現(xiàn),要是你前面寫得很詳細(xì)了,這里你的思路很清晰,按照MAINLOOP DESIGN直接做就是了。當(dāng)然,我們需要按照我們自己的〈編程語言規(guī)范〉來設(shè)計源程序。這是軟件工程師的基本,我就不提了。
最后是軟硬聯(lián)調(diào),需要兩個人配合的,基本不出什么文檔,但如果你作了什么修改,請記錄在案,最后要更新你前面的設(shè)計文檔。
最后是出FIRST SAMPLE ,MECHANICAL ENGINEER 會根據(jù)要求修改自己的設(shè)計。并出IMPLEMENTATION 和 UPDATE ME REPORT。
整個系統(tǒng)開發(fā)流程的規(guī)范化還應(yīng)該包括項目的會審,軟硬協(xié)調(diào),成本的控制,貨源的規(guī)劃,測試規(guī)劃,等等,由于我這里不是介紹一個現(xiàn)代研發(fā)部的研發(fā)流程,只想對系統(tǒng)軟件規(guī)范化說得詳細(xì)一點(這些可能是我們目前規(guī)范化面臨的最大的問題吧),其他我都省掉了。
這里寫的不詳細(xì),只給出一個簡單的單片機開發(fā)文檔(見后面的下載地址),僅為拋磚引玉而已,希望有經(jīng)驗的各位同行修改補充。如有不明之處或者需要一些資料的,請給我留言(由于現(xiàn)在很忙,可能不會一一回復(fù)或者應(yīng)答,請見諒)。
最近又多了一些臺灣和印度的朋友,發(fā)現(xiàn)他們的程序書寫習(xí)慣幾乎一樣,又多了很多的感觸,覺得規(guī)范化的程序書寫習(xí)慣也應(yīng)該成為一門程序員的入門課程呢.正如我們說話的語法規(guī)范一樣.不至于太亂吧.
/tech/ymcswd.pdf ; 源碼測試文檔
/tech/yjsjxxsm.pdf ; 硬件設(shè)計詳細(xì)說明
/tech/rjsjxxsm.pdf ; 軟件設(shè)計詳細(xì)說明
/tech/rjsjgysm.pdf ; 軟件設(shè)計概要說明
/tech/rjjdxbtj.pdf ; 軟件進(jìn)度需備條件整理
/tech/cpkfsclc.pdf ; 產(chǎn)品開發(fā)生產(chǎn)流程