Cruft
*'是一个行话,指的是任何剩余的、多余的和碍事的东西。它特别用于计算机软件中的缺陷、被取代的、无用的、多余的或功能失调的元素。 历史 大约在1958年,这个词被经常在麻省理工学院(MIT)的科技铁路模型俱乐部(TMRC)的学生们用在“垃圾”的意义上。在1959年版的俱乐部词典中,它被定义为“在你走进去打扫之前神奇地堆积在俱乐部房间的东西。换句话说,就是垃圾”。其作者Peter Samson后来解释说,这是指“残渣,需要扫除和扔掉的东西。…
共 28 篇文章
*'是一个行话,指的是任何剩余的、多余的和碍事的东西。它特别用于计算机软件中的缺陷、被取代的、无用的、多余的或功能失调的元素。 历史 大约在1958年,这个词被经常在麻省理工学院(MIT)的科技铁路模型俱乐部(TMRC)的学生们用在“垃圾”的意义上。在1959年版的俱乐部词典中,它被定义为“在你走进去打扫之前神奇地堆积在俱乐部房间的东西。换句话说,就是垃圾”。其作者Peter Samson后来解释说,这是指“残渣,需要扫除和扔掉的东西。…
,面条式代码也同样地扭曲纠结。]] 面条式代码()又稱祖傳代碼、屎山代碼,是软件工程中反面模式的一种,是指源代码的控制流程复杂、混乱而难以理解,尤其是用了很多GOTO、例外、线程、或其他无组织的分支。其命名的原因是因为程式的流向就像一盘麵一样扭曲纠结。面条式代码的产生有许多原因,例如没有经验的程序设计师,及已经过长期频繁修改的复杂程序。 结构化编程可避免面条式代码的出现。 举例 以下是一段用BASIC写的程序,是典型面条式代码的例子。程…
上帝物件()是物件導向程式設計中承担过多职责的-{|zh-hans:对象; zh-hant:物件}-,為一種反面模式。上帝物件通常出現在設計不良的系統中。 特徵 以下為一個上帝物件的Java範例: public class GodObject { private int data; public void processData() { // 非常複雜的處理邏輯 // 涉及多個不同的功能和方法邏輯 // 違反單一職責原則 } publi…
抽象倒置(abstraction inversion)是程序设计裡的反面模式,是指使用者需要的功能在某一物件中,但未在介面中開放,結果是使用者需要用介面重新實現此功能,而不是直接使用內部的功能。這會造成用高階的介面為基礎,實現較低階功能的問題,因此稱為抽象倒置。 可能的缺點有: 重新實現功能的使用者可能會嚴重低估其運行成本。 使用者被迫用複雜的機械細節來掩蓋其實現。 許多使用者試圖解決同一個問題,增加錯誤的風險。 範例 專業程式圈內抽象…
在程式設計中,魔術數字(magic number)可能指: 缺乏解釋或命名的獨特數值。常常在程序中出现多次,并且可以(从规范上而言也应当)被有名字的常量取代。 用于辨識一個檔案格式或協定类型的一段常量或字符串,例如UNIX的特徵簽章。 不易于其他值混淆的值,例如UUID。 未命名的具体数值 魔術數字可以是指寫死在程式碼裡的具體數值(如「10」「123」等以數字直接寫出的值)。例如,在下面这个计算含税价格的程序片段中,1.05即是一个典型…
貧血領域模型(anemic domain model)是一種軟體開發的模型,是指其領域物件只有部份业务逻辑(例如資料驗證、計算、規則等),甚至沒有任何业务逻辑。像以下的模型就是貧血領域模型,有資料讀取和寫入的介面函式,但沒有其他函式。 class Rectangle { public int Height { get; set; } public int Width { get; set; } } 貧血領域模型的业务逻辑會放在程式的架構…
代码膨胀()一般指程序代码(可以是源代码,也可以是机器代码)生成的程序文件过大、运行缓慢或者有其他浪费资源的情况,也可以指编译后的代码或者二进制文件占用空间过大(体积膨胀)。代码膨胀可能由编写代码的语言、编译时所用的编译器,或者编写的程序员导致。 产生原因 通常来说,膨胀的代码是由于程序员使用了较多的代码行(并且大部分是无用或低效的),而非使用了解决问题的最佳方案。 程序员写出膨胀代码的部分原因有: 过度设计: 过度使用面向对象(OOP…
附屬复杂度(Accidental complexity)是指電腦軟體開發過程中所引入不必要的复杂度。附屬复杂度不是待求解問題的本質,相對而言, 本質複雜度和待求解問題的本質有關,是無法避免的。附屬复杂度一般是因為選用求解問題的方法時所引入的。 有時附屬复杂度可以歸因於像無效的規劃等錯誤,不過有時附屬复杂度是求解問題時伴隨產生的副作用。例如因為記憶體用完而產生的复杂度是一種附屬复杂度,但只要決定使用電腦求解問題,就會存在這種复杂度。 好的…
在软件工程中,反面模式(anti-pattern或antipattern)指的是在实践中經常出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。 安德魯·克尼格在1995年造了anti-pattern这个词,灵感来自于GoF的《设计模式》一书中所引入的“设计模式”(design pattern)的概念。三年后antipattern因《A…
委员会设计(Design by committee)是貶義詞語,是一種反模式,是指專案中有多人參與設計,而且沒有一致的計劃或是看法。 用法 此一詞語用在指在平衡一些需求以及參與者的觀點時,出現次佳的作法,可以是因為領導能力不足,或是技術知識不足、或是出現不必要的複雜性、內部不一致、邏輯缺陷、平庸及缺乏一致的願景。委员会设计屬於民主式的設計,這和(或專制設計)相反,後者是由專案負責人決定其設計。獨裁式設計在最終設計中不考慮成員的意見,由專…
功能蔓延是指產品裡的新功能持續膨脹或增加的情形,常出現在電腦軟體、电子游戏及消費電子產品內。增加的功能超過了產品的基本功能,有可能會讓軟體無法維持簡單設計,出現软件膨胀及過度複雜的情形。 有關「怎樣算是功能蔓延」的定義,會隨终端用户而不同,某個功能對一些用戶來說,可能算是「功能蔓延」,但卻是其他客戶實際會用到的功能。功能蔓延是最常見造成及時程逾期的原因之一。這會危害專案及產品,甚至可能讓專案及產品因此而結束。 原因 特徵蔓延的主因常是因…
软件腐败(Software rot)也称代码腐败、比特腐败、软件腐蚀、软件衰变,或软件熵,是指软件性能随着时间而逐渐恶化或反应性的递减(diminishing responsiveness),导致软件出错、不稳定,需要升级。这并不是一个物理现象:软件实际上并不会衰变,而是缺乏敏捷反应(responsive)、未能随环境变化而修改。 新黑客词典定义“比特腐败”为软件程序随时间降级的幽默表示,即使什么都未改变。这把组成软件的比特类比为原子的…
相依性地狱(英语:dependency hell),又称依赖地狱,是指在操作系统中由于软件之间的依赖性不能被满足而引发的问题。 一个软件包依赖于其它必要的软件包(且版本要符合要求),使得软件包系统形成了复杂的依赖关系网络,并可能引发一系列问题。一些软件包可能因为依赖性无法满足,需要安装大量软件包;另一方面,一个软件包的卸载可能引发数量众多的软件包无法工作。 目前,GNU/Linux通过高级软件包管理机制,一定程度上解决了相依性地狱问题。…
在电脑运算领域,DLL地狱(DLL Hell)指Microsoft Windows系统中,因为動態連結函式庫;}-(DLL)的版本或相容性的问题而造成软件无法正常执行。 Windows早期并沒有很严谨的DLL版本管理机制,以致经常发生安装了某软件后,因为其覆盖了系统上原有的同一個DLL文件,而导致原有可运行的程式无法运行。但还原回原有的DLL文件之后,新安裝的软件就无法运行。若影响到系统所使用的重要DLL时也可能让系统容易死机甚至无法正…
重造轮子()是重新创造一个已有的或是早已被最佳化}-過的基本方法,此用語常出現在软件开发或其他工程领域中。 「重造轮子」一詞的由來,是因為輪子自從被發明後,在使用上沒有太大的缺陷,足以應付多數需求,原則上後人只需要直接應用即可,重新再發明一次輪子不但沒有意義、浪費時間、還會分散研究者的資源,使其無法投入更有意義及價值的目標。 不過作為教學與學習目的,「重造轮子」反而是重要的方法:藉由重新研究的過程讓學習者領悟這項技術或方法的核心運作精隨…
在經濟學中,道德風險()是一個特定狀況,當一個經濟參與者不用負擔產生風險()的全部成本時,將會造成誘因,使他主動增加曝露在風險的程度。 比如说,当某人获得某保险公司的保险,由于此时某人行为的成本由那个保险公司部分或全部承担。此时保险公司面临着道德风险。如果此人违约造成了损失,他自己并不承担全部责任,而保险公司往往需要承担大部分后果。此时某人缺少不违约的激励,所以只能靠他的道德自律。他随时可以改变行为造成保险公司的损失,而保险公司要承担损…
软件膨胀() 是指计算机程序佔用空間隨軟件更新越變越大,而且還會佔用更多内存、磁盘空间及CPU資源,對硬件要求也越來越高。 對於軟件膨脹這現象,周思博认为,對於常用軟件來說,虽然80%的用户只用了軟件中20%的功能,但每個人用的功能不盡相同,因此精简版软件對大多数人来说未必有用,因为對用戶來說,精簡版缺少他們想要的功能。 信息安全問題 軟件膨脹容易有更多安全漏洞 由於軟件膨脹,程式設計師在管理代碼時會更困難,導致更難偵測潛在的安全漏洞,…
在软件工程中,忙碌等待(也称自旋;、busy-looping、spinning)是一种以进程反复检查一个条件是否为真为根本的技术,条件可能为键盘输入或某个锁是否可用。忙碌等待也可以用来产生一个任意的时间延迟,若系统没有提供生成特定时间长度的方法,则需要用到忙碌等待。不同的计算机处理器速度差异很大,特别是一些处理器设计为可能根据外部因素(例如操作系统上的负载)动态调整速率。因此,忙碌等待这种时间延迟技术容易产生不可预知、甚至不一致的结果,…
分析瘫痪(或)指的是個人或團體因為過度分析或過度思考而導致决策或行動进展迟缓,無法在指定时间内做出有效決定或行動(即所谓的“癱瘓”)。情境可能被视为过于复杂且而可能導致更大的問題,所以遲遲無法做出决策。同樣地,一个人可能認為更優越的解決方案只有一步之遙,而陷入無止境的追求,忽略了報酬遞減的概念。 分析癱瘓是指對犯錯或錯過更好解決方案的恐懼,超過了及時決策下對成功的現實期望或其潛在的價值。這種不平衡導致決策無意識地被抑制,以試圖保留選項。…
货物崇拜编程()是一种计算机程序设计中的反模式,其特征为不明就里地、仪式性地使用代码或程序架构。货物崇拜编程通常是程序员既没理解他要解决的程式錯誤、也没理解表面上的解决方案的典型表现。 这个名词常指不熟练的或没经验的程序员从某处拷贝代码到另一处,却並未了解其代码是如何工作的,或者不清楚在新的地方是否需要这段代码。也可以指不正确或过分地应用设计模式、代码风格或编程方法,却不清楚其原理。货物崇拜编程也可以指对设计模式的盲目崇拜:盲目地使用设…