| 揚聲器 |
抄本 |
| 韋恩·萊文 |
歡迎參加我們的會議,討論擴展 Hamcrest 對 JSL 應用程式的自動化測試以實現持續改進。 |
| |
我們在這裡向你展示的,我們對你的承諾是,我們將向你展示如何建立一個高效的、具有成本效益的 |
| |
高品質保證、高可靠性和可支援性,基於 JMP 的關鍵任務整合分析系統。是的,說起來很多,但 |
| |
這就是我們在這種環境下所做的。我們對此非常滿意。我們非常榮幸能夠與大家分享。 |
| |
以下是我們接下來的議程。我稍後會做個自我介紹,以及關於Predictum的一些信息,因為你們可能對我們不太了解。 |
| |
我們的背景、JSL 開發的背景、基礎設施以及與之相關的一些歷史。 |
| |
接下來,我們將與大家分享我們所實施的變革成果。之後,我們將進行演示,並討論下一步的計劃。最後,我們將開放討論環節,解答大家的任何問題。 |
| |
我是 Wayne Levin,右邊那位就是我。我是 Predictum 的總裁,我加入了 |
| |
我是 Vince Faller。 Vince 是我們的首席軟體工程師,他一直領導著這個非常重要的計畫。所以,簡單介紹一下我們。我們是 JMP 的合作夥伴。 |
| |
我們在 1992 年成立,到現在已經 29 年了。 |
| |
我們進行統計方法等方面的培訓,使用 JMP,在這些領域提供諮詢,我們花費大量時間建構和 |
| |
部署整合分析應用程式和系統,因此這項工作對我們非常重要。我們首先交付了 JMP 應用程序, |
| |
JMP 4.0 是在 2000 年推出的,是的,確實已經 20 多年了,我們一直在建立更大的系統。當然,從那時起,它就只是一些小型工具,但我記得,大約在 JMP 8 或 9 的時候,我們就開始建造更大的系統了。 |
| |
我們在這方面累積了相當多的經驗,輕輕鬆鬆就超過10年了。簡單介紹一下背景…直到2019年下半年左右,我們的開發環境都非常分散,零散。 |
| |
專案管理 |
| |
確實存在,但一切都被打亂了。我們用不同的應用程式來控製版本、管理時間,例如開發時間等等,以及一般的專案管理。 |
| |
開發商很容易花錢,我們會討論這個問題, |
| |
他們大約一半的時間只是做一些例行的機械工作,例如加密和包裝 JMP 插件。你知道,維護配置包,以及 |
| |
你知道,也要把程式碼庫,或是我們通常說的 repo,分開存放加密和未加密的腳本。這……我們要考慮的事情很多,其實都不是開發工作。真正的工作是… |
| |
開發人員的才能……被浪費了。就像我說的,我們已經做了很久了,即使在2019年,也足足有10年了。所以,10多年的遺留框架,甚至可以追溯到JMP 5,你知道,它變得臃腫而緩慢。 |
| |
我們知道 JMP 多年來取得了長足的進步。我的意思是,在 JMP 9 中,我們引入了命名空間,而 JMP 14 引入了類,Hamcrest 正是在那時 |
| |
開始了。正是 Hamcrest 真正讓我們得以進行這項重大計畫。所以我們早在 2019 年 8 月就啟動了這項重大計畫。 |
| |
就在那時,我們獲得了第一個 Gitlab 許可證,這就是我們新開發架構的開發,它開始成形,並且一直在不斷改進。 |
| |
基本上每個月我們都在不斷增加和增強我們的能力,以便在前進的過程中變得越來越有生產力。 |
| |
這種情況還在持續,所以我們實際上認為這是一種精實的努力。它確實遵循了精益原則,並且加速了我們的發展。 |
| |
多虧了這個系統,我們實現了自動化測試,Vince 會為我們示範一下。我們這裡有一個小模型,儘早測試,經常測試。 |
| |
這就是我們所做的。它支援程式碼復用,而且我們重新開發了 Predictum 系統框架。它現在是 2.0 版本。我們從之前的努力中學到了很多。所有那些,幾乎所有的,都消失了,都被替換和擴展了。 |
| |
Vince 會跟我們詳細介紹。我們的生產力輕易地提高了 50% 以上,而且我想說的是,開發人員們也開心多了,他們的挫折感也減輕了。 |
| |
他們更專注於自己的工作,我的意思是開發人員應該做的真正工作,而不是那些繁瑣的事情。 |
| |
我要說的是,仍有改進的空間,所以我們還沒有完成,文斯會告訴我們更多相關資訊。 |
| |
我們現在有了開發標準,所以我們有功能樣式指南,可以說我們所有的開發都是基於功能的。 |
| |
每個功能至少需要一次 Hamcrest 測試,並且開發人員會互相分享程式碼審查 |
| |
確保我們遵守自己的標準。這也引發瞭如何提升這些標準、使其更加完善的問題。 |
| |
我們也會舉辦一些有趣的會議,鼓勵開發人員破解程式碼, |
| |
對,所以它們被稱為“破解代碼挑戰”,或者諸如此類。所以這已經成為我們運作方式的一部分,而且完全符合我們的開發環境。例如,它會導致進一步的測試,以及需要添加的更多 Hamcrest 測試。我們有一個相當小的項目。 |
| |
這是我們一年多前做的。我們即將進入一個新的階段。一切都已經結束了… |
| |
它內建了超過 100 個 Hamcrest 測試,並且在整個開發過程中反覆運行。 |
| |
其他好處是,它允許我們分配和追蹤資源分配,例如哪些開發人員在做什麼。每個人都知道其他人在做什麼。 |
| |
持續整合、持續部署等) |
| |
程式碼衝突會被事先偵測到,所以如果我們…我們確實有這種情況,因為我們有多個人在同一個專案上工作,所以,你知道,如果有人修改了某個函數,而它又會和其他人正在做的事情發生衝突,我們就能更快地發現。 |
| |
它還使我們能夠提高跨團隊的支援能力。我們不能讓程式碼依賴某個特定的開發人員;我們必須讓任何開發人員或支援人員都能支援我們的程式碼。 |
| |
向前邁進。這也是我們的一個重要目標。它確實推動了整個品質保證領域的進步, |
| |
包括支持FDA關於品質保證(QA)的要求,例如驗證、IQ OQ PQ。所以…我們正在實現自動化或半自動化 |
| |
這些任務也透過這個基礎設施來完成。我們確實在內部和外部使用它,所以你可能知道,我們有 |
| |
有一些產品在那裡,(???)科比腰帶實驗室,但新的垃圾郵件以及科比發送垃圾郵件(???)也在其他地方討論 |
| |
在 2021 年的 JMP Discovery 歐洲會議上。你可能想去看看,但它們相當大 |
| |
程式碼庫,它們都是開發出來的,換句話說,我們吃自己的狗糧,如果你知道這個表達,但我們也把它用在我們所有的客戶身上 |
| |
開發,這對我們的客戶來說很重要,因為我們正在建立他們將依賴的應用程式。 |
| |
因此,我們需要......我們需要擁有可靠的基礎設施,無論如何,這是其中很重要的一部分。 |
| |
我提到了 Predictum 系統框架。你可以在這裡看到它的一些片段。它就在腳本索引裡,你知道,我們看到了參數和 |
| |
範例等等。我們內建了所有這些功能,其中 95%(超過 95%)都與 Hamcrest 測試相關。當然,我們的目標是確保所有測試都與 Hamcrest 測試相關,而且我們正在努力實現這個目標。 |
| |
我們快到了。有……這些框架……這個框架其實是我們基礎設施的一部分。這是其中很重要的一個元素。另一個就是…Hamcrest… |
| |
進行單元測試的能力。最後還有一張幻燈片,裡面有一個社區鏈接,你可以在那裡了解更多關於 Hamcrest 的資訊。這是一個 |
| |
正如我幾分鐘前提到的,JMP 14 為我們帶來了開發。 Gitlab 在其中發揮了重要作用;它為我們提供了專案管理儲存庫、CI/CD 流程等。 |
| |
此外,我們為 JSL 開發了一個可視化的…Visual Studio Code 擴展,我們…你會看到它有五顆星,因為它在 |
| |
在 Visual Studio 上。我不知道我們怎麼稱呼它。 Vince,也許你可以告訴我們,商店裡有什麼。它已經被下載了數百次,而且我們 |
| |
定期更新。所以你也可以去看看。我想我們在最後的資源幻燈片裡也有連結。 |
| |
所以我現在要把這個任務交給文斯法勒。文斯,我們首席軟體工程師。正如我所說,文斯從2019年8月開始領導這個計畫。這需要大量的努力, |
| |
艱苦的工作還在繼續。我們公司所有人都非常感謝文斯和他的領導。所以,文斯,你為什麼不接手呢?我要… |
| |
我是... |
| 文斯法勒 |
分享。 |
| |
所以 Wayne 多次提到了 Hamcrest。對於那些不知道 Hamcrest 是什麼的人來說,它是由 |
| |
跳轉。 |
| |
Justin Chilton 和 Evan McCorkle 負責這個項目。它只是一個單元測試庫,可以讓你以自動化的方式運行、測試並獲得結果。 |
| |
它確實使我們能夠做到這一點,這就是為什麼它被稱為擴展。 |
| |
我將展示一些東西 |
| |
用我的螢幕。我幾乎只在我們自己開發的 VSCode 擴充功能上工作。這就是 VSCode。 |
| |
我們這樣做是因為它具有許多內建功能或可擴展功能,我們不必編寫,例如獲取整合、獲取實驗室整合。 |
| |
在這裡您可以看到這是一個 JSL 腳本,它可以很好地讀取它。 |
| |
如果你想使用它,如果你…如果你熟悉 VSCode,它只是一個輕量級的文字編輯器。你只需輸入 JMP |
| |
你會看到它。它是唯一的。 |
| |
但我們會繼續做我們正在做的事情。 |
| |
所以。 |
| |
對於我們所做的任何程式碼更改, |
| |
有一個管道運行。 |
| |
我們只是示範一下它的功能。如果我把 README 文件改成這樣,這就是 Discovery 的示範。 |
| |
2021年。 |
| |
我就直接提交了。如果你不知道,提交如下 |
| |
說我想要一個我們目前所在位置的快照,然後將其推送到 repo 並將其保存在伺服器上。 |
| |
快樂的一天。 |
| |
提交資訊。更多 readme 資訊。 |
| |
我可以直接推送,因為 VSCode 太棒了。 |
| |
管道演示。 |
| |
現在我已經推送了。接下來會有一個管線運行。我可以直接點擊這裡,它就會顯示我的合併請求。現在 |
| |
管道開始運作。 |
| |
我可以檢查管道的狀態。 |
| |
現在它正在做的是檢查是否包含所需的 Hamcrest 文件。我們有一些要求 |
| |
我們強制執行,以便它可以...... |
| |
我們可以確保我們 |
| |
做好我們的工作。 |
| |
然後就完成了。我要按“加密”。 |
| |
現在加密將獲取整個包並對其進行加密。 |
| |
如果我們過去這裡, |
| |
這只是一個虛擬機器。它應該 |
| |
開始運行 |
| |
一秒鐘。 |
| |
所以它只是檢查所有的程式碼。 |
| |
寫下所有加密的密碼,瀏覽,點擊所有這些操作。如果你曾經嘗試過同時加密多個腳本, |
| |
您可能知道這很麻煩,所以我們將其自動化,這樣我們就不必再這樣做了,因為正如韋恩所說,這花了我們很多時間來做這些事情。 |
| |
例如,如果我們每次要發布任何版本時都要檢查 100 個腳本並對每個腳本進行加密,那就太糟糕了。 |
| |
因為我們必須有自己的 |
| |
程式碼已加密,因為,是的,抱歉,意見,好吧,我可以停止分享它了。 |
| |
啊。 |
| |
所以它將會運行。 |
| |
它應該很快就會完成。 |
| |
然後它會經過並進行分階段,然後分階段基本上會獲取我們想要的所有資訊來源,就像我們的文件一樣,就像 |
| |
我們編寫的任何其他內容,並將它們呈現為我們在插件中想要的形式,因為與 github、gitlab 的其他部分一樣,我們的大多數文件都是用 markdown 編寫的,然後我們將其呈現為任何形式。 |
| |
我不需要展示剩下的部分,但是是的。所以它正在過去。它會消失。 |
| |
我們將回到 VSCode。 |
| |
所以。 |
| |
如果我們要改變的話,那麼這只是一個單一的功能。 |
| |
如果我進去,如果我要運行這個... |
| |
JSL,運行目前選擇。 |
| |
所以。 |
| |
你可以看到它返回了……它所做的就是打開 Big Class,運行擬合線,然後得到方程式。它正在返回方程式。 |
| |
而且你實際上也可以看到它跑到這裡。 |
| |
但。 |
| |
因此這可以使用更多的文件。 |
| |
我們想,哦,我們實際上不想打開這個數據表。 |
| |
但讓我們快速運行一下。 |
| |
並說, |
| |
不。這不是一個好的回報,它顯然把等式全部變成了大寫。 |
| |
所以如果我上演那件事。 |
| |
更好的文檔。 |
| |
推。 |
| |
再次回到這裡。 |
| |
所以,它又在推動。這是另一條管道。 |
| |
它只是按順序運行一堆電源外殼腳本,具體取決於我們的設置方式。 |
| |
但你會注意到這個管道有更多的階段。 |
| |
所以當我們 |
| |
為了幫助擴大規模,我們只測試 JSL |
| |
一開始是最低限度的,然後,當它通過時,我們允許進一步測試。 |
| |
而且我們只測試了是否有已更改的 JSL 檔案。 |
| |
但我們可以度過這一關。 |
| |
它會運行,並告訴我們測試進行到什麼階段,以防測試卡住。你知道,如果一個模態對話框一直關閉不掉,JMP 顯然不會繼續執行任何操作。但你看,它確實做了不少事,太棒了。我完成了。 |
| |
令人興奮。 |
| |
刷新一下。得到一個綠色的小勾號。 |
| |
好了,我們現在就可以運行所有東西了。它會檢查、測試所有內容,然後加密,再測試加密後的內容,也就是我們要製作插件的實際內容,然後再次進行分階段,打包,創建我們真正要提供給客戶的插件。 |
| |
我不會很快完成這件事,因為這需要一分鐘。 |
| |
但 |
| |
假設我們走進這裡,然後我們會想,哦, |
| |
好吧,我真的很想關閉這個數據表。我不知道我一開始為什麼要註解掉它。我覺得它不應該打開,因為我不再使用它了,我們不……我們不要那樣。 |
| |
我們會說好的。 |
| |
關閉 dt。 |
| |
再次按下。現在,這一切都可以在我的電腦上用 Hamcrest 手動完成。 |
| |
但你知道,有時開發人員會推播一些內容,而不是在電腦上執行 Hamcrest 的所有功能,而這…它的目的就是為了抓住這個問題。這迫使我們更好地完成工作。 |
| |
和 |
| |
是的。 |
| |
繼續點擊這個按鈕。我本來可以直接打開它,但沒問題。 |
| |
現在你會看到它再次運行管道。轉到管道。 |
| |
我會一直重複這句話。我們只是在進行測試、加密,然後再測試 |
| |
因為有時加密會進入其自身的 |
| |
如果有人曾經加密過的話,那麼這個世界就會充滿問題。 |
| |
跑,跑,跑,跑,跑。 |
| |
然後,哦,我們投了一個球。你看呢? |
| |
我並不是想面無表情,但是你知道。 |
| |
所以如果我們把它標記為準備好了,說,是的,我們完成了,我們會看到, |
| |
哦,好吧,那次測試沒有通過。 |
| |
現在 |
| |
我們可以下載 |
| |
為什麼測試沒有通過工件。 |
| |
這將打開一個 J 單元 |
| |
我將在這裡取出這個文件。 |
| |
它還會在 getlab 中呈現它,這可能會更容易,但現在我們只需這樣做。 |
| |
最終,盡量減少一切。 |
| |
現在來吧。 |
| |
因此,我們可以看到 R 平方出現了一些問題並且失敗了。 |
| |
裡面 |
| |
藍色的。 |
| |
所以我們可以來這裡。 |
| |
說說看,為什麼其中有什麼東西會導致這個失敗? |
| |
我們看到,哦,有人把我們的方程式稱為 |
| |
然後他們就假設數據表就在那裡了。因為我改動了一些東西,就破壞了別人的程式碼,好像這種事永遠不會發生似的。 |
| |
所以我們遇到了這個問題。 |
| |
你去哪裡了?我們走吧。 |
| |
所以我們在這裡所做的一切的主要目的是能夠發現我改變了一些東西並且破壞了別人的東西的事實。 |
| |
這樣我就可以通過了。 |
| |
看看 boo 做了什麼。 |
| |
好吧,也許我應該開設「大班」課程 |
| |
我。 |
| |
很酷。如果我保存了它, |
| |
我應該讓它變得更好。 |
| |
自己開大課。 |
| |
我會表演這個。 |
| |
開大課,獲得推力。 |
| |
再次強調, |
| |
舊管道。 |
| |
現在應該採取 |
| |
不...不太久。 |
| |
所以我們要進去。我們……我們只測試一個……到…… |
| |
JMP 版本,但你可以看到 |
| |
自動地,我們只測試一個。 |
| |
然後等待開發人員說「好了,我完成了,一切看起來都很好。繼續」。我們這樣做是出於資源上的考慮, |
| |
因為這些都在虛擬機器上運行,而虛擬機器一直在自動運行,而且我們有多個開發人員都在使用這些系統。 |
| |
我們也... |
| |
你可以看到,這實際上是一個 docker 系統,我們正在將它們容器化。 |
| |
嗯,我們正在進行這些項目的容器化。它們已經可以運行了,但還沒有完成所有版本。 |
| |
但我們運行的是 14.3,至少對於這個項目,我們運行的是 14.3、15、15.1, |
| |
這應該可行。 |
| |
讓我們把事情恢復原狀吧。 |
| |
因為你知道那是有效的。 |
| |
可能應該做一部經典之作......但很好。 |
| |
是的。 |
| |
我們要進行測試。 |
| |
我感覺我已經說了一遍又一遍了。我們要測試一切。 |
| |
我們實際上會讓這個運行,以向您展示我們得到的最終結果。 |
| |
它應該只需要。 |
| |
有一點點。 |
| |
所以我們會測試一下,確保它運作正常,然後你就能查看日誌了。我們從正在發生的事情、它的位置等資訊中獲得了有用的信息,例如它會告訴你哪個跑步者正在跑步。 |
| |
我現在只在 Windows 上運行。再說一次,這只是一個演示,但 |
| |
我們應該能夠運行 |
| |
更多的。 |
| |
在運行時,我將再討論一下 VSCode。 |
| |
在 VSCode 中,我們還有程式碼片段和其他東西,所以如果你想建立一個函數, |
| |
它將創建所有函數資訊。我們使用自然文檔 |
| |
再次,這是從 Hamcrest 團隊偷來的, |
| |
作為我們的 |
| |
開發文檔。 |
| |
所以它會把所有東西都放到自然文件格式裡。所以,它的目的是幫助我們完成工作,並迫使我們完成工作。 |
| |
稍微好一點,更有活力一點。 |
| 韋恩·萊文 |
為了文檔? |
| 文斯法勒 |
是的,這就是文檔。 |
| 韋恩·萊文 |
我們在開發的同時,也在記錄。 |
| 文斯法勒 |
是的,絕對是如此。 |
| |
你知道,它還有 for 迴圈、while 迴圈。 |
| |
對於與關聯行類似的事情。 |
| |
我們……這……這完成了嗎?應該完成了,是的。 |
| |
所以我們得到了綠色的勾號。現在它可以在所有系統上運作了。 |
| |
如果我們能回到這裡,你就會看到它。 |
| |
打開 JMP。它會運行一些測試, |
| |
可能會開大課。 |
| |
然後關閉全部...全部關閉。 |
| 韋恩·萊文 |
我們這樣做,主要是因為 |
| |
我們的許多客戶都部署了不同版本的 JMP,他們想要一個特定的插件,但他們 |
| |
運行它時,你知道,他們只是在實際應用中擁有不同的版本。我們也會針對 JMP 的早期採用者版本進行測試,這對我們來說是一項服務,因為我們會報告錯誤。 |
| |
對客戶來說,這也很有幫助,因為他們知道他們可以…他們可以升級到新版 JMP。他們知道我們為他們建立的應用程式已經過測試。 |
| |
這對我們來說只是例行公事。 |
| |
好的。 |
| 文斯法勒 |
你完了。你完了。你完了。 |
| |
更改為... |
| |
我可以談談... |
| |
這只是運行,我們可以 |
| |
如果你願意的話,這部電影很有魔力,梅格。 |
| |
只是為了讓它運行得更快。 |
| |
基本上,我只是想進入準備階段,但這需要一點時間。 |
| |
韋恩,關於此事你還有什麼要說的嗎? |
| |
涼爽的。 |
| |
我會把那個... |
| |
我可以說的是, |
| |
當我們在舞台上表演時, |
| |
我們的文件也保存在 mk docs 中。因此,它實際上會運行 mk doc 的版本,進行渲染,並將幫助資訊放入幫助文件中,基本上就能為我們創建一個版本,這樣我們就不用 |
| |
處理它。 |
| |
因為創建版本需要付出很多努力。 |
| |
正在加密。快完成了。 |
| |
可能應該只預先加載一個。 |
| |
現場演示,你要做什麼。 |
| |
一些。 |
| |
跑步。 |
| |
哦,有一件事我肯定想做。 |
| |
所以,管道實際上做的最後一件事是檢查我們是否真的花了時間,因為,你知道,如果 |
| |
我們實際上並沒有記錄我們花費的時間,我們也沒有得到報酬,所以迫使我們這樣做。 |
| |
太棒了,太開心了。 |
| 溫斯瀑布 |
所以 |
| 文斯法勒 |
如果沒有這一點,這項工作就會失敗。 |
| |
我可以展示一些工作。正在嘗試。 |
| |
那是 Docker 版本。我們不要那個。 |
| |
所以 |
| |
您可以看到這為我們帶來了成功。 |
| |
沒有失誤。沒有意外投擲。這些都是 Hamcrest 的功勞。 |
| |
來吧,再來一個。 |
| |
好的,開始準備。 |
| |
它所做的一件事就是創建存儲庫。 |
| |
每次都能創造出新鮮的事物。 |
| |
所以它試圖保持一種無國籍狀態 |
| |
好的,我們現在可以下載工件了。 |
| |
現在我們應該有這個管道演示。 |
| |
我真希望它能去那裡。 |
| |
什麼。 |
| |
Internet Explorer 為何處於運作狀態?現在您將看到管道演示 |
| |
是 JMP 插件。 |
| |
如果我們解壓縮它。 |
| |
如果你不知道,JMP 外掛程式只是一個 zip 檔案。 |
| |
如果我們現在來看, |
| |
你可以看到它裡面有我們所有的腳本,包括 foo 和 bar。如果我們打開它們, |
| |
打開, |
| |
您可以看到這是一個加密檔案。 |
| |
所以這基本上就是我們能提供給顧客的 |
| |
並且不需要做那麼多機械工作。韋恩提到 |
| |
它減少了開發人員的沮喪,我個人認為這是一種輕描淡寫的說法,因為在我們實施這個措施之前,一遍又一遍地做這件事是非常令人沮喪的,而這個措施幫助了很多。 |
| |
那。 |
| 韋恩·萊文 |
現在,關於加密,當你交付一個插件時 |
| |
供公司內部用戶使用,出於安全原因等,你通常不希望任何人能夠進入和 |
| |
處理代碼。你知道,諸如此類的事情,我們可能會提供未加密的程式碼,這樣客戶端的程式碼就加密了,但為了交付給最終用戶,你通常希望所有內容都加密,這樣就無法被篡改。就是這樣。 |
| 文斯法勒 |
是的,我的演示到此結束。 Wayne,如果你想把它帶回去做總結的話。 |
| 韋恩·萊文 |
是的,太棒了。 |
| |
當然,非常感謝,文斯。整個系統有很多活動部件,所以,你知道,基本上,我們要確保, |
| |
你知道,程式碼是由多個使用者開發的,彼此之間不會發生衝突。我們同時在建立文件。實際上,文件會隨應用程式一起部署,我們不需要將其整合進去。這…… |
| |
我們設置了基礎設施,以便它能夠自動維護。我們可以同時全面更新它和程式碼。 |
| |
如果你願意的話。正在進行的 Hamcrest 測試,每個編寫的函數, |
| |
如果你願意這麼說的話,它們都是預期結果。所以它們會被比較,所以我們簡單地發現,我猜那個方程式有點問題。 R平方或其他什麼都得出了不同的值, |
| |
所以它壞了,換句話說,就是說嘿,這裡有些不對勁;我期待函數的輸出是這樣的 |
| |
用例。這是我們從客戶那裡得到的回饋之一,我們建立了一個用例池,並將其轉換為 Hamcrest 測試,然後就可以開始使用了。這裡還有一些其他的幻燈片 |
| |
你可以在下載投影片的時候看到。我會把它留給你,這裡有一張流程圖。 |
| |
我們正在使用的,以及一些關於開發人員程式碼審查活動的內容。如果你想反覆討論一下。 Vince,你想在這裡補充一些關於程式碼審查和批准如何進行的內容嗎? |
| 文斯法勒 |
是的,所以在合併請求中 |
| |
它會在程式碼的 diff 部分顯示 JSL 程式碼。同樣, |
| |
感謝 |
| |
還有那些做 Hamcrest 的人,因為他們也為 GitHub 和 GitLab 啟動了一個詞法分析器(?)以便能夠讀取 JSL,所以實際上這是在 getlab 內部。 |
| |
他們也能讀懂 JSL。雖然它不能執行,但格式很好。它不是全白的,而且很漂亮。我們直接進去就可以了。 |
| |
就像這張截圖裡那樣,點擊一行,輸入你想要的註釋,它就變成了一個可審核的任務。所以我們盡量在 GitLab 內部完成盡可能多的工作。 |
| |
出於透明度的原因,以及 |
| |
一旦所有事情都完成了,你就可以說「是的,我的合併請求已經準備好了」。讓我們把它放到 master 分支,也就是主分支。 |
| 韋恩·萊文 |
太棒了。所以你真的…這很有幫助,你知道,我們真的在定義編碼標準,如果你願意的話,而且 |
| |
我不喜歡「強制執行」這個詞,但它的作用就是這樣。它減少了差異。如果你願意的話,它可以讓多個開發人員更容易理解 |
| |
其他人做了什麼。當我們引進新的開發人員時,他們會逐漸理解標準,知道要尋找什麼,知道該做什麼。 |
| |
所以它...它使入職變得容易得多,而且它再次處理...這裡的一切都與一切相關,所以你知道可支持性等等。 |
| |
這是我之前提到的幻燈片,只是為了提供一些資源,所以我們使用的是 GitLab。我想同樣的原則也適用於任何 Git,像是 GitHub 或其他類似的平台。這是 Hamcrest 的社區連結。之前有一場演講在 |
| |
那是2019年在圖森,我們以前常常一起旅行聚會。那段時光非常有趣。這是視覺效果的行銷連結…Visual Code Studio。 |
| |
Visual Studio 程式碼,你有什麼。 |
| |
正如 Vince 所說,是的,我們經常使用這個編輯器,而不是僅僅因為內建的 JMP 編輯器功能整合而使用它。它… |
| |
它只是一個大型應用程式開發環境的一部分。 Vince 和我,我謹代表 Vince 和我自己,感謝大家對此的關注,並再次由衷感謝 JMP 團隊。 Justin Chilton 和他的公司, |
| |
我會向你喊話。如果不是Hamcrest,我們就不會在這裡。 |
| |
缺少的部分或真正讓我們能夠將 JSL 開發推向成功的部分, |
| |
基本上,就是你在程式碼開發中,或者說在業界普遍期望的標準。所以我們真的非常感激,而且我知道我們的… |
| |
你知道,這會隨著我們部署的每個應用程式而傳播出去。現在,文斯和我很樂意回答任何問題… |
| |
發送郵件至 info@predictum.com,我們會轉寄給您,之後會回覆。目前,我們開放問答環節。 |