供熱信息化過程中對軟件產(chǎn)品質(zhì)量的思考
作為供熱行業(yè)軟件提供商,我們深刻地感受到企業(yè)軟件的需求越來越強(qiáng)烈,信息化越來越普及,軟件已經(jīng)成為企業(yè)運(yùn)營的必備基礎(chǔ)設(shè)施,并和企業(yè)管理不斷融合,成為企業(yè)效益和競爭力提升的重要因素。在企業(yè)級軟件領(lǐng)域,軟件需要滿足企業(yè)的個性化和實(shí)用性需求,就要不斷地和企業(yè)的業(yè)務(wù)相融合,通過軟件來支撐業(yè)務(wù)運(yùn)轉(zhuǎn)并輔助優(yōu)化業(yè)務(wù)流程,因此對于軟件公司,其服務(wù)特性越來越明顯,這其中伴隨著一些咨詢、實(shí)施、定制開發(fā)、服務(wù)外包等服務(wù)內(nèi)容。軟件的質(zhì)量也一直是軟件開發(fā)方、使用方都很關(guān)注的事情,對于使用方,軟件質(zhì)量影響著使用體驗(yàn)和業(yè)務(wù)效率,對于開發(fā)方,軟件質(zhì)量影響著品牌、成本。軟件質(zhì)量該如何來評價,又該如何來提高?作為軟件從業(yè)者,這是我們一直在思考和探尋的問題。
什么是軟件產(chǎn)品質(zhì)量
軟件產(chǎn)品質(zhì)量是指產(chǎn)品能夠讓用戶順利完成指定需求的能力,?對于大多數(shù)人來說,一說到質(zhì)量,就會想到軟件缺陷,而這只是質(zhì)量的一部分,軟件質(zhì)量一般包括以下六個特性:
- 功能性,軟件功能滿足用戶需求的程度。
- 可靠性,軟件的穩(wěn)定性,最好是不要出故障,其次是即使出了故障盡量不要影響主體功能,再次如果影響了主體功能,系統(tǒng)能夠盡快恢復(fù)。
- 易用性,軟件是否好用、好看、好理解、好上手。
- 性能,軟件的響應(yīng)速度,以及能支撐多大的并發(fā)、數(shù)據(jù)量。
- 可維護(hù)性,軟件能否適應(yīng)需求的變化而不斷改進(jìn)、擴(kuò)展。
- 可移植性,軟件能否適應(yīng)環(huán)境的變化,包括硬件環(huán)境、軟件環(huán)境等。
除此之外,產(chǎn)品質(zhì)量特性還有先進(jìn)性、安全性等。軟件質(zhì)量的標(biāo)準(zhǔn)不是絕對的,是有其相對性的,和行業(yè)特點(diǎn)、用戶背景、期望、競爭產(chǎn)品水平都有關(guān)系,不同用戶對軟件的關(guān)注點(diǎn)也不一樣,用戶對軟件質(zhì)量的感知是產(chǎn)品各個方面特性的均衡反映。如何將復(fù)雜的軟件做到高質(zhì)量,這是軟件開發(fā)行業(yè)一直的挑戰(zhàn)和追求。
軟件究竟是什么
軟件從外在看是一些直觀的界面,對于沒有從事過軟件開發(fā)的人來說,軟件也像個黑盒子,里面的一切都是不清楚的,而盒子里面的內(nèi)容決定了軟件的一切表現(xiàn),包括以上那些軟件質(zhì)量特性。軟件究竟是什么?
軟件的內(nèi)在是程序,程序的本質(zhì)是計算機(jī)指令,指令非常嚴(yán)謹(jǐn),因?yàn)橛嬎銠C(jī)是一個純粹地執(zhí)行體,絕對服從命令,因此指令也容不得一點(diǎn)錯誤。軟件功能簡單,程序也相對會比較簡單,但如果當(dāng)軟件功能變得復(fù)雜,程序也開始變得復(fù)雜,并且這種復(fù)雜的遞增并不是簡單的線性增長,其復(fù)雜性是會疊加的。復(fù)雜系統(tǒng)的維護(hù)也會變得越來越復(fù)雜,出問題的概率也相應(yīng)會增加。如果質(zhì)量相同的兩個軟件產(chǎn)品,一個復(fù)雜度是另外一個復(fù)雜度的兩倍,那前者研發(fā)難度將遠(yuǎn)大于后者研發(fā)難度的兩倍。軟件的趨勢是越來越復(fù)雜,因?yàn)樾枰休d的業(yè)務(wù)和適應(yīng)的場景越來越多,性能和體驗(yàn)也要求越來越多。
軟件質(zhì)量如何提高
有一種說法是,軟件質(zhì)量是開發(fā)出來的,不是測試出來的。嚴(yán)謹(jǐn)?shù)能浖_發(fā)過程是軟件質(zhì)量的重要前提,從前期的需求分析、業(yè)務(wù)架構(gòu)設(shè)計、功能設(shè)計、技術(shù)架構(gòu)設(shè)計、開發(fā)設(shè)計,到中期的編碼開發(fā),到后期的測試等,加上中間的各種評審節(jié)點(diǎn),一個功能的實(shí)現(xiàn)需要上十個工序和節(jié)點(diǎn),這些工序的質(zhì)量綜合決定了軟件的質(zhì)量。
這里重點(diǎn)說說設(shè)計環(huán)節(jié),作為開發(fā)的前置環(huán)節(jié),設(shè)計的充分度、清晰度將直接決定了后續(xù)環(huán)節(jié)的質(zhì)量,這個環(huán)節(jié)包括對需求的收集、分析,對產(chǎn)品業(yè)務(wù)的架構(gòu)設(shè)計,對需求場景的梳理明確,對細(xì)分邏輯的梳理明確,對操作流程、UI界面的設(shè)計等等。測試用例也是在這個環(huán)節(jié)開始并行做的,好的測試用例能大大提高測試質(zhì)量。根據(jù)產(chǎn)品設(shè)計方案,再進(jìn)行技術(shù)架構(gòu)設(shè)計、開發(fā)設(shè)計,技術(shù)是對現(xiàn)實(shí)的抽象,好的產(chǎn)品設(shè)計能夠讓技術(shù)設(shè)計也更加清晰,再而讓編碼開發(fā)環(huán)節(jié)也更加順暢,理想情況下,編碼開發(fā)環(huán)節(jié)的時間占比是很小的,應(yīng)該小于整個研發(fā)周期的五分之一。但實(shí)際很多情況軟件開發(fā)過程中的編碼時間占比是遠(yuǎn)超五分之一的,常見原因是設(shè)計不充分,甚至是邊設(shè)計邊開發(fā),邊開發(fā)邊改設(shè)計,其次是編碼質(zhì)量不足。
有一個去超時買東西列購物清單的例子,列購物清單和寫程序有顯著的區(qū)別,如果購物單列得很亂,只不過會降低買東西的速度。但是如果程序?qū)懙煤軄y,實(shí)現(xiàn)最終的目標(biāo)就會尤其困難。為什么呢?因?yàn)橘徫飭问呛唵味绦〉模猛昃涂梢匀拥簟6绦蚴呛軓?fù)雜很龐大的,你可能還需要維護(hù)很多年。所以,同樣是沒有秩序,購物單只會給你造成一點(diǎn)兒小麻煩,程序卻可以給你增添無盡的煩惱。對于一個軟件產(chǎn)品來說,其維護(hù)的周期要遠(yuǎn)大于開發(fā)周期,因此軟件的可維護(hù)性應(yīng)該作為重點(diǎn)來考慮,倉促的設(shè)計、編碼會使其維護(hù)性大大下降,從而導(dǎo)致滾雪球般的維護(hù)負(fù)擔(dān)。
面對現(xiàn)實(shí)需求的復(fù)雜性,軟件行業(yè)不斷出現(xiàn)很多的開發(fā)方法,如UML、架構(gòu)設(shè)計模式、領(lǐng)域驅(qū)動、敏捷開發(fā)、微服務(wù)等等,這些都有助于分解和降低軟件的復(fù)雜性,來提升軟件開發(fā)效率及質(zhì)量。軟件質(zhì)量的提高需要加大對前期設(shè)計的投入,以提高設(shè)計質(zhì)量,其次提高代碼質(zhì)量,讓軟件產(chǎn)品的維護(hù)性得以提高,從而能夠投入更多的精力在軟件其他特性的提升上,最后達(dá)到軟件質(zhì)量整體提高的目的。