(一) 软件危机、软件工程的产生
软件危机定义:在计算机开发和维护过程中遇到的一系列严重问题
主要包含两方面:如何开发软件以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件;
表现:
(1)开发成本和进度估计不准
(2)用户对已交付的软件不满意
(3)软件产品质量靠不住
(4)软件可维护性差
(5)软件没有适当的文档资料
(6)软件成本在计算机系统总成本所占比例逐年上升
(7)软件开发产生率跳的的速度,远远跟不上计算机应用速度普及及深入的趋势
软件危机产生原因:
(1)软件本身特点造成:软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升;软件是计算机系统的逻辑部件而非物理部件,其显著特点是缺乏可见性,管理和控制软件开发过程困难;
(2)软件开发与维护的方法不正确:忽略软件需求分析的重要性;认为软件开发就是写程序并使之运行;轻视软件维护
消除软件危机的途径
(1)推广使用在实践中总结出来的开发软件的成功的技术和方法,并研究探索更有效的技术和方法。
(2)开发和使用更好的软件工具
(3)应对计算机软件有一个正确的认识
(4)充分认识软件开发是组织良好、管理严密、各类人员协同合作、共同完成的工程项目,即良好的组织管理措施
(二) 软件的概念、软件工程的定义
软件工程定义:1993年IEEE的定义:把系统化、规范化、可度量化的途径应用于软件开发、运行和维护过程中,研究其实现途径
软件工程内容
(1)软件工程技术:方法、过程、工具
(2)软件工程管理:管理学、经济学、心理学
软件工程本质特性
(1)软件工程关注于大程序的构造
(2)软件工程中心课题是控制复杂性
(3)软件经常变化
(4)软件工程的效率非常重要
(5)和谐地合作是开发软件的关键
(6)软件必须有效地支持它的用户
(7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品
软件工程的7个基本原理
(1)用分阶段的生命周期计划严格管理
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)结果能清楚地审查
(6)开发小组的人员应该少而精
(7)承认不断改进软件工程实践的必要性
软件工程方法学3要素:方法、工具、过程
目前使用最广泛的软件工程方法学:传统方法学、、面向对象方法学
面向对象方法学4个要点
(1)对象:把对象作为融合了数据及在数据上的操作行为统一的软件构件。
(2)分类:把所有对象都划分成类
(3)继承:按照父类与子类的关系组成一个层次结构的系统
(4)通过消息的通讯:对象彼此之间仅能通过消息相互联系。
软件发展
程序设计阶段
程序系统阶段:软件危机产生
软件工程阶段:软件危机的到缓解
集中主机式
客户机/服务器(二层)
客户机服务器(三层):BS、CS
第四阶段:新技术、专家系统、神经网络、并行计算机、网络技术、高信度计算、云计算、人工智能
软件定义:1983年IEEE的软件工程的定义:计算机程序、文档、运行程序必须的数据、方法、规则。即程序+文档+数据
软件的分类
系统软件:与计算机硬件紧密配合是计算机各个部件与相关软件及数据协调、高效工作。
支撑软件:协助用户开发软件的工具
应用软件:有两种分类方式
1、基于软件功能的划分
(1)商业数据处理软件:公司销售系统
(2)工程与科学计算软件:CAD/CAM(计算机辅助设计/制造)、仿真模拟
(3)智能产品嵌入软件:家用电器,智能手机
(4)人工智能软件:利用非数值算法去解决复杂问题的软件,如专家系统:具有某领域知识和经验;模式识别软件:视网膜识别;人工神经网络软件(莫扭人类大脑工作)
(5)个人计算机软件:文字处理系统,电子表格,游戏娱乐软件
2、项目规模大小划分
类型 | 参加人员数 | 开发周期 | 产品规模(1k = 1000行) |
微型 | 1 | 1~4周 | 0.5k |
小型 | 1 | 1~6月 | 1k~2k |
中型 | 2~5人 | 1~2年 | 5k~50k |
大型 | 5~20人 | 2~3年 | 50k~100k |
甚大型 | 100~1000人 | 4~5年 | 1M=1000k |
极大型 | 2000~5000人 | 5~10年 | 1M-10M |
(三) 软件工程的研究对象与基本原理
(四) 软件工程工具和环境
(五) 软件生存周期
定义:软件从产生、发展到成熟、直到衰亡为止
软件生命周期各个阶段:详细查看软件工程声明周期各阶段完成的任务
问题定义
可行性研究
需求分析
总体设计(概要设计)
详细设计
编码与单元测试
综合测试
维护
(六) 软件过程模型
软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
(1)瀑布模型:使用最早、应用最广
特点:①阶段间具有顺序性和依赖性②推迟实现观点③质量保证的观点
优点:采用规范化的方法;严格规定了每个阶段提交的文档;每阶段阶段交出的产品必须经过验证(提高软件质量,降低维护成本,缓解软件危机)
缺点:缺乏灵活性,无法解决需求不明确的问题,在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品。开发人员和用户之间缺乏有效的沟通,很可能调至最终开发出的软件产品不能真正满足用户需求。
(2)快速原型模型
快速建立反应用户主要需求的原型系统,反复有用户评价修正需求,开发最终产品
优点:有助于保证用户的真实需求得到满足;软件产品的开发基本上是现行顺序进行。
缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
(3)增量模型
开发软件时将软件产品做一系列增量构件设计、编码、集成和测试
优点:能较短时间内提交可完成部分工作的产品;可使用户有充裕的时间学习和适应新产品;软件结构必须是开放的,方便性现有产品加入新构件
缺点:做到软件结构必须是开放的比较困难
(4)螺旋模型:1988年B.Boehem提出,加入风险分析过程的快速原型模型,常指导大型软件项目
软件风险:超期、超预算、行业竞争等
四方面活动
优点:大型软件开发项目有较好的风险控制
缺点:需要风险评估的经验;契约开发通常需要事先指定过程模型和发布产品;普及不如前述模型
(5)喷泉模型:面向对象生命周期模型,体现迭代和无缝特性
迭代:求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
无缝:分析、设计、编码各阶段间不存在明显边界。
特点:无缝,可同步开发,提高开发效率,节省开发时间适应面型对象软件
缺点:可能随时加入各种信息,需求与资料,需要严格管理文档审核难度大
(6)Rational统一过程:由Rational软件公司推出一种软件过程,强调以迭代和渐增方式开发软件。是一个二维声明周期模型
(7)微软过程
规划阶段-》设计阶段-》开发阶段-》稳定阶段-》发布阶段-》下一次开发
每个阶段评审要求:项目的目标得到认可;软件设计完成;代码开发完成;可发布版本准备就绪;最终产品发布