4)软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性,为了消除这种依赖,在软件开发中提出了软件移植的问题。并且把软件的可移植性作为衡量软件质量的因素之一。
5)软件开发至今尚未完全摆脱手工艺的开发方式,大部分产品是“定做的”。
软件可靠性的核心是“思考”问题,软件不可能像硬件那样分解成元器件,它只有语句。语言本身造成的软件故障较少,而且通过静态测试(目测或编译)的方式可加以发现和修正。软件错误来源主要是软件设计者的思维错误及软件的复杂性,这是难以控制的。软件可靠性的提高需要从人的思维的正确性和减少软件的复杂性两方面着手。正如我们用汉语言写文章,观点有错误不能归咎于语言本身不好,而应归咎于人的思想。而软件开发摆脱不了手工艺的开发方式,也是导致软件故障和安全问题的重要原因之一。
6)软件是复杂的,软件复杂性是软件的根本特征。软件内部逻辑高度复杂,而硬件内部逻辑较为简单,这就在很大程度上决定了设计错误是导致软件故障的主要原因,而导致硬件故障的可能性则很小。软件的复杂性也是导致软件可靠性和安全性受影响的重要因素。