无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

軟件開發(fā)中的常見的15個(gè)定律和原則釋義及應(yīng)用

2021-12-27 14:53 作者:信碼由韁  | 我要投稿

軟件開發(fā)中的常見的15個(gè)定律和原則釋義及應(yīng)用

原創(chuàng)2021-12-27 14:07·信碼由韁


在圍繞軟件開發(fā)的討論中,幾乎不可能避免引用一兩條定律。

“這行不通,因?yàn)椤甔法則’!” 你可能聽過(guò)人們說(shuō)?;蛘摺澳悴恢馈甕原則’嗎? 你是哪種軟件開發(fā)人員?”。

有許多法律和原則可以引用,其中大部分都基于真理。然而,盲目地使用像上面這樣的絕對(duì)陳述來(lái)應(yīng)用它們肯定會(huì)導(dǎo)致自負(fù)和失敗。

本文列舉了一些可以應(yīng)用于軟件開發(fā)的最流行的規(guī)律和原則。對(duì)于每條規(guī)律,我們將快速討論其主要命題,然后探討如何將其應(yīng)用于軟件開發(fā)(也許何時(shí)不應(yīng)該)。

帕累托原則(80/20 規(guī)則)

解釋

帕累托原則指出,通常?80% 的結(jié)果來(lái)自 20% 的原因。數(shù)字 80 和 20 無(wú)論如何都不是精確的,但該原理的總體思路是結(jié)果通常分布不均。

我們可以在生活的許多領(lǐng)域遵守這條規(guī)則,例如:

  • 世界上最富有的 20% 的人創(chuàng)造了世界上 80% 的收入,

  • 80%的犯罪是由20%的罪犯所為

  • 自 2020 年以來(lái),我們知道 80% 的病毒傳播來(lái)自 20% 的受感染人群。

在軟件開發(fā)中的應(yīng)用

我們可以從帕累托原則中獲得的主要好處是專注。它可以幫助我們專注于重要的事情(20%),而不是在不重要的事情(其他 80%)上浪費(fèi)時(shí)間和精力。不重要的事情對(duì)我們來(lái)說(shuō)似乎很重要,因?yàn)橛刑啵ǘ铱雌饋?lái)很緊急)。但最好的結(jié)果往往是通過(guò)專注于重要的少數(shù)來(lái)實(shí)現(xiàn)的。

在軟件開發(fā)中,我們可以基于這個(gè)原則來(lái)專注于構(gòu)建正確的功能,例如:

  • 專注于構(gòu)成產(chǎn)品價(jià)值 80% 的 20% 的產(chǎn)品功能,

  • 專注于導(dǎo)致 80% 用戶沮喪的 20% 錯(cuò)誤,

  • 專注于 80% 的產(chǎn)品功能需要 20% 的總時(shí)間來(lái)構(gòu)建,

  • ......

只是問(wèn)“現(xiàn)在最重要的事情是什么?” 能夠幫助你完成下一個(gè)最重要的事情,而不是下一個(gè)最緊急的事情。

順便說(shuō)一下,敏捷和 DevOps 等現(xiàn)代開發(fā)方法有助于獲得這種關(guān)注!具有定期用戶反饋的快速迭代允許對(duì)重要事項(xiàng)進(jìn)行數(shù)據(jù)驅(qū)動(dòng)的決策。諸如基于主干的帶有功能標(biāo)記的開發(fā)(例如使用?LaunchDarkly)之類的實(shí)踐可以幫助軟件團(tuán)隊(duì)實(shí)現(xiàn)目標(biāo)。

破窗定理

解釋

一扇被打破的窗戶會(huì)招來(lái)惡意破壞,所以用不了多久,所有的窗戶都被打破了。

一般來(lái)說(shuō):混亂會(huì)帶來(lái)更多的混亂。

如果我們的環(huán)境是原始的,我們就會(huì)有動(dòng)力保持這種狀態(tài)。環(huán)境中的混亂越多,我們添加混亂的門檻就越低。畢竟已經(jīng)混亂了……誰(shuí)在乎我們是否再添加一點(diǎn)呢?

我們可以從這條規(guī)則中獲得的主要好處是我們應(yīng)該意識(shí)到我們周圍的混亂。如果人們習(xí)慣于它,不再關(guān)心它了,那么最好為混亂帶來(lái)一些秩序。

