軟件心理學(xué)研究論述

時(shí)間:2022-05-20 03:55:55

導(dǎo)語:軟件心理學(xué)研究論述一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

軟件心理學(xué)研究論述

軟件心理學(xué)這門新興學(xué)科逐漸發(fā)展,吸引了認(rèn)知科學(xué)、心理學(xué)、計(jì)算機(jī)科學(xué)、軟件工程、人機(jī)交互等各領(lǐng)域?qū)W者的參與。歐洲在1987年建立了“程序開發(fā)心理學(xué)年會(huì)”,美國在1986年成立了“程序員實(shí)證研究”會(huì)議,我國在該領(lǐng)域還處于起步階段。鑒于軟件心理學(xué)對軟件相關(guān)領(lǐng)域的重要作用,有必要對其研究現(xiàn)狀進(jìn)行系統(tǒng)總結(jié)。本文第2節(jié)概述軟件心理學(xué)的發(fā)展歷程;第3節(jié)分析軟件心理學(xué)的內(nèi)容體系;第4節(jié)總結(jié)軟件心理學(xué)各分支領(lǐng)域的研究現(xiàn)狀,并闡述對軟件工程的應(yīng)用啟示,分析目前研究存在的不足,在此基礎(chǔ)上給出未來的研究方向;最后總結(jié)軟件心理學(xué)的總體發(fā)展趨勢。

軟件心理學(xué)的發(fā)展史

軟件心理學(xué)發(fā)展大致可分為兩個(gè)階段[7],第一階段是軟件心理學(xué)的創(chuàng)立和初探階段,第二階段為軟件心理學(xué)的豐富和發(fā)展階段。兩個(gè)階段的主要區(qū)別是理論基礎(chǔ)、研究對象和研究方法不同。20世紀(jì)70年代為軟件心理學(xué)研究的第一階段,研究學(xué)者主要由計(jì)算機(jī)科學(xué)家組成。1971年,Weinberg出版了《程序開發(fā)心理學(xué)》一書,開辟了軟件心理學(xué)的新領(lǐng)域。該書從人類行為、社會(huì)行為和個(gè)人行為等3個(gè)角度審視程序開發(fā)。但是溫伯格坦言,該書中的許多思想未找到“科學(xué)依據(jù)”,沒有很好的理論基礎(chǔ)。該階段采用實(shí)驗(yàn)手段研究的代表是Shnei-derman,他采用內(nèi)省、案例研究和實(shí)地研究等手段,對編程風(fēng)格、項(xiàng)目組織、團(tuán)隊(duì)進(jìn)程、程序員能力傾向和人格特質(zhì)因素等方面進(jìn)行了探索[4]。但是,Shneiderman的實(shí)驗(yàn)缺乏認(rèn)知模型的支撐,面臨設(shè)計(jì)問題簡單、編程環(huán)境失真等問題。20世紀(jì)80年代至今為軟件心理學(xué)發(fā)展的第二階段,吸引了計(jì)算機(jī)科學(xué)家、心理學(xué)家和人素工程學(xué)家的參與。該階段以認(rèn)知模型的構(gòu)建為特征,采用客觀的行為分析作為嚴(yán)格試驗(yàn)方法的補(bǔ)充。從認(rèn)知心理學(xué)引進(jìn)理論框架,并將其研究成果引入到軟件工程中,以促進(jìn)軟件工具的研發(fā),改進(jìn)編程活動(dòng)。該階段彌補(bǔ)了第一階段的不足:研究對象擴(kuò)展到專業(yè)程序員,而第一階段的研究對象幾乎都是學(xué)生;考慮了軟件開發(fā)的集體性及協(xié)作性;所涉及的活動(dòng)不只是編碼,也研究需求規(guī)格說明及軟件設(shè)計(jì);考慮了語言和編程范式對編程活動(dòng)的影響??v觀軟件心理學(xué)的發(fā)展史,軟件心理學(xué)的研究方法漸趨成熟、研究內(nèi)容逐漸豐富、研究學(xué)者日益多元化。軟件心理學(xué)的發(fā)展過程是軟件工程與心理學(xué)融合程度逐步提高的過程。

軟件心理學(xué)研究體系

