寫程式工具

(由寫程式架生跳轉過嚟)

寫程式工具粵拼se2 cing4 sik1 gung1 geoi6英文programming tool),又叫軟件開發工具software development tool),係電腦程式(或者程式功能)嘅一種,泛指啲整嚟預咗幫人創造程式、做 debug 或者做第啲寫程式相關工作嘅程式同功能[1]

2018 年嘅 Spyder 軟件;Spyder 係隻好受歡迎嘅 Python 開發環境,可以畀用家輕易噉睇到啲檔案喺邊(最左個視窗)同埋睇源碼(左邊數起第二個視窗)。

舉例說明,Spyder 軟件係隻相當出名嘅 Python 開源寫程式工具,有多種功能畀人用佢寫程式[2]

... 呀噉。隨住軟件工程嘅發展,人類對寫程式工具有一定嘅需求,而每個領域往往有佢哋專用嘅架生-寫(例如)遊戲程式繪圖軟件用嘅功能可以好唔同;經驗有返咁上下豐富嘅軟件工程師,都要熟自己嗰行用開嘅寫程式工具,並且按自己手上單工作揀要用邊隻架生[3][4]

篇文以下嘅內容,假設睇嘅人已經識基礎嘅電腦程式編寫軟件工程

源碼編輯 編輯

內文:源碼編輯器
睇埋:解析器

源碼編輯器(source code editor)係指畀用家編輯個程式嘅源碼文字編輯器:一個源碼編輯器可以單獨存在,亦可以係一個網頁瀏覽器或者綜合開發環境(IDE;睇下面)嘅一部份[5]。源碼編輯器多數都會有功能或多或少噉自動處理代碼風格嘅嘢,包括-

  • 句法突顯(syntax highlight):按一段字嘅特性,將段字顯示做唔同嘅色水或者唔同字款,等段字更加易睇;即係例如顯示段源碼嗰陣,表示變數嘅字冚唪唥黑色,表示迴圈陳述式嘅字冚唪唥藍色,表示注釋嘅字冚唪唥綠色... 如此類推,好似下圖幅 gif 噉,噉用家容易一眼就睇到每段字係表示啲乜[6]
  • 自動完成(autocomplete):指估計用家跟住想打啲乜碼,畀用家齋靠撳一兩個掣就即刻打段碼出嚟;好似下圖幅 gif 噉,用家淨係打咗 Conso,個編輯器經已估佢想打 Console 同相關嘅陳述式,仲畀佢有得打打吓直接叫個編輯器出其中一段陳述式[7]
  • 括弧配對(bracket matching):指「檢驗啲括弧啱唔啱」嘅功能,例如 ((())) 呢段碼有 3 個 ( 3 個 ),所以啲括弧配對得啱,而 (({))) 呢段碼就唔啱-有 2 個 ( 3 個 ),而個 { 冇對應嘅 }。括弧配對功能就係攞一段碼,然後話畀用家知「啲括弧啱唔啱,而如果唔啱,係喺邊個位出錯」噉嘅資訊[8]
     
    一幅 gif 顯示位用家喺度睇同改個程式嘅源碼畀用家睇同編輯程式嘅源碼係寫程式工具最基本嘅功能之一。
  • 極簡化(minimization):指由段碼度攞走啲唔必要嘅字符,例如係空格(好多時加落段碼度純粹係為咗等段碼清楚啲易睇啲)呀噉[9]。用以下呢行 JavaScript 碼做例子[註 1]
    var array = [];
    for (var i = 0; i < 20; i++) {
      array[i] = i;
    }
    
    • 極簡化咗就會變做噉-
    for(var a=[i=0];i<20;a[i]=i++);
    
  • 搵重複(duplications finding):指探測段碼入面有冇重複咗-代碼重複係指源碼有其中段出現咗超過一次,而呢種情況一般畀人認為係唔理想嘅,例如會嘥位(睇埋 DRY 原則);唔少寫程式工具都曉自動噉摷吓段碼,睇吓段碼有冇重複嘅情況,有嘅話就建議用家整個子程序嚟解決呢個問題[10]
  • 代碼審查(code review):喺專業嘅軟件工程當中,寫好個程式嘅源碼之後通常會搵人睇吓段碼,當中負責睇段碼嘅人係冇份寫段碼嘅;寫程式工具好多時會有啲功能,幫手做代碼審查嘅工作,例如有唔少常犯錯誤都係電腦程式可以輕易噉探測到嘅,所以寫程式工具好多時會內置埋「自動噉檢查吓啲碼,睇吓啲碼有冇呢啲常犯錯誤」嘅功能[11][12]

