В программном обеспечении имеется ошибка, если оно не выполняет того, что пользователю разумно от него ожидать. Отказ программного обеспечения — это проявление ошибки в нем.
Слово «разумно» употреблено в определении для того, чтобы исключить ситуации, когда, например, к терминалу информационно-поисковой системы публичной библиотеки подходит человек и просит определить объем своего вклада в местном банке.
Ошибки в программном обеспечении не являются внутренним его свойством. Это значит, что, как бы долго и пристально мы не разглядывали (или тестировали, или доказывали) программу, мы никогда не сможем найти в ней все ошибки. Мы можем обнаружить лишь некоторые ошибки.

Надежность программного обеспечения есть вероятность его работы без отказов в течение определенного периода времени, рассчитанная с учетом стоимости для пользователя каждого отказа. Слово «вероятность» в определении по существу означает вероятность того, что пользователь не введет в систему некоторый конкретный набор данных, выводящий систему из строя.
Надежность также не является внутренним свойством программы. Она во многом связана с тем, как программа используется.
Надежность программного обеспечения существенно отличается от надежности аппаратуры. Программы не изнашиваются, поломка программы невозможна. Таким образом, надежность программного обеспечения — есть следствие исключения ошибок проектирования, т.е. ошибок, внесенных в процессе разработки программного обеспечения.
Надежность является составной частью более общего понятия— качества. Качественная программа, например, не только надежна, но и компактна, совместима с другими программами, эффективна, удобна в сопровождении, вполне понятна. Можно добавить: программа должна быть разработана в срок и в пределах бюджетной стоимости.
Среди прочих характеристик качества программ надежность стоит на первом месте, и поэтому дальнейшие вопросы разработки программного обеспечения рассматриваются через призму надежности.