# 〈軟體開發到發佈:全流程紀錄〉AutoFill - 自動填教學表單系統 --- Tu 2024/5/9 ***"Quality is never an accident; it is always the result of intelligent effort."*** **- John Ruskin** ![mael-balland-p1u0pMSweb0-unsplash](https://hackmd.io/_uploads/rk7rCMLz0.jpg) ## [===專案連結===](https://github.com/NYCU-DataCraft/AutoFill) ## 一、前言 我們學校每學期結束前會要求學生填教學問卷,簡單來說就是對課程的滿意度調查,雖然不是什麼難事,但系統會要求要填完問卷才能選下學期的課,所以每次都要花15-20分鐘以上來填,非常麻煩。 尤其是上個學期,因為課程規畫特殊,每一門課還要針對不同指導老師寫,總共按了57份問卷。為了避免腕隧道症候群,我在上學期時寫了一個簡單的Python腳本來幫我填問卷,而這學期我想把他包裝成大家都能使用的模式,並發佈到網路上,順便體驗一把從開發到發佈的完整流程。 ## 二、開發流程 #### 我覺得可以分四個階段 **1. 發現問題 2. 初步解決問題 3. 製作GUI介面 4. 打包、發佈、宣傳** --- ### **發現問題** 其實就是前言講的那些,因為填表單太麻煩了,我也有發現不少同學有類似的困擾,發現其受眾不少後就決定動手解決問題。 ### **初步解決問題** 一開始其實沒想那麼多,只是打算寫給自己用,所以最初版的大概花了3hr完成,也沒有什麼使用者介面之類的,就是一個py檔。由於是學校的網頁系統,我用的是Selenium這個套件,雖然花了不少時間,但在ChatGPT的幫忙下其實很快就解決問題了。 ### **製作GUI介面** **v1.0.0-alpha的GUI介面** ![螢幕擷取畫面 2024-05-08 233544](https://hackmd.io/_uploads/ryXHpGFfC.png) 其實第一個版本沒什麼想法,就是能用就好,我用python內建的tkinter隨便做了一個GUI,這個主要是在alpha測試階段的成品,頂多傳給一、兩個同學做測試。 **v2.2.1-beta的GUI介面** ![螢幕擷取畫面 2024-05-09 165634](https://hackmd.io/_uploads/rkJElM5zC.png) 在進入beta測試以前我想說介面真的太陽春了,而且問卷的表單選項也不只有一種(我把回答都預設成選擇固定的選項),於是我決定在發佈以前增加一些功能和彈性,首先我先用[Sun-Valley-ttk-theme](https://github.com/rdbende/Sun-Valley-ttk-theme)這個套件美化我的tkinter GUI。tkinter的缺點就是他真的太醜了,而sv-ttk這個套件提供簡單的使用方式讓你30秒就能把它變得好看一點。 ![螢幕擷取畫面 2024-05-09 165733](https://hackmd.io/_uploads/ByySgf5fA.png) 另外我也增加了一些功能,包括自訂回答選項、使用說明、關於我們、等等。此外還有像調整夜間模式這類的小功能。這提升了原先為了解決個人問題的程式的使用彈性,讓更多人能根據自己的需求使用它。 ### **打包、發佈測試、宣傳** 這部分是我最想嘗試的,畢竟以前寫的東西都只有我自己用,因此終於能發佈給不認識的用戶測試時我還是很興奮的。 **GitHub專題Repo** ![螢幕擷取畫面 2024-05-09 170515](https://hackmd.io/_uploads/B1U1MfczC.png) 這個階段最大的問題就是怎麼distribute我的程式,畢竟我不可能傳一個裝滿py檔的資料夾給用戶。我最後的解決方法是用pyinstaller把tkinter的介面包裝成Exe檔,雖然Window系統的防火牆之類的東西會一直擋(畢竟單一個exe檔真的很可疑),但這也是最簡單的方法。 為了方便不懂程式的使用者,我想了很多方法去Dummy-proof下載方式。最後選擇用GitHub的Releases功能來發佈我的軟體,這個方法的好處是我可以在Readme的地方寫下載步驟,而且宣傳的時候只要給GitHub連結就可以了。此外,GitHub的Releases也提供很好的管理功能和下載的便利性,讓不懂程式的人也能簡單的下載exe檔。 宣傳的部分我想辦法在學校相關的臉書社團、Line大群組等等地方做宣傳,也找了一些系上的同學幫我測試有沒有問題,而他們也給了我很多有幫助的回饋。 ## 三、結語 雖然這篇沒什麼技術含量(畢竟就是簡單的tkinter、selenium),但我覺得這個專題是我第一次從頭到尾去處理一個軟體的開發流程,雖然可能不是很專業,但真的蠻好玩的。