软件工程-第一章-软件工程学概述

1. 软件工程学概述

1.1 软件危机

  1. 软件:是计算机程序、方法、规则、相关的文档以及运行计算机系统时所必需的数据的总和(狭义定义:软件=程序+数据+文档)。
  2. 软件的特性:软件是复杂的、软件是不可见的、软件是不断变化的和软件质量难以稳定。
  3. 软件的质量特性:功能性、可靠性、易用性、效率、维护性、可移植性。
  4. 软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
  5. 软件危机的主要表现:
    • 对软件开发成本和进度估计常常很不准确;
    • 用户对"已完成"的系统不满意的现象经常发生;
    • 软件产品的质量往往靠不住;
    • 软件常常是不可维护的;
    • 软件成本在计算机系统总成本所占的比例逐年上升;
    • 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及及深入的趋势;
  6. 软件危机产生的主要原因:
    • 软件日益复杂和庞大
    • 软件开发管理困难和复杂
    • 软件开发技术落后
    • 生产方式落后
    • 开发工具落后
    • 软件开发费用不断增加
  7. 软件危机如何解决:既要有技术措施(方法和工具),又要有必要的组织管理措施。

1.2 软件工程

  1. 软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
    软件工程是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
  2. 软件工程以关注软件质量为目标,包括方法、过程、工具、范式四个要素。
  3. 软件工程的基本原理:
    • 用分阶段的生命周期计划严格管理;
    • 坚持进行阶段评审;
    • 实行严格的产品控制;
    • 采用现代程序设计技术;
    • 结果应能清楚地审查;
    • 开发小组的人员应该少而精;
    • 承认不断改进软件工程实践的必要性;
  4. 软件工程方法学:把软件生命周期全过程中使用的一整套技术方法的集合成为方法学(也称范型paradigm),包括三个要素:方法,工具和过程.目前使用最广泛的是传统方法学和面向对象方法学。
    • 传统方法学(也称生命周期方法学或结构化范型):采用结构化技术(结构化分析,结构化设计,结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件环境来支持结构化技术的运用。
    • 面向对象方法学:它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。有4个要点:
      • 把对象作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。也就是说,用对象分解取代了传统方法的功能分解。
      • 把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。
      • 按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。
      • 对象彼此之间仅能通过发送消息互相联系。对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。
      • 它是一个多次反复迭代的演化的过程。特有的继承性和多态性进一步提高了面向对象软件的可重用性

1.3 软件生命周期:

  • 问题定义:确定要解决的问题是什么(通过客户的访问调查,系统分析员写出问题的性质,工程目标和工程规模的书面报告,并得到客户的确认);
  • 可行性研究:不是具体解决问题,而是研究问题的范围,探索问题是否值得去解,是否有可行的解决方法;
  • 需求分析:准确确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能;
  • 总体设计:设计出目标系统的多种方案;设计程序的体系结构;
  • 详细设计:详细的设计每个模块,确定要实现模块功能所需要的算法和数据结构;
  • 编码和单元测试:写出正确的容易理解,容易维护的程序模块;
  • 综合测试:通过各种类型的测试(及相应的的调试)使软件达到预定的要求;
  • 软件维护:通过各种必要的维护活动使系统持久地满足用户的需要;

1.4 软件过程

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

通常使用生命周期模型简洁地描述软件过程。

1.4.1 瀑布模型

特点:

  1. 阶段间具有顺序性和依赖性:必须等前一阶段的工作完成后之后,才能开始后一段的工作;前一段的输出文档就是后一阶段的输入文档。
  2. 推迟实现的观点:在编码之前设置了系统分析和系统设计的各个阶段,分析与设计阶段的基本任务规定,这两个阶段主要考虑目标系统的逻辑模型,不涉及物理实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要指导思想。
  3. 质量保证的观点:每个阶段必须完成规定的文档;每个阶段结束前都要对完成的文档进行评审,以便尽早发现问题。

瀑布模型适用:在开发的早期阶段软件需求被完整确定。

瀑布模型的优点:

  1. 可强迫开发人员采用规范的方法;
  2. 严格规定了每个阶段必须提交的文档;
  3. 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

瀑布模型缺点:

  1. 瀑布模型是由文档驱动;
  2. 可能最终产品不能真正满足客户的需求。

瀑布模型带反馈环。

1.4.2 快速原型模型

首先建立一个反映用户主要需求的原型系统,让用户体验之后提出意见,随之进行修改,再让用户体验…直至用户完全满意,据此写出规格说明文档。

快速原型模型不带反馈环。

1.4.3 增量模型

也称渐增模型,融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。

增量模型优点:

  1. 人员分配灵活,刚开始不用投入大量人力资源;
  2. 可先发布部分功能给客户,对客户起到镇静剂的作用;
  3. 增量能够有计划地管理技术风险。

增量模型缺点:

  1. 需要软件具备开放式的体系结构;
  2. 容易退化为边做边改模型,从而使软件过程的控制失去整体性;
  3. 增加系统内部的耦合复杂性。

1.4.4 螺旋模型

把它看作在每个阶段之前增加了风险分析的快速原型模型。

构建原型是一种能使某些类型的风险降至最低的方法。

螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。

螺旋模型主要适用于内部开发的大规模软件项目。

螺旋模型的优点:

  1. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个总要目标;
  2. 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;
  3. 在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。

螺旋模型的缺点:

  1. 它是风险驱动的。

螺旋模型与增量模型的区别:

  1. 两者迭代层级不同:增量模型在活动级迭代;螺旋模型在过程级迭代;
  2. 两者需求分析的时间不同:增量模型常常是先做总体需求分析和设计,然后在编码和测试中逐个增量开发;螺旋模型在开发周期内采用简化瀑布模型或快速模型;
  3. 两者提交软件的方式不同:增量开发在上次增量的基础上提交新的一部分软件;螺旋模型每次迭代都提交一个新的完整的软件版本;
  4. 两者减少风险的方式不同:增量模型使用未成熟技术和经常的客户反馈等方法减少风险;螺旋模型中直接加进风险识别,风险分析、风险控制,计划性较强。

1.4.5 喷泉模型

典型的具有面向对象软件开发过程迭代和无缝的特性。

使用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。

面向对象范型本身要求经常对开发活动进行迭代或求精。

习题 1

  1. 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
    • 软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
    • 软件危机的主要表现:
      • 对软件开发成本和进度估计常常很不准确;
      • 用户对"已完成"的系统不满意的现象经常发生;
      • 软件产品的质量往往靠不住;
      • 软件常常是不可维护的;
      • 软件成本在计算机系统总成本所占的比例逐年上升;
      • 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及及深入的趋势;
    • 软件危机产生的主要原因:
      • 软件日益复杂和庞大
      • 软件开发管理困难和复杂
      • 软件开发技术落后
      • 生产方式落后
      • 开发工具落后
      • 软件开发费用不断增加
  2. 什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
    • 软件工程:是指导计算机软件开发和维护的一门工程学科;
    • 本质特征:
      • 软件工程关注于大型程序的构造;
      • 软件工程的中心课题是控制复杂性;
      • 软件经常变化;
      • 开发软件的效率非常重要;
      • 和谐的合作是开发软件的关键;
      • 软件必须有效地支持它的用户;
      • 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
    • 怎样用软件工程消除软件危机?
      • 应该对计算机软件有一个正确的认识;
      • 应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
      • 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法;
      • 应该开发和使用更好的软件工具。
  3. 简述结构化范型和面向对象范型的要点,并分析他们的优缺点。
要点优点缺点
结构化范型(1)结构化范型也称生命周期方法学,属于传统方法学。
(2)传统的软件开发方法大部分采用瀑布模型。这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作。
(3)每一阶段将要完成时,都要求开发人员进行验证或确认。
(4)瀑布模型要求在软件产品生成之前对用户需求进行尽可能精确的、完全的刻画。但要完成这种任务相当困难。
把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化时,开发出的软件往往不成功;而且维护起来仍然很困难。
面向对象范型(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由简单的软件对象组合而成。
(2)所有对象划分成各种对象类,每个对象都定义了一组数据和一组方法。
(3)按照子类(派生类)和父类(基类)的关系,把若干个对象类组成一个层次结构的系统(类等级)。在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。
(4)对象彼此之间仅能通过传递消息互相联系。
(1)按照人类习惯的思维方法,对软件开发过程所有阶段进行综合考虑;
(2)软件生存期各阶段所使用的方法、技术具有高度的连续性;
(3)软件开发各个阶段有机集成,有利于系统的稳定性。
性能比面向过程低。
  1. 什么是软件过程?它与软件工程方法学有何关系?
    软件过程是指为了获得高质量软件产品,在软件工具支持下,由软件人员完成的一系列软件工程活动的框架。
    软件过程与软件工程方法学的关系:
    软件过程:是一个为了获得高质量软件所需完成的任务的框架,也就是说软件过程规定了软件产品开发时完成各项任务的一系列工作步骤,包括中间产品、资源、角色及过程中采取的方法、工具等范畴。
    软件工程方法学:通常把在软件生命周期的全过程中的一整套技术方法的集合称为方法学,也称范型。软件工程方法学包含三个要素:方法、工具和过程。
    从这些两个定义可以看出,软件过程是软件工程方法学的一个要素而已!软件过程是软件工程方法学的3个重要组成部分之一。
  2. 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
    软件生命周期同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生命周期(软件生存周期) 。
    软件生命周期由软件定义,软件开发和运行维护3个时期组成。
    • 瀑布模型:
      优点:
      有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。
      缺点:
      瀑布模型是由文档驱动的。
      范围:
      用户需求稳定的项目。
    • 快速原型:
      优点:
      有助于保证用户的真实需要得到满足。
      缺点:
      准确的原型设计比较困难。客户和开发者对原型认识不同。
      范围:
      对开发领域熟悉,并有开发原型的项目。
    • 增量模型:
      优点:
      能在短时间内向用户提交可完成部分的工作的产品,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。
      缺点:
      并行开发控件可能遇到风险。灵活性使之容易退化为边改边做模型,失去控制。
      范围:
      进行已有产品升级。
    • 螺旋模型:
      优点:
      设计上的灵活,可在项目各阶段修改。客户始终参与开发各阶段,保证了项目的正确方向。
      缺点:
      需要相当丰富的风险评估,多次迭代会提高成本,延迟提交时间。
      范围:
      大规模的软件项目。
  3. 为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?
    因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤反复多次迭代,达到认识的逐步深化,而喷泉模型则很好的体现了面向对象软件开发过程迭代和无缝的特性。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值