題:
有時在軟件開發中不可避免地要走捷徑嗎?
Randomize
2019-09-08 13:58:08 UTC
view on stackexchange narkive permalink

以我作為軟件開發人員的經驗,我發現工作環境中您必須在很短的時間內以很少的資源(包括團隊成員)交付一個項目。

您的老闆沒有

“我真的不在乎或不了解測試(特別是自動化)和其他質量方面的重要性(或者他可能理解那些重要性,但是也許他被經理逼迫而忽略了它)。除了“辭職”之外,您還會採取什麼行動?您會採用快捷方式嗎?如果可以,則選擇哪些快捷方式?還有嗎?

老闆可能理解測試的重要性,但可能是他被經理逼迫而忽略了它。
沒錯,這是可能的情況。讓我編輯問題。
雖然我確實了解您的問題的觀點,但還不清楚您要回答什麼。 是否捷徑是不可避免的?您是要根據自己的情況做什麼,還是想知道如何在短時間內交付?
我今天90%的工作都涉及弄清楚可以切掉哪些角,哪些會導致一切崩潰。管理層很少關心正確的方法,而將其視為進步的障礙。
我不認為這個問題是基於觀點的。有許多軟件開發方法可以為該問題提供客觀的答案。但是,它可能更適合於Project Management SE網站。
七 答案:
Gregory Currie
2019-09-08 14:34:44 UTC
view on stackexchange narkive permalink

是的,現實世界與您在大學所教的知識有很大不同。

為公司工作時,工作是在獲利,而不是根據理想化的軟件來交付軟件開發過程。在很多時候,這些事情是重疊的,但並非總是如此。

不時地“偷工減料”是完全合法的。

您可能會為自己的老闆感到遺憾而感到遺憾。由於不了解軟件測試的重要性,他們可能會感嘆您沒有意識到影響業務的業務壓力。這意味著可能需要在沒有自動化測試的情況下運送東西。我認為將您的老闆歸類為忽略測試的重要性是不公平的。顯然,他們只是將其賦予與您不同的重要性,或者意識到與您不同的因素。

在這種情況下,您的角色是強調與不對經理進行自動測試有關的風險,並允許他們使用手頭的所有信息進行判斷。

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/98453/discussion-on-answer-by-gregory-currie-is-it-不可避免-takeing-shortcuts-in-sof)。
Thomas Owens
2019-09-08 16:20:56 UTC
view on stackexchange narkive permalink

軟件開發是關於在頻繁執行新穎工作的同時,在未知或不確定的環境中管理風險。始終在時間,範圍和質量方面進行權衡。重要的事情是幫助利益相關者了解他們的決策對項目的影響。對我來說,“辭職”或“吹口哨”的答案將保留給那些為項目做出的決定會嚴重影響生命和安全,隱私或機密性,安全性或其他“關鍵因素”的情況(具體取決於您要構建的內容。)

不幸的是,沒有最佳實踐或算法可以做出這些決定。學習伴隨著時間和經驗。您可以學習他人的經驗,但是最好的經驗就是您的經驗,並與您的同事進行權衡取捨,以了解決策過程的原理。這樣的決定是高度上下文相關的。

Kallmanation
2019-09-08 18:29:11 UTC
view on stackexchange narkive permalink

是的,技術債務在許多情況下是一個完全有效的決定;就像在許多情況下,借出真實債務是一項有效的業務決策,以推進業務目標。 (如果我們有$的資本來投資這項業務,我們會賺錢,因此從長遠來看,獲得$的貸款並償還$ $$仍然使我們領先。)

在我看來,跳過自動化測試從來都不是一個好藉口。節省的時間通常用不完,不是幾年或幾個月,而是幾週。 (而且,還清這筆錢的難度越來越大。)除非截止日期是今天,否則不要跳過測試;

這是遵循 TDD恕我直言的原因之一。因為那時我們永遠不會處於可以說某個功能“完成”而“仍然需要測試”的情況。對於非技術經理來說,放棄測試並稱其為完成太誘人了。現在,他們只有縮小範圍,重新安排交付時間,或者在確實有必要時使用其他類型的技術債務(濫用狀態管理,跳過健壯的體系結構等)的更好選擇。

