每個創(chuàng)業(yè)者都會有第一桶金,這對于創(chuàng)業(yè)者來說,是啟動資金,是公司能開航的動力;對于聽眾或者觀眾來說,有的可能就是奇跡、神話、傳奇,等等之類的。對我來說,這第一“桶”金,是我創(chuàng)業(yè)的直接“導(dǎo)火索”,同時也是我的啟動資金,這中間更多的是我的沖動,是一種藏在心底里長久的一種火苗的突然燃燒。所以對于聽眾來說,可能比較平淡無奇了。
公司的第一個項目,也是我第一桶金的資金來源,既然是公司做的東西了,肯定不能象toy軟件了,要真正當(dāng)作一個軟件產(chǎn)品來做了,要有需求分析,軟件架構(gòu)設(shè)計,數(shù)據(jù)庫設(shè)計,編寫源代碼,測試,維護(hù)等環(huán)節(jié)了。因為剛開始公司就我們兩個人,所以我們兩個就充當(dāng)了架構(gòu)設(shè)計師,軟件工程師,測試工程師,售后工程師等角色。
雖然以前也做過很多項目,也和很多人合作開發(fā)過,但是真正的流程還是理解的不夠,其實在軟件開發(fā)中這個流程是非常重要的。下面我就以我的親身體驗來說明軟件開發(fā)中的各個環(huán)節(jié),這同時也是我的教訓(xùn),其中有許多可能也是不對的,希望朋友們給予指正。
項目描述:是一個生產(chǎn)企業(yè)的綜合計劃管理系統(tǒng),包括了訂單管理,排產(chǎn)管理,令號管理,銷售管理,發(fā)運管理五個模塊,另外還有綜合查詢等統(tǒng)計信息。
需求——你受客戶的影響有多大?了解了基本需求之后,我做了一個解決方案,其中包括了J2EE架構(gòu)和.NET架構(gòu),并詳細(xì)描述了各自的有缺點和環(huán)境需求,讓客戶來選擇。我向客戶推薦的是采用J2EE架構(gòu),一方面是我的原因,我想在J2EE設(shè)計中積累更多的經(jīng)驗,二是客戶的公司的訂單的處理將來可以移到Internet,實施E-commerce。當(dāng)把方案拿給客戶以后,我自然的推薦了J2EE模式,但是這個客戶他本身還是很了解技術(shù)的,他說J2EE比較復(fù)雜,將來維護(hù)的費用會比較高,另外他也不是太懂,因為以前他開發(fā)了公司的網(wǎng)站系統(tǒng),使用ASP開發(fā)的,所以他就建議我們使用ASP開發(fā),一是ASP的環(huán)境要求比較低,二是將來他可以自己維護(hù),譬如需要什么報表,他就可以自己加進(jìn)去。因為是我的第一個項目,所以我也接受了他的建議。說句實話,對于生產(chǎn)企業(yè)的管理系統(tǒng),我還是第一次做,其中的一些流程我一點都不清楚,好多名詞更是第一次聽說,如“令號”,“排產(chǎn)”等。這也給我寫需求造成了困難,在和客戶交流了一周多后,我基本熟悉了流程,客戶也把數(shù)據(jù)表的要求寫出來了,綜合了我所了解的業(yè)務(wù)后,我寫了一篇洋洋灑灑的《需求分析說明書》,這也是我第一次這么完整、規(guī)范的一個需求分析。
架構(gòu)設(shè)計——能設(shè)計出一種彈性、合理的架構(gòu)嗎?以前設(shè)計的軟件,我沒有這個環(huán)節(jié),直接拿來題目,根據(jù)經(jīng)驗馬上就開始編碼。但我現(xiàn)在是公司了,必須要按照規(guī)范來作,即使我做的不好,我也必須加入這個環(huán)節(jié)。當(dāng)然要想設(shè)計出彈性靈活的架構(gòu),不是一朝一夕就有這個功力的,對于一個軟件也不是一次就能設(shè)計出非常好的架構(gòu)的。李維在《面向?qū)ο笤O(shè)計實踐之路》中提到的PFM系統(tǒng),之前也是為了完成任務(wù)而做的,我之前設(shè)計的軟件可能都是這樣的,沒有什么架構(gòu)而言的,現(xiàn)在要對PFM改造,進(jìn)行重新設(shè)計,使之有一個彈性靈活的架構(gòu),但也要經(jīng)過幾次反復(fù)之后才行。
界面設(shè)計——能設(shè)計出簡潔美觀符合習(xí)慣的界面嗎?以前不很注意,界面隨便搞一下就可以了,以前看了林銳的《Web界面設(shè)計》覺得沒有什么看的,覺得我都知道,當(dāng)這次我要真正的要進(jìn)行界面設(shè)計的時候,我覺得他說得好多我可能正要碰到或者將要碰到,覺得很多“規(guī)則”還是很有道理的。我不見得要設(shè)計出非常有創(chuàng)意的界面,但是我應(yīng)該設(shè)計出標(biāo)準(zhǔn)的界面,不能讓用戶一看,啊!真難看啊!所以這次我對于界面非常的注重,因為這個是給用戶的第一感覺。功能是軟件的第一要素,如果軟件連客戶的功能都沒有實現(xiàn),就別提別的了,當(dāng)功能實現(xiàn)以后,就要讓用戶用著舒服,看著舒服,界面一致。軟件的界面和寫文檔一樣,有沒有用心一看就有結(jié)果了。
程序編碼——是反思一下編程技巧的時候了?編碼,以前變了很多,C/C++,Delphi,VB,ASP,PHP,JAVA等等,都編過,但那種編碼缺少一種藝術(shù)性,當(dāng)然也缺乏規(guī)范,那是為了完成任務(wù)而寫的。但這次不同,這次是做為公司的產(chǎn)品,是代表我公司的形象的,是該反思一下編碼的問題了,不能讓客戶一看我的代碼,就覺得我象個業(yè)余的似的。以前使用ASP,關(guān)鍵代碼和界面一起,顯得非常的混亂,即使最后發(fā)覺了,也懶得去改了,一個軟件到最后,自己都不想看自己的代碼了,這種情況在這一次絕對不能出現(xiàn)。我要實現(xiàn)數(shù)據(jù)和界面的分離,要實現(xiàn)統(tǒng)一的錯誤機(jī)制,實現(xiàn)單一登錄,實現(xiàn)靈活而嚴(yán)謹(jǐn)?shù)臋?quán)限管理等等。
軟件測試——程序員加入了單元測試了嗎?是不是應(yīng)該寫出完整的測試用例和測試文檔?測試,這是以前根本不當(dāng)回事的,但這次一定不但要加入這個環(huán)節(jié),而且還要建立一套測試流程,不能給客戶的軟件,出現(xiàn)一些注釋,出現(xiàn)一下不該有的錯誤。我對每個模塊建立了詳細(xì)的測試用例,寫了測試跟蹤表,寫了測試報告,并且我和另外一個開發(fā)人員互相測試,也理解了“不能讓自己看自己代碼”,當(dāng)然這次測試都是手工進(jìn)行的,以后要加入自動化測試。
軟件周期管理——能控制住軟件的進(jìn)度嗎?這是做為管理者,做為經(jīng)理應(yīng)該具備的,要能保證控制住軟件開放的進(jìn)度和周期。這次我也充當(dāng)了管理的角色,這也是第一次。
軟件交付——軟件能讓自己滿意嗎?
思考:流程、管理對于一個公司是非常重要的,拿軟件產(chǎn)品來說,流程和管理的規(guī)范應(yīng)能使得軟件的交付更加及時,但是對于剛起步的小公司來說,是一上來就規(guī)范呢?還是先按作坊式發(fā)展?
(由于時間太緊,細(xì)節(jié)沒有列出,將來補(bǔ)上)
2006年3月4日
下一篇:我的創(chuàng)業(yè)日記2(公司愿景)——我們的目標(biāo)