... 呀噉。

相關功能 編輯

睇埋:GitHub同埋反組合器

除咗畀用家編輯源碼之外,寫程式工具好多時仲會有以下呢啲功能:

  • 圖像用家介面(GUI):指將編程相關嘅功能用圖像化嘅方式表示出嚟;例如源碼編輯器除咗會顯示段源碼,好多時仲會喺顯示源碼嘅視窗隔離顯示另一個視窗,後者顯示個程式用緊嗰啲檔案目錄,或者顯示第啲有用嘅資訊(睇埋下面綜合開發環境嘅嘢)。
  • 編譯工具(compiler):編譯係指將一段源碼轉化做第隻程式語言嘅過程;喺編程上,編譯器最常見嘅用途係,攞嚟將段由高級程式語言寫嘅碼轉化做電腦識睇識行(但淨係由 01 組成、對人嚟講難明)嘅機械碼[13]
  • 自動組建(build automation):軟件組建軟件工程嘅一樣必要工序,指將段源碼轉化做可以實際攞去行嘅程式;實際經驗表明,喺大啲嘅軟件項目當中,吓吓手動噉做軟件組建行唔通,所以應用上嘅軟件工程都會用組建自動化-有啲特製程式自動噉做軟件組建[14]
  • Log:指一個紀錄作業系統或者第啲軟件運行嘅檔案;例如一個(簡化版)伺服器嘅 log 會紀錄好似噉嘅資訊[15]
    用家 112XXXXXX 喺 YYYY 年 M 月 D 日 13:51:31 用過 http:xxxxxxxxxx 呢個檔案;
    用家 129XXXXXX 喺 YYYY 年 M 月 D 日 13:51:40 用過 http:xxxxxx234x 呢個檔案;
    ...
    • Log 喺做 debug 等嘅工作嗰陣好有用。
  • 手稿語言(scripting language):指用嚟操作同更改一個現存系統嘅功能嘅程式語言,好多時係喺行個程式嗰陣直譯,而唔係編譯咗先行嘅;例如遊戲引擎 Unity 係一隻用嚟整電子遊戲嘅軟件,有多種方便整遊戲嘅功能,包括畀用家用 C♯ 呢隻物件導向程式語言(程式語言)寫手稿,用手稿嚟設定隻遊戲入面啲物件嘅行為(更改一個現存系統嘅功能)-C♯ 就係 Unity 嘅手稿語言[16]
  • 控制流程圖(control flow graph):指將控制流程迴圈if-then 等-用圖像化嘅方式呈現出嚟[17][18];好似下圖噉,想像下圖嗰 4 個波 A B C D 都各自係段碼,
    1. 個程式會行 A;
    2. A 行完之後個程式有句條件陳述式if 某條件係真就行 B,else 個程式就會行 C,
    3. 無論個程式行嘅係 B 定 C,最後都會行 D。
    • 唔少人認為,控制流程圖令複雜(好多時成閒閒哋幾千行碼咁長)嘅程式清楚易睇好多,有啲寫程式工具仲做到自動由源碼度產生一幅控制流程圖[19]
 
 
