寫程式工具
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Spyder-windows-screenshot.png/300px-Spyder-windows-screenshot.png)
寫程式工具(粵拼:se2 cing4 sik1 gung1 geoi6;英文:programming tool),又叫軟件開發工具(software development tool),係電腦程式(或者程式功能)嘅一種,泛指啲整嚟預咗幫人創造程式、做 debug 或者做第啲寫程式相關工作嘅程式同功能[1]。
舉例說明,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]。
... 呀噉。
相關功能
[編輯]除咗畀用家編輯源碼之外,寫程式工具好多時仲會有以下呢啲功能:
- 圖像用家介面(GUI):指將編程相關嘅功能用圖像化嘅方式表示出嚟;例如源碼編輯器除咗會顯示段源碼,好多時仲會喺顯示源碼嘅視窗隔離顯示另一個視窗,後者顯示個程式用緊嗰啲檔案嘅目錄,或者顯示第啲有用嘅資訊(睇埋下面綜合開發環境嘅嘢)。
- 編譯工具(compiler):編譯係指將一段源碼轉化做第隻程式語言嘅過程;喺編程上,編譯器最常見嘅用途係,攞嚟將段由高級程式語言寫嘅碼轉化做電腦識睇識行(但淨係由
0
同1
組成、對人嚟講難明)嘅機械碼[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 都各自係段碼,
- 個程式會行 A;
- A 行完之後個程式有句條件陳述式,
if
某條件係真就行 B,else
個程式就會行 C, - 無論個程式行嘅係 B 定 C,最後都會行 D。
- 唔少人認為,控制流程圖令複雜(好多時成閒閒哋幾千行碼咁長)嘅程式清楚易睇好多,有啲寫程式工具仲做到自動由源碼度產生一幅控制流程圖[19]。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/If-then-else-control-flow-graph.svg/180px-If-then-else-control-flow-graph.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Bugzilla_create2.png/300px-Bugzilla_create2.png)
- 版本控制(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 噉嘅運算;
- SWIG:SWIG 係一隻開源軟件工具,能夠將用 C 或者 C++ 寫嘅程式「連接」第啲高級程式語言;SWIG 係一部編譯器,能夠攞住由 C 或者 C++ 寫成嘅程式,容許由第啲程式語言-包括 Python 同埋 Java-寫成嘅程式個 C/C++ 程式嘅 output 去用[25]。
- 二進制代碼嘅兼容性(binary compatibility):喺廿一世紀初,無論一個電腦程式嘅源碼係用咩語言寫,部電腦攞個程式去行嗰陣都係要經編譯器,將段源碼轉換做電腦內部實際行嘅機械碼;唔同 CPU 架構用嘅機械碼語言可以好唔同,所以是但攞段碼,嗰段碼喺電腦 A 上面行到,但段碼搬咗去電腦 B 上面就有可能要重新做過編譯(甚至改段碼)先至行得到;有啲寫程式工具做嘅,就係探測兩部機之間有冇二進制代碼嘅兼容性[26]。
- 自動編程:指「人類用家畀啲高層次嘅指令,然後件工具自動噉產生出段源碼」噉嘅功能[27]。
... 呀噉。
IDE
[編輯]![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/LogicBricksPythonScript.jpg/300px-LogicBricksPythonScript.jpg)
綜合開發環境(IDE)係指設計嚟幫人開發軟件嘅應用程式。一般嚟講,一隻 IDE 會有返個圖像用家介面,將啲重要嘅資訊(例如係每個變數嘅值)清楚噉顯示嗮畀用家睇,而且基本上會有齊嗮寫程式架生嗰啲主要功能,包括 debugger、手稿語言同埋源碼編輯器... 等等,令用家有得一站式噉做嗮開發軟件要做嗰啲工作,唔使整整吓轉去第隻軟件度[28]。
例子可以睇吓 Unity 等嘅遊戲引擎。遊戲引擎係設計嚟俾人開發電子遊戲嘅 IDE,會有齊嗮啲畀人用嚟開發遊戲用嘅配套,包括係電子遊戲成日用嗰啲聲效、圖像技術同物理模擬,而且仲會將呢啲嘢擺喺個圖像用家介面當中,(例如)隻 IDE 有若干個視窗,一個視窗顯示手上有嘅檔案、下一個視窗顯示隻遊戲個虛擬世界、下一個視窗用文字型式列出個世界有嘅物件同每件物件嘅名... 呀噉[29]。
註釋
[編輯]睇埋
[編輯]文獻
[編輯]- 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).
引用
[編輯]- ↑ 10 Best Tools and Libraries Programmers and Software Developers should learn in 2022. Medium.
- ↑ What is Python Spyder IDE and How to use it?. Medium.
- ↑ 25 BEST Software Development & Programming Tools in 2022. Guru99.
- ↑ 20 BEST Software Development Tools (2022 Rankings). Software Testing Help.
- ↑ 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.
- ↑ Sarkar, A. (2015, July). The impact of syntax colouring on program comprehension. In PPIG (p. 8).
- ↑ 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.
- ↑ Automatic Brace Matching in Visual Studio.
- ↑ Crockford, Douglas (11 September 2001). "JSMin: The JavaScript Minifier". Crockford.com.
- ↑ Arcelli Fontana, Francesca; Zanoni, Marco; Ranchetti, Andrea; Ranchetti, Davide (2013). "Software Clone Detection and Refactoring". ISRN Software Engineering. 2013: 1-8.
- ↑ 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.
- ↑ Kolawa, Adam; Huizinga, Dorota (2007). Automated Defect Prevention: Best Practices in Software Management. Wiley-IEEE Computer Society Press.
- ↑ Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2007). Compilers: principles, techniques, & tools. Pearson Education India.
- ↑ 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.
- ↑ 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.
- ↑ Scripting Language.
- ↑ Shivers, O. (1988, June). Control flow analysis in scheme. In ACM SIGPLAN Notices (Vol. 23, No. 7, pp. 164-174). ACM.
- ↑ Frances E. Allen (July 1970). "Control flow analysis". SIGPLAN Notices. 5 (7): 1–19.
- ↑ StatiCFG. Github.
- ↑ Loeliger, J., & McCullough, M. (2012). Version Control with Git: Powerful tools and techniques for collaborative software development. " O'Reilly Media, Inc.".
- ↑ Krauss, K.J. (2017). "Performance Profiling with a Focus 互聯網檔案館嘅歸檔,歸檔日期2018年5月18號,.". Develop for Performance.
- ↑ 15 Best Bug Tracking Tools (Defect Tracking Tools) in 2022. Guru99.
- ↑ Memory Leak in Python requests. GeeksForGeeks.
- ↑ Jones, R., & Lins, R. (1996). Garbage collection: algorithms for automatic dynamic memory management. John Wiley & Sons, Inc.
- ↑ 2.1 What is SWIG?.
- ↑ Chapter 2 Binary Compatibility.
- ↑ Rich, C., & Waters, R. C. (1988). Automatic programming: Myths and prospects. Computer, 21(8), 40-51.
- ↑ 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.
- ↑ MSCOM (March 12, 2007). "The GUI versus the Command Line: Which is better? (Part 1)". Technet.com.
拎
[編輯]- (英文) Programming Tool. Techopedia.
- (英文) 20 BEST Software Development Tools (2022 Rankings). Software Testing Help.