My Internship at GoFreight: A Journey of Growth

Jason Wang
GoFreight HQ
Published in
6 min readJan 25, 2024
Q4 Team Building

關於我 / About Me

嗨~我是 GoFreight 的 SDET 實習生 Jason,目前就讀交大管理研究所,在研究所就學前,我是一名後端軟體工程師,在擔任工程師一陣子後,逐漸開始有「除了開發,我還會做什麼,我還可以做什麼」的想法,而就如同 Steve Jobs 說的:

The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle.

不想要讓心裡的聲音停留在想像,於是辭掉了工程師的工作,回到學校唸書探索,開啟我找尋自我的道路~

Hey there! I’m Jason, an SDET intern at GoFreight, and I’m currently studying for my Master’s in Management at National Chiao Tung University. Before hitting the books for grad school, I was working as a backend software engineer. After a bit of time, I started wondering, “What else can I do beyond coding? What other avenues are out there for me?” This kind of thinking really reminds me of what Steve Jobs said:

The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle.

I didn’t want to just sit on those thoughts, so I quit my engineering job to go back to school and explore, setting off on a journey to discover my true self.

為什麼要實習?/ Why internship ?

就我的工作經驗來看,學校所學與工作經歷我認為都同等重要,學校中學習的理論提供了基礎知識和概念,這是理解複雜問題和發展專業技能的基石;而在工作實務中所獲得的知識和技能則更偏向實際應用,這類經驗有助於將理論與現實世界的情境相結合,從而提高解決實際問題的能力,所以除了平常上學時間,我在時間分配上選擇了在企業進行實習。

From my experience, I think what you learn in school is just as important as what you gain from working. The theories you study in class give you the foundational knowledge and concepts, which are key to understanding complex issues and developing your professional skills. On the flip side, the know-how and skills you pick up on the job lean more towards practical application. This kind of experience is crucial for linking theory with real-world scenarios, boosting your ability to tackle real problems. That’s why, aside from my regular classes, I chose to intern at companies to get the best of both worlds.

Join GoFreight SDET Team !

在暑假快結束時,投遞了 GoFreight 的 SDET Team Intern,當時通過線上 Coding Test 並完成線上面試後,就很快地收到 HR 的錄取通知,整體效率非常的高!於是乎我就在幾個禮拜後順利上工。

Right before the summer break was wrapping up, I applied to be an SDET Team Intern at GoFreight. After nailing the online coding test and acing the virtual interview, I quickly got an acceptance email from HR. The whole process was super efficient! So, just a few weeks later, I was on board and ready to go.

為何選擇 SDET Team ? / Why Choose the SDET Team ?

不同於過往持續走 RD,此時此刻的我為何選擇了自動化測試 Software Development Engineer in Test(SDET)這個領域呢?,我想要分以下幾點,延續技術應用、提升自動化部屬能力及實現敏捷精神來描述:

  • 延續技術應用:作為 RD 轉向 SDET,我可以將對程式設計和系統架構的理解應用,創建更有效的測試策略和工具,從而提高測試的準確性和效率,這呼應到了前面我還能做什麼自動化測試就是我能嘗試的領域
  • 提升自動化部屬能力:在自動化測試中,自動部署是重要的一段,而在實現持續整合(CI)和持續部署(CD)的這方面能力,對生涯技能累積也是必要的,透過自動化測試和部署,能夠顯著提高軟體開發和部署的速度和效率,這不僅加快了產品上市的時間,還減少了由於人為錯誤而造成的問題。
  • 實現敏捷精神:過往在團隊跑過敏捷,當時有學過敏捷開發的核心原則,即「少增量,多迭代」,我認為自動化測試在實現這一理念方面發揮著關鍵作用。在敏捷開發中,持續地對小的功能增量進行迭代是常態,這代表著在每次迭代後,都需要進行一輪全面的測試以確保新添加或修改的功能不會破壞現有的系統,手動測試這樣的增量變化可能既耗時又容易出錯,但自動化測試可以迅速、準確地完成這些任務,從而支持快速迭代的需求。