從學(xué)術(shù)文獻(xiàn)來看,軟件心理學(xué)研究的熱點(diǎn)主要集中在7個(gè)領(lǐng)域:程序設(shè)計(jì)的認(rèn)知機(jī)制、程序理解理論、專家與新手的差別、程序員人格特質(zhì)與績效的關(guān)系、程序員情感與績效的關(guān)系、程序員能力傾向測試和人機(jī)界面設(shè)計(jì)。筆者分析了各項(xiàng)研究內(nèi)容之間的關(guān)系,如圖1所示。軟件心理學(xué)的研究從3個(gè)層面展開:第一層面為認(rèn)知活動(dòng)機(jī)理層,第二層面為根源因素層,第三層面為應(yīng)用層。第一層面從軟件生命周期的核心活動(dòng)出發(fā),研究其認(rèn)知機(jī)制,主要包括軟件設(shè)計(jì)活動(dòng)的認(rèn)知機(jī)制,以及編碼、測試、維護(hù)中的程序理解機(jī)制。第二層面在第一層面的基礎(chǔ)上,研究影響主體績效的根源因素,一方面研究情感、人格特質(zhì)對主體績效的影響;另一方面從“主體的能力是由學(xué)習(xí)和訓(xùn)練得來的”這一觀點(diǎn)出發(fā),研究專家與新手在知識(shí)、策略和元認(rèn)知方面存在怎樣的差別。第三個(gè)層面是將前兩個(gè)層面的研究成果應(yīng)用到軟件工程相關(guān)的活動(dòng)中,如將根源因素層的研究成果與心理學(xué)測量方法相結(jié)合,研究程序員能力傾向測試,用于選拔適合從事軟件開發(fā)的人員。將程序員的行為和認(rèn)知機(jī)制的研究結(jié)果用于指導(dǎo)軟件開發(fā)環(huán)境的人機(jī)界面設(shè)計(jì)。將專家與新手的差別的研究成果應(yīng)用于軟件工程人員的教育與培訓(xùn)。軟件心理學(xué)在人機(jī)交互中主要應(yīng)用于用戶建模及可用性的設(shè)計(jì)與驗(yàn)證,關(guān)注用戶描述,對用戶的感知、認(rèn)知和動(dòng)作進(jìn)行建模,并構(gòu)建感知-認(rèn)知-動(dòng)作的集成建模。該方面的應(yīng)用旨在了解和支持人與計(jì)算機(jī)的交互,使設(shè)計(jì)的軟件或系統(tǒng)的可用性更高。該領(lǐng)域是軟件心理學(xué)與計(jì)算機(jī)科學(xué)結(jié)合最成功的研究領(lǐng)域,存在的評述較多。本文接下來對前6個(gè)領(lǐng)域的研究現(xiàn)狀及其對軟件工程領(lǐng)域的啟發(fā)展開論述

主要研究進(jìn)展

1程序設(shè)計(jì)的認(rèn)知機(jī)制

研究進(jìn)展程序設(shè)計(jì)認(rèn)知機(jī)制主要包含3類元素:知識(shí)、策略和過程組織。程序設(shè)計(jì)知識(shí)分為句法知識(shí)、語義知識(shí)和圖式知識(shí)[5]。前兩類知識(shí)與程序語言緊密相關(guān),而圖式知識(shí)是程序設(shè)計(jì)的核心。圖式(Schema)是主體內(nèi)部的一種動(dòng)態(tài)的、可變的認(rèn)知結(jié)構(gòu)單元,是由舊知識(shí)組成的無意識(shí)的心理結(jié)構(gòu)。圖式理論的核心思想是,將主體過去的經(jīng)歷形成模式,在解決問題的時(shí)候無意識(shí)地匹配和調(diào)用與目前情況相符的模式。圖式的存在使得人類的認(rèn)知具有自動(dòng)加工的特點(diǎn),同時(shí)也是認(rèn)知失誤的重要原因[6]。程序設(shè)計(jì)圖式包括編程圖式、結(jié)構(gòu)圖式和問題域圖式[13]。編程圖式是編程領(lǐng)域特有的圖式,包括編程基礎(chǔ)知識(shí)和算法知識(shí)等。結(jié)構(gòu)圖式是生成和理解文本的重要知識(shí),如1個(gè)功能程序的結(jié)構(gòu)圖式由3個(gè)角色組成:輸入、計(jì)算和輸出。問題域圖式是程序要解決的特定問題的領(lǐng)域知識(shí)。根據(jù)圖式理論,程序設(shè)計(jì)的核心活動(dòng)是相關(guān)圖式的激活。程序設(shè)計(jì)過程就是程序員激活儲(chǔ)存于記憶中的適合解決當(dāng)前問題的若干圖式,并對這些圖式進(jìn)行組合的過程。以圖式為核心的程序設(shè)計(jì)模型以Adelson模型[7-9]和Détienne模型[10]為代表,將程序設(shè)計(jì)認(rèn)知活動(dòng)視為圖式檢索、圖式匹配、解決方案評價(jià)、調(diào)試和通用化[7,8]的過程。程序設(shè)計(jì)的策略[11-13]包括:①自頂向下和自底向上。自頂向下是指將總體問題逐層分解為小問題解決的策略,自底向上是從細(xì)節(jié)到總體逐步構(gòu)造的策略。②向前和向后。向前設(shè)計(jì)模式即程序解決方案按照執(zhí)行方向設(shè)計(jì),向后設(shè)計(jì)模式即程序解決方案按照與執(zhí)行相反的方向設(shè)計(jì)。③廣度優(yōu)先和深度優(yōu)先策略。廣度優(yōu)先策略是先解決完一個(gè)層面的所有問題,再解決低一個(gè)層面的問題,深度優(yōu)先策略是將一個(gè)問題從上到下解決完成后再解決其它問題。④過程式和聲明式策略。若編程方案是規(guī)程控制,則是過程式的。若編程方案用于聲明靜態(tài)屬性,如對象、角色等,則是聲明式的。⑤心理模擬,用于評價(jià)問題解決方案。程序員在不同情境下會(huì)使用不同的策略,策略的觸發(fā)情景包括編程語言的認(rèn)知維度[14]、編程環(huán)境特征、問題類型和程序員自身思維方式和已獲得的圖式,程序員趨于選擇自己熟悉和使用頻率高的策略[15]。程序設(shè)計(jì)的過程組織有兩種方式。一種為結(jié)構(gòu)化組織方式,認(rèn)為程序設(shè)計(jì)是按照自頂向下、寬度優(yōu)先的方式組織的。但是實(shí)驗(yàn)發(fā)現(xiàn),實(shí)際的程序設(shè)計(jì)過程并不是嚴(yán)格按照這種結(jié)構(gòu)化的過程進(jìn)行的。程序員設(shè)計(jì)或編程過程中會(huì)出現(xiàn)機(jī)會(huì)性的偏離[16],即程序員(設(shè)計(jì)師)以實(shí)現(xiàn)目標(biāo)為第一要?jiǎng)?wù),不受規(guī)則的限制,自頂向下和自底向上、深度優(yōu)先和寬度優(yōu)先策略都會(huì)用到,取決于具體的情景。存在許多支持該模型的實(shí)驗(yàn)研究結(jié)果,如程序員有時(shí)會(huì)優(yōu)先實(shí)現(xiàn)他認(rèn)為最重要的功能。這種認(rèn)知策略會(huì)被多個(gè)因素觸發(fā),如資源限制。當(dāng)工作記憶超出容量時(shí),結(jié)構(gòu)化的工作模式就會(huì)失效,由寬度優(yōu)先策略跳變?yōu)樯疃葍?yōu)先策略,產(chǎn)生機(jī)會(huì)主義偏離,即機(jī)會(huì)主義組織方式。

