提前認識軟體開發(16) 如何對程式進行最佳化

來源:互聯網
上載者:User

對程式進行最佳化,是軟體開發工程師必然會涉及到的問題。那麼為什麼要對程式進行最佳化呢?原因有以下幾個:

第一,在原程式基礎之上新增、刪除或修改了功能,需要改變原程式流程。客戶需求隨時可能會變化,今天已經實現的功能,說不定明天就要修改或去掉。落實到程式上面,就需要我們隨時準備對寫好的代碼進行修改,而不要奢望寫好之後就永遠不要動了。

第二,原程式有bug。這類情況出現得非常的頻繁,很多軟體有1.0、2.0、3.0等版本,部分原因就是前面版本中程式有問題,在修改程式的過程中使得軟體版本不斷升級。

第三,原程式效率較低或不便於閱讀,對程式進行最佳化之後可提高效率或更易於閱讀。在軟體項目中,對每個函數包含的程式碼數都有一定的規定,如果超出了規定的行數,就要考慮對代碼進行最佳化,將部分函數提取出來單獨寫成一個函數。

有關程式最佳化,我們要遵循以下兩個原則:

第一,“小步快跑”原則。這個原則是指每修改一點點就對程式進行測試,測試通過之後再修改一點點,再進行測試。如此不斷地迴圈下去,直到程式修改完成並測試通過。這樣可以確保程式功能的正確性,減少後期重大變更所帶來的成本。

第二,“兩頂帽子”原則。一頂是只重構代碼而不新增功能,一頂是增加新的功能以實現新需求。即如果發現原程式存在諸多問題,需要先進行最佳化後再添加新的功能,那麼第一步就最佳化原代碼而不增加新功能,第二步在新代碼的基礎之上添加新代碼以實現新功能。

本文以一個實際的程式為例,詳細介紹如何對程式碼進行最佳化。

1.最佳化之前的程式

本程式實現將輸入字串中的大寫字母變成小寫字母的功能,具體代碼如下:

#include <stdio.h>     #include <stdlib.h>     #include <string.h>                void main()     {         char s[100];         unsigned int  i;              scanf("%s", s);         for(i=0; i<strlen(s);i++)            { s[i]=tolower(s[i]); }         printf("%s\n", s);     }

可以看出,本程式存在如下問題:

(1)代碼排版不工整且無注釋。

(2)變數命名不規範,且在定義的同時沒有進行初始化。

(3)代碼縮排不規範,for語句的書寫不規範。

(4)對於輸入和輸出,沒有相應的文字提醒。

(5)對於大寫轉換為小寫功能,可考慮封裝為一個函數,利於閱讀和其它的模組調用。

可以看出,雖然程式能夠實現基本的功能,但並非最優的。以下我們將逐步對代碼進行最佳化。

2.對代碼進行最佳化

Step 1:重新對程式排版,並添加註釋

對於排版不工整且注釋過少的代碼,最佳化的第一步就是規範排版並添加必要的注釋。排版的規則是“{}”之內的語句相對於“{}”要縮排4個空格,同級的代碼要對齊。在程式的頭部、函數的頭部及關鍵語句處要添加註釋。

修改之後的代碼如下所示:

/**********************************************************************     *著作權 (C)2014, Zhou Zhaoxiong。     *     *檔案名稱: StrToLowerCase.c     *檔案標識:無     *內容摘要:將輸入字串中的大寫字母變成小寫字母     *其它說明:無     *目前的版本: V1.0     *作  者: Zhou Zhaoxiong     *完成日期: 20140426     *     *修改記錄1://修改記錄,包括修改日期、版本號碼、修改人及修改內容     *修改日期: 20140426     *版本號碼: V1.0     *修改人: Zhou Zhaoxiong     *修改內容:建立     **********************************************************************/     #include <stdio.h>     #include <stdlib.h>     #include <string.h>                /**********************************************************************     *功能描述:主函數     *輸入參數:無     *輸出參數:無     *傳回值:無     *其它說明:無     *修改日期      版本號碼    修改人          修改內容     * ----------------------------------------------------------------------------------------------     *20140426        V1.0     Zhou Zhaoxiong      建立     ***********************************************************************/     void main()     {         char s[100];         unsigned int  i;                    printf("Input the source string: ");         scanf("%s", s);                        //讀入原始字串                    for (i = 0; i < strlen(s); i ++)         {             s[i] = tolower(s[i]);   //將字串中的大寫字母變成小寫字母,其它字元不變         }                    printf("Output the destination string: %s\n", s);   //輸出目的字串     }

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.