在軟件開發(fā)中的應(yīng)用

在軟件開發(fā)中,我們可以將其應(yīng)用于代碼質(zhì)量:我們引入代碼庫(kù)的每一種代碼異味都會(huì)降低我們添加更多代碼異味的門檻。我們應(yīng)該 [[開始清理]] 并保持代碼庫(kù)干凈以避免這種情況發(fā)生。許多代碼庫(kù)如此難以理解和維護(hù)的原因是,破窗已經(jīng)悄然出現(xiàn)并且沒(méi)有足夠快地修復(fù)。

我們也可以將這個(gè)原則應(yīng)用到測(cè)試覆蓋率上:一旦有一定數(shù)量的代碼進(jìn)入了未被測(cè)試覆蓋的代碼庫(kù),就會(huì)添加更多未被覆蓋的代碼。這是保持 100% 代碼覆蓋率(應(yīng)該覆蓋的代碼的)的論據(jù),因此我們可以在窗口破裂之前看到裂縫。

奧卡姆剃刀

解釋

剃刀哲學(xué)是一種原理,它通過(guò)消除(或“削除”)不可能的解釋來(lái)幫助解釋某些事情。

奧卡姆剃刀指出,如果有多個(gè)假設(shè),我們應(yīng)該選擇假設(shè)最少的假設(shè)(這很可能是解釋最簡(jiǎn)單的假設(shè))。

在軟件開發(fā)中的應(yīng)用

我們可以在事件分析中應(yīng)用奧卡姆剃刀。您可能遇到過(guò)這樣的情況:用戶報(bào)告了您的應(yīng)用程序存在問(wèn)題,但您不知道導(dǎo)致問(wèn)題的原因。因此,您搜索日志和指標(biāo),試圖找到根本原因。

下次用戶報(bào)告錯(cuò)誤時(shí),維護(hù)一個(gè)事件調(diào)查文檔。寫下您對(duì)導(dǎo)致問(wèn)題的原因的假設(shè)。然后,對(duì)于每個(gè)假設(shè),列出事實(shí)和假設(shè)。如果一個(gè)假設(shè)被證明是正確的,則將其標(biāo)記為事實(shí)。如果某個(gè)假設(shè)被證明是錯(cuò)誤的,請(qǐng)將其從文檔中刪除或?qū)⑵錁?biāo)記為錯(cuò)誤。在任何時(shí)候,您都可以將時(shí)間集中在最可能的假設(shè)上,而不是浪費(fèi)時(shí)間尋找不相干的東西。

達(dá)克效應(yīng)

解釋

鄧寧-克魯格效應(yīng)表明,沒(méi)有經(jīng)驗(yàn)的人往往會(huì)高估自己的能力,而有經(jīng)驗(yàn)的人往往會(huì)低估自己的能力。

如果你不擅長(zhǎng)某件事,你會(huì)認(rèn)為你擅長(zhǎng)它。如果你擅長(zhǎng)某事,你認(rèn)為你不擅長(zhǎng) - 這可能導(dǎo)致騙子綜合癥,這讓你非常懷疑自己的能力,以至于你在其他具有相似技能的人中感到不舒服 - 不必要地害怕被質(zhì)疑是一個(gè)騙子。

在軟件開發(fā)中的應(yīng)用

意識(shí)到這種認(rèn)知偏差已經(jīng)是朝著正確方向邁出的重要一步。它將幫助您更好地評(píng)估自己的技能,以便您可以尋求幫助,或克服自我懷疑并自己動(dòng)手。

有助于消除達(dá)克效應(yīng)和騙子綜合癥的一種做法是結(jié)對(duì)或群體編程。你不是獨(dú)自工作,沉浸在自我懷疑或優(yōu)越感中,而是與其他人密切合作,邊工作邊交流思想、學(xué)習(xí)和教學(xué)。

不過(guò),這只適用于安全的環(huán)境。在個(gè)人主義被美化的環(huán)境中,結(jié)對(duì)或群體編程會(huì)導(dǎo)致更多的自我懷疑或更多的優(yōu)越感妄想。

彼得原則

解釋

