1.软件工程概论

软件危机

主要包含两个方面的问题,同时也是软件工程要解决的问题

  1. 如何开发软件,以满足社会对软件日益增长的需求
  2. 如何更有效地维护数量不断膨胀的已有软件
    简单说来就是开发和维护两个方面的问题。

典型表现(共七点):软件成本进度估计不准、用户对成品不满意、软件质量不达标、软件难以维护、软件缺少文档、软件开发成本占计算机系统比例上升、软件开发生产率不能满足社会日益增长的需求。

软件危机的原因:

两个方面主观和客观。一方面和软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。

客观原因(同时也是软件的特点):

  1. 软件是逻辑部件而不是物理部件,缺乏可见性。因此管理和控制软件开发过程相当困难,此外,软件维护通常意味着修正和修改原有的设计,从而使得软件较难维护。
  2. 软件另一个特点是规模庞大,程序的复杂性将随着程序规模的增加以指数型速度上升。

主观原因主要是软件工程师的开发和维护的方法不正确。具体包括:

  1. 忽视软件需求分析的重要性,导致用户的需求不明确。
  2. 缺乏正确的理论指导,具体指缺乏有力的方法学和工具。
  3. 认为软件开发就是写程序,随着软件规模越来越大,复杂度越来越高,软件维护的难度越来越大。

消除软件危机的途径:

  1. 树立对计算机软件的正确认识:软件就是程序、数据和文档的完整集合(软件的定义)。
  2. 充分认识软件开发是组织良好、管理严密、各类人员协同配合、共同完成的工程项目(工程的定义)。
  3. 推广使用在实践中总结出来的开发软件的成功技术和方法。
  4. 积极开发和使用计算机辅助软件工程CASE工具。

3、4就是软件工程三要素:方法、工具和过程。
总体来说,消除软件危机的途径就是软件定义+工程定义+三要素。

软件工程

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

或者:软件工程就是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过实践考验而证明正确的管理技术和当前能得到的最好的技术方法结合起来

本质特性

软件工程专注于大型程序的构造
软件工程中心课题是控制复杂性
软件经常变化(需求变化和维护性测试)
开发效率非常重要
和谐的合作是开发的关键
软件必须有效的支持它的用户
在软件工程领域通常由一种文化背景的人替另一种文化背景的人创造产品

关于控制复杂性:
度量复杂性的工具:

  1. 代码行度量:根据代码行数度量复杂度的方法
  2. McCabe方法:基于程序控制流,用流图算环复杂度的方法
  3. Halstead方法:根据程序中运算符和操作数的总数来度量程序复杂性
    如何控制复杂性:自顶向下逐步求精,通过控制每一层的复杂性来控制整体的复杂性

软件工程七个基本原理:

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

三要素

软件工程三要素:方法、工具和过程。
方法:完成软件开发的各项任务的方法。
工具:为了运用方法而提供的自动或者半自动的软件工程支撑环境。
过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了各项任务的工作步骤。

关系:软件工程采用层次化的方法,每个层次都包括方法、工具和过程三要素。方法支撑过程和工具,过程工具又促进方法学的研究。

方法

传统方法学(生命周期方法学、结构化范型)和面向对象方法学
传统方法学:生命周期划分为若干阶段,然后顺序地完成每个阶段的任务。
每个阶段的开始和结束都有严格的标准。对于两个相邻的阶段,前一阶段的结束就是后一阶段的开始标准。
每个阶段结束之前要进行严格的技术审查和管理复审。

面向对象方法学:
用对象分解取代了传统方法学中的功能分解。
把所有对象划分成类。
按照父类与子类的关系,把若干相关类组织成一个层次结构的系统。
对象之间仅通过发送消息互相联系。

使用结构化范型进行开发出来的软件,其本质上是一个单元,这是用结构化范型开发大型软件不甚成功的一个重要原因。
相反,面向对象方法学开发出来的软件由许多小的、相对独立的单元(对象)组成的,因此面向对象方法学减小了软件产品的复杂度,从而简化了软件开发和维护工作。

工具

用来支持管理信息系统开发的,由各种计算机辅助软件和工具组成的大型综合性软件开发环境。
开发阶段:需求分析工具、设计工具、编码工具、测试工具
维护阶段:版本控制工具、文档分析工具、逆向工程工具、再工程工具
项目管理:项目管理工具、配置管理工具、软件评价工具

过程

瀑布:
特点:顺序性和依赖性、推迟实现、质量保证。
瀑布优点:

  1. 可强迫开发人员才哟个规范的方法和技术。
  2. 严格的规定了每个阶段必须提交的文档。
  3. 每个阶段结束前必须正式经过严格的技术审查和管理复审。

瀑布缺点:

  1. 顺序依赖的缺点:没有反映出人的认识是一个多次反复循环的过程,不能一次完成。瀑布模型没有反映出这一点反复性(反馈环)。
  2. 推迟实现的缺点:在可运行的软件交付之前,用户只能通过文档来了解未来的产品是什么样的,开发人员和用户之间缺乏有效沟通,可能导致产品不能真正满足用户需求。

快速原型:
基本思想:构建原型、反复迭代,直到得出精确解。
优点:

  1. 开发过程基本是线性顺序过程(由于原型的精确性,通常是不带反馈环的)
  2. 通常能够满足用户的真实需求(原型工具)

缺点:
选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能使产品质量低下。

增量模型:
特点:把产品分解为增量构件。
优点:

  1. 能在较短时间内向用户提交可完成部分工作的产品。
  2. 逐步增加产品功能,留给用户充裕的时间学习和适应。

限制:

  1. 软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。需要更精心的设计,但同时也能够获得更好的可维护性。

螺旋模型:
特点:制定计划-风险分析-实施工程-客户评估四个阶段不断迭代。
适用于内部开发的大型项目。
优点:

  1. 有利于已有软件的重用。
  2. 有利于把软件质量作为开发的一个重要目标。
  3. 减少了测试过多和测试不足带来的风险。
  4. 软件维护和软件开发没有本质区别。

喷泉模型:
特点:面向对象、无缝迭代

敏捷开发:
优点:对变化和不确定性更快速和更灵活的反应。
适用于商业竞争环境下的小型项目,有限资源和有限开发时间的约束。

原则(号称必背):

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

RUP、微软过程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值