應(yīng)用與啟示從程序設(shè)計(jì)認(rèn)知機(jī)制可以看出,良好的知識(shí)結(jié)構(gòu)(設(shè)計(jì)模式)、恰當(dāng)?shù)牟呗院瓦^程組織將促進(jìn)設(shè)計(jì)工作的開展?;诖?,可設(shè)計(jì)出更適合程序員使用的軟件開發(fā)工具。在軟件開發(fā)環(huán)境中提供可視化的結(jié)構(gòu)圖式和知識(shí)圖式支持,對程序員具有重要的輔助作用。如在面向?qū)ο缶幊坦ぞ咧刑峁┮粋€(gè)通用化的對象圖式,包括創(chuàng)建、初始化、讀、寫、輸入和輸出功能;在開發(fā)工具中提供控制流、數(shù)據(jù)流和功能分解圖等。同時(shí),領(lǐng)域知識(shí)庫的構(gòu)建對軟件開發(fā)具有重要意義,也是軟件開發(fā)工具面臨的一個(gè)新挑戰(zhàn)[17]。程序員機(jī)會(huì)偏離現(xiàn)象說明,編程環(huán)境不能過分強(qiáng)制程序員按照自頂向下的方式編程[18]。編程環(huán)境應(yīng)提供相對靈活的導(dǎo)航工具,以便程序員在不同對象之間快速切換。在支持機(jī)會(huì)主義偏離的情況下,同時(shí)也要提供未完成任務(wù)的追蹤功能,因?yàn)榘l(fā)生機(jī)會(huì)主義偏離后,被中斷的任務(wù)擱置后容易被遺忘。

不足與展望程序設(shè)計(jì)的一個(gè)重要特點(diǎn)就是解決的問題是“不明確的問題”(ill-definedproblem)[13,18],存在需求描述不清晰、缺失等問題;并且,一個(gè)問題可能存在多個(gè)解決方案,無法通過單一的標(biāo)準(zhǔn)進(jìn)行評價(jià),甚至無法評價(jià)。因此,對所要解決的問題的表征(representation)非常重要,問題表征中生成的情景模型直接影響設(shè)計(jì)方案的生成,也與設(shè)計(jì)方案共同演化,是造成個(gè)體差異的重要活動(dòng)之一[19]。而目前的研究都是假設(shè)所有程序員對問題的表征是一致的,缺乏對程序員問題表征的研究。分析程序員的問題表征,將其集成到程序設(shè)計(jì)認(rèn)知模型中,是未來的研究趨勢[13,19]。目前的認(rèn)知模型將設(shè)計(jì)的核心活動(dòng)簡化為圖式檢索、匹配和評價(jià)的過程。而實(shí)際項(xiàng)目中,程序員可能面臨知識(shí)不足的問題。因此學(xué)習(xí)成為程序設(shè)計(jì)中一項(xiàng)重要的認(rèn)知活動(dòng)。學(xué)習(xí)中理解和集成圖式將占用大量的工作記憶資源(germaneload)[20],對程序設(shè)計(jì)的其它活動(dòng)存在重要影響。而目前的認(rèn)知模型均缺乏對學(xué)習(xí)活動(dòng)的研究,這將是未來研究的一個(gè)重要內(nèi)容。最后,人類認(rèn)知的一個(gè)重要特性就是具有主動(dòng)監(jiān)控和調(diào)節(jié)的高級能力,即關(guān)于“認(rèn)知的認(rèn)知”———元認(rèn)知能力。元認(rèn)知能力與認(rèn)知失效調(diào)節(jié)及問題解決能力密切相關(guān)[21],而目前的認(rèn)知模型幾乎都沒有考慮這一全局性的認(rèn)知活動(dòng)。研究程序設(shè)計(jì)元認(rèn)知能力對程序設(shè)計(jì)其它活動(dòng)的影響機(jī)理及其評價(jià)和訓(xùn)練方法,對程序員的選拔和培訓(xùn)具有重要應(yīng)用價(jià)值,將是未來一項(xiàng)重要的研究方向[22]。

2程序理解機(jī)制

