目录
5、瀑布模型,快速原形、增量模型、螺旋模型的特点,适用范围,局限性
一、什么是软件,软件的特点,软件的本质特征
1、什么是软件
软件是与计算机系统操作有关的程序,规程,规则及任何与之有关的文档和数据,它是包括程序,数据及其相关文档的完整集合
2、软件的特点
(1)软件是一种逻辑实体,而不是具体的物理实体,因而具有抽象性
(2)软件的生产与硬件不同,在他的开发过程中没有明显的制造过程,使用中的维护工作相当复杂
(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题
(4)软件的开发和运行常收到计算机系统的限制,对计算机系统有着不同程度的依赖性
(5)软件的开发至今尚未完全摆脱手工艺的开发方式
(6)软件本身是复杂的
(7)实际问题的复杂性
(8)逻辑程序结构的复杂性
(9)软件成本相当昂贵
(10)相当多的软件工作涉及到社会因素
3、软件的本质特性
(1)复杂性
①软件在规模上可能比任何由人类创造的其他实体都要复杂,复杂性是软件的本质特性
②软件的复杂性是必要属性
③开发问题也会增加复杂性
(2)一致性
①软件必须遵从人为的惯例并适应已有的技术和系统
②软件需要随接口的不同而改变,随时间的推移而变化,而这些变化是不同的人设计的结果
③许多复杂性来自保持与接口的一致,对软件的任何再设计,都无法简化这些复杂性
(3)可变性
①软件产品扎根与文化的母体中,如各种应用,用户,自然及其社会规律,计算机硬件等,这些变化无情的强迫着软件随之变化
②人们总是认为软件时容易修改的,但忽视了修改所带来的副作用,不断地修改最终导致软件的退化。
(4)不可见性
①软件是不可见的和无法可视化的
②人们一致试图使用不同的技术进行软件可视化
③软件仍然保持着无法可视化的固有特性,从而剥夺了一些具有强大功能的概念工具的构造思路,这种缺憾不仅限制了个人的设计过程,也严重的阻碍了相互之间的交流。
二、软件质量要素
1、正确性:例如:病人血压超过或低于阈值,要报警提示护士
2、可靠性:例如:系统停机时间超过30分钟的概率要小于0.5%
3、效率:例如:系统查询的相应时间平均少于2秒
4、完整性:例如:拥有特权账号才能进行特权操作
5、实用性:例如:新员工培训两天后即可熟练操作系统
6、可维护性:循环编程规范
7、灵活性
8、可测试性
9、可移植性
10、可重用性
11、互操作性
三、什么是软件危机,软件危机的表现,软件危机的原因
1、什么是软件危机
软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题
2、软件危机的表现
(1)软件开发的成本和进度难以准确估计,延迟交付甚至取消项目的现象屡见不鲜
(2)软件存在着错误多,性能低,不可靠,不安全的质量问题
(3)软件维护及其困难,而且很难适应不断变化的用户需求和用户环境
3、软件危机的原因
(1)软件规模与复杂性
(2)过程管理欠缺
四、软件工程的定义,目标及实现
1、软件工程的定义
(1)【Bauer,1972】软件工程是为了经济获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程原则
(2)【CMU,1990】软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效的解决软件问题
(3)【IEEE,1993】软件工程师①将系统性的,规范化的,可定量的方法应用于软件的开发,运行和维护,即工程化应用到软件商;②对①中所述方法的研究
2、软件工程的目标
在给定成本,进度的前提下,开发出满足用户或市场需要的高质量的软件产品
3、软件工程的原则
(1)抽象:抽取本质特性,忽略非本质的细节;采用分层次抽样,自顶向下,逐层细化方法控制软件开发过程复杂性
(2)信息隐蔽:将模块设计成“黑箱”,实现细节隐藏在模块内部,不让模块的使用者直接访问,这就是信息封装,使用与现实分离的原则
(3)局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚,有助于表示复杂的系统
(4)一致性:整个软件系统的各个模块应使用一直的概念,符号和术语u。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致
(5)完整性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度,为了保证系统的完备性,在软件开发和运行的过程中需要严格的技术审评
(6)可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解,系统分解应遵循易于检查,测试,评审的原则,以确保系统的正确性。
五、瀑布模型、快速原形、增量模型、螺旋模型的特点、适用范围、局限性
1、瀑布模型(生存周期模型)
(1)特点:按工序将问题简化,将功能的实现与设计分开,便于分工协作
(2)适用范围:在开发的早期阶段软件需求被完整确定
(3)局限性:①各个阶段的划分完全固定,阶段之间产生大量的文档,极大的增加了工作量
②开发过程中很难相应客户的变更需求
③早起的错误可能要等到开发后期的测试阶段才能实现,进而带来严重的后果。
2、快速原形
(1)特点:需要迅速建立一个可以运行的软件模型,一遍理解和澄清问题,是开发人员与用户达成共识
(2)适用范围:①小型或中等规模的交互式系统
②大型系统的某些部分,例如用户界面
③生命周期较短的系统
(3)局限性:①原形系统的内部结构可能不好
②开发人员需要掌握建立快速原型的开发技术和工具
3、增量模型
(1)特点:引进了增量包的概念,无须等到所有需求都出来,只要某个需求增量包出来即可开发
(2)适用范围:①进行已有产品升级或新版本开发,增量模型是非常适合的
②对完成期限严格要求的产品,可以使用增量模型
③对所开发的领域比较熟悉且已有原形系统,增量模型也是非常适合的
(3)局限性:①需要软件具备开发式的体系结构
②需求难以在增量实现之前详细定义,因而增量与需求的准确映射以及所有增量的 有效集成可能会比较困难
③基本服务处理困难
④容易退化为边做边改方式,使软件过程中的控制失去整体性
4、螺旋模型
(1)特点:引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减少损失
(2)适用范围:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更,螺旋模型只适用于大规模的软件项目
(3)局限性:①风险分析需求成本,影响收益,所以只适于大规模软件项目
②客户未必能接受,所以往往适应于内部的大规模软件开发
③由于需求的不确定性,软件开发初期无法进行体系结构设计,多次迭代会导致软 件体系结构变坏,影响软件理解和维护