复杂性:分为附加复杂性和固有复杂性
附加复杂性:
并非软件本身固有的、由其他外在因素所附加的额外复杂性,理论上可以被降低甚至完全被消除
固有复杂性:
软件本身固有的本源特性,理论上不可能被消除,但是可以通过相关技术降低其负面影响,
软件面对的领域的复杂性
组成软件元素之间关联关系的复杂性
软件需要面对两个领域:软件领域和问题领域
间接地解决其对开发的防碍
一致性:软件很难获得和保持其一致性
虽然大型建筑工程极其复杂,然而建筑的基本原则是简单和一致的;
软件不存在一种途径或者方法,可以同时解决所有问题;因为软件的每个范畴都是独特的,
找不到统一的规律,很难抽象出其共性
可变性:软件的可变性是独一无二的
其他产品面临变化的需求压力远不如软件大
软件是软的,理论上可以支持各种变化,更容易让用户有不切实际的变更冲动
软件的环境易变,可能被部署到新的平台,支持不断发展的业务
可变性背后还有不确定性
不可视性
软件开发出来之前不存在物理形态
软件只有在使用过程中,通过交互表现出其行为形态
解决不可视性的最可靠途径是:构建软件的交付,并进行测试