軟件工程(C編碼實踐)學習總結——中國科學技術大學孟寧老師主講!

       原創作品轉載請註明出處《軟件工程(C編碼實踐篇)》MOOC課程http://mooc.study.163.com/learn/USTC-1000002006

      軟件工程(C編碼實踐篇)》,課程的主要是講授軟件工程相關知識。孟寧老師並沒有侷限於傳統軟件工程科的授課方式,而是通過實現一個C語言小項目,不斷的改進、演化來呈現無設計代碼、模塊化設計的代碼、可複用的代碼和回調函數等接口設計,以及可重入函數、線程安全等較深入的設計問題。並且課程給出的代碼很全且詳細,通過跟隨模仿來訓練工程化代碼的編寫能力,辨識代碼的工程質量差異。

       不同於其他的課程,這次的軟件工程採取的線上線下課程,讓我受益良多。由於是通過完善一個項目來不斷推進對軟件工程思想的理解,在學習的過程中並沒有感覺到枯,反而有了極大的興趣,使得我對軟件工程有了更深入的理解。同時,實踐的過程中不需要在自己的電腦上搭建環境,給自己負載滿滿的電腦帶來了極大的解放。

       老師很幽默,每次看視頻的時候,都會打開記事本,寫下老師所說的內容,或者關鍵代碼。筆記截圖如下:


        同時,視頻看完後也會立馬去完成線上的實驗,在線下實驗的時候,就會回顧本實驗的內容,並且通過go語言實現。在完成實驗後,會認真的寫實驗報告,記錄下自己實驗過程與思想,以及遇到問題。所寫的實驗報告得到了同學們的認可。

一、學習心得

        好的軟件工程代碼是講究代碼的規範,設計的規範,模塊化思想,需要保證線程安全的,子系統的可重用。學習到諸多知識,僅列出其中的這一部分知識。

        1. 在代碼的規範上,需要項目組統一格式,函數和變量的命名方式,每個語句前是用tab鍵還是用4個空格 等等都需要規範!寫代碼一定要考慮錯誤處理,編碼中的功能實現與錯誤處理符合20/80規律,大多數時間是寫錯誤處理使得代碼更健壯。

        2. 在設計規範上,要保證代碼是高內聚,例如一個函數只做一件事,一個模塊只做一類事的,實現功能儘量用庫函數;還有要遵循“不和陌生人說話”的原則,以保證除了類提供的接口,別人無法訪問類的其他內容。同時要合理使用數據結構、控制結構等來簡化代碼。

        3. 在模塊化的思想中,講究高內聚低耦合,接口要規範,代碼要注意通用性,接口定義了軟件單元對外提供的服務,函數名、參數和返回值是接口的三個顯性要素。

        4. 在處理多線程問題中,需要關注函數是否是可重入的,使用互斥鎖,讀寫鎖以保證多線程安全。一個函數是可重入的,一個模塊是可重入的概念,若每個函數是可重入的,但整個模塊也有可能是不可重入的。

        5. 在子系統的設計當中,要設計出可重用的接口。即使是makefile文件,也需要考慮到可重用性。

二、實驗報告

     1. 實驗一:寫一個hello world小程序

          實驗思路:a. 使用mkdir lab1創建一個文件夾,並在目錄下創建一個hello.c文件;

                           b. 使用vim打開的hello.c文件;

                           c. 在hello.c文件中寫入代碼並使用:wq命令保存;

                           d. 使用git add 、git commit和git push提交寫好的代碼到代碼庫;

           實驗報告:https://www.shiyanlou.com/courses/reports/1270279

       2. 實驗二:命令行小程序V1.0

           實驗思路:a. 使用vim ~/.vimrc更改vim配置文件

                            b. 創建實驗文件夾lab2,創建menu.c

                            d. 使用vi menu.c,打開文件寫代碼

            實驗報告:https://www.shiyanlou.com/courses/reports/1272283

       3. 實驗三:內部模塊化的命令行菜單小程序V2.0

            實驗思路:a. 首先將所有程序代碼寫在menu.c一個文件中

                             b. 待運行成功之後,將menu.c文件拆分爲3個文件:分別爲linklist.c, linklist.h, menu.c;

                                 linklist.h文件中存放程 序的結構體定義和函數聲明;

                                 linklist.c存放linklist.h聲明函數的實現;

                                 menu.c存放具體的每個指令函數的實現

                             c. 重新運行程序成功

             實驗報告:https://www.shiyanlou.com/courses/reports/1273261

         4. 實驗四:用可重用的鏈表模塊來實現命令行菜單小程序V2.5    

             實驗思路:a. 首先創建linktable.h文件,寫入函數名以及宏定義

                              b. 創建linktable.c文件,寫入函數的具體實現

                              c. 創建menu.c文件,寫入對具體命令的操作等

                              d. 編譯執行文件

              實驗報告:https://www.shiyanlou.com/courses/reports/1274961

         5.  實驗五:用callback增強鏈表模塊來實現命令行菜單小程序V2.8

              實驗思路:a. 在se_files目錄下通過命令tar -zxvf命令解壓lab5-1.tar.gz

                               b. 解壓完後出現lab5.1文件夾,進入該文件夾;

                                   編譯linktable.c,linktable.h,menu.c三個文件,運行menu,發現quit命令無法使用

                               c. 打開linktable.c,修改語句,使程序能夠正確運行

                               d. 通過命令cp -r se_files/lab5.1/. Code/shiyanlou_cs122/lab5

                                   將幾個文件拷入到lab5文件夾下進行接下來的實驗

                               e. 對linktable.h,lintable.c,menu.c三個文件進行修改,重新編譯運行

              實驗報告:https://www.shiyanlou.com/courses/reports/1276057

          6. 實驗七:將menu設計爲可重用的子系統

             實驗思路:a. 首先像之前實現menu程序的接口,按照這次實驗要求封裝接口;

                              b. 修改命令行參數的方式,定義一個函數將命令行轉換成argc和argv;

                                  shell將命令行解析成argc和argv傳遞給執行程序;

                              c. 將自己編寫的具體指令處理函數使menu程序接口定義在test.c文件中;

                              d. 編寫Makefile文件。

              實驗報告:https://www.shiyanlou.com/courses/reports/1278273

三、總結

      1. 對軟件工程的思想有了更進一步的認識,知道了函數的可重入性,線程安全等知識;

          第一次懂得了如何在真正項目中應用軟件工程思想。

      2. 同時在課程實踐過程中,對linux系統的一些指令和c語言有了進一步瞭解。

      3. 懂得了如何使用makefile文件來編譯文件

      遺憾:遺憾的是由於自己選的課不均衡,導致課都在下半學期,沒能夠上臺跟老師和同學分享知識。還有就是沒有更多的機會來實踐軟件工程思想,希望自己以後能夠將軟件工程的思想應用到自己所做的項目中。


  



     

        



        

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章