彼得原則指出,只要你成功,你就會(huì)得到晉升,直到你最終得到一份你不勝任的工作。由于您不再成功,您將不再獲得晉升,這意味著您將生活在一份不會(huì)給您帶來(lái)滿足感或成功的工作中,通常這種感覺(jué)將在一直伴隨在您的余生。

前景黯淡。

在軟件開發(fā)中的應(yīng)用

在軟件開發(fā)中,當(dāng)您將角色從開發(fā)人員職業(yè)轉(zhuǎn)換為管理職業(yè)時(shí),彼得原則通常適用。然而,成為一名優(yōu)秀的開發(fā)人員并不一定意味著你是一名優(yōu)秀的經(jīng)理。或者,您可能是一名優(yōu)秀的經(jīng)理,但卻不能從經(jīng)理工作中獲得開發(fā)工作中所能獲得的滿足感,這意味著您沒(méi)有全力以赴(這就是我的情況)。在任何情況下,你都很悲慘,在你面前的職業(yè)道路上看不到任何未來(lái)的發(fā)展。

在這種情況下,退后一步,決定你想要什么樣的職業(yè)生涯。然后,轉(zhuǎn)換角色(或公司,如果需要)以獲得您想要的角色。

帕金森定律

解釋

帕金森定律指出,工作總是會(huì)占據(jù)分配給它的時(shí)間。如果您的項(xiàng)目在兩周的截止日期,則該項(xiàng)目將不會(huì)在此之前完成。 可能需要更長(zhǎng)的時(shí)間,是的,但絕不會(huì)少于我們?yōu)樗峙涞臅r(shí)間,因?yàn)槲覀冋谟貌槐匾墓ぷ骰蛲涎觼?lái)填補(bǔ)時(shí)間。

在軟件開發(fā)中的應(yīng)用

帕金森定律的主要驅(qū)動(dòng)因素是:

  • 拖延癥(“截止日期太遠(yuǎn)了,所以我現(xiàn)在不需要趕時(shí)間……”),還有

  • 范圍蔓延(“當(dāng)然,我們可以添加這個(gè)小功能,它不會(huì)花費(fèi)我們太多時(shí)間......”)。

為了戰(zhàn)勝拖延癥,我們可以把最后期限設(shè)置為幾天而不是幾周或內(nèi)個(gè)月。在接下來(lái)的 2-3 天內(nèi)需要做什么才能朝著目標(biāo)前進(jìn)?一個(gè)(健康的!)截止日期可以給我們足夠的動(dòng)力,讓我們不要陷入拖延癥的泥潭。

為了防止范圍蔓延,我們應(yīng)該非常清楚地知道我們想要通過(guò)項(xiàng)目實(shí)現(xiàn)什么。成功的衡量標(biāo)準(zhǔn)是什么? 這個(gè)新功能是否會(huì)增強(qiáng)這些指標(biāo)?那么如果每個(gè)人都明白這項(xiàng)工作需要更長(zhǎng)的時(shí)間,我們應(yīng)該添加它。如果新功能不符合使命,那就不用管它。

霍夫施塔特定律

解釋

霍夫施塔特定律指出:“即使考慮了霍夫施塔特定律,它所花的時(shí)間也比你預(yù)期的長(zhǎng)”。

即使您了解了這條法律,并增加了項(xiàng)目的時(shí)間分配,它仍然會(huì)比您預(yù)期的要長(zhǎng)。這與帕金森定律密切相關(guān),即工作總是會(huì)填滿分配給它的時(shí)間。只是霍夫施塔特定律說(shuō)它填充的時(shí)間超過(guò)了分配的時(shí)間。

這條定律得到了心理學(xué)的支持。我們?nèi)菀追杆^的“計(jì)劃謬誤”,即在估算工作量時(shí),我們通常不會(huì)考慮所有可用信息,即使我們認(rèn)為我們已經(jīng)考慮了。我們的估計(jì)幾乎總是主觀的,很少是正確的。

在軟件開發(fā)中的應(yīng)用

在軟件開發(fā)(以及任何其他基于項(xiàng)目的工作)中,我們?nèi)祟惖臉?lè)觀情緒發(fā)揮了很大作用。評(píng)估幾乎總是過(guò)于樂(lè)觀。