Bugzilla 嘅一幅截圖;Bugzilla 係一隻頗受歡迎嘅 bug 跟蹤管理系統,而呢幅圖顯示佢畀用家報告 bug 嘅表格。
  • 版本控制(version control):指「管理住對一件軟件產品(例如一個寫緊嘅程式)改咗啲乜」呢種功能,最簡單嘅做法係同每個檔案名加返個冧把-即係 XXX V1.0 或者 XXX V2.0 噉;版本控制相關嘅功能好緊要-事實表明,有咁上下大嘅軟件項目會有數量龐大(閒閒哋幾百幾千)次嘅編輯,而且有陣時軟件工程師仲會(例如)發覺 10 次前吓修改有問題,所以想返轉頭搵返 10 次編輯前嗰個版本;因為噉,軟件工程師正路會想有套系統,清清楚楚噉打理好整緊嗰隻軟件嘅版本[20]
  • 性能分析(performance analysis):指幫手分析一個程式嘅「性能」嘅功能;如果話件工具識得做性能分析,係指件工具曉畀出一啲顯示個程式「寫得有幾好」嘅重要資訊-例如係個程式行嗰陣用咗幾多時間(睇埋時間複雜度)或者用咗幾多記憶體(睇埋空間複雜度),或者係個程式用每個子程序用咗幾多次... 呀噉。呢啲功能對最佳化嚟講好有用[21]
  • Bug 跟蹤管理系統(bug-tracking):泛指用嚟紀錄住啲有關 bug 嘅報告嘅應用程式;喺實際應用上,軟件工程整嘅程式梗會有返咁上下複雜,難免會有 bug;因為噉,專業嘅軟件工程師成日都會用 bug 跟蹤管理系統,即係個系統識喺有 bug 出現嗰陣,將有關隻 bug 嘅資訊-例如「隻 bug 發生嗰時隻程式處於咩狀態」噉-紀錄低同埋提供報告畀軟件工程師知,方便工程師同隻軟件做 debug [22]
  • 垃圾回收(garbage collection):記憶洩漏係指個程式攞咗啲記憶體嚟用,但用完之後又冇「放返開」啲記憶體,於是個程式就霸咗一啲佢唔會用嘅記憶體,所以就搞到部電腦有嘅系統資源量不必要噉減少咗。具體啲講,程式嘅源碼入面成日會有類似以下噉嘅碼-
    攞 XXX 呢件資源嚟用;
    將攞到嘅資源做 YYY 噉嘅運算;
    • 好多時,用家仲有必要手動噉加多行碼(類似 delete() 噉),話畀部電腦知「個程式用完 XXX 呢嚿資源喇,嚿資源霸咗嘅記憶體可以空出嚟做第啲嘢」[註 2]。如果用家冇噉做,就會引致記憶洩漏,喺複雜啲嘅軟件當中,記憶洩漏會搞到隻軟件行起上嚟明顯慢咗[23]。到咗廿一世紀初,多人用嘅程式語言或者寫程式工具往往會或多或少噉有垃圾回收-指教部電腦自動噉釋放啲「個程式打後唔再提到」嘅記憶體-或者類似嘅功能[24]
  • SWIG:SWIG 係一隻開源軟件工具,能夠將用 C 或者 C++ 寫嘅程式「連接」第啲高級程式語言;SWIG 係一部編譯器,能夠攞住由 C 或者 C++ 寫成嘅程式,容許由第啲程式語言-包括 Python 同埋 Java-寫成嘅程式個 C/C++ 程式嘅 output 去用[25]
  • 二進制代碼嘅兼容性(binary compatibility):喺廿一世紀初,無論一個電腦程式嘅源碼係用咩語言寫,部電腦攞個程式去行嗰陣都係要經編譯器,將段源碼轉換做電腦內部實際行嘅機械碼;唔同 CPU 架構用嘅機械碼語言可以好唔同,所以是但攞段碼,嗰段碼喺電腦 A 上面行到,但段碼搬咗去電腦 B 上面就有可能要重新做過編譯(甚至改段碼)先至行得到;有啲寫程式工具做嘅,就係探測兩部機之間有冇二進制代碼嘅兼容性[26]
  • 自動編程:指「人類用家畀啲高層次嘅指令,然後件工具自動噉產生出段源碼」噉嘅功能[27]

... 呀噉。

IDE 編輯

 
一個遊戲引擎嘅 GUI 有幾個大視窗,左上視窗顯示隻遊戲個虛擬世界、右上視窗顯示其中一件物件嘅程式碼... 呀噉。
內文:綜合開發環境

綜合開發環境(IDE)係指設計嚟幫人開發軟件應用程式。一般嚟講,一隻 IDE 會有返個圖像用家介面,將啲重要嘅資訊(例如係每個變數嘅值)清楚噉顯示嗮畀用家睇,而且基本上會有齊嗮寫程式架生嗰啲主要功能,包括 debugger手稿語言同埋源碼編輯器... 等等,令用家有得一站式噉做嗮開發軟件要做嗰啲工作,唔使整整吓轉去第隻軟件度[28]

例子可以睇吓 Unity 等嘅遊戲引擎。遊戲引擎係設計嚟俾人開發電子遊戲嘅 IDE,會有齊嗮啲畀人用嚟開發遊戲用嘅配套,包括係電子遊戲成日用嗰啲聲效圖像技術物理模擬,而且仲會將呢啲嘢擺喺個圖像用家介面當中,(例如)隻 IDE 有若干個視窗,一個視窗顯示手上有嘅檔案、下一個視窗顯示隻遊戲個虛擬世界、下一個視窗用文字型式列出個世界有嘅物件同每件物件嘅名... 呀噉[29]

註釋 編輯

  1. 為咗方便起見,段碼嘅其餘部份省略咗。
  2. 尤其係 C 或者 C++ 等稍為低階嘅語言嘅子程序

睇埋 編輯

