1、软件是一种逻辑产品,具有抽象性。硬件是有形设备,而软件不像硬件那样具有明显的可见性;软件的开发过程中没有具体的物理制造过程。人们可以把软件记录在介质上,但无法直观地观察到软件的形态,而必须通过在计算机实际地运行才能了解它的功能、性能和其他特性。
2、软件的生产方式与硬件的制造不同。软件的生产过程以创造性思维为主,它是人们脑力脑洞的结晶,它的研发过程就是生产过程。软件的成本主要体现在开发和研制上,而复制产品的成本则非常廉价,软件的研发成本远远大于生产成本。
3、软件缺陷检测的困难性。发现软件错误和缺陷的主要手段是软件测试。由于软件生产过程的特殊性,使得软件缺陷难于跟踪和控制,检测和预防软件缺陷困难,需要进行一系列的软件测试活动以降低软件的错误率。
4、软件维护的复杂性。软件不存在像硬件那样的部件磨损和老化问题,但是为了纠正软件错误和适应硬件、环境以及需求的变化,需要进行维护,而每次维护不可避免地引入新的错误,导致软件质量下降,失效率升高,从而使得软件退化。
5、软件对环境的依赖性。软件的开发和运行必须依附于特定的计算机系统环境,它不像有些硬件设备那样能够独立地工作,而是受到了硬件、系统软件和支撑软件等因素的制约。为了减少这种依赖性,引发了软件的可移植性问题