目录
1.1软件
简化软件定义 :程序+文档+数据
软件分类-基于软件功能的划分:系统软件、支撑软件、应用软件。
系统软件 : 与计算机硬件紧密配合使计算机各个部件与相关软件及数据协调、高效工作的软件。 如操作系统、编译程序等。
支撑软件 :协助用户开发软件的工具性软件。
Rational Rose PlayCase Power Designer 青鸟系统(北大)等。
应用软件:
①商业数据处理软件
管理信息系统(MIS)
企业资源计划(ERP)
②工程与科学计算软件
CAD/CAM(计算机辅助设计/制造)
仿真模拟、天气预报。
③智能产品嵌入软件
驻留在智能产品内存,控制产品工作的软件。
数码相机、GPS等
④人工智能软件
利用非数值算法去解决复杂问题的软件。
专家系统、模式识别软件、人工神经网络软件
⑤个人计算机软件
文字处理系统、电子表格、游戏娱乐软件。
软件分类-基于软件规模的划分
1.微型软件 2.小型软件 3.中型软件 4.大型软件 5.甚大型软件 操作系统、大型数据库管理系统等 Windows2000有2000万行代码 Vista有5000万行代码 6.极大型软件 弹道导弹系统等
1.2软件发展
·程序设计 程序系统 软件工程 第四阶段
程序设计阶段:
软件生产个体化 规模小,编写者和使用者同一个人
软件是设计者头脑中隐含过程 除程序清单,无文档材料保存
程序系统阶段:
产品软件 由专门软件开发组织开发
软件作坊 软件开发组织,沿用早期个体化软件开发方法
软件危机 软件维护工作耗费大量资源
软件工程 1968年,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程
软件工程阶段:
软件危机得到缓解 打破软件生产个体化特征 工程化的设计原则、方法和标准
新的挑战 微处理器和个人计算机 分布式处理系统 局域网、广域网 宽带数字通讯
第四阶段:
软件架构发生变化
集中主机环境(应用程序和数据存取放一起,数据无法共享)
客户机/服务器(二层) :把软件分成两部分,应用程序放在客户端,数据存取放在服务器端。(多个客户共享数据)
客户机/服务器(三层) 浏览器/服务器
数据库服务器放数据存取,应用程序分两部分:人机交互界面放客户端,应用处理放应用服务器端。
浏览器/服务器:
新技术 : 专家系统、人工智能 神经网络、并行计算 网格技术、高信度计算、云计算
软件危机定义 :在计算机软件开发和维护过程中遇到的一系列严重问题。
主要表现:
(1)开发成本和进度估计不准 延迟交付、取消项目
(2)用户对已交付软件不满意 开发人员对用户信息交流不充分,产品不符合用户需求
(3)软件产品质量靠不住 软件产品保证技术(审查、复审、测试)未坚持不懈应 用软件开发全过程
(4)软件可维护性差 开发时未考虑,很多错误难以改正
(5)软件没有适当文档资料 文档资料应在软件开发过程中产生,保证最新
软件工程定义:
1993年IEEE的定义 把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程中;研究其实现途径
·软件工程技术
软件开发方法学 软件开发过程 软件工具和软件工程环境
软件工程管理
软件管理学 软件经济学 软件心理学
1.3软件生存周期
·定义:软件从产生、发展到成熟、直至衰亡为止
·组成: 软件定义 软件开发 软件维护
·国标《计算机软件开发规范》,分8个阶段:
可行性研究与计划
需求分析
总体设计
详细设计
实现(编码和单元测试)
集成测试
确认测试
使用和维护
·可行性研究与计划
关键任务: 解决问题是什么?有行得通解决方法?粗略计划
问题定义报告: 问题性质、工程目标、工程规模。
可行性研究报告: 经济、技术、社会(操作)可行性。
项目开发计划: 粗略
·需求分析
关键任务:
目标系统必须作什么?
可行性研究的需求分析是粗略、不准确;
需求分析是完整、准确、清晰、具体。
需求规格说明书:
目标系统需求。
·总体设计
关键任务:
怎样实现目标系统?
根据需求设计方案;
分析推荐最佳方案;
设计软件结构等。
总体设计说明书:
记录总体设计结果。
·详细设计
关键任务:
该怎样具体实现系统?
设计每个模块的算法和数据结构。
详细设计说明书:
用适当表达工具表达算法和数据结构。
·实现(编码和单元测试)
关键任务:
选择语言、工具翻译详细设计结果、测试模块。
实现阶段文档:
程序清单、单元测试报告。
·集成测试
关键任务:
将经过单元测试模块组装起来进行测试;
通过测试使软件达到预定要求。
测试报告:
测试计划、测试方案、测试结果。
·确认测试
关键任务:
由用户按需求规格说明书规定进行测试。
测试报告:
测试计划、测试方案、测试结果。
·使用与维护
关键任务:
通过必要维护活动使系统持久满足用户要求。
维护类型:
改正性维护:软件运行过程中发现错误,进行维护。
适应性维护:软件运行软硬件环境变化,进行的维护。
完善性维护:用户要求改进或扩充软件,进行的维护。
预防性维护:为将来的维护作准备。
· 实际从事软件开发工作时,软件规模、类型、 开发环境及技术方法等因素会影响到阶段划分, 及各阶段的执行顺序,形成不同生存周期模型, 又称过程模型。
1.4常见软件过程模型(软件生存周期模型)
瀑布模型
快速原型模型
增量模型
螺旋模型
喷泉模型
Rational 统一过程
微软公司软件开发过程
·瀑布模型 使用最早应用最广,瀑布模型如图。
瀑布模型特点:
1.阶段具有顺序性和依赖性
前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
2.推迟实现观点
瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。
3. 质量保证观点
瀑布模型每阶段坚持两个重要做法: 一是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。 二是每阶段结束前对文档评审。
· 传统瀑布模型过于理想化,但人在工作过程中不可能不犯错误,所以实际瀑布模型带反馈环。
此图是带反馈环的瀑布模型图
优点:提高软件质量,降低维护成本,缓解软件危机。
缺点:模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。
·快速原型模型
快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。
优点:
确定需求上优于瀑布模型(通过原型与用户交互);
提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用;
有的软件原型可以成为最终产品的一部分。
缺点:快速建立的系统结构加连续修改可能导致产品质量低下原型系统的内部结构可能不好。
增量模型:
又称渐增模型,开发软件时将软件产品作一系列 增量构件设计、编码、集成和测试。
区别于瀑布和快速原型模型:
瀑布和快速原型模型是一次把满足所有需求 产品提交给用户。
增量模型是分批向用户提交产品。
设计验证是总体设计
详细设计阶段各个构件是并行工作的
优点:较短时间向用户提交可完成有用工作产品;
用户有充裕时间学习适应产品;
软件结构必须开放,方便向现有产品加入新构件。
缺点:做到第三个优点比较困难。
前述增量模型在实现构件前完成总体的需求分析、规格说明和概要设计,相对来说风险较小。
风险更大增量模型(工期太赶时):确定用户需求后,各构件集并行构建。如下图:
并行执行 并行度增大
螺旋模型
1988年B.Boehem提出,加入风险分析,常指导大型软件项目。
软件风险:超期、超预算、行业竞争等
笛卡尔坐标四象限表达四方面活动:
制定计划:确定目标、选定方案、设定约束条件。
风险分析:评估方案,识别和消除风险。
实施工程:软件开发
客户评估:评价开发工作,计划下一阶段工作。
沿螺线自内向外每旋转一圈开发出更完善新版本。
优点:大型软件开发项目有较好的风险控制;
缺点:需要风险评估的经验;
契约开发通常需要事先指定过程模型和发布产品,普及不如前述模型(周期太长)
·喷泉模型
面向对象生命周期模型,体现迭代和无缝特性。
迭代: 求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
无缝:分析、设计、编码各阶段间不存在明显边界。(每个圆有重叠)
优点:无缝,可同步开发,提高开发效率,节省开发时间, 适应面向对象软件。
缺点:可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。
·Rational统一过程
由Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增方式开发软件。
Rational统一过程是一个二维生命周期模型。
RUP有9个核心工作流,包括6个核心过程工作流 和3个核心支持工作流。
RUP有4个连续阶段,每个阶段有明确目标,通过 一次或多次迭代完成。
Rational统一过程优点:
不断的版本发布成为一种团队日常工作的真正驱动力;
将发现问题、制定方案和解决过程集成到下一次迭代;
迭代开发,降低风险;
更好地安排产品开发的辅助过程。
·微软过程
规划阶段
开展市场调查研究,结合公司战略形成产品的远景目标。
设计阶段
根据产品远景目标,完成软件功能规格说明和总体设计,确定产品开发的主要进度。
开发阶段
完成产品中所有构件的开发工作。
稳定阶段
实行全面的内部和外部测试,最终形成可发布的RTM版本
发布阶段
确认产品质量符合发布标准后,发布产品及相关消息
递进式的开发策略: 解决问题的及时性、不确定和变更因素可控性、缩短产品上市周期