软件工程概述

软件工程学概述

(一)软件危机
概念:软件危机使之在计算机软件开发和维护过程中所遇到的一系列严重问题。

1) 主要问题:如何开发软件,以满足对软件日益增长的需求;
2) 如何维护数量不断膨胀的已有软件;

典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对“已完成的”软件系统不满意的现象经常发生。
(3) 软件产品的质量往往靠不住。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本在计算机系统总成本中所占比例逐年上升。
(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

产生的原因:
(1) 软件不同于硬件,它是计算机系统的逻辑部件而不是物理部件。
(2) 软件开发的过程是多人分工合作,分阶段完成的过程,参与人员之间的沟通和配合十分重要。
(3) 开发和管理人员只重视开发而轻视问题的定义,使软件产品无法满足用户的要求。
(4) 软件管理技术不能满足现代软件开发的需要,没有统一的软件质量管理规范。
(5) 在软件的开发和维护关系问题上存在错误的观念。

消除的途径:
(1) 认清软件的概念,软件是计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。
程序是能够完成预定功能和性能的可执行的指令序列;
数据是使程序能够适当地处理信息的数据结构;
文档是开发、使用和维护程序所需要的图文资料。

(二)软件工程

概念:软件工程是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它的一门工程学科。

本质特性:
1. 软件工程关注于大型程序的构造;
2. 软件工程的中心课题是控制复杂性;
3. 软件经常变化;
4. 开发软件的效率非常重要;
5. 和谐的合作是开发软件的关键;
6. 软件必须有效地支持它的用户;
7. 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品;

基本原理:
1. 用分阶段的生命周期计划严格管理;
2. 坚持进行阶段评审;
3. 实行严格的产品控制;
4. 采用现代程序设计技术;
5. 结果应能清楚地审查;
6. 开发小组的人员应该少而精;
7. 承认不断改进软件工程实践的必要性;

(三)方法学(范型)

概念:在软件生命周期全过程中使用的一整套技术方法的集合。

三要素:方法、工具和过程。
1. 方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;
2. 工具是为运用方法学而提供的自动或半自动的软件工程支撑环境;
3. 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

传统方法学
采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。从对问题的抽象逻辑分析开始,一个阶段一个阶段地顺序进行开发。

面向对象方法学
要点:
1. 把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
2. 把所有对象都划分成类。
3. 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
4. 对象彼此间仅能通过发送消息互相联系。

(四)软件生命周期

概念:软件的产生直到报废或停止使用的生命周期由软件定义、软件开发和运行维护3个时期组成。

  1. 问题定义;
  2. 可行性研究;
  3. 需求分析;
  4. 总体设计;
  5. 详细设计;
  6. 编码和单元测试;
  7. 综合测试;
  8. 软件维护;

(五)软件过程
概念:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

1、瀑布模型
概念:将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段。

优点:
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

缺点:
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化。

特点:
a) 阶段间具有顺序和依赖性;
b) 推迟实现的观点;
c) 质量保证的观点;

2、快速原型模型
概念:迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。 快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。

优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
这种模型适合预先不能确切定义需求的软件系统的开发。
缺点:所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。

3、增量模型
概念:融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。

优点:
1) 由于能够在较短的时间内向用户提交一些有用的工作产品,因此能够解决用户的一些急用功能。
2)由于每次只提交用户部分功能,用户有较充分的时间学习和适应新的产品。
3)对系统的可维护性是一个极大的提高,因为整个系统是由一个个构件集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。
缺点:
1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。

4、螺旋模型
概念:一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用

优点:
1)设计上的灵活性,可以在项目的各个阶段进行变更。
2)以小的分段来构建大型系统,使成本计算变得简单容易。
3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
缺点:
很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。

5、喷泉模型
概念:以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限,由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动的迭代和无间隙,使其开发自然地包括复用。

优点:该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

6、Rational统一过程
概念:RUP描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程(也被称作厚方法学),因此特别适用于大型软件团队开发大型项目。

总结了经过多年商业化验证的6条最有效的软件开发经验,这些经验被称为“最佳实践”。
最佳实践:
(1) 迭代式开发;
(2) 管理需求;
(3) 使用基于构件的体系结构;
(4) 可视化建模;
(5) 验证软件质量;
(6) 控制软件变更;

7、敏捷过程——极限编程

(1) 个体和交互胜过过程和工具;
(2) 可以工作的软件胜过面面俱到的文档;
(3) 客户合作胜过合同谈判;
(4) 响应变化胜过遵循计划;

极限编程是敏捷过程中最富盛名的一个。
(1) 极限编程的有效实践
 客户作为开发团队的成员
 使用用户素材
 短交付周期
 验收测试
 结对编程
 测试驱动开发
 集体所有
 持续集成
 可持续的开发速度
 开放的工作空间
 及时调整计划
 简单的设计
 重构
 使用隐喻
(2) 极限编程的整体开发过程
这里写图片描述
(3) 极限编程的迭代过程
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

继学先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值