Why did I choose to dive into the world of automated testing and become a Software Development Engineer in Test (SDET) instead of sticking with the regular RD route? Well, I’ve got a few reasons, from wanting to continue applying my tech skills, and boosting my automation game, to embracing the agile mindset. Let me break it down:

  • Continuing to Apply Technical Skills: Moving from RD to SDET lets me use my understanding of programming and system architecture to create more effective testing strategies and tools. This boosts both the accuracy and efficiency of tests. It’s all about exploring what else I can do, and automated testing is a field I’m excited to dive into.
  • Boosting Automation Skills: Automation, especially in testing, is key. It’s essential for achieving Continuous Integration (CI) and Continuous Deployment (CD), which are critical for building up career skills. With automated testing and deployment, we can significantly speed up the development and deployment process, getting products out faster and reducing human error.
  • Embracing the Agile Spirit: Having run with agile teams before, I’ve learned the core principle of “less increment, more iteration.” I believe automated testing plays a crucial role in making this happen. In agile development, it’s normal to iterate on small functional increments continually. This means after every iteration, a comprehensive round of testing is needed to ensure new or modified features don’t break the existing system. Manual testing of these changes can be time-consuming and prone to mistakes. However, automated testing can handle these tasks quickly and accurately, supporting the need for rapid iteration.

SDET 實習生工作日常 / Daily work of SDET Intern

這邊我想分成兩部分說明,第一個是日常 Test Case 的撰寫,第二個是監控自動化測試執行。

I would like to explain this in two parts: first, the daily routine of writing test cases, and second, monitoring the execution of automated tests.

Test Case的撰寫 / Writing Test Cases

當用戶遇到錯誤(Bug)並回報之後,或當有新的需求時,開發人員會對程序進行修改或增加新的功能,以滿足用戶的需求或修復存在的問題。但是,僅僅修改或新增功能並不能保證問題得到根本的解決或新功能能夠完美運行,因此,將這些使用者的操作轉化成自動化測試中的測試用例(Test Case)成為了一個關鍵步驟。轉化過程涉及將用戶的具體操作,和遇到的錯誤情況詳細記錄下來,設計成測試腳本。這些測試腳本將模擬用戶的操作,以檢查修改後的程式是否能正常工作,或新功能是否按預期運行。

對我來說,撰寫測試用例(Test Case)這很像在寫故事一樣,其中包含了所有的背景、角色、行為和預期結果,而每一個測試用例都是一個獨特的故事,描述了一系列特定的用戶行為以及系統對這些行為應該如何回應在測試用例中。需要清楚地定義「誰」(角色),在做「什麼」(具體的操作步驟)、期望的「結果」是什麼,以及在何種「環境」(系統設定)下進行操作。

Whenever users encounter bugs and report them, or when there’s a new feature request, developers make changes or add new functions to meet these needs or fix issues. However, just tweaking or adding features doesn’t guarantee that the problem is solved or that the new feature works flawlessly. That’s where turning these user actions into automated test cases becomes crucial. This process involves recording user actions and errors in detail and crafting them into test scripts. These scripts simulate user actions to check if the revised code works as intended or if the new feature performs as expected.

To me, writing test cases is a lot like storytelling. Each case includes all the background, characters, actions, and expected outcomes. Every test case is a unique story describing a series of specific user behaviors and how the system should respond. It’s important to clearly define ‘who’ (the user role), ‘what’ (the specific steps), the expected ‘outcome’ and the ‘environment’ (system settings) where the actions take place.

監控自動化測試的執行 / Monitoring the Execution of Automated Tests

SDET 本身有技術開發的成分,職責包含監控本身所負責的自動化程式,為了持續找出自動化程式中的 bug,每日的監控是必須的,這種監控能夠即時發現測試程式中的 Bug,及時修正,從而保證測試結果的準確性。

一個可能會遇到情境是,已經寫好的 Test case,因為應用邏輯的更動、系統環境的變化或是運行在特定時段遇到的獨特條件而失敗。當這些測試失敗時,SDET 需要深入分析失敗的原因,判斷是否由於測試邏輯過時或是因為環境因素造成的,這可能涉及到查看日誌文件、重現錯誤情況,或是改寫情境,以上行為能確保RD 團隊在更新代碼後,不會因為測試程式本身的問題而被阻擋,增加產品上線效率。

As an SDET with a technical development role, part of my job is to monitor the automated scripts I’m responsible for. Daily monitoring is essential to continuously identify bugs in these scripts. This kind of vigilance helps in promptly discovering bugs within the test program, allowing for immediate correction and ensuring the accuracy of test results.