程序理解可謂是程序開發(fā)心理學(xué)最古老的課題之一。它解決的核心問題是,程序員如何處理源代碼和構(gòu)建高效的軟件系統(tǒng)[23]。研究程序員程序理解的行為和策略,以此指導(dǎo)軟件可視化編程環(huán)境的開發(fā)[24]。

研究進(jìn)展程序理解理論最初從文本理解理論借鑒而來。文本理解是通過信息加工構(gòu)造表征的過程。該過程翻譯文本中包含的顯式信息,并調(diào)用經(jīng)驗(yàn)知識(shí)得到推斷信息,再將兩類信息綜合為一體。即信息加工過程的信息有兩個(gè)來源:外源,編碼在文本中的信息;內(nèi)源,存儲(chǔ)在記憶中的知識(shí)。Letovsky模型[25]使用知識(shí)庫、心智模型(內(nèi)部表征)和同化過程,從較高的抽象層次描述了這一過程。程序理解模型包括3類:功能方法,理解程序等價(jià)于利用知識(shí)圖式;結(jié)構(gòu)化方法,理解程序等價(jià)于構(gòu)造關(guān)系網(wǎng);心智模型方法,理解程序等價(jià)于構(gòu)造詳細(xì)的情景表征。功能方法的核心假設(shè)是,程序理解就是激活和實(shí)例化知識(shí)圖式。程序理解的活動(dòng)包括:激活儲(chǔ)存在記憶中的圖式,利用從程序代碼中提取的索引,并從援引的圖式出發(fā)推斷程序所包含的某些信息。功能理解模型的主要代表是Soloway模型[26]。結(jié)構(gòu)化方法認(rèn)為,理解程序就是構(gòu)造命題之間的關(guān)系網(wǎng)。程序可以用順序、迭代和條件等控制結(jié)構(gòu)的基本單位來描述。專家利用結(jié)構(gòu)圖式識(shí)別結(jié)構(gòu)單元(順序、迭代和條件),然后構(gòu)造不同層次的表征。結(jié)構(gòu)化方法的模型主要有Shneiderman&Mayer模型[27]。心智模型方法認(rèn)為,程序理解就是構(gòu)造情境表征。這就需要區(qū)分兩類模型:程序模型和情景模型。程序模型與自然文本理解中的命題模型和文本庫概念類似,反映程序在命題層次包含什么內(nèi)容。而情景模型反映問題領(lǐng)域的實(shí)體及其關(guān)系,即問題目標(biāo)及數(shù)據(jù)流。程序的理解首先需要構(gòu)造程序模型,這依賴于結(jié)構(gòu)化知識(shí),特別是編程語言的語義和句法知識(shí);在此基礎(chǔ)上,構(gòu)建情景模型,從而達(dá)到對程序的理解。心智模型主要有Pennington模型[28]。Mayrhauser集成元模型[29]將Soloway模型和Penning-ton組合起來,并且實(shí)驗(yàn)證明,程序員在3個(gè)理解過程中轉(zhuǎn)換。該模型由4個(gè)部分組成:自頂向下、情境模型、程序模型和知識(shí)庫。前3個(gè)部分反映理解過程,知識(shí)庫是構(gòu)建其它3個(gè)部分的必要因素,為程序理解過程提供相關(guān)信息并存儲(chǔ)推斷得出的新信息。

應(yīng)用與啟示對程序理解原理的研究,可指導(dǎo)程序理解輔助工具的設(shè)計(jì)[30]。如在程序?yàn)g覽方面,對于自頂向下的理解過程,需要提供從頂層的抽象信息到底層的細(xì)節(jié)信息的瀏覽;對于自底向上的理解過程,需要提供控制流和數(shù)據(jù)流瀏覽;工具還需要同時(shí)提供寬度優(yōu)先和深度優(yōu)先的瀏覽,才能同時(shí)滿足專家和新手的要求。除此之外,工具代碼及注釋檢索功能將大大提高程序理解效率[31]。同時(shí)需要提供能夠讓程序員詢問變量角色等的詢問功能。最后,應(yīng)考慮為程序理解提供一些其它認(rèn)知支持手段,如為專家提供外部便簽薄,為新手提供教學(xué)輔助,使其能夠?qū)崟r(shí)地獲得語言和領(lǐng)域知識(shí)。集成領(lǐng)域知識(shí)將提高程序理解效率[32]。

不足與展望首先,在實(shí)際的軟件項(xiàng)目中,維護(hù)人員很可能不是程序編寫者,程序理解過程中通常伴隨新知識(shí)的學(xué)習(xí)。因此,隨著編程人員和技術(shù)的變化,終端用戶相關(guān)的學(xué)習(xí)理論將成為一個(gè)研究趨勢。第二,從理解模型可以看出,領(lǐng)域知識(shí)在程序理解過程中發(fā)揮重要作用。領(lǐng)域知識(shí)的集成是一大難點(diǎn),也是未來的重要研究方向之一。第三,目前程序理解理論主要研究個(gè)體的認(rèn)知機(jī)制,程序理解將向社會(huì)化組織化的方面擴(kuò)展,同地合作和分布式合作方面將受到關(guān)注。第四,在工具方面,未來程序理解輔助工具將向快速改進(jìn)、綜合化、集成建議和搜索功能、接口高適應(yīng)性、可視化、支持團(tuán)隊(duì)合作等方向發(fā)展[30]。

3專家與新手的差別

