軟件心理學研究論述

時間:2022-05-20 03:55:55

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

軟件心理學研究論述

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

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

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

軟件心理學研究體系

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

主要研究進展

1程序設計的認知機制

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

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

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

2程序理解機制

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

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

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

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

3專家與新手的差別

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

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

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

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

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

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

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

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

5程序員情感與績效的關系

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

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

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

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

6編程能力傾向測試

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

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

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

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

結(jié)束語

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

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