非功能需求
非功能需求(non-functional requirement,NFR)喺工程學,係泛指一個系統(例如一隻軟件)唔係功能需求嘅其他需求。
例如喺軟件工程上,無論一隻軟件係攞嚟做乜嘅,軟件工程師一般都會希望隻軟件具有以下嘅特性。呢啲响功能以外、但一隻軟件需要有嘅特性就係所謂嘅非功能需求[1][2]:
軟件內部
編輯睇埋:容錯能力
- 可測試度(testability):指一隻軟件要容易做測試-喺整好咗隻軟件嘅原型之後就要做測試搵吓隻軟件有冇錯處;舉個簡單例子,軟件工程師可以要隻軟件記低啲 log(要隻軟件記住自己行嗰陣喺邊個時間點發生咗咩事),而呢點會幫軟件工程師手搵出錯處喺邊[3]。
- 可維護度(maintainability):指嗰個程式有幾易可以俾現時或者將來嘅編程員攞去改良、執錯或者調較。高嘅可維護度對於普通嘅用家嚟講重要性唔係咁明顯,但就對一個程式長遠嘅命運同價值嚟講就好緊要-具有高可維護度嘅程式往往會俾人攞去改完又改,因而有一個更活躍嘅用家群[4][5]。
- 可移植度(portability):指嗰個程式嘅源碼可以喺幾廣泛嘅電腦硬件同作業系統上面行,一個完美可移植嘅程式能夠喺任何電腦(無論係個人電腦定係手機等)上面行。可移植度由好多因素話事,例如係有啲程式可能用咗一啲比較專業嘅指令,而呢啲指令專業得滯,未必部部電腦都有安裝呢啲指令-噉就會搞到個程式喺某啲電腦上面行唔到[6]。
- 可返用度(reusability):指隻軟件或者隻軟件啲組成部份可以攞去返用-喺軟件工程師做嘢嗰時,佢哋要設計完一隻軟件跟住去設計下一隻,而事實表明咗,有好多演算法同子程序都係唔同嘅軟件都會用到嘅,所以一位軟件工程師做嘢嗰陣成日都會諗起而家整緊嗰隻軟件可以用返某啲打前整過嘅軟件用過嘅嘢;因為噉,軟件工程師通常都會特登將隻軟件整到裏面啲嘢可以輕易噉攞去返用[7]。例子可以睇吓電子遊戲製作當中嘅遊戲資產(game asset)。
軟件外部
編輯- 效率(efficiency):指個程式用咗幾多資源。呢度嘅「資源」包括咗時間、電腦記憶、同埋係網絡頻寬等等。一個理想嘅程式能夠好好噉管理佢有嘅資源,例如係唔好俾漏記憶嘅情況發生,並且用最少嘅資源做最多嘅嘢。可以睇埋運算複雜度方面嘅內容[8]。
- 可靠度(reliability):指個程式有幾常會俾到啱嘅結果,一個完美可靠嘅程式係每次行嗰陣都會成功俾到正確輸出嘅, [註 1];可靠度取決於啲演算法喺概念上嘅正確同寫程式嘅過程當中有冇出錯,唔可靠嘅程式成日會有競爭危害(race condition;指個程式嘅最終輸出會受一啲唔受控制嘅時間差影響)或者緩衝區溢位(buffer overflow)等嘅問題-即係話如果有呢類問題出現,噉通常表示個程式寫得唔好[9]。
- 頑健度(robustness):指個程式有幾能夠預測同應對一啲佢自身以外嘅差錯,包括輸入嘅資料唔啱款(例如係輸入需要係浮點數但用家俾咗個字符)、要用嘅資源(好似係記憶體)唔夠用以及係用家方面嘅出錯呀噉。一個強健嘅程式能夠喺佢自己以外嘅嘢出錯嗰陣有方法應對-簡單講可以想像成「
if
有問題,then
用噉噉噉嘅步驟嚟應對」,至少唔會搞到輕機[10]。 - 易用度(usability):指一個普通嘅用家有幾易可以正確噉運用呢個程式。一個易用嘅程式會寫得好清楚、冇啲唔等使嘅指令、仲會有好多附加嘅內文嚟解釋每段指令係為乜而存在嘅;呢啲因素令到經驗冇咁豐富嘅編程員或者冇份寫嗰個程式嘅編程員能夠一睇就知嗰個程式做緊啲乜嘢,第時有其他人接手隻軟件嗰陣就冇咁撈絞。人機互動(human-computer interaction,HCI)呢門專係研究點樣令電子架生更加易用嘅電腦科學領域對易用度有詳細嘅研究[11]。
冇縮排冇注釋: | 有縮排有注釋: |
---|---|
def find_max (L):
max = 0
for x in L:
if x > max:
max = x
return max
|
# 入嘅嘢:一列冧巴,叫佢做「L」。
# 出嘅嘢:L 入面最大嘅冧巴。
def find_max (L): # 定義乜嘢係「去搵 L 嘅最大值」。
max = 0 # 設最大值做 0。
for x in L: # 為咗 x 喺 L 入面。
if x > max: # 如果 x 大過最大值。
max = x # 設最大值做 x。
return max # 俾返個最大值出嚟。
# 有縮排有注釋嘅程式易睇好多,
# 對第時接手嘅編程員嚟講會易用啲。
|
... 等等。
睇埋
編輯註釋
編輯攷
編輯- ↑ Software Engineering | Introduction to Software Engineering. GeeksforGeeks.
- ↑ Chen, Lianping; Ali Babar, Muhammad; Nuseibeh, Bashar (2013). "Characterizing Architecturally Significant Requirements". IEEE Software. 30 (2): 38-45.
- ↑ Shalloway, Alan; Trott, Jim (2004). Design Patterns Explained, 2nd Ed. p. 133.
- ↑ Foreman, John T.; Gross, Jon; Rosenstein, Robert; Fisher, David; Brune, Kimberly (January 1997). "Maintainability Index Technique for Measuring Program Maintainability". C4 Software Technology Reference Guide: A Prototype (PDF). Software Engineering Institute. p. 231.
- ↑ "Programming 101: Tips to become a good programmer - Wisdom Geek". Wisdom Geek.
- ↑ Mooney, J. D. (2004). Developing portable software. In Information Technology (pp. 55-84). Springer, Boston, MA.
- ↑ Lombard Hill Group (October 22, 2014). "What is Software Reuse". www.lombardhill.com. Lombard Hill Group.
- ↑ Arora, Sanjeev; Barak, Boaz (2009), Computational Complexity: A Modern Approach, Cambridge University Press.
- ↑ Institute of Electrical and Electronics Engineers (1990) IEEE Standard Computer Dictionary: A Compilation of IEEE Standard Computer Glossaries. New York, NY.
- ↑ 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 defines robustness as "The degree to which a system or component can function correctly in the presence of invalid inputs or stressful environmental conditions".
- ↑ Wegge, K. P., & Zimmermann, D. (2007, July). Accessibility, usability, safety, ergonomics: concepts, models, and differences. In International Conference on Universal Access in Human-Computer Interaction (pp. 294-301). Springer, Berlin, Heidelberg