技術債務總體上是不好的。技術債務導致Anthem和Equifax數據洩露。Anthem和Equifax是不利的外部因素,迫使數百萬人和納稅人償還債務。
錯過截止日期並因此被取消的產品沒有技術債務並不重要,不是嗎?
@jww我沒有看到任何證據支持您所說的內容。Anthem漏洞似乎是由成功的網絡釣魚攻擊造成的,而Equifax漏洞似乎是由於沒有及時了解安全補丁而導致的。我也看不到有任何證據表明納稅人正在為罰款做準備。有很多很好的例子,在某些特定情況下,不陷入技術債務會帶來更好的結果,但這兩個例子就是這樣的例子。
在許多情況下,技術債務是完全正確的決定,而且通常甚至是不可避免的,儘管您是正確的決定,但OP所描述的不是技術債務。特別是,技術債務不是偷工減料。技術債務具有非常特殊的含義,它指的是Catch-22,您僅知道系統構建後應如何構建。因此,技術欠債的想法是,您應根據有限的理解*盡可能好地構建系統,並遵循良好軟件工程的所有實踐*,然後使用您的知識…
…通過構建系統而獲得,您可以對其進行重構以使其看起來像在開始之前就已經知道如何構建它。技術債務與您在構建系統時獲得的“知識”,“經驗”和“了解”有關,而不是與偷工減料有關。
在很多情況下,即使是次優產品,也要出售產品比等待時間更好的產品要好,因為否則客戶會購買其他產品。考慮一下帶有PC-DOS 1.0的原始IBM PC,在硬件和軟件上都做了很多努力,但是在適當的時間推出了,您可以看到這是成功的舉動。或者考慮一下Windows NT 3.1的第一個版本以及Microsof與OS / 2相比取得的巨大成功。在某些情況下,情況越好越好。其他當然不是。
@TeroLahtinen沒問題的產品,要花費數百萬美元的生命,並且要按時發布生命。截止日期從來沒有真正固定過(除非是關於威脅要毀滅地球之類的小行星的),它們的難度與您製造它們的難度或破壞它們的成本一樣多。反之亦然,技術債務更難歸因,而管理層往往低估了債務-而開發人員往往高估了債務,部分原因是他們將自身的福祉因素考慮在內,而這對公司而言並不重要。
@JörgWMittag是您非常狹personal的個人定義,而不是普遍接受的定義。來自維基百科:技術債務(也稱為設計債務或代碼債務)是軟件開發中的一個概念,反映了現在選擇一種簡單(有限的)解決方案而不是使用會花費更長時間的更好方法而導致的額外返工的隱含成本。
@FrankHopkins:我不知道您為什麼認為我會如此傲慢自大,提出我自己對偉大沃德·坎寧安(Ward Cunningham)自己創造的術語的定義。我所解釋的定義是他的,並且得到了充分的文獻證明,例如在Wiki上:http://wiki.c2.com/?WardExplainsDebtMetaphor Ward正是由於*錯誤信息*導致了該視頻,因為Wikipedia文章中所散佈的信息引。
引用文章(粗體強調我的話):“對我來說,重要的是,我們通過對程序進行修改來看起來好像我們已經知道了什麼,從而積累了我們對應用程序所做的學習。我們一直在做**,並且**看起來好像在Smalltalk中做起來很容易**。”以及“如果我們**未能使我們的計劃與我們當時認為是理所當然的正確方式**相符**”和……
…“許多博客作者至少**已經解釋了債務的隱喻並將其混淆,[…]的想法是,您可能編寫不好的代碼,而打算以後做一個好工作**,並認為那是主要的債務來源。”和“ **我永遠都不贊成編寫代碼很差**”,但我**贊成編寫代碼以反映您當前對問題的理解,即使這種理解是不完整的**。”和...
…“如果您希望通過開發您不完全了解的軟件來承擔這種債務,**明智的做法是使該軟件盡可能充分地反映您的理解**,以便在出現時是時候進行重構了,**清楚地說明了您在編寫時的想法**,從而可以更輕鬆地將其重構為您當前的想法。”和“換句話說,整個債務隱喻[…]和使債務隱喻對您有利。**取決於您的編寫代碼是否足夠乾淨,以便在您理解問題時能夠進行重構**。”
@JörgWMittag,但從您的鏈接來看,其定義恰恰是立即提高速度,然後花點時間正確地償還債務(包括您從快速,骯髒的方法中學到的經驗教訓)。因此,我認為技術債務(包括偷工減料)沒有矛盾。他似乎造成的區別是,從樣式角度來看,您使用有限的算法功能編寫的代碼仍然應該是好的代碼,即能夠重構。顯然,該術語的最初應用也針對他的項目,並且得到了普遍的接受,並得到了擴展。
-1
-1
-1
Seth R
2019-09-08 23:36:03 UTC
view on stackexchange narkive permalink

您所說的“捷徑”實際上是折衷方案,它們是您將要從事的任何項目,任何學科中固有的。這是不可避免的。工程界有個習慣用法(是的,我在上面的評論中說過):您可以做得很好,可以快速完成,也可以廉價進行。在最佳情況下,您選擇2,因此需要確定在特定情況下哪個2最重要。

以您的情況為例,您有一個小團隊(便宜)和緊迫的期限(很快),因此您構建的內容可能會有很多錯誤,並且您可能無法進行想要進行的測試。這是您的經理做出的決定,他將不得不處理後果。您想進行更多測試以構建更好的產品嗎?他要么不得不給您更多時間(以“快速”輸掉),要么增加更多人來進行測試(以“便宜”輸掉)。這些可能不是該項目的選擇。這是不可避免的。