文獻 編輯

  • Boehm, B. W. (1976). Software engineering. IEEE Trans. Computers, 25(12), 1226-1241.
  • Delahaye, M., & Du Bousquet, L. (2015). Selecting a software engineering tool: lessons learnt from mutation analysis (PDF). Software: Practice and Experience, 45(7), 875-891.
  • Gray, J. P., Liu, A., & Scott, L. (2000). Issues in software engineering tool construction. Information and software technology, 42(2), 73-77.
  • Kernighan, B. W., & Plauger, P. J. (1976). Software tools. ACM SIGSOFT Software Engineering Notes, 1(1), 15-20.
  • Yoon, Y., & Myers, B. A. (2011, October). Capturing and analyzing low-level events from the code editor. In Proceedings of the 3rd ACM SIGPLAN workshop on Evaluation and usability of programming languages and tools (pp. 25-30).

引用 編輯

  1. 10 Best Tools and Libraries Programmers and Software Developers should learn in 2022. Medium.
  2. What is Python Spyder IDE and How to use it?. Medium.
  3. 25 BEST Software Development & Programming Tools in 2022. Guru99.
  4. 20 BEST Software Development Tools (2022 Rankings). Software Testing Help.
  5. Asenov, D., & Muller, P. (2014, July). Envision: A fast and flexible visual code editor with fluid interactions (overview). In 2014 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC) (pp. 9-12). IEEE.
  6. Sarkar, A. (2015, July). The impact of syntax colouring on program comprehension. In PPIG (p. 8).
  7. Murray, K. I., & Bigham, J. P. (2011, September). Beyond autocomplete: Automatic function definition (PDF). In 2011 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC) (pp. 259-260). IEEE.
  8. Automatic Brace Matching in Visual Studio.
  9. Crockford, Douglas (11 September 2001). "JSMin: The JavaScript Minifier". Crockford.com.
  10. Arcelli Fontana, Francesca; Zanoni, Marco; Ranchetti, Andrea; Ranchetti, Davide (2013). "Software Clone Detection and Refactoring". ISRN Software Engineering. 2013: 1-8.
  11. Baum, Tobias; Liskin, Olga; Niklas, Kai; Schneider, Kurt (2016). "A Faceted Classification Scheme for Change-Based Industrial Code Review Processes". 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS). pp. 74-85.
  12. Kolawa, Adam; Huizinga, Dorota (2007). Automated Defect Prevention: Best Practices in Software Management. Wiley-IEEE Computer Society Press.
  13. Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2007). Compilers: principles, techniques, & tools. Pearson Education India.
  14. Rahman, A., Partho, A., Meder, D., & Williams, L. (2017, May). Which factors influence practitioners' usage of build automation tools?. In 2017 IEEE/ACM 3rd International Workshop on Rapid Continuous Software Engineering (RCoSE) (pp. 20-26). IEEE.
  15. Rice, R. E., & Borgman, C. L. (1983). The use of computer-monitored data in information science. Journal of the American Society for Information Science, 44, 247-256.
  16. Scripting Language.
  17. Shivers, O. (1988, June). Control flow analysis in scheme. In ACM SIGPLAN Notices (Vol. 23, No. 7, pp. 164-174). ACM.
  18. Frances E. Allen (July 1970). "Control flow analysis". SIGPLAN Notices. 5 (7): 1–19.
  19. StatiCFG. Github.
  20. Loeliger, J., & McCullough, M. (2012). Version Control with Git: Powerful tools and techniques for collaborative software development. " O'Reilly Media, Inc.".
  21. Krauss, K.J. (2017). "Performance Profiling with a Focus 互聯網檔案館歸檔,歸檔日期2018年5月18號,.". Develop for Performance.
  22. 15 Best Bug Tracking Tools (Defect Tracking Tools) in 2022. Guru99.
  23. Memory Leak in Python requests. GeeksForGeeks.
  24. Jones, R., & Lins, R. (1996). Garbage collection: algorithms for automatic dynamic memory management. John Wiley & Sons, Inc.
  25. 2.1 What is SWIG?.
  26. Chapter 2 Binary Compatibility.
  27. Rich, C., & Waters, R. C. (1988). Automatic programming: Myths and prospects. Computer, 21(8), 40-51.
  28. Chafle, G., Das, G., Dasgupta, K., Kumar, A., Mittal, S., Mukherjea, S., & Srivastava, B. (2007, July). An integrated development environment for web service composition. In IEEE International Conference on Web Services (ICWS 2007) (pp. 839-847). IEEE.
  29. MSCOM (March 12, 2007). "The GUI versus the Command Line: Which is better? (Part 1)". Technet.com.

編輯