版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第十章軟件編碼(Software Coding)信息學(xué)院計算機(jī)系 張翠肖2內(nèi)容提要內(nèi)容提要正確理解軟件編碼正確理解軟件編碼 軟件編碼的含義編碼的含義 程序員程序員應(yīng)具備的能力軟件編碼規(guī)范軟件編碼規(guī)范 目的與意義目的與意義 編碼規(guī)范的要求編碼規(guī)范的要求軟件代碼檢查軟件代碼檢查 錯誤的嚴(yán)重性與類型錯誤的嚴(yán)重性與類型 代碼檢查清單代碼檢查清單實例分析實例分析3Professional Programmer Software Engineer正確觀點(diǎn):軟件編碼是一個復(fù)雜而迭代的過程,包括程序設(shè)計和程序?qū)崿F(xiàn)。軟件編碼要求 正確地理解用戶需求和軟件設(shè)計思想 正確地根據(jù)設(shè)計模型進(jìn)行程序設(shè)計 正確地而高效率
2、地編寫和測試源代碼軟件編碼是設(shè)計的繼續(xù),會影響軟件質(zhì)量和可維護(hù)性10.1 正確理解軟件編碼正確理解軟件編碼410.1 正確理解軟件編碼正確理解軟件編碼軟件編碼的工作軟件編碼的工作5軟件編碼的工作軟件編碼的工作 程序設(shè)計理解軟件的需求說明和設(shè)計模型補(bǔ)充遺漏的或剩余的詳細(xì)設(shè)計設(shè)計程序代碼的結(jié)構(gòu)設(shè)計審查檢查設(shè)計結(jié)果記錄發(fā)現(xiàn)的設(shè)計缺陷(類型、來源、嚴(yán)重性)編寫代碼應(yīng)用編碼規(guī)范進(jìn)行代碼編寫所編寫代碼應(yīng)該是易驗證的10.1 正確理解軟件編碼正確理解軟件編碼6代碼走查確認(rèn)所寫代碼完成了所要求的工作記錄發(fā)現(xiàn)的代碼缺陷(類型、來源、嚴(yán)重性)編譯測試10.1 正確理解軟件編碼正確理解軟件編碼710.1 正確理解軟
3、件編碼正確理解軟件編碼編碼過程與文檔流編碼過程與文檔流8基礎(chǔ)知識英語的功底數(shù)學(xué)基礎(chǔ)(算法分析與設(shè)計)計算機(jī)科學(xué)基礎(chǔ)知識基本技能認(rèn)識事物的能力(抽象、模型、結(jié)構(gòu)、層次)做事的邏輯性和條理性溝通技能、演講技巧和團(tuán)隊協(xié)作能力學(xué)習(xí)新知識和新技術(shù)的能力10.2 程序員應(yīng)具備的能力程序員應(yīng)具備的能力9 個人素質(zhì)方面聰明有自我發(fā)展能力足夠自信有很強(qiáng)的工作驅(qū)動能力,知道如何開展工作沉著與鎮(zhèn)定有創(chuàng)新精神 對待產(chǎn)品和技術(shù) 熱愛技術(shù),熱心解決問題 針對變化和創(chuàng)新,有良好的適應(yīng)和管理能力舉例:微軟公司對員工的要求10舉例:微軟公司對員工的要求 注重客戶的反饋 所有員工都要以客戶為中心開展工作 員工代表公司的形象 團(tuán)隊
4、合作方面 有團(tuán)隊精神 具備良好的交流能力 善于與人相處 你怎樣看待這些要求?11內(nèi)容提要內(nèi)容提要正確理解軟件編碼正確理解軟件編碼軟件編碼的含義編碼的含義程序員程序員應(yīng)具備的能力軟件編碼規(guī)范軟件編碼規(guī)范目的與意義目的與意義編碼規(guī)范的要求編碼規(guī)范的要求軟件代碼檢查軟件代碼檢查錯誤的嚴(yán)重性與類型錯誤的嚴(yán)重性與類型代碼檢查清單代碼檢查清單實例分析實例分析1210.2 編碼規(guī)范編碼規(guī)范軟件編碼規(guī)范軟件編碼規(guī)范與特定語言相關(guān)的描寫如何編寫代碼的規(guī)則集合現(xiàn)實軟件全生命周期的 70% 成本是維護(hù)軟件在其生命周期中很少由原編寫人員進(jìn)行維護(hù)目的提高編碼質(zhì)量,避免不必要的程序錯誤增強(qiáng)程序代碼的可讀性、可重用性和可移
5、植性13基本要求程序結(jié)構(gòu)清析且簡單易懂,單個函數(shù)的行數(shù)一般不要超過 100行(特殊情況例外)算法設(shè)計應(yīng)該簡單且直接了當(dāng),代碼要精簡,避免出現(xiàn)垃圾程序盡量使用標(biāo)準(zhǔn)庫函數(shù)(類方法)和公共函數(shù)(類方法)。 最好使用括號以避免二義性10.2 編碼規(guī)范編碼規(guī)范14編碼規(guī)范的要求編碼規(guī)范的要求 可讀性要求:可讀性第一,效率第二。 源程序文件應(yīng)有文件頭說明,函數(shù)應(yīng)有函數(shù)頭說明。 主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο螅┒x或引用時,注釋要能夠反映其含義。 常量定義有相應(yīng)說明。 處理過程的每個階段都有相關(guān)注釋說明。 在典型算法前都有注釋。 一目了然的語句不加注釋。 應(yīng)保持注釋與代碼完全一致。 利用縮進(jìn)來顯示程序的邏輯
6、結(jié)構(gòu),縮進(jìn)量統(tǒng)一為 4 個字節(jié),不得使用 Tab 鍵的方式。 對于嵌套的循環(huán)和分支程序,層次不要超過五層。15編碼規(guī)范的要求編碼規(guī)范的要求 舉例:JAVA 程序的標(biāo)準(zhǔn)格式(課本 P198 示例 9.1) 文件結(jié)構(gòu) 說明版權(quán)和版本信息的文件頭注釋 package 和 import 語言 類和接口說明語句Section 結(jié)構(gòu) Class / interface 的注釋 Class / interface 語句 Class / interface 實現(xiàn)注釋(必要時) Class(static)變量 Instance 變量(public, protected, package, private) Co
7、nstructors Methods(以功能進(jìn)行分組)16編碼規(guī)范的要求編碼規(guī)范的要求 舉例:JAVA 程序注釋(課本 P205 示例 9.6 ) 三種風(fēng)格:文檔風(fēng)格、C 語言風(fēng)格、單行注釋 注意事項 程序中的注釋不能過多 不必要注釋含義已經(jīng)十分清楚的代碼 修改代碼時應(yīng)該同時修改注釋,以保證注釋和代碼的一致性 注釋應(yīng)當(dāng)準(zhǔn)確易懂,防止出現(xiàn)二義性 注釋的位置應(yīng)該與被描述的代碼相鄰,應(yīng)該寫在程序代碼的上方并且和代碼左對齊 變量定義和分支語句(條件分支、循環(huán)語句等)必須寫注釋,因為這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵。17編碼規(guī)范的要求編碼規(guī)范的要求 命名規(guī)則 標(biāo)識符的命名應(yīng)當(dāng)直觀,可以望文知義,
8、最好采用英文單詞或其組合; 標(biāo)識符的長度應(yīng)當(dāng)符合“最小長度下的最大信息”原則,過長的英文單詞應(yīng)該采用一些通用而合理的縮寫或者應(yīng)用領(lǐng)域?qū)I(yè)術(shù)語的縮寫; 程序中不要出現(xiàn)僅依靠大小寫來區(qū)分的相似標(biāo)識符; 程序中不要出現(xiàn)局部變量和全局變量同名的現(xiàn)象,免得引起誤解; 變量名應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”的形式; 函數(shù)名應(yīng)當(dāng)使用“動詞”或者“動詞名詞”的形式。18編碼規(guī)范的要求編碼規(guī)范的要求 命名規(guī)則 類和接口的命名采用以大寫字母開頭的單詞組合而成; 常量名采用全大寫的單詞組合而成,并在單詞之間用單下劃線分隔,但是首尾最好不使用下劃線; 變量名和參數(shù)名采用第一個單詞首字母小寫而后面的單詞首字母大寫的單
9、詞組合; 可以使用前綴s_(表示 static)區(qū)別靜態(tài)變量,在不得以使用)區(qū)別靜態(tài)變量,在不得以使用全局變量時可以加前綴g_(表示 global),類的成員變量加前),類的成員變量加前綴m_(表示 member)可避免成員變量與成員函數(shù)參數(shù)同名;)可避免成員變量與成員函數(shù)參數(shù)同名; 函數(shù)名采用第一個單詞首字母小寫而后面的單詞首字母大寫的單詞組合,同時使用 get、set和和 is表示訪問器函數(shù)。表示訪問器函數(shù)。19編碼規(guī)范的要求編碼規(guī)范的要求 結(jié)構(gòu)化要求 禁止使用 GOTO( C 語言)語句。 用 IF 語句來強(qiáng)調(diào)只執(zhí)行兩組語句中的一組,禁止 ELSE GOTO和 ELSE RETURN。
10、避免從循環(huán)中引出多個出口,應(yīng)保留函數(shù)(方法)只有一個出口。 問題:以下示例有什么問題?如何修改?p = (char *)malloc(300);if (cond1 0)strcpy(p, str);else return;free(p);20編碼規(guī)范的要求編碼規(guī)范的要求 正確性與容錯性要求 程序首先是正確,其次是考慮優(yōu)美和效率。 對所有的用戶輸入,必須進(jìn)行合法性和有效性檢查。 所有變量在調(diào)用前必須被初始化。 改一個錯誤時可能產(chǎn)生新的錯誤,因此在修改前首先考慮對其它程序的影響。 單元測試也是編程的一部分,提交聯(lián)調(diào)測試的程序必須通過單元測試。21編碼規(guī)范的要求編碼規(guī)范的要求 可重用與可移植性要求
11、重復(fù)使用的且完成相對獨(dú)立功能的算法或接口,應(yīng)該考慮封裝成公共的控件或類,如時間、日期處理,字符串格式處理,數(shù)據(jù)庫連接,文件讀寫等,以提高個人是系統(tǒng)中程序的復(fù)用或協(xié)同開發(fā)過程中程序的可重用。 相對固定和獨(dú)立的程序?qū)崿F(xiàn)方式和過程,應(yīng)考慮做成程序模板,增強(qiáng)對程序?qū)崿F(xiàn)方式的復(fù)用,如對符合一定規(guī)范的 XML數(shù)據(jù)的解析等過程。22內(nèi)容提綱 正確理解軟件編碼 軟件編碼的含義 程序員應(yīng)具備的能力 軟件編碼規(guī)范 目的與意義 編碼規(guī)范的要求You are here!你在這兒! 實例分析23例 1:程序注釋 程序注釋的原則 注釋應(yīng)當(dāng)淺顯、明白 注釋不是程序員指南 注釋不是標(biāo)準(zhǔn)庫函數(shù)參考手冊 注釋的主要任務(wù)是答疑解惑
12、而不是增加程序的行數(shù) 好的注釋是對設(shè)計思想的精確表述和清晰展現(xiàn) 問題: 例 1 的程序注釋存在什么問題? 按照上述原則,如何修改例 1 的程序注釋?24例 2:程序注釋 例 2 所示的程序風(fēng)格如何?你能夠容易理解嗎? 編程人員的理由 使用 z 打頭的變量名、函數(shù)名、宏定義名就像是為自己的旅行箱貼標(biāo)簽 將 void, int, float 等基本數(shù)據(jù)類型重新命名,可以在最大程度上保證代碼的可移植性 使用宏定義表示一些基本的功能運(yùn)算可以大幅度減少源程序的行數(shù),也可以被后者方便地復(fù)用 使用高度簡練的縮寫可以加強(qiáng)源代碼的保密程度 你是否認(rèn)同上述理由?為什么?25例 3:內(nèi)存問題 例 3 所示的程序運(yùn)行
13、時會崩潰,其中有四處足以讓程序崩潰的錯誤,找出錯誤并改加以正。 總結(jié) 非法內(nèi)存訪問的基本特征是代碼訪問了不該訪問的內(nèi)存地址 某些“自由的”語言更容易引發(fā)內(nèi)存錯誤(如 C/C+) 要避免產(chǎn)品中出現(xiàn)內(nèi)存錯誤,好的編碼規(guī)范、所選的語言和工具、有效的測試等工作都是有意義的26例 3:內(nèi)存問題 內(nèi)存的分配方式 從靜態(tài)存儲區(qū)域分配內(nèi)存在編譯時已分配好,在程序的整個運(yùn)行期間都存在。例如:全局變量、靜態(tài)變量等。 在堆棧上創(chuàng)建在函數(shù)執(zhí)行期間,函數(shù)內(nèi)的局部變量(包括形參)的存儲單元都創(chuàng)建在堆棧上,函數(shù)結(jié)束時這些存儲單元自動釋放(堆棧清退)。 從堆( heap )上分配,也稱動態(tài)內(nèi)存分配程序運(yùn)行期間用 malloc 或 new 申請任意數(shù)量的內(nèi)存,程序員自己掌握釋放內(nèi)存的恰當(dāng)時機(jī)(使用 free 或 delete)。27例 3:內(nèi)存問題 建議 使用 malloc 或 new 申請內(nèi)存之后,應(yīng)該立即檢查指針值是否為 NULL(或進(jìn)行異常處理),以防使用值為 NULL 的指針。 不要忘記初始化指針、數(shù)組和動態(tài)內(nèi)存,防止將未初始化的內(nèi)存作為右值使用。 避免數(shù)組或指針下標(biāo)越界,特別要當(dāng)心“多 1 ”或“少 1 ”操作。 動態(tài)內(nèi)存的申請與釋放必須配對,防止內(nèi)存泄漏。 使用 f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年執(zhí)業(yè)藥師資格藥事管理與法規(guī)相關(guān)知識考試題庫與答案
- 2024年春季課堂:《贈劉景文》課件的創(chuàng)新實踐
- 2024年安全心理學(xué)課件在軍事訓(xùn)練中的實踐探索
- 商業(yè)銀行經(jīng)營與管理課后習(xí)題答案(1-6章)
- 2024初中數(shù)學(xué)競賽七年級競賽輔導(dǎo)講義專題19 最值問題含答案
- 第45屆世界技能大賽時裝技術(shù)項目全國選拔賽技術(shù)工作文件
- 科目一考試技巧口訣表-駕考實操
- 面向2024年的傳染病護(hù)理學(xué)教案創(chuàng)新
- 2024年體育產(chǎn)業(yè)變革:虛擬體育與電競市場
- 《削鉛筆》教案設(shè)計:2024年教育技術(shù)應(yīng)用解析
- 基礎(chǔ)管理風(fēng)險分級管控清單(雙體系)
- 醫(yī)學(xué)課件:臨床決策分析
- 江蘇開放大學(xué)2023年秋《中級會計實務(wù)(上) 050284》第4次任務(wù)參考答案
- 屋頂光伏安全專項施工方案
- 4.與食品經(jīng)營相適應(yīng)的主要設(shè)備設(shè)施布局操作流程等文件
- 四班三倒排班表
- 銀行業(yè)信息系統(tǒng)災(zāi)難恢復(fù)管理規(guī)范
- 醫(yī)院重點(diǎn)崗位工作人員輪崗制度
- 2023光伏發(fā)電工程項目安全文明施工方案
- 帶式輸送機(jī)膠帶安裝
- 陳育民對FLAC3D常見問題的解答概要
評論
0/150
提交評論