所以辭職並不能解決任何問題,因為無論您走到哪裡,這項原則都會存在。您最大可能要做的就是找到另一位雇主,他可能會重點關註三合會的不同部分,但即使不同的項目也會有所不同。他們的決策就像您目前的經理一樣。放慢腳步來打造更好的產品意味著您可能會錯過最後期限。增加人員意味著他們將不再從事其他工作。快速而廉價地構建它意味著以後要花費更多的時間來支持它(或使用劣質產品)。根據要求,這些決定中的任何一項都可能有效。關鍵是要了解權衡,權衡對業務的意義,並確保決策者理解它們。這是您可以擁有的最重要的技能之一。

還應該指出的是,我們甚至根本不知道如何構建一個極高質量的項目。大多數程序員在廉價和快速方面擁有大部分經驗。需要極高可靠性的項目(想到Shuttle軟件)的開發與普通實踐和學術理想完全不同。我們可能對如何正確地做事有一些想法,但是它們似乎充其量是微不足道的,而在其他情況下卻完全適得其反,而且無論出於何種原因,通常都沒有經過實踐檢驗。
WGroleau
2019-09-08 23:44:35 UTC
view on stackexchange narkive permalink

幾乎總是需要“權衡”,但不需要廢話。如果發現自己被要求運送垃圾,請考慮走開。或者,如果該軟件涉及財務,信息安全或健康狀況,請逃跑。 (因為失敗,管理層將尋找替罪羊。)

OP已明確要求提供不涉及辭職的解決方案。
gnasher729
2019-09-08 20:30:11 UTC
view on stackexchange narkive permalink

要採取什麼措施:首先是要向經理解釋捷徑可能給公司帶來的成本。最壞的情況是捷徑意味著危害甚至可能殺死人。最無害的情況是下週您解決了該問題,並且沒有造成任何傷害。您的經理需要知道做出明智的決定是什麼。

下一步是採取必要的步驟來“修復”快捷方式。有時不需要。有時,您編寫軟件是一次性使用的,它要么起作用,要么不起作用,然後您可以查看它是否起作用。在這種情況下,如果該軟件能夠正常工作,那麼您採用哪種快捷方式都沒關係。

有時快捷鍵是合理的。假設您是唯一的開發人員,並且軟件必須在X日期準備就緒。如果您在X日期準備就緒,則該公司賺了很多錢,足以僱用另外兩名開發人員。如果您在X日還沒有準備好,則該公司不賺錢,您會失業。顯然,您採用了快捷方式。如果一切正常,那麼兩個額外的開發人員不僅可以清理所有快速創建的混亂局面。

如果您可以告知經理您的軟件處於良好狀態,那麼您可以使用快捷鍵有時。您也許能夠完成一個工作,一周要花四個星期的時間(但是現在該軟件已經搞砸了)。但是您只能這樣做一次,然後需要花三個星期來清理。如果您不清理,那麼接下來的四個星期的工作可能需要花費七個星期的時間才能進行清理,或者需要四個星期的時間甚至會更加混亂,然後您就會遇到麻煩。

Belle
2019-09-09 12:34:37 UTC
view on stackexchange narkive permalink

我想挑戰您提出問題的前提。

誰是軟件開發專家?你還是你的老闆?您的老闆僱用您是因為您是專家,專業人士。自動測試是您工作的一部分。因此,如果您認為有必要,請像專業人員一樣執行自動測試。您的老闆還會決定是否單擊以移至下一行或使用鍵盤嗎?老闆決定您使用製表符還是空格?您的老闆對此沒有發言權,除非他們也是程序員。與自動測試相同。他們是您工作的一部分,您的老闆也沒有發言權。

當然,有時候您需要進行權衡,但老闆只能在要素上進行權衡。他們還可以要求您嘗試更快地編程。但是只有您(他們聘請的專業人員)才能決定代碼質量的權衡。了解是什麼使您的編碼更快,而不是他們的編碼,這是您的工作。

很高興看到這樣的答案。推卸上司的決策和測試的決定就是這樣的責任。
您會從那些告訴起重機操作員將郵票放置在何處的人那裡投票(無論那些正方形高地叫什麼),飛行員會忽略安全檢查表,槍手沒有觸發紀律。真可惜,當有這麼多人知道如何做我們應該做的事情時,為什麼我們開發人員甚至還要學習我們的交易呢?...但是仍然無法更換打印機中的墨盒
您對“老闆”的經驗似乎僅限於不合格的白痴。首席工程師*也是*專家和專業人員;所不同的是,他們是上周剛畢業的專業人士,甚至可能在此過程中積累了一些經驗。
@hobbs以他們的名義,主管* engineer *。當然,您團隊中的其他開發人員也不得不說一兩件事。特別是如果他們比您更有經驗。他們也是專業開發人員。不知道我們交易的老闆不應該。他們應該堅持做老闆。
作為老闆,@Cyonis會決定如何花錢以及如何應對風險,即是使用起重機還是僅使用一堆梯子。當然,在某些引爆點上,僅僅使用梯子會發瘋(非常危險),但總的來說,在這樣的事情上擁有發言權是他的特權。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...