個人工程訓練作的是手寫漢字識別,在GitHub上下載了一套與課題相關的源碼進行分析,來分析它的代碼風格和規範:python
在源代碼目錄結構、文件名/類名/函數名/變量名等命名、接口定義規範和單元測試組織形式等方面的作法和特色:編程
這個項目是用python完成的項目,因此將項目文件導入至pycharm軟件中進行管理,下面是項目代碼在pycharm下目錄結構:編程語言
如上圖所示,該項目文件目錄結構層次清晰,命名規範,符合要求;函數
如上圖所示,文件名/類名/函數名/變量名等命名符合如下規則:單元測試
1.數字不能夠開頭測試
2.不可使用關鍵字 例如:class就不能夠,由於class是關鍵字。優化
3.不能夠包含「_、$」之外的特殊符號,例如:「DemoTest」就不能夠,其中的空格就是特殊符號。spa
如上圖所示,接口定義規範:日誌
在Python中接口由抽象類和抽象方法去實現,接口是不能實例化的,只能被別的類繼承去實現相應的功能。函數封裝了功能實現,調用時給出指定參數便可,部分參數給出默認參數,缺省時可按默認值傳入。直接將功能封裝在函數內部,調用函數傳遞指定參數便可實現。代碼規範
4.單元測試組織形式
單元測試就是讓開發者編寫一小段代碼,檢驗目標代碼的功能是否符合預期。組織方法形式有:自上而下法、自下而上法、分離法等。
一般狀況下,單元測試主要面向一些功能單一的模塊進行。因此在此項目中,每當實現一部分功能,就要自上而下地測試該部分代碼可否實現規定的要求。
列舉哪些作法符合代碼規範和風格通常要求;
如圖所示,該項目代碼符合代碼規範的有:
1.命名規範
命名可讀性強,函數以及類和變量的命名沒有使用拼音與英文混合的方式,也沒有直接使用中文的方式,對於其功能和用途可以清晰讀懂,符合代碼規範。
2.縮進規範
代碼總體的排版縮進看起來清晰規整,符合代碼規範。
列舉哪些作法有悖於「代碼的簡潔、清晰、無歧義」的基本原則,及如何進一步優化改進;
如上圖所示,不符合「代碼的簡潔、清晰、無歧義」的基本原則的有:
1.註釋不規範規範
註釋內容少,沒有準確描述代碼含義不符合代碼規範。
2.可讀性差
如上圖所示,該項目的代碼可讀性差,每行代碼超長,一下一大坨,讓人眼花繚亂,不符合代碼規範。
同類編程語言或項目在代碼規範和風格的通常要求:
1.排版
1-1:程序塊要採用縮進風格編寫,縮進的空格數爲4個。
1-2:相對獨立的程序塊之間、變量說明以後必須加空行。
1-3:不容許把多個短語句寫在一行中,即一行只寫一條語句。
1-4:對齊只使用空格鍵,不使用TAB鍵。
1-5:函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要採用縮進風格,case語句下的狀況處理語句也要聽從語句縮進要求。
2 .註釋
2-1:通常狀況下,源程序有效註釋量必須在20%以上。
2-2:文件頭部應進行註釋,註釋必須列出:版權說明、版本號、生成日期、做者、內容、功能、修改日誌等。
2-3:函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關係(函數、表)等。
2-4:邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。再也不有用的註釋要刪除。
2-5:註釋的內容要清楚、明瞭,含義準確,防止註釋二義性。
3. 標識符命名
3-1:標識符的命名要清晰、明瞭,有明確含義,同時使用完整的單詞或你們基本能夠理解的縮寫,避免令人產生誤解。
3-2:命名中若使用特殊約定或縮寫,則要有註釋說明。
3-3:本身特有的命名風格,要自始至終保持一致,不可來回變化。
3-4:對於變量命名,禁止取單個字符(如i、j、k...),建議除了要有具體含義外,還能代表其變量類型、數據類型等,但i、j、k 做局部循環變量是容許的。
3-5:除非必要,不要用數字或較奇怪的字符來定義標識符。
3-6:在同一軟件產品內,應規劃好接口部分標識符(變量、結構、函數及常量)的命名,防止編譯、連接時產生衝突。
3-7:用正確的反義詞組命名具備互斥意義的變量或相反動做的函數等。
4. 可讀性
4-1:注意運算符的優先級,並用括號明確表達式的操做順序,避免使用默認優先級。
4-2:避免使用不易理解的數字,用有意義的標識來替代。
4-3:源程序中關係較爲緊密的代碼應儘量相鄰。
4-4:不要使用難懂的技巧性很高的語句,除非頗有必要時。
以上這些作法符合代碼規範和風格通常要求以及同類編程語言或項目在代碼規範和風格的通常要求。