软件是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据,从软件的内容来看,软件更像是一种嵌入式的数字化知识,其形成是一个通过交互对话和抽象理解而不断演化的过程,根据软件服务对象的范围,一般分为通用和定制两种。
通用软件(Generic Software):由软件开发组织开发、面向市场用户公开销售的独立运行系统(优点:一次开发,多次出售 缺点:有风险)
定制软件(Customized Software ):由某个特定用户委托、软件开发组织在合同的约束下开发的软件(优点:满足用户个性化需求 缺点:重复利用性差)
软件的特性
复杂性、不可见性、可变性、一致性
软件是复杂的,软件是人类思维和智能的一种延伸和在异体上的再现,远比任何以往人类的创造物都要复杂的多,软件的复杂性是软件的固有属性、本质特性。
软件是不可见的,软件是客观世界空间和计算机空间之间的一种逻辑实体,不具有物理的形体特征。
软件是不断变化的,它需要随着应用、硬件、用户和社会等各种因素的变化而不断的被修改和扩展。
软件必须遵从人为的惯例并适应已有的技术和系统,软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果,许多复杂性来自保持与其他接口的一致,对软件的任何再设计,都无法简化这些复杂特性。
软件工程三要素
软件工程以关注软件质量为目标,包括过程、方法和工具三要素
过程 支持软件生命周期的所有活动
方法 为软件开发过程提供“如何做”的技术
工具 为软件开发方法提供自动的或半自动的软件支撑环境
ISO9126软件质量的六个一级特性
功能性、可靠性、可使用性、有效性、可维护性、可移植性
功能性:在指定条件下使用时,软件产品提供满足明确和隐含需求功能的能力;
可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力(在规定的条件下,在规定的时间内,软件不引起系统失效的概率);
易用性(可使用性):在指定条件下使用时,软件产品被理解、学习、使用及其吸引用户的能力;
效率(有效性):在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力;
可维护性:软件产品可被修改的能力,修改可能包括修正、改进或者适应环境、需求和功能规约的变化;
可移植性:软件产品从一种环境迁移到另一种环境的能力。