研究進(jìn)展程序員的技能在很大程度上是一種習(xí)得性能力,因而研究專家與新手的差別對程序員的教育和培訓(xùn)有著重要意義。專家和新手的差別主要表現(xiàn)在4個(gè)方面:知識(shí)、策略、熟練程度和元認(rèn)知[33]。專家與新手在領(lǐng)域知識(shí)和編程知識(shí)方面存在較大差別。Adelson&Soloway[7]和Burkhardt等人[34]發(fā)現(xiàn),新手在領(lǐng)域知識(shí)方面的欠缺將導(dǎo)致其在構(gòu)建情景模型方面存在困難,但是并不影響其構(gòu)建程序模型。Schraagen[35]發(fā)現(xiàn),即使都是有經(jīng)驗(yàn)的程序員,領(lǐng)域知識(shí)欠缺的程序員的解決方案也會(huì)比領(lǐng)域知識(shí)豐富的程序員給出的方案差。因此,區(qū)分專家與新手的一個(gè)重要因素就是領(lǐng)域知識(shí)的掌握情況。在編程知識(shí)方面,Rist[36]發(fā)現(xiàn)新手更關(guān)注語言句法等表面細(xì)節(jié)信息,而專家更關(guān)注于語義信息或設(shè)計(jì)模式等深層次的信息。Soloway和Adelson等人發(fā)現(xiàn)[7],專家在解決模式化問題時(shí)的表現(xiàn)比新手好,而在解決非模式化問題時(shí)卻不存在顯著差別。Wiedenbeck[37]同樣發(fā)現(xiàn)專家傾向于記住程序的語義等抽象表征信息,而新手傾向于記住程序的函數(shù)和語義等具體信息。Ye[38]指出,專家比新手擁有更大的圖式組塊(chunks),在他所研究的樣本中,與新手相比,專家在C語言方面的概念塊更抽象,組成元素更多。由于知識(shí)的組塊,對新手是多個(gè)圖式,對專家卻可能只是一個(gè)圖式,這使得專家的工作記憶能夠調(diào)用和處理更多的信息。專家與新手除了在知識(shí)的數(shù)量與組織結(jié)構(gòu)上存在差別之外,在知識(shí)的使用策略方面也存在顯著差別。經(jīng)驗(yàn)豐富的程序員傾向于使用自頂向下、寬度優(yōu)先和向前的策略,而新手傾向于使用自底向上、深度優(yōu)先和向后的策略[7,33,40,41];并且專家的編程策略可以在不同的問題上重用。Schraagen[35]指出,即使面臨新的問題,良好的策略也能保障他們以較為結(jié)構(gòu)化的方式解決問題。Ko[42]發(fā)現(xiàn),即使在陌生的編程環(huán)境中,也不會(huì)影響專家程序員的問題理解策略。專家與新手在元認(rèn)知方面存在重大差別。研究[33]發(fā)現(xiàn),專家能夠更好地意識(shí)到所犯的錯(cuò)誤,并及時(shí)對生成的問題解決方案進(jìn)行驗(yàn)證。專家元認(rèn)知能力也表現(xiàn)在專家更善于利用外界記憶輔助設(shè)施(如筆記)作更多的注釋[43]。

應(yīng)用與啟示專家和新手不只是存在知識(shí)占有多少的差別,在知識(shí)的組織、知識(shí)的使用策略、熟練程度和元認(rèn)知方面也存在差別,這對軟件工程人員的培訓(xùn)和學(xué)習(xí)以及專家系統(tǒng)的設(shè)計(jì)有重要指導(dǎo)意義。對程序員的培訓(xùn)不能只灌輸編程語言規(guī)則等顯性知識(shí),還需要啟發(fā)其分析知識(shí)之間的關(guān)系,以及不同解決方案使用的場景,進(jìn)而形成高層次的圖式;還需對知識(shí)使用策略和元認(rèn)知進(jìn)行訓(xùn)練;在培訓(xùn)的方式上,僅采用書本和授課方式是不夠的,由于專家具有實(shí)用主義和自動(dòng)化的特點(diǎn)[44],因此需要設(shè)計(jì)具體的任務(wù)對其進(jìn)行實(shí)戰(zhàn)訓(xùn)練。

不足與展望在弄清專家與新手的差別,特別是找到新手存在的缺點(diǎn)后,新手的學(xué)習(xí)和教育就成為重要的研究課題[45,46]。面向?qū)ο缶幊探逃翱梢暬逃ぞ叩拈_發(fā)成為近年來的一個(gè)研究熱點(diǎn)[47]。

4程序員人格特質(zhì)與績效的關(guān)系

大量證據(jù)表明,軟件開發(fā)中程序員的生產(chǎn)率和能力存在著巨大差別。具有相似背景的程序員在編程績效方面存在巨大差別,學(xué)者們猜想,只有存在某種“固有的人格特質(zhì)”才能解釋這種差別。該領(lǐng)域的研究對程序員的選拔具有重要指導(dǎo)意義。