為了減少霍夫施塔特定律的影響,我們可以嘗試盡可能客觀地進(jìn)行估計(jì)。

寫下關(guān)于項(xiàng)目的假設(shè)和事實(shí)。將每個(gè)項(xiàng)目標(biāo)記為假設(shè)或事實(shí),以使數(shù)據(jù)質(zhì)量可見并管理預(yù)期。

不要依賴直覺(jué),因?yàn)槊總€(gè)人的感受都不一樣。寫下估算值,讓你的大腦思考它們。將它們與其他人的估計(jì)進(jìn)行比較,然后討論差異。

即便如此,它仍然只是一個(gè)估計(jì),很可能不能反映現(xiàn)實(shí)。如果估算不是基于統(tǒng)計(jì)數(shù)據(jù)或其他歷史數(shù)據(jù),那么它的價(jià)值就非常低,因此與要求您估算的人一起管理預(yù)期總是好的——這總是會(huì)出錯(cuò)的。如果你讓它盡可能客觀,它就會(huì)減少錯(cuò)誤。

康威定律

解釋

康威定律指出,一個(gè)組織創(chuàng)建的任何系統(tǒng)都與該組織的團(tuán)隊(duì)和溝通結(jié)構(gòu)相似。系統(tǒng)將在構(gòu)建系統(tǒng)的團(tuán)隊(duì)有接口的地方具備接口。如果你有 10 個(gè)團(tuán)隊(duì)在一個(gè)系統(tǒng)上工作,你很可能會(huì)得到 10 個(gè)相互通信的子系統(tǒng)。

在軟件開發(fā)中的應(yīng)用

我們可以應(yīng)用所謂的逆康威策略:創(chuàng)建最能支持我們想要構(gòu)建的系統(tǒng)架構(gòu)的組織結(jié)構(gòu)。

沒(méi)有固定的團(tuán)隊(duì)結(jié)構(gòu),而是要有足夠的靈活性來(lái)創(chuàng)建和解散團(tuán)隊(duì),這對(duì)系統(tǒng)的當(dāng)前狀態(tài)是最好的。

墨菲定律

解釋

墨菲定律說(shuō),任何可能出錯(cuò)的事情,都會(huì)出錯(cuò)。它經(jīng)常在意外發(fā)生后被引用。

在軟件開發(fā)中的應(yīng)用

軟件開發(fā)是一個(gè)容易出錯(cuò)的職業(yè)。出錯(cuò)的主要來(lái)源是錯(cuò)誤。沒(méi)有任何一款軟件不存在漏洞或事故,從而考驗(yàn)測(cè)試用戶的耐心。

我們可以通過(guò)在日常軟件開發(fā)實(shí)踐中養(yǎng)成減少錯(cuò)誤影響的習(xí)慣來(lái)抵御墨菲定律。我們無(wú)法完全避免錯(cuò)誤,但我們可以而且應(yīng)該減少它們對(duì)用戶的影響。

對(duì)抗墨菲定律最有用的做法是特征標(biāo)記。如果我們使用像?LaunchDarkly?這樣的功能標(biāo)記平臺(tái),我們可以在功能標(biāo)記后面將更改部署到生產(chǎn)中。然后,我們可以使用有針對(duì)性的推出來(lái)激活內(nèi)部 dogfooding 的標(biāo)志,然后為少量友好的 Beta 用戶激活它,最后將其發(fā)布給所有用戶。這樣,我們可以從越來(lái)越挑剔的用戶群體那里獲得關(guān)于變更的反饋。如果更改出錯(cuò)(并且在某些時(shí)候會(huì)出錯(cuò))影響就很小,因?yàn)橹挥幸恍〔糠钟脩艚M會(huì)受到它的影響。而且,該標(biāo)志可以快速關(guān)閉。

布魯克定律

解釋

在經(jīng)典著作《人月神話》中,弗雷德·布魯克 (Fred Brook) 有句名言:為延期的項(xiàng)目增加人力會(huì)使項(xiàng)目延期更多

盡管本書討論的是軟件項(xiàng)目,但它適用于大多數(shù)類型的項(xiàng)目,甚至是軟件開發(fā)之外的項(xiàng)目。

