要開發(fā)一個軟件應(yīng)該考慮哪些方面?
軟件是一個系統(tǒng)工程,業(yè)內(nèi)有軟件工程的說法。軟件工程也是各個學(xué)校計(jì)算機(jī)系的必修科目。開發(fā)一個軟件需要考慮哪些方面?我們將引入軟件工程中的一些概念和元素來描述它們。
同時,作為企業(yè)、客戶或個人,在軟件開發(fā)中,不僅要考慮軟件工程,還要考慮相關(guān)資源。這里的資源包括人、預(yù)算、費(fèi)用、時間等等。而這些都包括在內(nèi),這就涉及到項(xiàng)目管理的范圍。
接下來我將從軟件工程和項(xiàng)目管理的角度來描述軟件開發(fā)中需要注意的方面。
從軟件工程的角度來說,軟件開發(fā)包括前期的需求分析、系統(tǒng)設(shè)計(jì)、詳細(xì)設(shè)計(jì),然后就到了大家通常認(rèn)為的編碼實(shí)現(xiàn)階段,然后就是測試和培訓(xùn),上線交付。最后,還有一個不可忽視的階段,就是系統(tǒng)維護(hù)階段。
需求分析階段:訪談、工作坊、問卷等。通常被采用,高級應(yīng)用/業(yè)務(wù)顧問了解來自客戶的需求并確認(rèn)它。初期的需求分析很重要。稍有偏差,就有一失足成千古恨的風(fēng)險。相信大部分程序員朋友都經(jīng)歷過變化,尤其是項(xiàng)目后期。當(dāng)你的代碼經(jīng)過一遍又一遍的測試后,你就有信心幾乎沒有bug了。這時候領(lǐng)導(dǎo)跟你說對不起,改的來了,你做的那塊要改成這個,還有:(改成那個)。當(dāng)然,項(xiàng)目需求收集和分析的前期有很多不確定性,所以我強(qiáng)調(diào)需要有自己的應(yīng)用/業(yè)務(wù)顧問來把關(guān)。當(dāng)然,有些變化是不可避免的。系統(tǒng)設(shè)計(jì):需求分析后,需要進(jìn)行方案設(shè)計(jì)。這時,解決方案架構(gòu)師進(jìn)入現(xiàn)場(高級解決方案架構(gòu)師)。如果說后期編碼實(shí)現(xiàn)很容易的話,如果在系統(tǒng)設(shè)計(jì)階段有一個大牛學(xué)長的話,后面的日子會輕松很多。包括系統(tǒng)的基本處理流程、組織結(jié)構(gòu)、模塊劃分、功能分配、界面設(shè)計(jì)、操作設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和錯誤處理設(shè)計(jì)。有時候需要新技術(shù),需要快速研究新技術(shù)。在今天在技術(shù)蓬勃發(fā)展的年代,有時顧客需求必須使用新技術(shù),可能之前整個團(tuán)隊(duì)都沒有接觸過。這時候建筑師就有必要從整體上檢查一下情況。通常,有技術(shù)天賦的團(tuán)隊(duì)成員會進(jìn)行技術(shù)可行性研究。詳細(xì)設(shè)計(jì):在系統(tǒng)設(shè)計(jì)階段完成大框架結(jié)構(gòu)和技術(shù)方向。確定后,將對每個模塊進(jìn)行詳細(xì)設(shè)計(jì)。一個好的詳細(xì)設(shè)計(jì)文檔包含模塊中所有用例的邏輯處理以及邏輯處理中涉及的算法。一般需要資深程序員來做。這部分文檔的寫作如果一個好的文檔寫好了,后面編碼的同學(xué)就輕松了。編碼實(shí)現(xiàn):如果詳細(xì)設(shè)計(jì)做得好,這個階段會相對容易。但是程序員的基本功還是很苛刻的。還有一點(diǎn)就是一定要做好自己的單元測試。測試訓(xùn)練:這個階段其實(shí)分為兩個小階段。一個是測試,一個是用戶培訓(xùn)。測試包括組裝測試、壓力測試等等,最后是UAT(用戶驗(yàn)收測試)。如果沒有問題,就選個好日子上線。用戶培訓(xùn)非常重要,不可忽視,直接關(guān)系到最終用戶對整個系統(tǒng)的接受程度。一般會先挑選種子用戶進(jìn)行功能培訓(xùn),所有用戶和種子用戶一起進(jìn)行整個軟件的使用培訓(xùn)。線上發(fā)貨:前面的階段都完成了,測試都通過了。上線流暢嗎?呵呵,根據(jù)我的經(jīng)驗(yàn),不一定。上線的時候多多少少都有些蛀蟲。新系統(tǒng)運(yùn)行良好。對于舊系統(tǒng)升級,如果系統(tǒng)相當(dāng)龐大,在國內(nèi)只能在國慶/春節(jié)進(jìn)行。為什么,有7天假期,也就是說,用戶7天不會使用系統(tǒng),如果在這7天內(nèi)出現(xiàn)問題,不會影響用戶s操作。但是如果你能7天內(nèi)不能上線,我對不起,所以我必須回去等待下一個7天假期。維護(hù):it當(dāng)我們上網(wǎng)時,是慶祝的時候了。一般軟件公司上線后都會有慶功宴。慶典結(jié)束后,唐不要忘記軟件系統(tǒng)的維護(hù)。首先,沒有一個系統(tǒng)能保證沒有bug。其次,對于實(shí)際應(yīng)用,對于復(fù)雜系統(tǒng),每天產(chǎn)生的數(shù)據(jù)量是巨大的,對于性能,需要有相關(guān)的監(jiān)控和對應(yīng)。用戶使用一段時間后,會發(fā)現(xiàn)一些問題,產(chǎn)生一些需求。因此,軟件系統(tǒng)的維護(hù)也很重要。
上面說了這么多,都是從軟件工程的角度,還有高級架構(gòu)師,高級顧問,好的詳細(xì)設(shè)計(jì)等等。這些都是需要爭取的資源。如果我們能我贏不了他們。;對不起,項(xiàng)目經(jīng)理必須努力工作。
接下來,從軟件開發(fā)和項(xiàng)目管理的角度來看,需要注意什么?我用PMP系統(tǒng)來描述項(xiàng)目管理。我以前通過了PMP認(rèn)證,覺得PMP系統(tǒng)在整個項(xiàng)目管理過程中也是有效的。PMP涉及項(xiàng)目范圍管理、時間管理、成本管理、質(zhì)量管理、人力資源管理、溝通管理、風(fēng)險管理、采購管理和利益相關(guān)者管理。我將描述對軟件開發(fā)特別重要的幾個環(huán)節(jié)。
時間管理:開發(fā)軟件的時候,一定要有一個時間表,什么時候開始,什么時候結(jié)束。那么這里的日程就顯得尤為重要。它必須在指定的時間送到。成本管理:無論是公司還是今天的公司。客戶或一個獨(dú)立的自然人所擁有的資源和時間是有限的,能夠投入到軟件開發(fā)中的資源也是有限的。如何在給定的資源下完成軟件開發(fā),是對項(xiàng)目經(jīng)理的一個要求。很有可能我上面說的高級顧問、高級架構(gòu)師、項(xiàng)目經(jīng)理根本沒有,或者公司可以我無法提供。這時候就要另想辦法了。風(fēng)險管理:進(jìn)行早期風(fēng)險識別和相應(yīng)的定性定量分析,制定應(yīng)對方案,實(shí)現(xiàn)風(fēng)險控制。實(shí)施整體變更控制:大多數(shù)項(xiàng)目都會發(fā)生變更,軟件開發(fā)也不例外。筆者對此頗有心得。對項(xiàng)目經(jīng)理來說,控制變更也是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。
以上都考慮到了,基本上整個軟件開發(fā)不會有什么大問題。
如需進(jìn)一步溝通,請留言或私信。