Content deleted Content added
→Principles: Assertion (software development) |
Move hatnote text to See also. {{see also}} is not suitable for the top of an article |
||
(37 intermediate revisions by 30 users not shown) | |||
Line 1:
{{
{{Complex systems}}
In [[computer science]], '''robustness''' is the ability of a computer system to cope with errors during execution<ref>A Model-Based Approach for Robustness Testing by Fernandez et al http://dl.ifip.org/db/conf/pts/testcom2005/FernandezMP05.pdf</ref><ref name="IEEE">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"</ref> and cope with erroneous input.<ref name="IEEE"/> Robustness can encompass many areas of computer science, such as [[Defensive programming|robust programming]], [[Overfitting|robust machine learning]], and [[Robust Security Network]]. Formal techniques, such as [[fuzz testing]], are essential to showing robustness since this type of testing involves invalid or unexpected inputs. Alternatively, [[fault injection]] can be used to test robustness. Various commercial products perform robustness testing of software systems, and is a process of [[failure assessment]] analysis.<ref>http://www.stanford.edu/~bakerjw/Publications/Baker%20et%20al%20(2008)%20Robustness,%20Structural%20Safety.pdf</ref>▼
▲In [[computer science]], '''robustness''' is the ability of a computer system to cope with [[Error message|errors]] during [[Execution (computing)|execution]]<ref>
== Introduction ==
In general, building robust systems that encompass every point of possible failure is difficult because of the vast
Regardless, complex systems should still handle any errors encountered gracefully. There are many examples of such successful systems. Some of the most robust systems are evolvable and can be easily adapted to new situations.<ref name="MIT" />
== Challenges ==
Programs and software are tools focused on a very specific task, and thus
Currently, computer science practices do not focus on building robust systems.<ref name="MIT" /> Rather, they tend to focus on [[scalability]] and [[Algorithmic efficiency|efficiency]]. One of the main reasons why there is no focus on robustness today is because it is hard to do in a general way.<ref name="MIT" />
Line 16 ⟶ 17:
=== Robust programming ===
Robust programming is a style of programming that focuses on handling unexpected termination and unexpected actions.<ref name="robust_programming">{{cite web|url=http://nob.cs.ucdavis.edu/bishop/secprog/robust.html |title=Robust Programming |website=Nob.cs.ucdavis.edu |access-date=2016-11-13}}</ref> It requires code to handle these terminations and actions gracefully by displaying accurate and unambiguous [[error message]]s. These error messages allow the user to more easily debug the program.
==== Principles ====
===
Robust machine learning typically refers to the robustness of machine learning algorithms. For a machine learning algorithm to be considered robust, either the testing error has to be consistent with the training error, or the performance is stable after adding some noise to the dataset.<ref>
===
Robust network design is the study of network design in the face of variable or uncertain demands.<ref>{{cite web|url=http://www-math.mit.edu/~olver/thesis.pdf |title=Robust Network Design |website=Math.mit.edu |access-date=2016-11-13}}</ref> In a sense, robustness in network design is broad just like robustness in software design because of the vast possibilities of changes or inputs.
===
There exist algorithms that tolerate errors in the input.<ref>{{cite book |last1=Carbin |first1=Michael |title=Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10 |last2=Rinard |first2=Martin C. |chapter=Automatically identifying critical input regions and code in applications |date=12 July 2010 |pages=37–48 |doi=10.1145/1831708.1831713 |publisher=ACM |isbn=9781605588230 |s2cid=1147058 |chapter-url=http://people.csail.mit.edu/rinard/paper/issta10.pdf}}</ref>
== See also ==▼
*[[Fault tolerance]]
* [[Defensive programming]]
* [[Non-functional requirement]]
==
{{
{{Software quality}}
{{Complex systems topics}}
[[Category:Reliability engineering]]
[[Category:Software quality]]
|