添加人員不會(huì)提高項(xiàng)目速度的原因是項(xiàng)目的通信開銷隨著添加到項(xiàng)目中的每個(gè)人呈指數(shù)增長(zhǎng)。2 個(gè)人有 1 條通信路徑,5個(gè)人已經(jīng)有 5! = 120 條可能的通信路徑。新人安頓下來(lái)并確定他們需要的溝通路徑需要時(shí)間,這就是為什么在項(xiàng)目中添加新人時(shí),遲到的項(xiàng)目會(huì)更晚。

在軟件開發(fā)中的應(yīng)用

很簡(jiǎn)單。改變截止日期,而不是在已經(jīng)延期的項(xiàng)目中增加人力。

對(duì)于向軟件項(xiàng)目中增加新人的期望要切合實(shí)際。將人員添加到項(xiàng)目中可能會(huì)在某個(gè)時(shí)候提高速度,但并非總是如此,當(dāng)然也不是立竿見影。人員和團(tuán)隊(duì)需要時(shí)間來(lái)適應(yīng)日常工作,而在某些時(shí)候,工作無(wú)法充分并行化,因此增加更多人是沒(méi)有意義的。 仔細(xì)考慮一個(gè)新人應(yīng)該完成什么任務(wù),以及在將該人添加到項(xiàng)目中時(shí)您期望什么。

波斯特定律

解釋

波斯特定律也被稱為穩(wěn)健性原則,它指出你應(yīng)該“在你所做的事情上保守,在你接受別人的事情上自由”。

換句話說(shuō),您可以接受多種不同形式的數(shù)據(jù),以使您的軟件盡可能靈活,但您在處理這些數(shù)據(jù)時(shí)應(yīng)該非常小心,以免因無(wú)效或惡意數(shù)據(jù)而損害您的軟件。

在軟件開發(fā)中的應(yīng)用

該定律源于軟件開發(fā),因此非常適于直接使用。

為了增強(qiáng)健壯性,您的軟件與其他軟件或人之間的接口應(yīng)允許不同形式的輸入:

  • 為了向后兼容,新版本的接口應(yīng)該接受舊版本和新版本的數(shù)據(jù),

  • 為了更好的用戶體驗(yàn),UI 中的表單應(yīng)該接受不同格式的數(shù)據(jù),這樣用戶就不必?fù)?dān)心格式。

但是,如果我們?cè)敢饨邮懿煌袷降臄?shù)據(jù),我們?cè)谔幚磉@些數(shù)據(jù)時(shí)就必須保守。我們必須審查無(wú)效值,并確保我們不會(huì)因?yàn)樵试S太多不同的格式而損害系統(tǒng)的安全性。SQL 注入是一種可能的攻擊,它是通過(guò)對(duì)用戶輸入過(guò)于寬松而啟用的。

克希霍夫原理

解釋

克?;舴蛟碇赋?,加密系統(tǒng)應(yīng)該是安全的,即使它的方法是公知的。只有您用來(lái)解密某些東西的密鑰才需要是私有的。

在軟件開發(fā)中的應(yīng)用

這很簡(jiǎn)單,真的。永遠(yuǎn)不要相信要求其方法是私有的加密系統(tǒng)。這被稱為“隱藏的安全”。像這樣的系統(tǒng)本質(zhì)上是不安全的。一旦該方法向公眾公開,它就容易受到攻擊。

相反,依靠公開審查和可信的對(duì)稱和非對(duì)稱加密系統(tǒng),這些系統(tǒng)是在可以公開審查的開源包中實(shí)現(xiàn)的。每個(gè)想知道他們內(nèi)部如何工作的人都可以查看代碼并驗(yàn)證它們是否安全。

萊納斯定律

解釋

在關(guān)于 Linux 內(nèi)核開發(fā)的《教堂與集市》一書中,埃里克·雷蒙德 (Eric Raymond) 寫道:“只要有足夠的眼光,所有 bug 都是微不足道的”。他將此稱為“萊納斯定律”以紀(jì)念萊納斯·托瓦茲。

意思是,如果很多人看代碼,那么相比很少人看代碼而言,可以更好地揭露代碼中的錯(cuò)誤。

在軟件開發(fā)中的應(yīng)用

