以我作為軟件開發人員的經驗,我發現工作環境中您必須在很短的時間內以很少的資源(包括團隊成員)交付一個項目。
您的老闆沒有
“我真的不在乎或不了解測試(特別是自動化)和其他質量方面的重要性(或者他可能理解那些重要性,但是也許他被經理逼迫而忽略了它)。除了“辭職”之外,您還會採取什麼行動?您會採用快捷方式嗎?如果可以,則選擇哪些快捷方式?還有嗎?
以我作為軟件開發人員的經驗,我發現工作環境中您必須在很短的時間內以很少的資源(包括團隊成員)交付一個項目。
您的老闆沒有
“我真的不在乎或不了解測試(特別是自動化)和其他質量方面的重要性(或者他可能理解那些重要性,但是也許他被經理逼迫而忽略了它)。除了“辭職”之外,您還會採取什麼行動?您會採用快捷方式嗎?如果可以,則選擇哪些快捷方式?還有嗎?
是的,現實世界與您在大學所教的知識有很大不同。
為公司工作時,工作是在獲利,而不是根據理想化的軟件來交付軟件開發過程。在很多時候,這些事情是重疊的,但並非總是如此。
不時地“偷工減料”是完全合法的。
您可能會為自己的老闆感到遺憾而感到遺憾。由於不了解軟件測試的重要性,他們可能會感嘆您沒有意識到影響業務的業務壓力。這意味著可能需要在沒有自動化測試的情況下運送東西。我認為將您的老闆歸類為忽略測試的重要性是不公平的。顯然,他們只是將其賦予與您不同的重要性,或者意識到與您不同的因素。
在這種情況下,您的角色是強調與不對經理進行自動測試有關的風險,並允許他們使用手頭的所有信息進行判斷。
軟件開發是關於在頻繁執行新穎工作的同時,在未知或不確定的環境中管理風險。始終在時間,範圍和質量方面進行權衡。重要的事情是幫助利益相關者了解他們的決策對項目的影響。對我來說,“辭職”或“吹口哨”的答案將保留給那些為項目做出的決定會嚴重影響生命和安全,隱私或機密性,安全性或其他“關鍵因素”的情況(具體取決於您要構建的內容。)
不幸的是,沒有最佳實踐或算法可以做出這些決定。學習伴隨著時間和經驗。您可以學習他人的經驗,但是最好的經驗就是您的經驗,並與您的同事進行權衡取捨,以了解決策過程的原理。這樣的決定是高度上下文相關的。
是的,技術債務在許多情況下是一個完全有效的決定;就像在許多情況下,借出真實債務是一項有效的業務決策,以推進業務目標。 (如果我們有$的資本來投資這項業務,我們會賺錢,因此從長遠來看,獲得$的貸款並償還$ $$仍然使我們領先。)
但在我看來,跳過自動化測試從來都不是一個好藉口。節省的時間通常用不完,不是幾年或幾個月,而是幾週。 (而且,還清這筆錢的難度越來越大。)除非截止日期是今天,否則不要跳過測試;
這是遵循 TDD恕我直言的原因之一。因為那時我們永遠不會處於可以說某個功能“完成”而“仍然需要測試”的情況。對於非技術經理來說,放棄測試並稱其為完成太誘人了。現在,他們只有縮小範圍,重新安排交付時間,或者在確實有必要時使用其他類型的技術債務(濫用狀態管理,跳過健壯的體系結構等)的更好選擇。
您所說的“捷徑”實際上是折衷方案,它們是您將要從事的任何項目,任何學科中固有的。這是不可避免的。工程界有個習慣用法(是的,我在上面的評論中說過):您可以做得很好,可以快速完成,也可以廉價進行。在最佳情況下,您選擇2,因此需要確定在特定情況下哪個2最重要。
以您的情況為例,您有一個小團隊(便宜)和緊迫的期限(很快),因此您構建的內容可能會有很多錯誤,並且您可能無法進行想要進行的測試。這是您的經理做出的決定,他將不得不處理後果。您想進行更多測試以構建更好的產品嗎?他要么不得不給您更多時間(以“快速”輸掉),要么增加更多人來進行測試(以“便宜”輸掉)。這些可能不是該項目的選擇。這是不可避免的。
所以辭職並不能解決任何問題,因為無論您走到哪裡,這項原則都會存在。您最大可能要做的就是找到另一位雇主,他可能會重點關註三合會的不同部分,但即使不同的項目也會有所不同。他們的決策就像您目前的經理一樣。放慢腳步來打造更好的產品意味著您可能會錯過最後期限。增加人員意味著他們將不再從事其他工作。快速而廉價地構建它意味著以後要花費更多的時間來支持它(或使用劣質產品)。根據要求,這些決定中的任何一項都可能有效。關鍵是要了解權衡,權衡對業務的意義,並確保決策者理解它們。這是您可以擁有的最重要的技能之一。
幾乎總是需要“權衡”,但不需要廢話。如果發現自己被要求運送垃圾,請考慮走開。或者,如果該軟件涉及財務,信息安全或健康狀況,請逃跑。 (因為失敗,管理層將尋找替罪羊。)
要採取什麼措施:首先是要向經理解釋捷徑可能給公司帶來的成本。最壞的情況是捷徑意味著危害甚至可能殺死人。最無害的情況是下週您解決了該問題,並且沒有造成任何傷害。您的經理需要知道做出明智的決定是什麼。
下一步是採取必要的步驟來“修復”快捷方式。有時不需要。有時,您編寫軟件是一次性使用的,它要么起作用,要么不起作用,然後您可以查看它是否起作用。在這種情況下,如果該軟件能夠正常工作,那麼您採用哪種快捷方式都沒關係。
有時快捷鍵是合理的。假設您是唯一的開發人員,並且軟件必須在X日期準備就緒。如果您在X日期準備就緒,則該公司賺了很多錢,足以僱用另外兩名開發人員。如果您在X日還沒有準備好,則該公司不賺錢,您會失業。顯然,您採用了快捷方式。如果一切正常,那麼兩個額外的開發人員不僅可以清理所有快速創建的混亂局面。
如果您可以告知經理您的軟件處於良好狀態,那麼您可以使用快捷鍵有時。您也許能夠完成一個工作,一周要花四個星期的時間(但是現在該軟件已經搞砸了)。但是您只能這樣做一次,然後需要花三個星期來清理。如果您不清理,那麼接下來的四個星期的工作可能需要花費七個星期的時間才能進行清理,或者需要四個星期的時間甚至會更加混亂,然後您就會遇到麻煩。
我想挑戰您提出問題的前提。
誰是軟件開發專家?你還是你的老闆?您的老闆僱用您是因為您是專家,專業人士。自動測試是您工作的一部分。因此,如果您認為有必要,請像專業人員一樣執行自動測試。您的老闆還會決定是否單擊以移至下一行或使用鍵盤嗎?老闆決定您使用製表符還是空格?您的老闆對此沒有發言權,除非他們也是程序員。與自動測試相同。他們是您工作的一部分,您的老闆也沒有發言權。
當然,有時候您需要進行權衡,但老闆只能在要素上進行權衡。他們還可以要求您嘗試更快地編程。但是只有您(他們聘請的專業人員)才能決定代碼質量的權衡。了解是什麼使您的編碼更快,而不是他們的編碼,這是您的工作。