




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章軟件開(kāi)發(fā)環(huán)境與過(guò)程軟件是產(chǎn)品軟件是腦力密集勞動(dòng)的產(chǎn)物軟件是有組織地開(kāi)發(fā)出來(lái)的主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.1集成開(kāi)發(fā)環(huán)境4.1.1代碼編輯器4.1.2編譯器4.1.3鏈接器4.1.4程序加載4.1.5代碼調(diào)試和安全問(wèn)題4.1.1代碼編輯器早期的代碼依靠卡片和紙帶編輯和輸入到計(jì)算機(jī)里,一旦出錯(cuò),非常難修改。光電卡片和紙帶讀寫(xiě)機(jī)現(xiàn)在的代碼編輯器,具有上下文敏感能力,隨著程序員的鍵入的字母,不斷的提示下一步要鍵入的可能的內(nèi)容。把語(yǔ)句塊、不同類(lèi)型的變量等用不同的顏色區(qū)分開(kāi)來(lái),有助于程序員檢查和發(fā)現(xiàn)錯(cuò)誤。更好的編輯器可以提醒插入哪些代碼、啥樣的代碼、局部變量與全局變量的關(guān)系。進(jìn)一步,將像C這樣的代碼與流程圖對(duì)應(yīng)起來(lái),像C++代碼的類(lèi)等于UML的圖形對(duì)應(yīng)起來(lái),能夠把圖形語(yǔ)言與文本語(yǔ)言對(duì)應(yīng)起來(lái),相互直接轉(zhuǎn)換。4.1.2編譯器典型的編譯器負(fù)責(zé)把源代碼轉(zhuǎn)換為機(jī)器代碼或匯編代碼。如果運(yùn)行編譯器的CPU(或操作系統(tǒng))是一個(gè)類(lèi)型,運(yùn)行編譯后的代碼是另一種類(lèi)的CPU(或操作系統(tǒng)),稱此為交叉編譯器(cross-compiler)。將低級(jí)語(yǔ)言(例如機(jī)器或匯編)轉(zhuǎn)換為高級(jí)語(yǔ)言(如C語(yǔ)言)的編譯器稱為反編譯器(decompiler)。反向編譯比正向編譯更難作。高級(jí)語(yǔ)言之間的轉(zhuǎn)換程序,例如從FORTRAN轉(zhuǎn)換為C原因,稱為源源編譯器。支持多語(yǔ)言、多目標(biāo)機(jī)的編譯器C代碼前端無(wú)優(yōu)化的中間代碼C++代碼Ada代碼詞法分析(Scanner)語(yǔ)法語(yǔ)義分析(Parser)中間代碼生成器中間代碼優(yōu)化器詞法分析(Scanner)語(yǔ)法語(yǔ)義分析(Parser)中間代碼生成器詞法分析(Scanner)語(yǔ)法語(yǔ)義分析(Parser)中間代碼生成器無(wú)優(yōu)化的中間代碼無(wú)優(yōu)化的中間代碼優(yōu)化后的中間代碼ARM代碼生成器X-86代碼生成器Sparc代碼生成器PowerPC代碼生成器ARM機(jī)器X-86機(jī)器Sparc機(jī)器PowerPC機(jī)器中端后端Obj文件4.1.3鏈接器鏈接器(Linker)是一個(gè)工具程序,目的是把多個(gè)代碼的obj文件和系統(tǒng)的庫(kù)代碼裝配為一個(gè)可執(zhí)行的文件格式。Lib文件obj文件obj文件Link(Linker)Lib文件DLL文件EXE文件注釋?zhuān)篖ib文件和DLL文件參見(jiàn)4.2.2節(jié)
obj文件Obj文件主要存放編譯后的機(jī)器代碼,為了便于Linker進(jìn)行裝配,該文必須具有規(guī)定的格,并給出該代碼的相關(guān)信息(描述),包括:頭部(Header):該文件的描述性和控制信息,例如,文件的長(zhǎng)度,代碼段從那個(gè)地址開(kāi)始等代碼段(Codesegment):放置可執(zhí)行的二進(jìn)制指令數(shù)據(jù)段(Datasegment),放置初始化的靜態(tài)變量只讀數(shù)據(jù)段(rodata,Read-onlydatasegment),放置初始化的靜態(tài)常數(shù)BSS段(BSSsegment),放置未初始化的靜態(tài)數(shù)據(jù),包括變量和常數(shù)外部定義和引用的鏈接,說(shuō)明本obj文件引用或包含了哪些外部定義,例如,C元語(yǔ)言的#Inlcude包含的<Stdio.h>中定義的變量等重定位信息動(dòng)態(tài)鏈接信息排除(Debugging)信息常見(jiàn)的obj格式有COFF和ELFELF源于UNIXSystemV4。1999年后主要用于X86系列的可執(zhí)行文件、目標(biāo)和共享庫(kù)的格式。ELF頭部Program頭部表.Text.rodata.dataSection頭部表….4.1.4程序加載鏈接好的可執(zhí)行程序,要加載到內(nèi)存中,并將其交給計(jì)算機(jī)的指令計(jì)算器,開(kāi)始運(yùn)行。加載是一個(gè)程序,執(zhí)行這個(gè)操作的方式有:在裸機(jī)上進(jìn)行加載:早期的計(jì)算通過(guò)人工設(shè)置程序啟動(dòng)地址,啟動(dòng)加載程序(卡片機(jī)),把運(yùn)行的程序送到內(nèi)存也可能是通過(guò)操作系統(tǒng)進(jìn)行的,例如,在Windows上,雙擊程序也能是從一個(gè)宿主計(jì)算機(jī)上,通過(guò)串口線或網(wǎng)線等,把可執(zhí)行文件,加載到另一臺(tái)目標(biāo)機(jī)的過(guò)程。(稱為交叉加載或下載(download))。加載程序是必須的,且要能保證加載過(guò)程中,不同的可執(zhí)行文件在內(nèi)存空間、運(yùn)行時(shí)間、外設(shè)使用上不會(huì)相互搶占而導(dǎo)致的死鎖。死鎖是一種多個(gè)任務(wù)強(qiáng)占相同的有限資源,誰(shuí)都只搶到一部分,而不愿意放掉的情況下,導(dǎo)致計(jì)算機(jī)不能利用資源完成任何工作的現(xiàn)象。4.1.5代碼調(diào)試和安全問(wèn)題在執(zhí)行過(guò)程中能夠跟蹤每條語(yǔ)句的執(zhí)行,無(wú)疑有利于尋找錯(cuò)誤。這種工作方式稱為調(diào)試(Debugging)。調(diào)試的工具稱為排錯(cuò)器(Debugger)進(jìn)行高級(jí)語(yǔ)言的跟蹤和調(diào)試,在編譯階段,不能對(duì)高級(jí)語(yǔ)言的代碼進(jìn)行優(yōu)化,因?yàn)橐坏﹥?yōu)化后,高級(jí)語(yǔ)言的語(yǔ)句與機(jī)器指令(或匯編指令)的對(duì)應(yīng)關(guān)系就可能會(huì)被破壞??梢越柚鶧ebugging工具對(duì)已有的可執(zhí)行文件進(jìn)行跟蹤,甚至修改部分指令,例如,擴(kuò)展一下功能,甚至是增加一些病毒性的指令。反調(diào)試也可以用一些技術(shù),不允許對(duì)你的可執(zhí)行文件進(jìn)行跟蹤、調(diào)試和更改指令?;蚍Q為反調(diào)試(Anti-Debugging):基于API:檢查系統(tǒng)信息,看是否存在debugger對(duì)你的程序進(jìn)行跟蹤;基于異常:檢查自己的程序是否發(fā)生異常進(jìn)程和線程塊:檢查進(jìn)程和線程是否被其它程序操作代碼修改:檢查是否有debugger對(duì)你的代碼修改和設(shè)置斷點(diǎn)基于硬件和寄存器:檢查硬件斷點(diǎn)和CPU寄存器時(shí)序和延遲:檢查指令執(zhí)行所花費(fèi)的時(shí)間,是否有異常檢測(cè)和關(guān)閉Debugger工作主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.2操作系統(tǒng)與運(yùn)行環(huán)境4.2.1調(diào)用操作系統(tǒng)的功能4.2.2庫(kù)4.2.3遠(yuǎn)程調(diào)用4.2.1調(diào)用操作系統(tǒng)的功能操作系統(tǒng)(OperatingSystem,簡(jiǎn)稱OS)是管理和控制計(jì)算機(jī)硬件資源,直接運(yùn)行在“裸機(jī)”上的軟件。OS可以讓其他(稱為應(yīng)用)程序與硬件隔離,或者說(shuō)其他應(yīng)用程序盡可或必須在操作系統(tǒng)的支持下運(yùn)行。OS一般會(huì)提供應(yīng)用程序編程接口的API(ApplicationProgrammingInterface),讓?xiě)?yīng)用型的程序員更方便的編寫(xiě)應(yīng)用程序。這些API通常會(huì)以C語(yǔ)言的方式提供,一些OS廠商也會(huì)提供Java、C++等API。應(yīng)用程序員可以不關(guān)心計(jì)算機(jī)硬件細(xì)節(jié)。4.2.2庫(kù)運(yùn)行庫(kù)(runtimelibraryRTL)是編譯器在運(yùn)行環(huán)境下調(diào)用的程序。庫(kù)有兩種,靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。靜態(tài)庫(kù)靜態(tài)庫(kù),比如C語(yǔ)言提供的stdio.lib、math.lib等庫(kù),這種LIB中有許多函數(shù),例如,stdio.lib中的printf,math.lib中的sin(x)、sqrt(x)等。是已經(jīng)編譯好的二進(jìn)制代碼文件。直接用鏈接器,將LIB中的代碼(例如,printf)加入(鏈接到)可執(zhí)行文件(EXE或者DLL)文件中。另一種靜態(tài)LIB是和DLL配合使用的,里面沒(méi)有代碼,代碼在DLL中,這種LIB是用在靜態(tài)調(diào)用DLL上的,所以起的作用也是鏈接作用。動(dòng)態(tài)庫(kù)動(dòng)態(tài)庫(kù)DLL(DynamicLinkLibrary),又稱“應(yīng)用程序拓展”。在Windows中,許多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們被分割成一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈接庫(kù),即DLL文件,放置于系統(tǒng)中。當(dāng)執(zhí)行某一個(gè)程序時(shí),相應(yīng)的DLL文件就會(huì)被調(diào)用。一個(gè)應(yīng)用程序可以使用多個(gè)DLL文件;DLL可以被多個(gè)應(yīng)用程序共享(同時(shí)使用),這樣的DLL文件被稱為共享DLL文件。4.2.3遠(yuǎn)程調(diào)用在網(wǎng)絡(luò)和分布式的計(jì)算環(huán)境下,可以用一臺(tái)計(jì)算機(jī)調(diào)用網(wǎng)上另一臺(tái)計(jì)算機(jī)的功能。這不同于在同一臺(tái)計(jì)算機(jī)上的子程序調(diào)用。或者說(shuō),一臺(tái)計(jì)算機(jī)作為服務(wù)器(稱為服務(wù)器端),向調(diào)用它的計(jì)算機(jī)(稱為客戶端)提供服務(wù),從而可以建立客戶-服務(wù)(Client-Server)的調(diào)用形態(tài)。這種程序的調(diào)用形態(tài),稱為遠(yuǎn)程調(diào)用(remoteprocedurecall(RPC))。就像在一臺(tái)機(jī)器上調(diào)用其它程序一樣。遠(yuǎn)程調(diào)用時(shí),需要執(zhí)行的函數(shù)體是在遠(yuǎn)程的機(jī)器上的,也就是說(shuō),被調(diào)用的函數(shù)是在另一個(gè)進(jìn)程中執(zhí)行的。這就帶來(lái)了幾個(gè)新問(wèn)題:1)CallID映射。2)序列化和反序列化。3)網(wǎng)絡(luò)傳輸。1)CallID映射。怎么告訴遠(yuǎn)程機(jī)器要調(diào)用哪個(gè)函數(shù)?在本地調(diào)用中,函數(shù)體是直接通過(guò)內(nèi)存地址(指針)來(lái)指定的。但是在遠(yuǎn)程調(diào)用中,不是給函數(shù)的地址(指針),因?yàn)閮蓚€(gè)機(jī)器的地址空間是完全不一樣的。所以,在RPC中,所有的函數(shù)都必須有自己的一個(gè)ID。這個(gè)ID在所有進(jìn)程中都是唯一確定的。客戶端在做遠(yuǎn)程調(diào)用時(shí),必須附上這個(gè)ID。然后,我們還需要在客戶端和服務(wù)端分別維護(hù)一個(gè){函數(shù)<-->CallID}的對(duì)應(yīng)表。兩者的表不一定需要完全相同,但相同的函數(shù)對(duì)應(yīng)的CallID必須相同。當(dāng)客戶端需要進(jìn)行遠(yuǎn)程調(diào)用時(shí),它就查一下這個(gè)表,找出相應(yīng)的CallID,然后把它傳給服務(wù)端,服務(wù)端也通過(guò)查表,來(lái)確定客戶端需要調(diào)用的函數(shù),然后執(zhí)行相應(yīng)函數(shù)的代碼。2)序列化和反序列化客戶端怎么把參數(shù)值傳給遠(yuǎn)程的函數(shù)呢?在本地調(diào)用中,只需要把參數(shù)壓到棧里(單獨(dú)開(kāi)辟的一塊內(nèi)存),然后讓函數(shù)自己去棧里讀就行。但是在遠(yuǎn)程過(guò)程調(diào)用時(shí),就需要客戶端把參數(shù)先轉(zhuǎn)成一個(gè)字節(jié)流,傳給服務(wù)端后,再把字節(jié)流轉(zhuǎn)成自己能讀取的格式。這個(gè)過(guò)程叫序列化和反序列化。同理,從服務(wù)端返回的值也需要序列化反序列化的過(guò)程。3)網(wǎng)絡(luò)傳輸遠(yuǎn)程調(diào)用是在網(wǎng)絡(luò)上的,客戶端和服務(wù)端是通過(guò)網(wǎng)絡(luò)連接的。所有的數(shù)據(jù)都需要通過(guò)網(wǎng)絡(luò)傳輸。網(wǎng)絡(luò)需要把CallID和序列化后的參數(shù)字節(jié)流傳給服務(wù)端,然后再把序列化后的調(diào)用結(jié)果傳回客戶端。這種傳輸使用的協(xié)議稱為傳輸協(xié)議。大部分RPC框架使用TCP協(xié)議,也可以用UDP,甚至是HTTP。(分別參見(jiàn)第5章和第6章)主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.3.1嵌入式計(jì)算機(jī)4.3.2移動(dòng)終端設(shè)備4.3.3交叉開(kāi)發(fā)環(huán)境4.3.1嵌入式計(jì)算機(jī)嵌入式設(shè)備是指,這些設(shè)備沒(méi)有鍵盤(pán)、顯示器、鼠標(biāo)等像PC機(jī)一樣的完整的計(jì)算機(jī)系統(tǒng)。例如,一個(gè)汽車(chē)剎車(chē)控制系統(tǒng)的計(jì)算機(jī)。嵌入式計(jì)算機(jī),一般是嵌入式在設(shè)備中的,其往往直接與設(shè)備進(jìn)行輸入輸出,例如,接收一組傳感器的信號(hào),計(jì)算機(jī)后,輸出給控制開(kāi)關(guān)、報(bào)警等。而常常不直接與用戶打交道。4.3.2移動(dòng)終端設(shè)備移動(dòng)終端:便于人攜帶、或車(chē)載的計(jì)算設(shè)備不同于嵌入式計(jì)算機(jī),有人可見(jiàn)的輸入/輸出,但是,是受限的,例如,POS收款機(jī)、一維碼和二維碼收款機(jī)等。像手機(jī)等設(shè)備,雖然也有顯示器、鍵盤(pán)等外部設(shè)備,能夠完成與人之間的輸入輸出。但是,太麻煩!4.3.3交叉開(kāi)發(fā)環(huán)境交叉編譯器(crosscompiler):將本機(jī)上的源代碼編譯為其它機(jī)器指令格式的編譯器。例如,在Windows(Intel)上的編譯器,把C代碼編譯為安卓(ARM)上的指令注意:Windows運(yùn)行在IntelX86的指令格式,將C源代碼編譯為基于安卓操作系統(tǒng)的ARM機(jī)器指令格式的可執(zhí)行代碼。鏈接器(link):與3.4.3節(jié)的鏈接器的功能是一樣,即,把多個(gè)代碼模塊裝配起來(lái)下載(download)與交叉調(diào)試器(crossdebugger):用RS232串口、網(wǎng)線等把程序裝到目標(biāo)板上在宿主機(jī)上觀看和跟蹤源代碼,在目標(biāo)機(jī)上跑二進(jìn)制碼,兩者間的代碼和指令能對(duì)上模擬器(Simulator):在宿主機(jī)操作系統(tǒng)上,模擬目標(biāo)機(jī)代碼的執(zhí)行。主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.4個(gè)體程序員能力4.4.1程序員個(gè)體能力差異4.4.2改進(jìn)個(gè)體能力4.4.1程序員個(gè)體能力差異比爾.蓋茨(BillGate)評(píng)論道:“高級(jí)機(jī)床工人可以獲得平均機(jī)床工人幾倍的工資,然而,一個(gè)厲害的代碼編程人員的價(jià)值是平均軟件編程人員的一萬(wàn)倍!”不同類(lèi)型的程序員:1)有遠(yuǎn)見(jiàn)的/藝術(shù)家的程序員(Visionary/ArtistProgrammer)2)開(kāi)拓型程序員(TrailblazerProgrammer)3)耕牛型程序員(WorkhorseProgrammer)。耕牛程序員,俗稱“碼奴”4)依附型程序員(DroneProgrammer)5)傻瓜式程序員(IdiotProgrammer)成為優(yōu)秀的程序員第一類(lèi)程序員是天才,是可遇不可求。但是如果一個(gè)天才缺乏對(duì)計(jì)算機(jī)和編程的訓(xùn)練,也不會(huì)成為軟件天才。第二和第三類(lèi)程序員是可以培養(yǎng)的,軟件工程專(zhuān)業(yè)的主要目標(biāo)是培養(yǎng)這類(lèi)人才,主要是數(shù)學(xué)、算法、編程能力、組織能力的學(xué)習(xí)和鍛煉。第二種與第三種人的差別是工作的積極態(tài)度和組織能力,這些能力可以從(創(chuàng)新創(chuàng)業(yè)類(lèi)的)項(xiàng)目實(shí)踐中得到鍛煉。第四類(lèi),依附型程序員主要是工作方式與態(tài)度問(wèn)題。4.4.2改進(jìn)個(gè)體能力程序員的勞動(dòng)是一項(xiàng)創(chuàng)造性的腦力勞動(dòng)。階段1:提高員工的意識(shí)。讓程序員們理解到個(gè)人工作意識(shí)和計(jì)劃性與整個(gè)團(tuán)隊(duì)的效率是密切相關(guān)的。階段2:提高員工的競(jìng)爭(zhēng)力。主動(dòng)提高員工的工作能力。讓每個(gè)員工具有按時(shí)完成其工作的能力,且能積極主動(dòng)工作的意識(shí)。
階段3:把員工的工作意識(shí)潛移默化到工作中,讓員工的工作成為無(wú)意識(shí)的行為。主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.5項(xiàng)目小組的組織一個(gè)大型程序,很難靠一個(gè)人完成。例如,Windows7就有幾千行萬(wàn)代碼。平均一個(gè)程序員每天也就能寫(xiě)幾行到10幾行!需要組織很多人(成千上萬(wàn)),花幾年時(shí)間完成一個(gè)項(xiàng)目就像蓋一個(gè)大樓,靠幾個(gè)工人是不行的,要有組織、管理、設(shè)計(jì)、計(jì)劃、并逐步實(shí)施。實(shí)際情況中,軟件“闌尾樓”比比皆是,耗費(fèi)巨大的投資。4.5.1小組的組織協(xié)調(diào)問(wèn)題4.5.2首席程序員的組織方式4.5.3矩陣式的組織方式4.5.4結(jié)對(duì)編程4.5.1小組的組織協(xié)調(diào)問(wèn)題
項(xiàng)目開(kāi)發(fā)中的交流方式1line3lines10linesNpersonsneedn(n-1)/2lines6lines自設(shè)計(jì)/自編程/自測(cè)試/一包到底,nocommunication一個(gè)人的軟件開(kāi)發(fā)是“個(gè)體藝術(shù)”,而不是工程。一個(gè)小組幾個(gè)人,最合理??jī)蓚€(gè)人為一組時(shí),交流途徑數(shù)n=1,h=r(2(2-1))=2r。效率會(huì)比較高。但缺乏規(guī)模。敏捷方法的結(jié)對(duì)編程(參見(jiàn)4.5.4)。三個(gè)人為一個(gè)小組時(shí),h=r(3(3-1)/2=3r。如果r>0.3,那么,h接近于1.0,即,大于一個(gè)人的工作量。如果考慮設(shè)立一個(gè)專(zhuān)門(mén)從事交流的人,那么,就只剩下兩個(gè)程序工作者。兩個(gè)技術(shù)工作者可以直接交流,而不需要管理者。因此,三人小組設(shè)立專(zhuān)職協(xié)調(diào)者是多余的,或者,管理者必須承擔(dān)技術(shù)開(kāi)發(fā)工作。4人小組的情況比3人稍好點(diǎn),不需要建立專(zhuān)職的協(xié)調(diào)人員。一個(gè)小組幾個(gè)人,最合理?5人小組的最大交流途徑數(shù)是10個(gè),h=10r,如果r大于0.1就可以設(shè)立一個(gè)專(zhuān)職的交流協(xié)調(diào)者,從而把交流途徑變?yōu)?——其他人只通過(guò)管理者交流,而不私下交流的(10條交流途徑)。管理成本占總成本的1/4。7人小組的最大交流途徑數(shù)是21個(gè),h=21r,如果r大于0.05就可以設(shè)立一個(gè)專(zhuān)職的協(xié)調(diào)者,從而把交流途徑變?yōu)?——其他6個(gè)人只通過(guò)管理者交流,而不私下交流。實(shí)際管理成本占總成本的1/6。9人小組的最大交流途徑數(shù)是36個(gè),h=36r,如果r大于0.03就可以設(shè)立一個(gè)專(zhuān)職的交流協(xié)調(diào)者,從而把交流途徑變?yōu)?——其他8個(gè)人只通過(guò)管理者交流,而不私下交流。實(shí)際管理成本占總成本的1/8。如果,小組成員不可能不進(jìn)行私下交流,特別是,對(duì)協(xié)調(diào)者有意見(jiàn)時(shí),反而導(dǎo)致協(xié)調(diào)工作量增加。甚至是無(wú)法正常開(kāi)展工作?!?原則一個(gè)人的管理和交流能力是有限的,管理學(xué)上稱為±7原則,即,一個(gè)人管理5~9人是最合理和高效的。被管理的人太少,官太多,兵太少,管理成本高。被管理的人太多,管不過(guò)來(lái),效率低軍隊(duì)的每個(gè)班一般是9人,作為最小作戰(zhàn)單位。采用3X3制,一個(gè)連下設(shè)3個(gè)排,每個(gè)排下設(shè)3個(gè)班(每班含正副班長(zhǎng)10人)=90人+3個(gè)排長(zhǎng)連長(zhǎng),副連長(zhǎng),指導(dǎo)員,副指導(dǎo)員,文書(shū),通信員=6人一個(gè)炊事班(一般5人)共:90+3+6+5=104人左右企業(yè)管理人員多少為好?
4.5項(xiàng)目小組的組織4.5.1小組的組織協(xié)調(diào)問(wèn)題4.5.2首席程序員的組織方式4.5.3矩陣式的組織方式4.5.4結(jié)對(duì)編程首席程序員的組織方式軟件開(kāi)發(fā)隊(duì)伍,就要像外科手術(shù)團(tuán)隊(duì)一樣!LinusBenedictTorvalds4.5項(xiàng)目小組的組織4.5.1小組的組織協(xié)調(diào)問(wèn)題4.5.2首席程序員的組織方式4.5.3矩陣式的組織方式4.5.4結(jié)對(duì)編程矩陣式的組織方式界面編程圖形數(shù)據(jù)庫(kù)開(kāi)發(fā)質(zhì)量保證測(cè)試項(xiàng)目A張三李四王五劉二錢(qián)一項(xiàng)目B張三王五劉二錢(qián)一項(xiàng)目C李四王五錢(qián)一人員復(fù)用:讓工程師成為某個(gè)方面專(zhuān)家,而不一定是全才!4.5項(xiàng)目小組的組織4.5.1小組的組織協(xié)調(diào)問(wèn)題4.5.2首席程序員的組織方式4.5.3矩陣式的組織方式4.5.4結(jié)對(duì)編程結(jié)對(duì)編程當(dāng)項(xiàng)目的人員較少時(shí),可以采用結(jié)對(duì)編程(Pairprogramming)進(jìn)行開(kāi)發(fā)。結(jié)對(duì)是指:兩個(gè)程序員結(jié)為對(duì)子。一個(gè)人輸入代碼,而另一個(gè)人審查他輸入每行代碼。輸入代碼的人稱作駕駛員,審查代碼的人稱作觀察員(或?qū)Ш絾T)。兩個(gè)程序員經(jīng)?;Q角色。行家對(duì)行家(Expert–expert):專(zhuān)家與新手(Expert–novice)新手新手(Novice–novice):主要內(nèi)容4.1集成開(kāi)發(fā)環(huán)境4.2操作系統(tǒng)與運(yùn)行環(huán)境4.3嵌入式與移動(dòng)終端軟件的開(kāi)發(fā)4.4個(gè)體程序員能力4.5項(xiàng)目小組的組織4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.7迭代與敏捷4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.6.1從程序開(kāi)發(fā)擴(kuò)展到軟件開(kāi)發(fā)4.6.2瀑布式開(kāi)發(fā)模型4.6.3中間文檔的價(jià)值4.6.4文檔中的圖示化表達(dá)4.6.1從程序開(kāi)發(fā)擴(kuò)展到軟件開(kāi)發(fā)分析認(rèn)識(shí)問(wèn)題設(shè)計(jì)實(shí)現(xiàn)安裝維護(hù)完成系統(tǒng)規(guī)格說(shuō)明完成可運(yùn)行的系統(tǒng)問(wèn)題描述可工作的系統(tǒng)系統(tǒng)驗(yàn)收編寫(xiě)代碼,建造可運(yùn)行的系統(tǒng)確定系統(tǒng)的形式和方法程序開(kāi)發(fā)所涉及的范圍實(shí)際上,程序員涉及到軟件的整個(gè)開(kāi)發(fā)過(guò)程糾錯(cuò)和修改廢棄一個(gè)軟件項(xiàng)目的實(shí)際過(guò)程資源(人、成本)項(xiàng)目啟動(dòng)系統(tǒng)開(kāi)發(fā)過(guò)程階段和功能時(shí)間系統(tǒng)設(shè)計(jì)預(yù)研系統(tǒng)設(shè)計(jì)部件設(shè)計(jì)單元設(shè)計(jì)單元開(kāi)發(fā)單元測(cè)試部件測(cè)試系統(tǒng)測(cè)試維護(hù)和后續(xù)活動(dòng)技術(shù)支持機(jī)器運(yùn)行、服務(wù)、支持程序、分析、等預(yù)究文檔編寫(xiě)測(cè)試開(kāi)發(fā)控制和行政管理軟件的研究、生產(chǎn)、服務(wù)軟件產(chǎn)品需求客戶到底需要啥樣的軟件功能?產(chǎn)品如何使用?如何安裝等問(wèn)題,是軟件開(kāi)發(fā)工作的首要問(wèn)題。軟件是一個(gè)系統(tǒng),不是一兩個(gè)簡(jiǎn)單的功能集合。如果需求是錯(cuò)誤的,投入再多的人力資源、成本和時(shí)間,也不能交付客戶所期望的產(chǎn)品。軟件設(shè)計(jì)特征與其它工業(yè)產(chǎn)品的設(shè)計(jì)一樣,軟件設(shè)計(jì)也應(yīng)當(dāng)有一些通用的準(zhǔn)則、用戶需求、可靠性與設(shè)計(jì)、邏輯完整性。從軟件設(shè)計(jì)策略和技術(shù)看,設(shè)計(jì)過(guò)程也應(yīng)當(dāng)是逐步求精的(例如,從頂向下的設(shè)計(jì)等),也應(yīng)當(dāng)結(jié)構(gòu)化的問(wèn)題和代碼部件的復(fù)用問(wèn)題,對(duì)開(kāi)發(fā)過(guò)程的監(jiān)控和仿真,以及高級(jí)語(yǔ)言的使用。軟件的生產(chǎn)和管理大規(guī)模軟件系統(tǒng)的生產(chǎn)面臨主要問(wèn)題之一是難以估計(jì)出項(xiàng)目所需時(shí)間。如何借鑒傳統(tǒng)工業(yè)產(chǎn)品的設(shè)計(jì)和生產(chǎn)過(guò)程,估算軟件項(xiàng)目的成本、時(shí)間和需要的(人力)資源?如果項(xiàng)目是分階段(例如,需求分析、設(shè)計(jì)、編碼和測(cè)試)進(jìn)行的,如何安排每個(gè)階段的人力資源、時(shí)間和成本?測(cè)試與質(zhì)量控制如何向客戶表明你提供的軟件沒(méi)有錯(cuò)誤或只有很少的錯(cuò)誤,不會(huì)給客戶帶來(lái)麻煩和災(zāi)難?“程序測(cè)試只能表明軟件有錯(cuò),而不能證明程序沒(méi)錯(cuò)!”那么,如何控制軟件產(chǎn)品的質(zhì)量。軟件的維護(hù)和升級(jí)軟件的功能總是要擴(kuò)展的,其中的錯(cuò)誤一旦被發(fā)現(xiàn),就要在新的版本中解決掉。這樣,軟件產(chǎn)品才具備長(zhǎng)期的生命力。4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.6.1從程序開(kāi)發(fā)擴(kuò)展到軟件開(kāi)發(fā)4.6.2瀑布式開(kāi)發(fā)模型4.6.3中間文檔的價(jià)值4.6.4文檔中的圖示化表達(dá)4.6.2瀑布式開(kāi)發(fā)模型系統(tǒng)的硬件要求分析系統(tǒng)概念硬件要求分析概要設(shè)計(jì)詳細(xì)設(shè)計(jì)制造系統(tǒng)的軟件需求分析軟件需求分析概要設(shè)計(jì)詳細(xì)設(shè)計(jì)編程、單元測(cè)試、部件集成測(cè)試CSCI測(cè)試SRRSDRSSRRDRCDRTRR硬件測(cè)試系統(tǒng)集成與測(cè)試FCAPCAFQR開(kāi)發(fā)配置產(chǎn)品基線功能基線分配基線SRR:系統(tǒng)需求評(píng)審;SDR:系統(tǒng)設(shè)計(jì)評(píng)審;SSR:軟件規(guī)格說(shuō)明評(píng)審;PDR:概要設(shè)計(jì)評(píng)審;CDR:關(guān)鍵設(shè)計(jì)評(píng)審;TRR:測(cè)試準(zhǔn)備評(píng)審;FCA:功能配置審計(jì);PCA:物理配置審計(jì);FQR:正式合格性評(píng)審。系統(tǒng)要求分析,設(shè)計(jì)系統(tǒng)要求分析系統(tǒng)設(shè)計(jì)軟件需求分析概要設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼和CSU測(cè)試CSC集成和測(cè)試CSCI
測(cè)試系統(tǒng)集成和測(cè)試軟件設(shè)計(jì)軟件編碼、測(cè)試、集成系統(tǒng)規(guī)范系統(tǒng)/子系統(tǒng)設(shè)計(jì)文檔軟件需求規(guī)格說(shuō)明接口需求規(guī)格說(shuō)明軟件開(kāi)發(fā)計(jì)劃軟件設(shè)計(jì)文檔軟件測(cè)試計(jì)劃接口設(shè)計(jì)文檔軟件測(cè)試說(shuō)明(用例)軟件測(cè)試說(shuō)明(過(guò)程)測(cè)試報(bào)告源代碼目標(biāo)碼可執(zhí)行文件靜態(tài)庫(kù)動(dòng)態(tài)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)說(shuō)明保障和運(yùn)行文檔功能基線分配基線產(chǎn)品基線基線系統(tǒng)要求評(píng)審系統(tǒng)設(shè)計(jì)評(píng)審規(guī)格說(shuō)明評(píng)審開(kāi)發(fā)配置概要設(shè)計(jì)評(píng)審關(guān)鍵設(shè)計(jì)評(píng)審測(cè)試準(zhǔn)備評(píng)審注釋?zhuān)夯€—Baseline4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.6.1從程序開(kāi)發(fā)擴(kuò)展到軟件開(kāi)發(fā)4.6.2瀑布式開(kāi)發(fā)模型4.6.3中間文檔的價(jià)值4.6.4文檔中的圖示化表達(dá)4.6.3中間文檔的價(jià)值中間產(chǎn)品質(zhì)量是最終產(chǎn)品質(zhì)量的依據(jù)中間產(chǎn)品的另一個(gè)作用是增加工作的復(fù)用程度中間產(chǎn)品可以極大地降低返工工作量中間產(chǎn)品是事后追溯的依據(jù)4.6大項(xiàng)目的開(kāi)發(fā)過(guò)程4.6.1從程序開(kāi)發(fā)擴(kuò)展到軟件開(kāi)發(fā)4.6.2瀑布式開(kāi)發(fā)模型4.6.3中間文檔的價(jià)值4.6.4文檔中的圖示化表達(dá)4.6.4文檔中的圖示化表達(dá)圖類(lèi)本科相關(guān)課程流程圖本課程、C語(yǔ)言程序設(shè)計(jì)程序之間的調(diào)用關(guān)系圖數(shù)據(jù)流圖軟件工程理論與實(shí)踐類(lèi)圖C++程序設(shè)計(jì)軟件工程理論與實(shí)踐面向?qū)ο蠓治雠c設(shè)計(jì)類(lèi)與類(lèi)之間的關(guān)系圖實(shí)體圖軟件工程理論與實(shí)踐數(shù)據(jù)庫(kù)原理實(shí)體之間的關(guān)聯(lián)關(guān)系圖活動(dòng)圖軟件工程理論與實(shí)踐、面向?qū)ο蠓治雠c設(shè)計(jì)消息順序圖軟件工程理論與實(shí)踐、面向?qū)ο蠓治雠c設(shè)計(jì)通信協(xié)議設(shè)計(jì)狀態(tài)機(jī)圖形式語(yǔ)言、編譯原理、軟件工程理論與實(shí)踐泳道圖軟件工程理論與實(shí)踐需求工程流程圖程序之間的調(diào)用關(guān)系圖
流程圖
程序之間的調(diào)用關(guān)系圖AB1B2B3C1C2C3C4D1D2D3E1E2E3D4從圖中,還可以看出:1)E2是十分重要的,它被多個(gè)程序B2、C3、D2、B3、D3調(diào)用,因此,這個(gè)程序的錯(cuò)誤會(huì)牽扯到許多程序。2)調(diào)用的層次有點(diǎn)亂,最后的代碼設(shè)計(jì)是分層次調(diào)用,避免跨層,例如,分為A、B、D、D、E幾個(gè)層,只讓A層調(diào)用B層的程序,B層調(diào)用C層的程序,等等。3)這里存在一個(gè)(間接)遞歸調(diào)用的情況,B1調(diào)用了C2,C2調(diào)用了D1,D1又調(diào)用了E1,而E1又調(diào)用B1(為清晰起見(jiàn),用虛線表示)。遞歸調(diào)用是很麻煩的,容易導(dǎo)致內(nèi)存出現(xiàn)問(wèn)題,因?yàn)?,不知道啥時(shí),可以返回到調(diào)用者,例如,這里的A。4)像C這樣的語(yǔ)言,還可以編寫(xiě)自遞歸調(diào)用,即一個(gè)程序調(diào)用自己??梢杂糜邢薮蔚难h(huán),改寫(xiě)遞歸調(diào)用程序,如果你能知道準(zhǔn)確的循環(huán)結(jié)束條件。在安全關(guān)鍵系統(tǒng)中,要避免用遞歸調(diào)用(不管時(shí)間接或自遞歸)。例子:在屏幕上打印出一條f(x)曲線。主程序:main作為一個(gè)文件,該文件中只有一個(gè)函數(shù)main子程序1:Draw(x),作為一個(gè)文件,有若干個(gè)printf,以及循環(huán)語(yǔ)句,打印出若干空格和
‘*’。子程序2:f(x),作為一個(gè)文件,計(jì)算出f(x)的值,例如,f(x)=sin(x)或其他計(jì)算公式。這樣,你就可以編寫(xiě)出打印各種f(x)程序,只需要改變子程序2:f(x)主程序和子程序1,是不變的,不用每次都編譯!且還可以給他人使用。*******
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 管廊施工方案范本
- 錨噴支護(hù)施工方案
- 課題開(kāi)題報(bào)告:管理者信息素養(yǎng)要求、技術(shù)服務(wù)能力研究
- 課題開(kāi)題報(bào)告:共同富裕背景下職業(yè)教育助力鄉(xiāng)村振興的新路徑研究
- 室內(nèi)裝修腳手架施工方案
- 冷菜、冷拼與食品雕刻技藝(第二版)第七章學(xué)習(xí)資料
- 龍門(mén)吊專(zhuān)項(xiàng)施工方案
- 燒堿批發(fā)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 計(jì)算機(jī)整機(jī)批發(fā)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 櫥柜內(nèi)嵌燈行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- DL-T5161.17-2018電氣裝置安裝工程質(zhì)量檢驗(yàn)及評(píng)定規(guī)程第17部分:電氣照明裝置施工質(zhì)量檢驗(yàn)
- 2024年共青團(tuán)入團(tuán)積極分子結(jié)業(yè)考試題庫(kù)及答案
- 實(shí)施醫(yī)院安全巡查管理制度
- 2024年社區(qū)工作者考試題庫(kù)及答案
- 2024年內(nèi)蒙古青城國(guó)有資本運(yùn)營(yíng)有限公司招聘筆試沖刺題(帶答案解析)
- 廣東省深圳市2023-2024學(xué)年六年級(jí)下學(xué)期期末語(yǔ)文試題
- 旋耕機(jī)傳動(dòng)系統(tǒng)設(shè)計(jì)
- 2024年義務(wù)教師考試招聘考試試題及答案
- 2024中考英語(yǔ)1500詞匯默寫(xiě)匯總表練習(xí)(含答案)
- YJ-T 27-2024 應(yīng)急指揮通信保障能力建設(shè)規(guī)范
- 2024屆高三英語(yǔ)作文復(fù)習(xí)寫(xiě)作專(zhuān)項(xiàng)讀后續(xù)寫(xiě):幫我修車(chē)的墨西哥一家人(人性之光)任務(wù)單學(xué)案
評(píng)論
0/150
提交評(píng)論