如果您想擺脫 bug,請(qǐng)讓其他人查看您的代碼。

源于開源社區(qū)的一種常見做法是讓開發(fā)人員提出包含代碼更改的拉取請(qǐng)求(pull request),然后讓其他開發(fā)人員在將拉取請(qǐng)求合并到主分支之前審查該拉取請(qǐng)求。這種做法也進(jìn)入了閉源開發(fā),但根據(jù) Linus 定律,拉取請(qǐng)求在閉源環(huán)境(只有少數(shù)人查看它)中的作用不如在開源環(huán)境中(其中 可能很多貢獻(xiàn)者都在看它)。

其他為代碼添加更多眼球的做法是結(jié)對(duì)編程和群體編程。至少在閉源環(huán)境中,這些在避免錯(cuò)誤方面比拉取請(qǐng)求審查更有效,因?yàn)槊總€(gè)人都參與了代碼的初始階段,這為每個(gè)人提供了更好的上下文來(lái)理解代碼和潛在的錯(cuò)誤。

沃斯定律

解釋

沃斯定律指出,軟件變慢的速度比硬件變快的速度要快。

在軟件開發(fā)中的應(yīng)用

不要依賴強(qiáng)大的硬件來(lái)運(yùn)行性能不佳的代碼。相反,代碼要加強(qiáng)性能優(yōu)化。

這必須與 [[軟件開發(fā)定律#Knuth 的優(yōu)化原則]] 的格言相平衡,該格言說(shuō)“過(guò)早的優(yōu)化是萬(wàn)惡之源”。要把精力花在為用戶構(gòu)建新功能上,而不是用于代碼的性能優(yōu)化上。

通常,這是一種平衡的藝術(shù)。

克努斯優(yōu)化原則

解釋

唐納德·克努斯 (Donald Knuth) 在他的一部作品中寫下了“過(guò)早優(yōu)化是萬(wàn)惡之源”這句話,這句話經(jīng)常斷章取意,并被用作根本不關(guān)心優(yōu)化代碼的借口。

在軟件開發(fā)中的應(yīng)用

根據(jù)克努斯定律,我們不應(yīng)該浪費(fèi)精力過(guò)早地優(yōu)化代碼。然而,根據(jù)沃斯定律,我們也不應(yīng)該依賴硬件足夠快來(lái)執(zhí)行未經(jīng)優(yōu)化的代碼。

最后,這就是我從這些原則中得出的結(jié)論:

  • 優(yōu)化可以輕松完成且不需要太多努力的代碼:例如,編寫幾行額外代碼以避免經(jīng)歷可能有很多項(xiàng)的循環(huán)

  • 優(yōu)化一直在執(zhí)行的代碼路徑中的代碼

  • 除此之外,不要在優(yōu)化代碼上花太多精力,除非你已經(jīng)確定了一個(gè)性能瓶頸。

保持懷疑

定律和原則是好的。它允許我們從某個(gè)角度評(píng)估某些情況,如果沒(méi)有它們,我們可能不會(huì)有這些情況。

然而,盲目地將法律和原則應(yīng)用于每種情況是行不通的。每一種情況都會(huì)帶來(lái)微妙的變化,這可能意味著某個(gè)原則不能或不應(yīng)該被應(yīng)用。

對(duì)你遇到的原則和定律保持懷疑。世界并不是非黑即白的。


本文譯自:?[Laws and Principles of Software Development - Reflectoring](
https://reflectoring.io/laws-and-principles-of-software-development/)


軟件開發(fā)中的常見的15個(gè)定律和原則釋義及應(yīng)用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
深圳市| 九龙县| 建始县| 澎湖县| 岑巩县| 阳朔县| 四平市| 突泉县| 准格尔旗| 墨玉县| 延庆县| 太白县| 唐河县| 新干县| 康平县| 祥云县| 南丹县| 连南| 贵南县| 怀宁县| 鹤山市| 错那县| 江城| 铜梁县| 宽甸| 松滋市| 衡南县| 佛山市| 河间市| 固安县| 南宫市| 玉溪市| 乌拉特前旗| 马龙县| 宁波市| 买车| 得荣县| 泗水县| 江西省| 永和县| 比如县|