A common scenario might be a test case failing due to changes in application logic, system environment alterations, or unique conditions encountered during specific periods. When tests fail, it’s up to an SDET to dive deep into why. We need to figure out if it’s because the test logic is outdated or due to environmental factors. This could involve checking log files, reproducing errors, or rewriting scenarios. This ensures that the RD team isn’t held back by issues in the test program itself after updating code, thus enhancing the efficiency of product launches.

心得 / Thoughts

以下為個人對和 GoFreight SDET 和 GoFreight 本身的個人看法:

Below are my personal opinions on both the GoFreight SDET team and GoFreight itself:

SDET 比我想像中更接近技術面 / SDET: Closer to the Technical Side Than I Imagined

在過往其他公司的手動測試經驗中,QA 這個職位經常會在 PM 和 RD 身邊周旋大量溝通,而在這邊的自動化測試,我認為是由於整體自動化測試框架完善(可參考此文章),讓 SDET 能花更多時間在優化整個自動測試系統,例如將測試過程數字圖表化,或是減少測試中重複的步驟所需要時間等等,也就是除了本身自動化測試以外,還要讓自動化測試本身更自動!要達成這些實質上仰賴著 Python / Selenium / Docker / Jenkins 各方面的技術能力,這方面的技能是身為 RD 也須具備。

In my past experiences with manual testing at other companies, the QA role often involved a ton of communication, bouncing between PMs and RDs. But here, in automated testing, I think it’s because of our solid automated testing framework (check out this article) that I, as an SDET, can spend more time refining our whole automated testing system. This includes making our testing process more visual with charts and graphs or cutting down on the time spent on repetitive steps. In other words, it’s not just about automating tests; it’s about making the automation process itself even more automatic! Achieving this really leans on skills in Python, Selenium, Docker, Jenkins, and the like — skills that are essential for RDs as well.

GoFreight 對各方面品質的追求完美 / GoFreight’s Pursuit of Perfection in All Aspects of Quality

美國體育史上最偉大的教練和領袖之一 Vince Lombardi 曾說過

Perfection is not attainable, but if we chase perfection, we can catch excellence.

如何讓測試更快更有效率?如何讓測試的結果能夠更加容易理解?如何更精準地抓到關鍵問題點?這些問題的探討和解決方案,都是 GoFreight SDET 團隊持續明確排入 Plan 在做的事情,能感受得出來公司將自動化測試本身也看成一個成長性的產品來對待,品質有相當的要求。

而在內部 Code Quality 上,也是以高標準執行,我覺得這大大的提升可維護性,讓測試程式本身也具有高性能,在我修改 Pull Requests 的過程,接觸到不同的代碼風格和解決問題的方法,確實地拓寬了自身的視野,提升了技術水準。

Vince Lombardi, one of the greatest coaches and leaders in American sports history, once said:

Perfection is not attainable, but if we chase perfection, we can catch excellence.

So, how do we make our tests faster and more efficient? How do we make the results easier to understand? And how do we pinpoint the key issues more accurately? These are the questions that the GoFreight SDET team constantly addresses and incorporates into our plans. The company treats automated testing as a growing product in its own right, with a strong emphasis on quality.

As for code quality internally, we hold ourselves to high standards. I believe this significantly boosts maintainability and ensures our testing programs perform well. Working on Pull Requests and encountering various coding styles and problem-solving approaches has really broadened my perspective and elevated my technical skills.

除此了上面所說之外,這邊快速分享 GoFreight 的福利(❁´ω`❁)ゞ

有吃不完的零食,高預算的Team Building,正職可以一禮拜三天遠距,春酒有超大獎可以抽XD 對我來說真的是蠻理想的工作環境!

Besides everything I’ve mentioned, let me quickly share some of the cool perks at GoFreight

Endless snacks, generous budgets for team building, the option for full-timers to work remotely three days a week, and a spring party with some really big prizes up for grabs! For me, it’s pretty much the dream work environment!

Special Thanks

十分感謝這段時間 Shawn、Miti、Michelle、Joey、Nick 前輩的指點,和優秀的實習生夥伴們 Allen(SDET Intern老大)、Crystal、Ginny 一起共事也是對我來說很重要的經歷,真的感謝(*>v<)ゞ*

I’m super grateful for the guidance from Miti, Michelle, Joey, Shawn, and Nick during this time. Working alongside awesome intern buddies like Allen (our SDET Intern lead), Crystal, and Ginny has been a really important experience for me. Big thanks to everyone!

--

--