研究進(jìn)展目前軟件心理學(xué)領(lǐng)域主要采用邁爾斯-布里格斯類型指標(biāo)(MBTI)和五因素模型[48]來研究人格特質(zhì)類型與程序員績效之間的聯(lián)系。根據(jù)MTBI理論分析[49]:①在思考(thinking)/情感(feeling)維度方面(T/F),要檢測和修改編程錯(cuò)誤,克服語言錯(cuò)誤,編程工作需要邏輯和分析能力,思考型比情感型更能勝任編程工作。②在感覺(sensing)/直覺(intuiting)方面(S/N),感覺型人更傾向于一步一步達(dá)到目標(biāo),對工作和細(xì)節(jié)更有耐性;而直覺型人工作更依賴于預(yù)感和直覺;但是直覺型人對復(fù)雜任務(wù)更感興趣,感知型人更適合簡單任務(wù)。③外向型(extrovert)/內(nèi)向型(introvert)維度(E/I),內(nèi)向型人更注意細(xì)節(jié),在行動(dòng)前喜歡徹底思考事情;外向型人思考問題傾向于表面化。在E/I維度的實(shí)證研究方面:David研究了MBTI與代碼審查能力之間的關(guān)系,實(shí)驗(yàn)證明,E/I維度與代碼理解能力之間存在強(qiáng)關(guān)聯(lián)關(guān)系[50];Capretz[51]研究結(jié)果表明,軟件工程人員大部分都是內(nèi)向型性格;Chandler等人[52]發(fā)現(xiàn),計(jì)算機(jī)專業(yè)的研究生主要都是內(nèi)向、感知和判斷型的;在程序員人格特質(zhì)調(diào)查中,Turley發(fā)現(xiàn)軟件行業(yè)樣本中90%是內(nèi)向型人[53]。在SN維度實(shí)證研究方面:Bishop[54,55]發(fā)現(xiàn)直覺型人在解決問題中表現(xiàn)得更好;Whitley[49]發(fā)現(xiàn)直覺型的學(xué)生確實(shí)更具編程潛能;Capretz[56]研究發(fā)現(xiàn),他的專業(yè)程序員樣本中直覺型人所占比例遠(yuǎn)遠(yuǎn)超過一般人群,他認(rèn)為直覺型、思考型,特別是直覺-思考型在編程相關(guān)任務(wù)中能夠工作得更好;Devito研究了MBTI與代碼審查能力之間的關(guān)系[57],發(fā)現(xiàn)直覺型人比感知型表現(xiàn)好,直覺-思考型表現(xiàn)尤其好。在TF維度實(shí)證研究方面:Bishop[55]認(rèn)為,完成軟件開發(fā)中的一些任務(wù)(特別是問題解決相關(guān)領(lǐng)域的任務(wù)),需要在規(guī)定的限制條件下執(zhí)行標(biāo)準(zhǔn)化過程,需要進(jìn)行客觀的邏輯的分析,思考型人更能勝任;Turley和Bieman[53]的研究表明,他們的樣本中85%是思考型人;Capretz的專業(yè)程序員樣本中81%是思考型;Chandler等人的計(jì)算機(jī)專業(yè)學(xué)生中86%是思考型;Myers研究表明,思考型人更適合于與邏輯思考有關(guān)的任務(wù)[58]。

應(yīng)用與啟示在現(xiàn)代軟件人員選拔和項(xiàng)目管理中,人員的性格因素不容忽視。人員選拔需要根據(jù)角色的任務(wù)特點(diǎn),選擇適宜性格的人員,如直覺-思考型人普遍更適宜作編程工作;而需求分析更偏重交流能力,外向型性格比內(nèi)向型性格更為適宜。實(shí)驗(yàn)表明,如果IT企業(yè)能夠根據(jù)雇員的性格特點(diǎn)和潛能進(jìn)行優(yōu)化組織,生產(chǎn)效率和質(zhì)量都可能得到提高[56,59]。

不足與展望正如Whitley所說[49],人格特質(zhì)與績效方面的研究是相關(guān)性研究,而不是本質(zhì)上的實(shí)驗(yàn)研究,不能得出因果關(guān)系推論,不能說編程潛力、態(tài)度和行為的差別是由于人格類型導(dǎo)致的。需要對這種相關(guān)關(guān)系進(jìn)行深入的機(jī)理研究,給出人格特質(zhì)與績效之間的相關(guān)關(guān)系的合理解釋,這將是未來的一項(xiàng)重要的研究內(nèi)容。在找到性格類型與能力偏好的關(guān)系的基礎(chǔ)上,對于一個(gè)特定任務(wù),如何選擇和搭配團(tuán)隊(duì)成員以形成更加和諧、高效和多樣化的團(tuán)隊(duì)也是未來一項(xiàng)重要的研究內(nèi)容[48]。

5程序員情感與績效的關(guān)系

情感(moods)是指“心境或主要情緒的意識(shí)狀態(tài)”[60]。Merriam-Webster字典將情緒(emotion)定義為“意識(shí)的情感方面,一種感覺狀態(tài),是一種有意識(shí)的心智反應(yīng)(如憤怒或恐懼),對特定對象的強(qiáng)烈感覺體驗(yàn),一般伴隨有身理的和行為的變化”。情感和情緒都是感情狀態(tài)。情感持續(xù)的時(shí)間更長,引起的原因沒有情緒明確。情感可以持續(xù)一兩天或者更久,而情緒在幾分鐘或者幾秒鐘之內(nèi)發(fā)生或者消逝。大多數(shù)心理學(xué)家認(rèn)為情緒和情感在本質(zhì)上是一樣的。幾乎所有的日?;顒?dòng)都受到情緒的影響,從駕駛飛機(jī)到編程,無一例外都能感受到正面或者負(fù)面情緒。情緒可能破壞日常任務(wù),通常會(huì)對精力、睡眠和思維造成干擾,嚴(yán)重的可能導(dǎo)致疼痛。研究發(fā)現(xiàn),情感會(huì)影響人類的多種活動(dòng),如創(chuàng)造性、記憶、推理、行為、認(rèn)知加工、信息加工、學(xué)習(xí)、決策和工作績效[60]。

