| 揚聲器 |
抄本 |
| 奧羅拉·蒂芙尼·戴維斯 |
大家好,我是 Aurora Tiffany-Davis。我是 JMP Live 團隊的軟體開發人員。今天我想和大家聊聊 JMP Live 團隊的軟體開發工作。 |
| |
首先,我想讓你想像一下開發軟體是什麼樣子。如果你自己不是開發人員,那麼你腦海中的畫面可能會受到你看過的電視和電影的影響。 |
| |
您可能會想像某個獨自工作的人、某個非常聰明的人、甚至可能是天才,而且他們的工作流程非常簡單。 |
| |
他們思考一個問題,編寫一些程式碼,然後確保它能正常運作。而且很可能確實如此,畢竟他們是天才。 |
| |
如果我們都是 JMP Live 的天才,那麼這個簡單的流程應該要很管用。但我們並非如此,而且我們生活在現實世界中。所以我們需要的遠不止這些。 |
| |
首先,我們並不是單獨工作,而是緊密協作,我們的流程包含多個步驟,力求確保我們生產的不僅是一些軟體,而且是高品質的軟體。 |
| |
我要指出的是,軟體開發沒有唯一正確的方法。不同公司,甚至同一公司內部,方法可能有所不同,但我將帶你了解我們的流程。 |
| |
透過告訴您如果我要在 JMP Live 中開發新功能我會做什麼。 |
| |
首先,在我坐下來寫程式碼之前,我必須有一些這樣做的需要。 |
| |
肯定有真正的用戶遇到了真正的問題,他們在 JMP Lives 中發現了一些無法正常工作的軟體……這些軟體沒有按照他們想像的方式運行, |
| |
這是一種委婉的說法,表示他們發現了錯誤或他們所要求的任何功能。 |
| |
我們在內部系統中追蹤這些請求。所以我要做的第一件事就是進入這個系統,找到一個與我的技能相符的高優先級問題,然後開始著手處理。 |
| |
接下來我需要進一步了解需求。我會和大家溝通,看看什麼樣的使用者想要這個功能。他們會如何使用它。 |
| |
然後,我將在我的電腦上運行 JMP Live,並查看此功能在現有的 JMP Live 中如何適用。 |
| |
或者我可能會打開程式碼並查看新程式碼是否適合我們現有的程式碼庫。 |
| |
一旦我覺得自己對需求有了相當好的理解,我就會開始設計。同樣,我會和大家交流。我會問團隊成員:“你開發過類似的功能嗎?你以前處理過這部分程式碼嗎?” |
| |
我將與 JMP 的使用者體驗專家進行交流。 |
| |
我會盡量避免重複勞動。如果某個功能非常常見,且並非 JMP Live 獨有,例如將某些資訊記錄到檔案中。 |
| |
這個問題已經解決了,過去已經有一千人遇過這個問題。或許會有一個很好的開源解決方案。 |
| |
如果是這樣,我可能會在仔細審查以確保其安全後使用它。 |
| |
還有很多內容要講解,很多 JMP Live 專用程式碼需要寫。所以我會寫文章、圖表, |
| |
描述我的方案,並確保團隊中的每個人都對我的設計方向感到滿意。然後我才會坐下來寫程式。 |
| |
為此,我將使用整合開發環境,這是一種編寫程式碼的工具,它具有許多花哨的功能,可以幫助您更有效率地完成工作。 |
| |
現在我已經寫了一些程式碼。在提交之前,我想先找出程式碼中存在的問題。我只是個凡人,所以第一次嘗試就寫出 100% 完美程式碼的可能性很小。 |
| |
我將從尋找非常明顯的問題開始,為此,我使用靜態分析。 |
| |
靜態分析不是在程式碼執行時進行檢查,而是像檢查剛寫在紙上的程式碼一樣。這類似於 Microsoft Word 中的拼字檢查。 |
| |
拼字檢查無法告訴你是否寫了一本引人入勝的小說,但它可以告訴你是否漏掉了一個逗號。程式碼的靜態分析可以做到這一點。 |
| |
一旦我發現並修復了這類非常明顯的問題,我就會繼續尋找不太明顯的問題。為此,我們使用了自動化測試套件。 |
| |
這與靜態分析不同,因為它實際上會運行程式碼。它會使用特定的輸入來運行一段程式碼,並期望得到特定的輸出。我們為程式碼編寫了各種各樣的測試。 |
| |
我會坐下來為正在開發的功能編寫測試。 |
| |
這真的很有用,因為坐下來寫測試迫使我理清自己對程式碼具體應該如何運作的思考。此外,它還能防止將來其他人意外破壞該功能。這是一種及早發現問題的好方法。 |
| |
現在開始手動測試。我會在我的機器上運行 JMP Live,測試一下這個新功能,確保它能按照我預期的方式運作。 |
| |
我甚至可能會在 JMP Live 背後的資料庫中四處尋找並追蹤記錄、貼文、群組、用戶和評論,以確保所有這些記錄都按照我認為應該的方式寫入。 |
| |
現在我謹慎樂觀地認為我已經寫了一些不錯的程式碼,下一步就是同儕審查。我希望我的同行能幫我檢查程式碼,找出我可能遺漏的地方。 |
| |
我可能因為自己對某些事情一知半解,或是團隊裡有人掌握了我所不具備的知識而錯過了一些東西。這一步通常對審閱者也很有幫助,因為他們可能會學到一些新技術。 |
| |
經過同行評審後,我們就可以實際提交程式碼或將其檢入原始碼儲存庫了。 |
| |
我們的伺服器上有一個持續建置系統,它會監視我們簽入程式碼。當我們這樣做時,它會使用該程式碼執行大量操作。 |
| |
例如,確保正確的檔案位於正確的位置,並以正確的方式命名等等。它還會返回並重新運行我們的堆疊分析,並重新運行我們的整個自動化測試套件。 |
| |
這很有用,畢竟我們只是凡人。有些人可能在流程的早期階段就忘記了做這些事情,或者自從上次做完之後,某些事情可能發生了變化。 |
| |
一旦程式碼通過持續構建,開發團隊以外的人員就可以使用它。最早發現這一點的人是 JMP 內部的測試專業人員。 |
| |
他們會進行檢查,可能會添加到我們的自動化測試套件中,也可能會執行一些手動測試。 |
| |
他們可能會研究軟體在不同的作業系統、不同的瀏覽器等等上運作情況。他們會設想使用者可能會做的一些瘋狂的事情,然後觀察會發生什麼以及軟體會如何回應。 |
| |
他們是我們流程中至關重要的一部分。他們非常有創意地思考,試圖找出我們產品中的問題。 |
| |
一旦他們簽字同意,該軟體就可以在我們的下一個軟體版本中使用。現在讓我放大一下,向你們展示一下產品…整個流程。 |
| |
這其中涉及很多步驟,內容也非常多。我們真的要對所有程式碼都這麼做嗎? |
| |
不管你信不信,我們確實這麼做了,但這個過程規模非常大。所以,對於一個非常簡單、顯而易見的 bug,我們會非常快速地逐步完成這個過程。 |
| |
但是對於這個過程的每個步驟中非常複雜的新功能,我們都會放慢速度,花時間並非常小心地確保我們真的做對了。 |
| |
任何耗時耗力的事情都會對公司造成成本。那麼,JMP 為何願意在軟體品質上投入如此多的資金呢? |
| |
原因很簡單,我們對自己的工作感到自豪,我們想要生產出好的產品。 |
| |
第二個原因就沒那麼理想化了。我們知道,如果我們的產品有問題,而我們沒發現,客戶就會發現,這對業務不利。所以我們希望盡量減少這種情況。 |
| |
需要指出的是,雖然 JMP 確實在軟體品質方面投入了時間和金錢, |
| |
我們不像 NASA 那樣投入那麼多資金,所以我們無法保證完美。就像市面上任何一款軟體一樣, |
| |
您可能會發現 JMP Live 中的某些功能未如您預期的方式運作。如果您發現任何…建議, |
| |
我們誠摯邀請您造訪www.jmp.com/support ,並告訴我們您是否認為任何功能應該有所不同,或者您希望將來添加哪些功能。 |
| |
來自真實用戶的真實回饋對我們來說非常寶貴,我們非常歡迎。今天要分享的內容就到這裡,希望大家能享受接下來的 Discovery 之旅。謝謝。 |