軟體開發中的 瑞士軍刀綜合證

2021-06-22 11:06:26 字數 1628 閱讀 6743

t|t

任何乙個公司、專案經理、開發人員,或者是客戶都應當遵守這一邏輯。我們傾向於認為,擁有更多或者實現更多就等同於更好、更有價值。軟體應該是優雅的,優雅的**就是簡潔地完成需求的**。因此,我們開發人員有責任確保我們所寫的每段**都盡可能優雅簡潔。

ad:wot2014課程推薦:實戰msa:用開源軟體搭建微服務系統

51cto主辦wot全球軟體技術峰會直減百元優惠活動 搶票進行中!

如果大家認為這篇文章更多是在噴,我先說抱歉。「瑞士軍刀症候群」的想法是起源於我和專案經理、客戶、甚至其他開發者打交道的過程中產生的沮喪感,他們都以一種狹隘特殊的方式思考問題。我稱之為「瑞士軍刀症候群」。

「瑞士軍刀」這個詞通常用於描述一種可以在各種情況下使用的多種工具的集合體。

雖然這樣的組合可能很有用,但同樣要注意一些風險。乙個有太多活動部件的工具,可能最後是完全無用的!什麼都能做的工具,就是什麼都做不好的工具。

就我的經驗來看,同樣的問題也出現在軟體上。大多數時候,開發人員僅僅因為「這很酷!」就把一些功能或者一段**放進工程裡;專案經理們會認為這樣或那樣的特性可以增加價值,並且在專案中期修改需求;消費者因為聽說或看到某個效能對他們「至關重要」而期望額外功能或特性。

這種「瑞士軍刀症候群」可以有很多形式:需求範圍的蔓延,過早的優化,等等。但是問題的根源在於,我們是如何理解並評判軟體、工作量及其附加價值的價值:

現實中,以及絕大多數情況,事實恰恰相反。一段**或者乙個軟體越複雜,它提供的價值就越少。乙個個人的例子就可以簡單說明這一概念,demac media內部使用的樞紐控制台。

本來這個應用很簡單:我們需要乙個(1)檢視所有分配給小組的任務和(2)通過本週或兩周的底線來過濾任務——簡單來講,就是乙個帶有過濾功能的任務整合器。

我用了一周時間,寫出了基本的功能。在下週周一時,我給我們團隊的專案經理展示的時候,他認為這個應用不錯,很有用。

於是瑞士軍刀症候群開始了:這個工具要和另乙個團隊共同使用。在他們還沒有開始使用之前,我們就收到了一堆需要新增的新特性。突然間,我們有了很多遠超出這個應用最開始設計的需求。

軟體應該是簡潔的,只提供它應該提供的功能。為了配合上面的軍刀,一段優秀的**,就應該像廚子的刀一樣。乙個廚刀很簡潔,有特定的功能。乙個專業大廚會在不同情況下用不同的刀。同樣的思維方式也應該應用到**中。

我們發現軟體設計中也有同樣的原則,通常叫做單一功能原則:

……單一功能原則規定每個類都應該有乙個單一的功能,並且該功能應該由這個類完全封裝起來。所有它的服務都應該嚴密的和該功能平行。

任何乙個公司、專案經理、開發人員,或者是客戶都應當遵守這一邏輯。我們傾向於認為,擁有更多或者實現更多就等同於更好、更有價值。軟體應該是優雅的,優雅的**就是簡潔地完成需求的**。因此,我們開發人員有責任確保我們所寫的每段**都盡可能優雅簡潔。

網路安全中的「瑞士軍刀」 nc

在入侵中它是最經典的工具之一 netcat被所有的網路安全愛好者和研究者稱之為瑞士軍刀,通過名字大家就能知道他的功能足夠豐富。nc的全稱為netcat,它能夠建立並接受傳輸控制協議 tcp 和使用者資料報協議 udp 的連線,netcat可在這些連線上讀寫資料,直到連線關閉為止。它可以通過手工或者指...

USB軍火庫 安全裝置中的瑞士軍刀

上週在巴黎舉辦的2014 天下無欺 國際安全大會 no such con 上,由義大利逆徑安全諮詢公司 inverse path 的首席安全工程師安德里亞 巴利桑尼 andrea barisani 帶來的一款usb安全裝置 usb軍火庫 usb armory 轟動全場,受到了極大的關注。這個小小的東...

警惕軟體開發中的「學生綜合症」

這個概念有點意思,是在一篇英文資料上看到的,看來老中老外都一樣,容易在旅途中迷失,只有期限到了才會突然驚醒。言歸正傳,大家上學時應該都有類似體會,平時好像沒什麼人著急,到了考試的時候,很多人會突然發現還有很多東西沒有學好,於是就趕快加班加點地去學習 啃書。或者是老師早就安排了乙個作業下來,大多數人到...