研究進(jìn)展雖然情感與績效關(guān)系方面存在大量研究,但是很少有針對IT專業(yè)人士的情緒研究。近年心理學(xué)領(lǐng)域開展了情緒對行為的影響研究,情緒對IT專業(yè)人士的影響的研究卻很少[60]。情緒心理學(xué)相關(guān)研究表明,情感影響推理。而推理是編程的必要元素,如果情感能影響推理能力,那也可能會(huì)影響程序員的績效。Khan[61]設(shè)計(jì)了實(shí)驗(yàn)來測試情感對程序員調(diào)試任務(wù)的影響。其方法是讓程序員在開始調(diào)試任務(wù)之前,先觀看幾組激發(fā)特定情緒的錄像帶,比對各組任務(wù)績效。結(jié)果表明,情緒的覺醒水平對調(diào)試任務(wù)存在重大影響,而情緒的效價(jià)對任務(wù)的影響卻不明顯。即程序員檢測和改正錯(cuò)誤的能力依賴于情緒的覺醒水平。Good等人[62]意識(shí)到情感對程序員績效的影響,在計(jì)算機(jī)實(shí)驗(yàn)室中引進(jìn)了表達(dá)和監(jiān)控學(xué)生情緒的設(shè)備。實(shí)驗(yàn)表明,此設(shè)備有助于學(xué)生的情緒表達(dá)、交流與修復(fù),進(jìn)而促進(jìn)學(xué)業(yè)成績,獲得了良好的反饋。

應(yīng)用與啟示情感對編程績效存在影響,該領(lǐng)域的研究對程序員的管理有著重要指導(dǎo)意義。如情緒的覺醒水平對調(diào)試任務(wù)存在重大影響,企業(yè)管理中就需要盡量避免員工情緒出現(xiàn)大幅波動(dòng),過于高興或悲傷都對工作不利。需要避免員工帶著負(fù)面情緒工作,思維受到影響可能引入嚴(yán)重的軟件缺陷。情感波動(dòng)對編程績效存在較大影響,組織在選拔程序員過程中可參考此因素,優(yōu)選那些情緒穩(wěn)定型人格特質(zhì)程序員負(fù)責(zé)關(guān)鍵性任務(wù)??捎么笪迦烁駵y量中的神經(jīng)質(zhì)維度(neu-roticism)問卷衡量情緒穩(wěn)定性。

不足與展望針對程序員情緒的研究目前還處于實(shí)驗(yàn)室研究階段,這與實(shí)際工程項(xiàng)目中程序員的工作環(huán)境存在巨大差別;并且情緒具有實(shí)時(shí)性和積累效應(yīng),如何在不侵?jǐn)_程序員編程工作的條件下,實(shí)時(shí)地檢測程序員情緒進(jìn)而幫助其調(diào)節(jié)情緒是未來的發(fā)展趨勢。文獻(xiàn)[63]提出通過程序員使用鼠標(biāo)和鍵盤的信息來監(jiān)測程序員的情緒。文獻(xiàn)[64]提出通過增加人機(jī)界面的情感意識(shí)(emotionawareness)設(shè)計(jì)來促進(jìn)用戶的正面情緒。

6編程能力傾向測試

眾所周知,有些人認(rèn)為學(xué)編程很困難,而有些人卻覺得很簡單。要可靠地將這兩類人識(shí)別出來卻是一個(gè)大問題。編程能力傾向測試旨在解決這樣的問題。

研究進(jìn)展Wilson&Shrock[65]研究了12個(gè)預(yù)測因子后發(fā)現(xiàn),有3個(gè)預(yù)測因子與編程能力有著重要的相關(guān)關(guān)系,依次是:舒適水平、數(shù)學(xué)和歸因(把成功歸因于運(yùn)氣的學(xué)生編程能力較差)。Beise等[66]考察了年齡、種族和性別與編程入門課程之間的關(guān)系,從統(tǒng)計(jì)學(xué)上表明,性別和年齡都不是有效的預(yù)測因子。Nathan等人發(fā)現(xiàn)學(xué)生的預(yù)期是一個(gè)重要影響因素,那些預(yù)期自己能得“A”的學(xué)生更容易成功[67,68]。Lister等[69]、Fincher等[70]、deRaadt等[71]、Simon等[72]、Tolhurst等[73]指出,在編程入門課程中表現(xiàn)差的學(xué)生缺乏問題解決能力。Stuart實(shí)驗(yàn)發(fā)現(xiàn),系統(tǒng)商數(shù)(SQ)-移情商數(shù)(EQ)與編程存在強(qiáng)正相關(guān)[74]。Simon等人[75]、Sue&Gary[76]、Tolhurst等人[73]都發(fā)現(xiàn),學(xué)生的空間觀想能力與編程能力存在正相關(guān),地圖描繪實(shí)驗(yàn)中畫俯瞰圖的學(xué)生在課程中得分更高,畫路線圖的學(xué)生成績比俯瞰圖的差,畫路標(biāo)圖的學(xué)生成績最差??臻g觀想能力與代碼導(dǎo)航能力有關(guān),進(jìn)而關(guān)系到程序心智模型的構(gòu)建。

