軟件項(xiàng)目的過(guò)程診斷與改善已經(jīng)有了很多的有效的參考模型和實(shí)踐方法集,其中,最有影響的是SEI的軟件過(guò)程成熟度模型(SW-CMM/TSP/PSP體系)和敏捷聯(lián)盟提出的敏捷方法集等。這些模型和方法的提出都基于不同的隱喻,比如,SEI把軟件開發(fā)過(guò)程看作類似于硬件產(chǎn)品的設(shè)計(jì)與制造過(guò)程,關(guān)鍵過(guò)程依賴于基于活動(dòng)和度量的有序過(guò)程的管理規(guī)范。CMM的基于活動(dòng)的度量方法和有次序的、基于活動(dòng)的管理規(guī)范與瀑布模型有非常密切的聯(lián)系(先是需求活動(dòng),然后是設(shè)計(jì)活動(dòng),編碼活動(dòng),單元測(cè)試活動(dòng),集成活動(dòng),以及系統(tǒng)接收測(cè)試),過(guò)程形成剛性的制度和規(guī)范穩(wěn)定下來(lái)。因?yàn)镃MM的思想受到瀑布式開發(fā)思想的很大影響,造成許多組織對(duì)CMM的認(rèn)識(shí)停留在瀑布思想上,主要的原因是,以硬件的開發(fā)設(shè)計(jì)過(guò)程來(lái)類比軟件過(guò)程。軟件開發(fā)組織嘗試著更加現(xiàn)代和高效的方法改進(jìn)其項(xiàng)目管理過(guò)程,迭代開發(fā)技術(shù)、軟件產(chǎn)業(yè)實(shí)踐和經(jīng)濟(jì)動(dòng)機(jī)驅(qū)動(dòng)組織采用面向結(jié)果的過(guò)程,重視開發(fā)業(yè)務(wù)案例和原型方案、可用發(fā)布、現(xiàn)場(chǎng)版本的發(fā)布等,這些方法形成敏捷方法的思想?;诿艚莘椒ǖ能浖?xiàng)目過(guò)程管理是不同于傳統(tǒng)過(guò)程管理理念的過(guò)程管理方法,過(guò)程的可重構(gòu)性而非穩(wěn)定性是敏捷過(guò)程管理的核心,存在于各種層次的軟件過(guò)程中,而這些能力在CMM里被認(rèn)為是在級(jí)別成熟度的組織中才需要開始考慮并作為管理的重心。敏捷方法集為以過(guò)程的可重構(gòu)性和自組織性為中心的過(guò)程度量、控制、改進(jìn)提供了豐富的手段與思想。過(guò)程的動(dòng)態(tài)性體現(xiàn)于定義、執(zhí)行、控制過(guò)程,過(guò)程的執(zhí)行是過(guò)程管理的一部分,即過(guò)程的動(dòng)態(tài)自組織性(自適應(yīng))。
以傳統(tǒng)的生產(chǎn)制造項(xiàng)目和工程建設(shè)項(xiàng)目BPR和BPI的方法來(lái)進(jìn)行軟件項(xiàng)目的過(guò)程改進(jìn)是不適合的。各個(gè)敏捷方法集基于各種各樣的隱喻,如極限運(yùn)動(dòng)(XP極限編程)、橄欖球賽(SCRUM)、自適應(yīng)系統(tǒng)(ASD)、集市(Open Source)等,把軟件過(guò)程作為一個(gè)探索過(guò)程,不斷的以經(jīng)濟(jì)原則對(duì)客戶需求和技術(shù)需求進(jìn)行評(píng)判和選擇。而總的來(lái)說(shuō),新提出的軟件項(xiàng)目過(guò)程模型大多與生物進(jìn)化過(guò)程進(jìn)行類比,在生物進(jìn)化過(guò)程的隱喻下把軟件開發(fā)過(guò)程看作一個(gè)智能體成長(zhǎng)的過(guò)程,這個(gè)智能體一般認(rèn)為是一個(gè)軟件產(chǎn)品,或更深刻的認(rèn)為是一個(gè)軟件開發(fā)組織的知識(shí)結(jié)構(gòu),進(jìn)化的動(dòng)力是經(jīng)濟(jì)動(dòng)機(jī)和殘酷的市場(chǎng)選擇。
軟件項(xiàng)目的產(chǎn)品和加工對(duì)象都是“軟”的信息,軟件產(chǎn)品的特點(diǎn)與硬件產(chǎn)品相差太大。事實(shí)上,從某種意義上說(shuō),軟件開發(fā)組織為客戶提供的不是或不只是軟件產(chǎn)品,而是客戶所需要的信息,軟件產(chǎn)品只是為客戶提供信息服務(wù)的自動(dòng)化代理而已。因此,可以為軟件開發(fā)提出另一個(gè)隱喻——信息加工處理過(guò)程,即認(rèn)知過(guò)程。
以信息為產(chǎn)品和加工對(duì)象的軟件生產(chǎn)與一般的硬件生產(chǎn)過(guò)程有根本的不同,軟件過(guò)程是生產(chǎn)制造過(guò)程和信息加工處理過(guò)程(即認(rèn)知過(guò)程)的混合過(guò)程,而且信息加工過(guò)程是軟件過(guò)程中最核心的過(guò)程。以信息加工的觀點(diǎn)來(lái)解釋軟件開發(fā)過(guò)程,認(rèn)為軟件開發(fā)過(guò)程就是信息的接受、編碼、貯存、提取和使用過(guò)程??梢园堰@一過(guò)程概括為由四種成分所組織成的模式,即感知系統(tǒng),記憶系統(tǒng),控制系統(tǒng)和反應(yīng)系統(tǒng)。感知系統(tǒng)接受由環(huán)境提供的信息,即首先把輸入的基本特征抽取出來(lái)加以組合;記憶系統(tǒng)是對(duì)輸入信息的編碼、貯存和提取活動(dòng);控制系統(tǒng)決定目標(biāo)的先后順序,監(jiān)督當(dāng)前目標(biāo)的執(zhí)行;反應(yīng)系統(tǒng)則控制信息的輸出。這個(gè)基于信息處理過(guò)程的開發(fā)過(guò)程并不是按上述順序單方向進(jìn)行的,各種成分之間存在著不同方式的相互作用,以保證對(duì)信息的加工、輸出和反饋,溝通人與環(huán)境之間的聯(lián)系。
在認(rèn)知過(guò)程的隱喻下,軟件項(xiàng)目被認(rèn)為基于一個(gè)建構(gòu)主義的過(guò)程模型,包括了學(xué)習(xí)與創(chuàng)新的行為,學(xué)習(xí)不簡(jiǎn)單是業(yè)務(wù)知識(shí)由外到內(nèi)的轉(zhuǎn)移和傳遞,而是學(xué)習(xí)者(開發(fā)者或是客戶)主動(dòng)地建構(gòu)自己和組織的知識(shí)經(jīng)驗(yàn)的過(guò)程,即通過(guò)新經(jīng)驗(yàn)與原有知識(shí)經(jīng)驗(yàn)的相互作用,來(lái)充實(shí)、豐富和改造自己和組織事實(shí)的知識(shí)經(jīng)驗(yàn)。軟件項(xiàng)目過(guò)程的認(rèn)知過(guò)程參考模型把軟件生產(chǎn)過(guò)程定義為信息的加工處理過(guò)程,軟件過(guò)程能力是一個(gè)認(rèn)知能力層次概念。
客戶的需求,以客戶所習(xí)得的知識(shí)和經(jīng)驗(yàn)為背景,是以客戶的概念、符號(hào)和語(yǔ)言表示的信息,軟件開發(fā)組織中的軟件分析人員在獲得客戶需求表達(dá)之后以自己的知識(shí)和經(jīng)驗(yàn)為基礎(chǔ),開始學(xué)習(xí)過(guò)程,在學(xué)習(xí)客戶需求、理解客戶的概念、符號(hào)和語(yǔ)言的成果上,構(gòu)建自己的信息系統(tǒng)和知識(shí)結(jié)構(gòu),進(jìn)而創(chuàng)造出新的以軟件專業(yè)的概念、符號(hào)和語(yǔ)言表示的信息產(chǎn)品,即需求確認(rèn)文檔和系統(tǒng)分析設(shè)計(jì)報(bào)告。這些信息適宜于在軟件開發(fā)組織內(nèi)部環(huán)境中開發(fā)者之間的流動(dòng)和創(chuàng)新,程序員的責(zé)任是把這些信息加工成計(jì)算機(jī)可以理解的概念、符號(hào)和語(yǔ)言,由計(jì)算機(jī)系統(tǒng)解釋和編譯。計(jì)算機(jī)系統(tǒng)是開發(fā)者和客戶之間的智能媒介,軟件的指令控制計(jì)算機(jī)系統(tǒng)把客戶需要的信息轉(zhuǎn)化為客戶可以理解的概念、圖像、符號(hào)和語(yǔ)言表示,傳達(dá)給客戶,實(shí)現(xiàn)最終的信息產(chǎn)品。而這還不是整個(gè)過(guò)程的結(jié)束,信息系統(tǒng)必須接受使用者的反饋信息進(jìn)行持續(xù)的運(yùn)行,所以,客戶必須通過(guò)理解和應(yīng)用軟件的輸入輸出信息構(gòu)建新的知識(shí)結(jié)構(gòu),反饋到信息加工過(guò)程,使軟件組織和軟件產(chǎn)品進(jìn)行新的學(xué)習(xí)、改變和創(chuàng)新,使軟件組織的知識(shí)結(jié)構(gòu)和軟件產(chǎn)品的功能結(jié)構(gòu)對(duì)反饋信息做出適應(yīng)性的變化。
在整個(gè)信息加工處理過(guò)程中,有三個(gè)主要的信息處理器:客戶、軟件開發(fā)者和計(jì)算機(jī)。軟件是在客戶→開發(fā)者→計(jì)算機(jī)→客戶的信息處理循環(huán)過(guò)程中構(gòu)建而成,循環(huán)過(guò)程中,信息的形態(tài)不斷發(fā)生改變:客戶的業(yè)務(wù)術(shù)語(yǔ)表示→軟件開發(fā)專業(yè)術(shù)語(yǔ)表示→編程語(yǔ)言→計(jì)算機(jī)交互表示。
我傾向于把軟件過(guò)程認(rèn)為是一個(gè)存在于包括了客戶、開發(fā)者和計(jì)算機(jī)系統(tǒng)三個(gè)主體在內(nèi)的完整系統(tǒng)中的知識(shí)建構(gòu)過(guò)程,而不是一個(gè)僅僅局限于軟件開發(fā)組織內(nèi)部的設(shè)計(jì)制造過(guò)程。各個(gè)主體都是一個(gè)智能體,必須對(duì)另外兩個(gè)主體的信息表示進(jìn)行學(xué)習(xí)和加工處理,進(jìn)而建立自己的知識(shí)結(jié)構(gòu),而軟件產(chǎn)品是聯(lián)結(jié)這幾個(gè)主體的媒介。因此,軟件設(shè)計(jì)開發(fā)不是在客戶需求形成文檔時(shí)完成的,不是在編譯成機(jī)器語(yǔ)言時(shí)完成的,也不能說(shuō)是在交付給用戶使用時(shí)完成的??蛻舻哪繕?biāo)是信息而非軟件,軟件是在這個(gè)知識(shí)循環(huán)中為了不斷向客戶提供其所需信息而構(gòu)建的信息加工結(jié)構(gòu)。
把軟件開發(fā)過(guò)程作為一個(gè)信息加工過(guò)程,可以從人類認(rèn)知過(guò)程的信息加工理論中得到很多啟發(fā)。
軟件開發(fā)過(guò)程的SW-PASS模型,將軟件生產(chǎn)的過(guò)程表示為由計(jì)劃過(guò)程(Planning)、注意力過(guò)程(Attention)、同時(shí)性加工過(guò)程(Simultaneous processing)和繼時(shí)性加工過(guò)程(Successive processing)核心過(guò)程構(gòu)成的有機(jī)整體。
注意力過(guò)程是所有過(guò)程的基礎(chǔ),是最低層次和最基本的過(guò)程,使敏捷過(guò)程實(shí)現(xiàn)快速的市場(chǎng)反應(yīng)和合理的資源配置;加工過(guò)程處于中間層次,同時(shí)性過(guò)程和繼時(shí)性過(guò)程實(shí)現(xiàn)業(yè)務(wù)需求向軟件產(chǎn)品的編碼過(guò)程;計(jì)劃過(guò)程是主動(dòng)適應(yīng)市場(chǎng)變化的源動(dòng)力,是系統(tǒng)中級(jí)的層次。三個(gè)層次4個(gè)過(guò)程以信息的加工處理為中心形成了有機(jī)整體。
首先,基于認(rèn)知過(guò)程模型的軟件過(guò)程基礎(chǔ)是注意過(guò)程,強(qiáng)調(diào)的是注意的選擇性和反應(yīng)的速度。軟件過(guò)程是以商業(yè)目標(biāo)驅(qū)動(dòng)的,這一點(diǎn)在新的軟件工程方法中尤其突出。但事實(shí)上,目前軟件過(guò)程中對(duì)業(yè)務(wù)需求和商業(yè)機(jī)會(huì)的適應(yīng)很難令人滿意。軟件開發(fā)者和客戶都為“什么是需求”而困惑,原因是需求調(diào)查與分析的范圍過(guò)廣而難有焦點(diǎn);因?yàn)閷?duì)每一個(gè)需求特性沒有建立快速的反饋機(jī)制,對(duì)于過(guò)程的敏捷性得以實(shí)現(xiàn)的基礎(chǔ),軟件組織在以往過(guò)程管理中忽視了如何把注意力集中于一個(gè)業(yè)務(wù)需求的焦點(diǎn)而執(zhí)行快速的應(yīng)對(duì)流程。注意過(guò)程在CMM和敏捷方法中都有很多體現(xiàn),如CMM中的SSM、SPTO、OPF、DP、TCM等,而在敏捷方法中注意力更是其快速、適應(yīng)和客戶滿意度的競(jìng)爭(zhēng)力源泉。
注意是由商業(yè)目標(biāo)驅(qū)動(dòng)的,包括注意的選擇和反應(yīng)的速度。而注意的選擇性在軟件開發(fā)組織中意味著開發(fā)者需要暫時(shí)的放棄,XP方法中的YAGNI原則和測(cè)試在先方法是注意選擇性的例子。在軟件開發(fā)過(guò)程中的注意選擇主要應(yīng)該是理性的。XP的計(jì)劃博弈是在客戶與開發(fā)者共同參與的博弈過(guò)程中對(duì)開發(fā)焦點(diǎn)進(jìn)行的選擇。FDD把特性放在開發(fā)流程的首要位置,而由特性來(lái)驅(qū)動(dòng)后序的軟件開發(fā),也是為了使開發(fā)工作能夠找到穩(wěn)定的焦點(diǎn)。為了提高反應(yīng)的速度,敏捷方法中有很多的原則,如:小版本,測(cè)試在先,40 小時(shí)工作制,簡(jiǎn)單設(shè)計(jì),迭代方法的應(yīng)用等。目的在于在一定時(shí)間內(nèi)把開發(fā)工作集中于盡量小的目標(biāo)從而得到快速的交付物。
在焦點(diǎn)集中快速反應(yīng)的注意機(jī)制基礎(chǔ)上,存在兩種信息加工過(guò)程:同時(shí)性加工過(guò)程和繼時(shí)性加工過(guò)程。傳統(tǒng)的過(guò)程管理理論過(guò)于強(qiáng)調(diào)過(guò)程的順序性的特點(diǎn),在繼時(shí)性加工過(guò)程上的分析很多,如CMM的PR和SQA、SQM等,而在同時(shí)性加工能力的提高上則范圍過(guò)窄,如SCM、ISM、SPE。信息加工的主要功能是接受、加工、維護(hù)輸入的信息,同時(shí)性加工進(jìn)行同步性的整合,如以體系結(jié)構(gòu)為中心的軟件過(guò)程和持續(xù)集成、設(shè)計(jì)模式,繼時(shí)性加工進(jìn)行信息的序列組織,如瀑布模型、迭代方法。過(guò)于強(qiáng)調(diào)過(guò)程的順序性而忽視同時(shí)性、并發(fā)性,造成在很多軟件組織中,一兩個(gè)人組成的項(xiàng)目團(tuán)隊(duì)可以快速、高效的完成優(yōu)秀的軟件產(chǎn)品,而當(dāng)成員增加時(shí),效率就大大下降,軟件功能不能使客戶滿意,這不能簡(jiǎn)單地解釋為溝通協(xié)調(diào)問(wèn)題,更多的是過(guò)程的同時(shí)性加工能力太差。分析模式和設(shè)計(jì)模式概念的提出對(duì)過(guò)程的同時(shí)性加工能力和繼時(shí)性加工能力提高有極大的意義,可以解決以體系結(jié)構(gòu)為中心的開發(fā)過(guò)程的結(jié)構(gòu)重用問(wèn)題,大大提高了體系結(jié)構(gòu)的清晰性和成熟性。
為了提高同時(shí)性加工的速度。XP方法中提出了隱喻方法,試圖在模式和體系結(jié)構(gòu)之外找到一個(gè)溝通成本更少,內(nèi)涵更豐富的原型,提高開發(fā)的同時(shí)性加工能力,但實(shí)踐證明,隱喻是XP中很不成功的一個(gè)部分,也說(shuō)明同時(shí)性加工過(guò)程的問(wèn)題比想象中更難解決。XP的另一些方法——持續(xù)集成、重構(gòu)是非常成功的同時(shí)性加工過(guò)程,持續(xù)集成使組織在任何時(shí)候都能提供一個(gè)可交付的系統(tǒng)全貌,頻繁地進(jìn)行功能的全面檢驗(yàn)。而重構(gòu)是為了打破原有迭代和模塊開發(fā)造成的混亂狀況,革命性地對(duì)系統(tǒng)的內(nèi)部結(jié)構(gòu)進(jìn)行新的模式識(shí)別和模式創(chuàng)新。
計(jì)劃過(guò)程是軟件過(guò)程中的層次,為組織提供了分析活動(dòng)、解決問(wèn)題、評(píng)價(jià)成果的能力。計(jì)劃過(guò)程是CMM的強(qiáng)項(xiàng),如SPP、RM、TP、IC、QPM、PCM等,也是PMBOK很重視的方面。敏捷方法中不強(qiáng)調(diào)計(jì)劃,但不是不強(qiáng)調(diào)計(jì)劃過(guò)程,如XP中的小版本、計(jì)劃博弈、結(jié)對(duì)編程、測(cè)試在先等都是很強(qiáng)的計(jì)劃過(guò)程。
注意、信息加工和計(jì)劃過(guò)程共同作用,相互影響。
PASS模型的目的是為給組織提供合適的軟件開發(fā)環(huán)境,有利于軟件組織的發(fā)展,有利于挖掘缺陷所在,并幫助組織克服這些缺陷。PASS不只用認(rèn)知過(guò)程的角度來(lái)評(píng)價(jià)和鑒別各種類別的軟件組織,更便于提供一個(gè)對(duì)組織過(guò)程的缺陷進(jìn)行診斷的框架。
PASS模型的三個(gè)層次對(duì)于過(guò)程的診斷與改善是很重要的。一般的BPR理論以流程的核心程度、具體程度來(lái)劃分層次。CMM以能力成熟的時(shí)間階段性來(lái)劃分層次,但過(guò)程自身結(jié)構(gòu)的層次性以PASS來(lái)表示非常清晰。注意過(guò)程是基礎(chǔ)層次,是組織對(duì)變化的適應(yīng)、反應(yīng)和反饋的基礎(chǔ)過(guò)程。這一過(guò)程的敏捷性,決定了組織在市場(chǎng)應(yīng)變能力、組織運(yùn)行效率和軟件產(chǎn)品服務(wù)質(zhì)量的基本能力,以往以瀑布模型為主要參考過(guò)程的大多是因?yàn)樵谶@一層次上敏捷性太低而造成計(jì)劃過(guò)程的失靈和加工過(guò)程的低效。
但過(guò)分強(qiáng)調(diào)注意過(guò)程也產(chǎn)生問(wèn)題。目前很多組織應(yīng)用敏捷方法時(shí)難以成功的一個(gè)原因是過(guò)分強(qiáng)調(diào)適應(yīng)、反饋,忽視了計(jì)劃和加工能力的提高,把開發(fā)過(guò)程看作一個(gè)探索過(guò)程,把注意力只集中于客戶需求的優(yōu)先級(jí),這雖然可以抓住一些市場(chǎng)機(jī)遇,或快速發(fā)現(xiàn)開發(fā)中的質(zhì)量問(wèn)題,但過(guò)程缺少全局和長(zhǎng)遠(yuǎn)的建構(gòu)過(guò)程指導(dǎo),造成開發(fā)代價(jià)過(guò)高。
不同加工過(guò)程使軟件開發(fā)過(guò)程形成不同的視圖。從繼時(shí)性加工角度,開發(fā)過(guò)程是迭代和增量的,從同時(shí)性加工角度,開發(fā)過(guò)程是演進(jìn)的。把加工過(guò)程分為同時(shí)性加工過(guò)程和繼時(shí)性加工過(guò)程使原來(lái)混淆的過(guò)程性質(zhì)變得清晰,組織可以從而找到軟件過(guò)程的缺陷而進(jìn)行補(bǔ)救。
要保持同時(shí)性加工過(guò)程與繼時(shí)性加工過(guò)程的平衡。重視繼時(shí)性加工,如FDD,很難保證所有工作的整體性和同步性,常會(huì)造成一個(gè)需求的代碼和測(cè)試已經(jīng)完成大部分時(shí)才發(fā)現(xiàn)與整個(gè)體系結(jié)構(gòu)或另外一些功能的沖突,或造成過(guò)長(zhǎng)的接受測(cè)試反饋周期。過(guò)于強(qiáng)調(diào)同時(shí)性,容易形成復(fù)雜的計(jì)劃,混亂的標(biāo)準(zhǔn)。如目前很多基于WEB的開放代碼GNU開發(fā),使系統(tǒng)混合了太多的標(biāo)準(zhǔn)和版本,影響到非專業(yè)用戶的應(yīng)用推廣。所以合理的方法組合是必要的,如集成測(cè)試+單元測(cè)試,結(jié)對(duì)編程+重構(gòu)。
計(jì)劃過(guò)程是級(jí)也是對(duì)其他過(guò)程影響的,忽視全局的嚴(yán)格的計(jì)劃,一味追求市場(chǎng)需求的機(jī)會(huì)和挑戰(zhàn),不是一個(gè)成熟的開發(fā)過(guò)程。計(jì)劃過(guò)程是決策中理性的方面,但即便CMM也有計(jì)劃層次上的一些弱點(diǎn),如需求適應(yīng)的敏捷性容易低效,一個(gè)原因是把需求變化的管理放在配置管理和需求管理的內(nèi)容中,而沒有把關(guān)于需求適應(yīng)的決策過(guò)程融入軟件項(xiàng)目的全過(guò)程中,敏捷方法不強(qiáng)調(diào)計(jì)劃,但理性決策更多的滲透到注意過(guò)程和加工過(guò)程,使敏捷方法具備其競(jìng)爭(zhēng)力。
以傳統(tǒng)的生產(chǎn)制造項(xiàng)目和工程建設(shè)項(xiàng)目BPR和BPI的方法來(lái)進(jìn)行軟件項(xiàng)目的過(guò)程改進(jìn)是不適合的。各個(gè)敏捷方法集基于各種各樣的隱喻,如極限運(yùn)動(dòng)(XP極限編程)、橄欖球賽(SCRUM)、自適應(yīng)系統(tǒng)(ASD)、集市(Open Source)等,把軟件過(guò)程作為一個(gè)探索過(guò)程,不斷的以經(jīng)濟(jì)原則對(duì)客戶需求和技術(shù)需求進(jìn)行評(píng)判和選擇。而總的來(lái)說(shuō),新提出的軟件項(xiàng)目過(guò)程模型大多與生物進(jìn)化過(guò)程進(jìn)行類比,在生物進(jìn)化過(guò)程的隱喻下把軟件開發(fā)過(guò)程看作一個(gè)智能體成長(zhǎng)的過(guò)程,這個(gè)智能體一般認(rèn)為是一個(gè)軟件產(chǎn)品,或更深刻的認(rèn)為是一個(gè)軟件開發(fā)組織的知識(shí)結(jié)構(gòu),進(jìn)化的動(dòng)力是經(jīng)濟(jì)動(dòng)機(jī)和殘酷的市場(chǎng)選擇。
軟件項(xiàng)目的產(chǎn)品和加工對(duì)象都是“軟”的信息,軟件產(chǎn)品的特點(diǎn)與硬件產(chǎn)品相差太大。事實(shí)上,從某種意義上說(shuō),軟件開發(fā)組織為客戶提供的不是或不只是軟件產(chǎn)品,而是客戶所需要的信息,軟件產(chǎn)品只是為客戶提供信息服務(wù)的自動(dòng)化代理而已。因此,可以為軟件開發(fā)提出另一個(gè)隱喻——信息加工處理過(guò)程,即認(rèn)知過(guò)程。
以信息為產(chǎn)品和加工對(duì)象的軟件生產(chǎn)與一般的硬件生產(chǎn)過(guò)程有根本的不同,軟件過(guò)程是生產(chǎn)制造過(guò)程和信息加工處理過(guò)程(即認(rèn)知過(guò)程)的混合過(guò)程,而且信息加工過(guò)程是軟件過(guò)程中最核心的過(guò)程。以信息加工的觀點(diǎn)來(lái)解釋軟件開發(fā)過(guò)程,認(rèn)為軟件開發(fā)過(guò)程就是信息的接受、編碼、貯存、提取和使用過(guò)程??梢园堰@一過(guò)程概括為由四種成分所組織成的模式,即感知系統(tǒng),記憶系統(tǒng),控制系統(tǒng)和反應(yīng)系統(tǒng)。感知系統(tǒng)接受由環(huán)境提供的信息,即首先把輸入的基本特征抽取出來(lái)加以組合;記憶系統(tǒng)是對(duì)輸入信息的編碼、貯存和提取活動(dòng);控制系統(tǒng)決定目標(biāo)的先后順序,監(jiān)督當(dāng)前目標(biāo)的執(zhí)行;反應(yīng)系統(tǒng)則控制信息的輸出。這個(gè)基于信息處理過(guò)程的開發(fā)過(guò)程并不是按上述順序單方向進(jìn)行的,各種成分之間存在著不同方式的相互作用,以保證對(duì)信息的加工、輸出和反饋,溝通人與環(huán)境之間的聯(lián)系。
在認(rèn)知過(guò)程的隱喻下,軟件項(xiàng)目被認(rèn)為基于一個(gè)建構(gòu)主義的過(guò)程模型,包括了學(xué)習(xí)與創(chuàng)新的行為,學(xué)習(xí)不簡(jiǎn)單是業(yè)務(wù)知識(shí)由外到內(nèi)的轉(zhuǎn)移和傳遞,而是學(xué)習(xí)者(開發(fā)者或是客戶)主動(dòng)地建構(gòu)自己和組織的知識(shí)經(jīng)驗(yàn)的過(guò)程,即通過(guò)新經(jīng)驗(yàn)與原有知識(shí)經(jīng)驗(yàn)的相互作用,來(lái)充實(shí)、豐富和改造自己和組織事實(shí)的知識(shí)經(jīng)驗(yàn)。軟件項(xiàng)目過(guò)程的認(rèn)知過(guò)程參考模型把軟件生產(chǎn)過(guò)程定義為信息的加工處理過(guò)程,軟件過(guò)程能力是一個(gè)認(rèn)知能力層次概念。
客戶的需求,以客戶所習(xí)得的知識(shí)和經(jīng)驗(yàn)為背景,是以客戶的概念、符號(hào)和語(yǔ)言表示的信息,軟件開發(fā)組織中的軟件分析人員在獲得客戶需求表達(dá)之后以自己的知識(shí)和經(jīng)驗(yàn)為基礎(chǔ),開始學(xué)習(xí)過(guò)程,在學(xué)習(xí)客戶需求、理解客戶的概念、符號(hào)和語(yǔ)言的成果上,構(gòu)建自己的信息系統(tǒng)和知識(shí)結(jié)構(gòu),進(jìn)而創(chuàng)造出新的以軟件專業(yè)的概念、符號(hào)和語(yǔ)言表示的信息產(chǎn)品,即需求確認(rèn)文檔和系統(tǒng)分析設(shè)計(jì)報(bào)告。這些信息適宜于在軟件開發(fā)組織內(nèi)部環(huán)境中開發(fā)者之間的流動(dòng)和創(chuàng)新,程序員的責(zé)任是把這些信息加工成計(jì)算機(jī)可以理解的概念、符號(hào)和語(yǔ)言,由計(jì)算機(jī)系統(tǒng)解釋和編譯。計(jì)算機(jī)系統(tǒng)是開發(fā)者和客戶之間的智能媒介,軟件的指令控制計(jì)算機(jī)系統(tǒng)把客戶需要的信息轉(zhuǎn)化為客戶可以理解的概念、圖像、符號(hào)和語(yǔ)言表示,傳達(dá)給客戶,實(shí)現(xiàn)最終的信息產(chǎn)品。而這還不是整個(gè)過(guò)程的結(jié)束,信息系統(tǒng)必須接受使用者的反饋信息進(jìn)行持續(xù)的運(yùn)行,所以,客戶必須通過(guò)理解和應(yīng)用軟件的輸入輸出信息構(gòu)建新的知識(shí)結(jié)構(gòu),反饋到信息加工過(guò)程,使軟件組織和軟件產(chǎn)品進(jìn)行新的學(xué)習(xí)、改變和創(chuàng)新,使軟件組織的知識(shí)結(jié)構(gòu)和軟件產(chǎn)品的功能結(jié)構(gòu)對(duì)反饋信息做出適應(yīng)性的變化。
在整個(gè)信息加工處理過(guò)程中,有三個(gè)主要的信息處理器:客戶、軟件開發(fā)者和計(jì)算機(jī)。軟件是在客戶→開發(fā)者→計(jì)算機(jī)→客戶的信息處理循環(huán)過(guò)程中構(gòu)建而成,循環(huán)過(guò)程中,信息的形態(tài)不斷發(fā)生改變:客戶的業(yè)務(wù)術(shù)語(yǔ)表示→軟件開發(fā)專業(yè)術(shù)語(yǔ)表示→編程語(yǔ)言→計(jì)算機(jī)交互表示。
我傾向于把軟件過(guò)程認(rèn)為是一個(gè)存在于包括了客戶、開發(fā)者和計(jì)算機(jī)系統(tǒng)三個(gè)主體在內(nèi)的完整系統(tǒng)中的知識(shí)建構(gòu)過(guò)程,而不是一個(gè)僅僅局限于軟件開發(fā)組織內(nèi)部的設(shè)計(jì)制造過(guò)程。各個(gè)主體都是一個(gè)智能體,必須對(duì)另外兩個(gè)主體的信息表示進(jìn)行學(xué)習(xí)和加工處理,進(jìn)而建立自己的知識(shí)結(jié)構(gòu),而軟件產(chǎn)品是聯(lián)結(jié)這幾個(gè)主體的媒介。因此,軟件設(shè)計(jì)開發(fā)不是在客戶需求形成文檔時(shí)完成的,不是在編譯成機(jī)器語(yǔ)言時(shí)完成的,也不能說(shuō)是在交付給用戶使用時(shí)完成的??蛻舻哪繕?biāo)是信息而非軟件,軟件是在這個(gè)知識(shí)循環(huán)中為了不斷向客戶提供其所需信息而構(gòu)建的信息加工結(jié)構(gòu)。
把軟件開發(fā)過(guò)程作為一個(gè)信息加工過(guò)程,可以從人類認(rèn)知過(guò)程的信息加工理論中得到很多啟發(fā)。
軟件開發(fā)過(guò)程的SW-PASS模型,將軟件生產(chǎn)的過(guò)程表示為由計(jì)劃過(guò)程(Planning)、注意力過(guò)程(Attention)、同時(shí)性加工過(guò)程(Simultaneous processing)和繼時(shí)性加工過(guò)程(Successive processing)核心過(guò)程構(gòu)成的有機(jī)整體。
注意力過(guò)程是所有過(guò)程的基礎(chǔ),是最低層次和最基本的過(guò)程,使敏捷過(guò)程實(shí)現(xiàn)快速的市場(chǎng)反應(yīng)和合理的資源配置;加工過(guò)程處于中間層次,同時(shí)性過(guò)程和繼時(shí)性過(guò)程實(shí)現(xiàn)業(yè)務(wù)需求向軟件產(chǎn)品的編碼過(guò)程;計(jì)劃過(guò)程是主動(dòng)適應(yīng)市場(chǎng)變化的源動(dòng)力,是系統(tǒng)中級(jí)的層次。三個(gè)層次4個(gè)過(guò)程以信息的加工處理為中心形成了有機(jī)整體。
首先,基于認(rèn)知過(guò)程模型的軟件過(guò)程基礎(chǔ)是注意過(guò)程,強(qiáng)調(diào)的是注意的選擇性和反應(yīng)的速度。軟件過(guò)程是以商業(yè)目標(biāo)驅(qū)動(dòng)的,這一點(diǎn)在新的軟件工程方法中尤其突出。但事實(shí)上,目前軟件過(guò)程中對(duì)業(yè)務(wù)需求和商業(yè)機(jī)會(huì)的適應(yīng)很難令人滿意。軟件開發(fā)者和客戶都為“什么是需求”而困惑,原因是需求調(diào)查與分析的范圍過(guò)廣而難有焦點(diǎn);因?yàn)閷?duì)每一個(gè)需求特性沒有建立快速的反饋機(jī)制,對(duì)于過(guò)程的敏捷性得以實(shí)現(xiàn)的基礎(chǔ),軟件組織在以往過(guò)程管理中忽視了如何把注意力集中于一個(gè)業(yè)務(wù)需求的焦點(diǎn)而執(zhí)行快速的應(yīng)對(duì)流程。注意過(guò)程在CMM和敏捷方法中都有很多體現(xiàn),如CMM中的SSM、SPTO、OPF、DP、TCM等,而在敏捷方法中注意力更是其快速、適應(yīng)和客戶滿意度的競(jìng)爭(zhēng)力源泉。
注意是由商業(yè)目標(biāo)驅(qū)動(dòng)的,包括注意的選擇和反應(yīng)的速度。而注意的選擇性在軟件開發(fā)組織中意味著開發(fā)者需要暫時(shí)的放棄,XP方法中的YAGNI原則和測(cè)試在先方法是注意選擇性的例子。在軟件開發(fā)過(guò)程中的注意選擇主要應(yīng)該是理性的。XP的計(jì)劃博弈是在客戶與開發(fā)者共同參與的博弈過(guò)程中對(duì)開發(fā)焦點(diǎn)進(jìn)行的選擇。FDD把特性放在開發(fā)流程的首要位置,而由特性來(lái)驅(qū)動(dòng)后序的軟件開發(fā),也是為了使開發(fā)工作能夠找到穩(wěn)定的焦點(diǎn)。為了提高反應(yīng)的速度,敏捷方法中有很多的原則,如:小版本,測(cè)試在先,40 小時(shí)工作制,簡(jiǎn)單設(shè)計(jì),迭代方法的應(yīng)用等。目的在于在一定時(shí)間內(nèi)把開發(fā)工作集中于盡量小的目標(biāo)從而得到快速的交付物。
在焦點(diǎn)集中快速反應(yīng)的注意機(jī)制基礎(chǔ)上,存在兩種信息加工過(guò)程:同時(shí)性加工過(guò)程和繼時(shí)性加工過(guò)程。傳統(tǒng)的過(guò)程管理理論過(guò)于強(qiáng)調(diào)過(guò)程的順序性的特點(diǎn),在繼時(shí)性加工過(guò)程上的分析很多,如CMM的PR和SQA、SQM等,而在同時(shí)性加工能力的提高上則范圍過(guò)窄,如SCM、ISM、SPE。信息加工的主要功能是接受、加工、維護(hù)輸入的信息,同時(shí)性加工進(jìn)行同步性的整合,如以體系結(jié)構(gòu)為中心的軟件過(guò)程和持續(xù)集成、設(shè)計(jì)模式,繼時(shí)性加工進(jìn)行信息的序列組織,如瀑布模型、迭代方法。過(guò)于強(qiáng)調(diào)過(guò)程的順序性而忽視同時(shí)性、并發(fā)性,造成在很多軟件組織中,一兩個(gè)人組成的項(xiàng)目團(tuán)隊(duì)可以快速、高效的完成優(yōu)秀的軟件產(chǎn)品,而當(dāng)成員增加時(shí),效率就大大下降,軟件功能不能使客戶滿意,這不能簡(jiǎn)單地解釋為溝通協(xié)調(diào)問(wèn)題,更多的是過(guò)程的同時(shí)性加工能力太差。分析模式和設(shè)計(jì)模式概念的提出對(duì)過(guò)程的同時(shí)性加工能力和繼時(shí)性加工能力提高有極大的意義,可以解決以體系結(jié)構(gòu)為中心的開發(fā)過(guò)程的結(jié)構(gòu)重用問(wèn)題,大大提高了體系結(jié)構(gòu)的清晰性和成熟性。
為了提高同時(shí)性加工的速度。XP方法中提出了隱喻方法,試圖在模式和體系結(jié)構(gòu)之外找到一個(gè)溝通成本更少,內(nèi)涵更豐富的原型,提高開發(fā)的同時(shí)性加工能力,但實(shí)踐證明,隱喻是XP中很不成功的一個(gè)部分,也說(shuō)明同時(shí)性加工過(guò)程的問(wèn)題比想象中更難解決。XP的另一些方法——持續(xù)集成、重構(gòu)是非常成功的同時(shí)性加工過(guò)程,持續(xù)集成使組織在任何時(shí)候都能提供一個(gè)可交付的系統(tǒng)全貌,頻繁地進(jìn)行功能的全面檢驗(yàn)。而重構(gòu)是為了打破原有迭代和模塊開發(fā)造成的混亂狀況,革命性地對(duì)系統(tǒng)的內(nèi)部結(jié)構(gòu)進(jìn)行新的模式識(shí)別和模式創(chuàng)新。
計(jì)劃過(guò)程是軟件過(guò)程中的層次,為組織提供了分析活動(dòng)、解決問(wèn)題、評(píng)價(jià)成果的能力。計(jì)劃過(guò)程是CMM的強(qiáng)項(xiàng),如SPP、RM、TP、IC、QPM、PCM等,也是PMBOK很重視的方面。敏捷方法中不強(qiáng)調(diào)計(jì)劃,但不是不強(qiáng)調(diào)計(jì)劃過(guò)程,如XP中的小版本、計(jì)劃博弈、結(jié)對(duì)編程、測(cè)試在先等都是很強(qiáng)的計(jì)劃過(guò)程。
注意、信息加工和計(jì)劃過(guò)程共同作用,相互影響。
PASS模型的目的是為給組織提供合適的軟件開發(fā)環(huán)境,有利于軟件組織的發(fā)展,有利于挖掘缺陷所在,并幫助組織克服這些缺陷。PASS不只用認(rèn)知過(guò)程的角度來(lái)評(píng)價(jià)和鑒別各種類別的軟件組織,更便于提供一個(gè)對(duì)組織過(guò)程的缺陷進(jìn)行診斷的框架。
PASS模型的三個(gè)層次對(duì)于過(guò)程的診斷與改善是很重要的。一般的BPR理論以流程的核心程度、具體程度來(lái)劃分層次。CMM以能力成熟的時(shí)間階段性來(lái)劃分層次,但過(guò)程自身結(jié)構(gòu)的層次性以PASS來(lái)表示非常清晰。注意過(guò)程是基礎(chǔ)層次,是組織對(duì)變化的適應(yīng)、反應(yīng)和反饋的基礎(chǔ)過(guò)程。這一過(guò)程的敏捷性,決定了組織在市場(chǎng)應(yīng)變能力、組織運(yùn)行效率和軟件產(chǎn)品服務(wù)質(zhì)量的基本能力,以往以瀑布模型為主要參考過(guò)程的大多是因?yàn)樵谶@一層次上敏捷性太低而造成計(jì)劃過(guò)程的失靈和加工過(guò)程的低效。
但過(guò)分強(qiáng)調(diào)注意過(guò)程也產(chǎn)生問(wèn)題。目前很多組織應(yīng)用敏捷方法時(shí)難以成功的一個(gè)原因是過(guò)分強(qiáng)調(diào)適應(yīng)、反饋,忽視了計(jì)劃和加工能力的提高,把開發(fā)過(guò)程看作一個(gè)探索過(guò)程,把注意力只集中于客戶需求的優(yōu)先級(jí),這雖然可以抓住一些市場(chǎng)機(jī)遇,或快速發(fā)現(xiàn)開發(fā)中的質(zhì)量問(wèn)題,但過(guò)程缺少全局和長(zhǎng)遠(yuǎn)的建構(gòu)過(guò)程指導(dǎo),造成開發(fā)代價(jià)過(guò)高。
不同加工過(guò)程使軟件開發(fā)過(guò)程形成不同的視圖。從繼時(shí)性加工角度,開發(fā)過(guò)程是迭代和增量的,從同時(shí)性加工角度,開發(fā)過(guò)程是演進(jìn)的。把加工過(guò)程分為同時(shí)性加工過(guò)程和繼時(shí)性加工過(guò)程使原來(lái)混淆的過(guò)程性質(zhì)變得清晰,組織可以從而找到軟件過(guò)程的缺陷而進(jìn)行補(bǔ)救。
要保持同時(shí)性加工過(guò)程與繼時(shí)性加工過(guò)程的平衡。重視繼時(shí)性加工,如FDD,很難保證所有工作的整體性和同步性,常會(huì)造成一個(gè)需求的代碼和測(cè)試已經(jīng)完成大部分時(shí)才發(fā)現(xiàn)與整個(gè)體系結(jié)構(gòu)或另外一些功能的沖突,或造成過(guò)長(zhǎng)的接受測(cè)試反饋周期。過(guò)于強(qiáng)調(diào)同時(shí)性,容易形成復(fù)雜的計(jì)劃,混亂的標(biāo)準(zhǔn)。如目前很多基于WEB的開放代碼GNU開發(fā),使系統(tǒng)混合了太多的標(biāo)準(zhǔn)和版本,影響到非專業(yè)用戶的應(yīng)用推廣。所以合理的方法組合是必要的,如集成測(cè)試+單元測(cè)試,結(jié)對(duì)編程+重構(gòu)。
計(jì)劃過(guò)程是級(jí)也是對(duì)其他過(guò)程影響的,忽視全局的嚴(yán)格的計(jì)劃,一味追求市場(chǎng)需求的機(jī)會(huì)和挑戰(zhàn),不是一個(gè)成熟的開發(fā)過(guò)程。計(jì)劃過(guò)程是決策中理性的方面,但即便CMM也有計(jì)劃層次上的一些弱點(diǎn),如需求適應(yīng)的敏捷性容易低效,一個(gè)原因是把需求變化的管理放在配置管理和需求管理的內(nèi)容中,而沒有把關(guān)于需求適應(yīng)的決策過(guò)程融入軟件項(xiàng)目的全過(guò)程中,敏捷方法不強(qiáng)調(diào)計(jì)劃,但理性決策更多的滲透到注意過(guò)程和加工過(guò)程,使敏捷方法具備其競(jìng)爭(zhēng)力。