應(yīng)用與啟示編程能力傾向測試可以提供學(xué)業(yè)和就業(yè)方向咨詢,選擇那些適合學(xué)習(xí)編程的學(xué)生,提高編程課程的通過率,減少計(jì)算機(jī)學(xué)生的退學(xué)率[77];為企業(yè)選拔更適合編程的員工,并識(shí)別哪些員工需要進(jìn)行計(jì)算機(jī)相關(guān)訓(xùn)練。

不足與展望可以看出,目前該領(lǐng)域的研究未能取得公認(rèn)統(tǒng)一的結(jié)論。學(xué)者們對預(yù)測因子的選取具有較大隨意性,各自提出的預(yù)測因子繁多且缺乏系統(tǒng)性。究其原因,研究者們未能對軟件工程中各種角色所需的認(rèn)知能力進(jìn)行機(jī)理層面的分析。相關(guān)性分析不能說明因果關(guān)系。學(xué)生在某種任務(wù)中的績效與編程績效相關(guān)只能說明該項(xiàng)任務(wù)與編程任務(wù)在所需的認(rèn)知活動(dòng)上存在某種程度的交疊。因此,用這些因子預(yù)測學(xué)生將來的編程表現(xiàn)是不夠合理的。作為編程能力潛力的預(yù)測因子,需要選取與編程認(rèn)知活動(dòng)密切相關(guān)且相對穩(wěn)定的因素。本文前幾節(jié)的分析和總結(jié)對編程能力傾向測試的未來研究方向具有重要啟發(fā):1)編程能力在很大程度上是習(xí)得性能力,知識(shí)與經(jīng)驗(yàn)的差異是程序員個(gè)體差異的最主要原因。因此在個(gè)體經(jīng)歷和其它條件相同的情況下,學(xué)習(xí)能力的差異是影響程序員未來編程能力的一個(gè)重要因素。同時(shí),學(xué)習(xí)能力是一項(xiàng)較為穩(wěn)定的能力,可作為編程潛力預(yù)測因子之一。2)軟件工程的核心認(rèn)知活動(dòng)是問題解決(problemsol-ving),而元認(rèn)知對問題解決活動(dòng)進(jìn)行監(jiān)控與調(diào)節(jié)。元認(rèn)知能力的高低對問題解決績效起著重要影響[78],并且元認(rèn)知能力也是較為穩(wěn)定的高級能力[21],可作為編程潛力預(yù)測因子之一。3)情緒、動(dòng)機(jī)(motivation)等因素對認(rèn)知活動(dòng)存在較大影響。同樣,在外界刺激條件下,人格特質(zhì)是個(gè)體情緒動(dòng)機(jī)差異的決定因素,且人格特質(zhì)具有長期穩(wěn)定的特點(diǎn),可探索部分人格特質(zhì)維度作為編程潛力的預(yù)測因子,如情緒穩(wěn)定性??傊幊棠芰A向測試的未來研究應(yīng)著眼于分析軟件工程的任務(wù)活動(dòng)特征,識(shí)別那些對編程活動(dòng)有著因果關(guān)系且較為穩(wěn)定的因素作為預(yù)測因子,才可能達(dá)到“潛力測試”的效果。

結(jié)束語

盡管自1987年召開首屆程序開發(fā)心理學(xué)年會(huì)以來,軟件心理學(xué)研究領(lǐng)域取得了上述的若干成果,但其總體上仍存在不足:1)目前軟件心理學(xué)的研究對象主要是程序員,對軟件工程中的其它角色如需求分析師、軟件測試工程師、項(xiàng)目管理人員等研究較少。2)目前的研究主要考察個(gè)體的行為。而現(xiàn)代軟件項(xiàng)目是大量人員合作完成的,個(gè)體之間的合作與交流日益重要。對編程中的合作與交流的研究是近年呈現(xiàn)的新熱點(diǎn)[79]。3)軟件心理學(xué)研究成果未能在軟件工程中得到充分應(yīng)用。如軟件工程中缺乏對程序員使用的編程環(huán)境可用性的考慮,即使有少數(shù)系統(tǒng)考慮,也將其視為技術(shù)問題,而不是人-機(jī)系統(tǒng)問題。近年來軟件工程學(xué)者開始意識(shí)到人的問題,開始采用編程活動(dòng)模型來評價(jià)開發(fā)工具的可用性。但總體而言,軟件心理學(xué)呈現(xiàn)與軟件工程應(yīng)用結(jié)合越來越緊密的趨勢。將軟件心理學(xué)與軟件可靠性工程中各項(xiàng)技術(shù)相結(jié)合[80],對改進(jìn)缺陷預(yù)防[22]、改善容錯(cuò)設(shè)計(jì)都具有重要應(yīng)用價(jià)值。最后,筆者建議,進(jìn)一步加強(qiáng)軟件心理學(xué)和軟件工程兩大團(tuán)體之間的交流,以軟件工程需求為牽引,開展軟件心理學(xué)基礎(chǔ)研究,同時(shí)給出軟件工程可實(shí)施的方法和技術(shù),這將是推動(dòng)軟件心理學(xué)發(fā)展、實(shí)現(xiàn)其應(yīng)用價(jià)值的根本思路。

作者:黃撫群劉斌王軼辰單位:北京航空航天大學(xué)可靠性與系統(tǒng)工程學(xué)院