[软件工程导论(第六版)]第1章 软件工程学概述(课后习题详解)

news2024/9/27 19:21:01

文章目录

    • 1. 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
    • 2. 假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?
    • 3. 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?
    • 4. 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
    • 5. 根据历史数据可以进行如下的假设。对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960),存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位),如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美分/字)。在上列公式中y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:
    • 6. 什么是软件过程?它与软件工程方法学有何关系?
    • 7. 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
    • 8. 为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?
    • 9. 试讨论Rational统一过程的优缺点。
    • 10. Rational统一过程主要适用于何种项目?
    • 11. 说明敏捷过程的适用范围。
    • 12. 说明微软过程的适用范围。


1. 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?

  • (1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
  • (2)软件危机的典型表现:
    • ① 对软件开发成本和进度的估计不准确;
    • ② 用户对“已完成的”软件系统不满意的现象经常发生;
    • ③ 软件产品的质量往往靠不住;
    • ④ 软件常常是不可维护的;
    • ⑤ 软件通常没有适当的文档资料;
    • ⑥ 软件成本在计算机系统总成本中所占的比例逐年上升;
    • ⑦ 软件开发跟不上计算机应用迅速普及深入的趋势。
  • (3)软件危机出现的原因:
    • ① 客观原因
      • a.软件是计算机系统中的逻辑部件,缺乏“可见性”,因此管理和控制软件开发过程相当困难。
      • b.软件维护通常意味着改正或修改原来的设计,因此软件较难维护。
      • c.软件规模庞大,而程序复杂性将随着程序规模的增加而呈指数上升。
    • ② 主观原因
      • a.存在与软件开发和维护有关的许多错误认识和做法。
      • b.对用户要求没有完整准确的认识就匆忙着手编写程序。
      • c.开发人员只重视程序而忽视软件配置的其余成分(文档和数据等)。
      • d.软件开发人员轻视维护。

2. 假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?

在这里插入图片描述

  • 可以从以下两方面来反驳他:
  • (1)在软件开发的不同阶段进行修改需要付出的代价是很不相同的。在软件“已经完成”时再引入变动,当然需要付出更高的代价。在后期引入一个变动比在早期引入相同变动所需付出的代价高2~3个数量级。
  • (2)发生在编码时期的错误极有可能是在需求分析阶段由于操作不当产生的,所以必须及时消除错误,否则,到了后期软件运行和维护阶段再回过头来修改,将会付出更大的代价。

3. 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?

  • (1)软件工程定义:
    • 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来, 以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
  • (2)软件工程本质特征:
    • ① 软件工程关注于大型程序的构造;
    • ② 软件工程的中心课题是控制复杂性;
    • ③ 软件经常变化;
    • ④ 开发软件的效率非常重要;
    • ⑤ 和谐地合作是开发软件的关键;
    • ⑥ 软件必须有效地支持它的用户;
    • ⑦ 由具有一种文化背景的人替具有另一种文化背景的人创造产品。
  • (3)消除软件危机的方法:
    • ① 应该对计算机软件有一个正确的认识,软件=程序+数据+相关文档;
    • ② 应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
    • ③ 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法;
    • ④ 应该开发和使用更好的软件工具。

4. 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。

  • (1)结构化范型
    • ① 要点
      • 结构化范型属于传统方法学。传统的软件开发方法大部分采用瀑布模 型。这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作。每一阶段将要完成时,都要求开发人员进行验证或确认。
    • ② 优点
      • a.把软件生命周期划分成若干相对独立、简单的阶段,便于不同人员分工协作,降低开发的困难程度。
      • b.开发过程中采用科学的管理技术和良好的技术方法,且在每个阶段结束之前都进行严格的审查,保证了软件的质量,提高了软件的可维护性;
      • c.大大提高了软件开发的成功率和生产率。
    • ③ 缺点
      • a.不适用于软件规模庞大、或者对软件的需求是模糊的或会随时间变化而变化的情况。
      • b.结构化范型技术把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
  • (2)面向对象范型
    • ① 要点
      • a.把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
      • b.把所有对象划分成各种对象类。
      • c.继承性。
      • d.对象彼此之间仅能通过传递消息互相联系。
    • ② 优点
      • a.降低了软件产品的复杂性;
      • b.提高了软件的可理解性;
      • c.简化了软件的开发和维护工作;
      • d.提高了软件的可重用性。
        ③ 缺点
      • 面向对象性能比面向过程低。

5. 根据历史数据可以进行如下的假设。对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960),存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位),如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美分/字)。在上列公式中y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:

(1)在1985年对计算机存储容量的需求估计是多少?如果字长为16位, 这个存储器的价格是多少?
(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。
(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。

答:
(1)在1985年对计算机存储容量的需求,估计是:
M=4080e0.28(1985-1960)=4080e7=4474263(字)。如果字长为16位,则这个存储器的价格是:P=0.048×0.72(1985-1974)×4474263=5789(美元)
(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263 条指令。如果每月有20个工作日,则每人每月可开发200条指令。需要的工作量是:4474263/200=22371(人月)。程序员的月平均工资是
4000美元,开发出4474263条指令的成本是:22371×4000=8948400(美元)。
(3)在1995年对存储容量的需求估计为:M=4080e0.28(1995-
1960)=4080e9.8=73577679(字),如果字长为32位,则这个存储器的价
格是:P=0.003×32×0.72(1995-1974)×73577679=7127(美元)。如果一条指令的长度为一个字,则使存储器装满程序共需73577679条指令。如果每月有20个工作日,则每人每月可开发600条指令。需要的工作量是:73577679/600=122629(人月)。开发出成本是:122629×6000=735776790(美元)。

6. 什么是软件过程?它与软件工程方法学有何关系?

答:
(1)软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。
(2)软件过程是软件工程方法学的三个重要组成部分之一。软件工程方法学的三个要素为:方法、工具和过程。

7. 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。

  • 软件生命周期模型是软件开发的全部过程、活动和任务的结构框 架。软件生命周期模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为项目开发的基础。
  • (1)瀑布模型
    • ① 优点
      • a.可强迫开发人员采用规范的方法;
      • b.严格地规定了每个阶段必须提交的文档;
      • c.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证;
      • d.对文档的约束,使软件维护变得容易一些,且能降低软件预算。
    • ② 缺点
      • a.瀑布模型是由文档驱动的;
      • b.缺乏对于需求变更和项目变化的适应性;
      • c.用户只有在生命周期的后期才能看到结果;
    • ③ 适用范围
      • 适用于用户需求明确、完整、无重大变化的软件项目开发。
  • (2)快速原型模型
    • ① 优点
      • a.克服了瀑布模型的缺点,对于需求变更具有更好的适应性;
      • b.开发费用低、开发周期短且对用户更友好。
    • ② 缺点
      • a.客户与开发者对原型理解不同;
      • b.本质是快速,没有考虑软件的总体质量和可维护性,最终产品质量较差;
      • c.不利于开发人员的创新。
    • ③ 适用范围
      • a.对所开发的领域比较熟悉而且有快速的原型开发工具;
      • b.项目招投标时,可以以原型模型作为软件的开发模型;
      • c.进行产品移植或升级时,或对已有产品原型进行客户化工作时。
  • (3)增量模型
    • ① 优点
      • a.能在较短时间内向用户提交可完成部分工作的产品;
      • b.逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品。
    • ② 缺点
      • a.要求软件体系结构必须是开放的。
      • b.增量模型的灵活性很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
      • c.增量模型本身是自相矛盾的。它一方面要求开发人员把软件看作一个整体,另一方面又要求开发人员把软件看作构件序列,每个构件本质上都独立于另一个构件。
    • ③ 适用范围
      • a.进行已有产品升级或新版本开发;
      • b.对完成期限严格要求的产品;
      • c.对所开发的领域比较熟悉而且已有原型系统。
  • (4)螺旋模型
    • ① 优点
      • a.有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
      • b.减少了过多测试或测试不足所带来的风险;
      • c.在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
    • ② 缺点
      • a.软件开发人员需要具备丰富的风险评估经验和专门知识,如果未能够及时标识风险,会造成重大损失;
      • b.过多的迭代次数会增加开发成本,延迟提交时间。
    • ③ 适用范围
      • 适用于内部开发的大规模软件项目。

8. 为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?

答:“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。喷泉模型的开发流程图中代表不同阶段的圆圈相互重叠,表示两个活动之间存在交迭;而面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的无缝过渡。在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。

9. 试讨论Rational统一过程的优缺点。

答:
(1)优点
提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量以及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指 导,并确保全体成员共享相同的知识基础、它具有简洁和清晰的过程结构,为开发过程提供了较大的通用性。
(2)缺点
RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,它没有支持多项目的开发结构,在一定程度上降低了在开发组织内大范围实现重用的可能性。

10. Rational统一过程主要适用于何种项目?

答:适用于大型的需求不断变化的复杂软件系统项目。

11. 说明敏捷过程的适用范围。

答:敏捷过程具有对变化和不确定性的更快速、更敏捷的反应特性,而且在快速的同时仍然能够保持可持续的开发速度。因此适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。

12. 说明微软过程的适用范围。

答:适用于商业环境下具有有限资源和有限开发时间约束的小型项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#按边框切检验仪器图

最近碰到一个检验设备是生成PDF文件报告的。imedicallis监听程序把PDF解析出来之后发现PDF里面图不是多个小图,而是一张大图。但用户又要传到检验系统的是小图,而且小图位置和数量不固定,也不能用固定位置截取实现。为此开启一段“高端设备局…

Linux生产者消费模型

1.生产者消费者模型 1.1 为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接…

【淄博正大光明】收藏|三分钟带你全面了解这个神奇的镜片

对于孩子的东西 家长总是谨慎再谨慎 而对于夜间戴在眼睛里的镜片 家长更是存在很多顾虑 安全吗?有效吗? 影响孩子睡觉吗? 别着急淄博正大光明眼科医院 带你深度了解角膜塑形镜 01 角膜塑形镜究竟是什么? 角膜塑形镜是一种使用高分…

一文搞懂Linux内核进程CPU调度基本原理

为什么需要调度 进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下&#…

k8s快速入门

文章目录一、Kubernetes(K8S)简介1、概念1.1 Kubernetes (K8S) 是什么1.2 核心特性1.3 部署方案2、Kubernetes 集群架构2.1 架构2.2 重要概念 Pod2.3 Kubernetes 组件二、Kubernetes集群安装1、安装方式介绍2、minikubute安装3、裸机搭建(Bar…

python实用脚本(六)—— pandas库的使用(生成、读取表格)

本期主题: python的pandas使用 往期链接: python实用脚本(一)—— 批量修改目标文件夹下的文件名python实用脚本(二)—— 使用xlrd读取excelpython实用脚本(三)—— 通过有道智云AP…

Linux 日志查找常用命令

1.1 cat、zcat cat -n app.log | grep "error":查询日志中含有某个关键字error的信息,显示行号。 cat -n app.log | grep "error" --color:查询日志中含有某个关键字error的信息,显示行号,带颜色…

基于Detectron2模型和深度学习方法的改进森林火灾检测方法

1.文章信息本次介绍的文章是来自韩国科研团队的一篇2023年火灾检测文章,文章立足于森林火灾检测,题目为《An Improved Forest Fire Detection Method Based on the Detectron2 Model and a Deep Learning Approach》。2.摘要随着全球变暖和人口的增加&am…

【java】真正理解NIO

文章目录前言1、线程不够用, 就算使用了线程池复用线程也无济于事;2、阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,CPU利用率很低,换句话说,系统的吞吐量差;3、如果网络I/O堵塞或者有网络抖动或者网络故障等,线程的阻塞时间可能很长。整…

Spring boot实现热部署

1.说明 在我们进行Spring Boot项目的编写过程中,会有局部的代码,发生一些变动,这时候,我们只有将项目重启,发生变动的代码才能够生效,为了解决这个问题,我们可以设置Spring Boot热部署&#xf…

React Hooks之useRef详解

一、什么是useRef const refContainer useRef(initialValue); useRef 返回一个可变的 ref 对象,其内部只有一个 current 属性被初始化为传入的参数(initialValue)useRef 返回的 ref 对象在组件的整个生命周期内持续存在更新 current 值时并不…

Java 洛谷 P1739 表达式括号匹配

题目描述: 题目链接:https://www.luogu.com.cn/problem/P1739 代码实例: import java.util.Scanner; import java.util.Stack;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);String…

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和部署教程

Stable Diffusion WebUI 的安装和部署教程1. 简介2. Windows安装环境3. 运行4. 模型下载链接5. 其他资源1. 简介 先放一张WebUI的图片生成效果图,以给大家学习的动力 :) 怎么样,有没有小小的心动?这里再补充一下&…

Linux文件系统中的硬链接及常见面试题

如果能对inode的概念有所了解,对理解本文会有所帮助。如果对inode的概念不太清楚也没有关系,我们会捎带介绍一下。在文件系统的实现层面,我们可以认为包含两个组件:一个是包含数据块的池子,池子中的数据块是等大小的&a…

K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS ‘i/o timeout‘分析与解决

开篇 《K3s 系列文章》《Rancher 系列文章》 问题概述 20220606 5G IoT 网关设备同时安装 K3S Server, 但是 POD 却无法访问互联网地址,查看 CoreDNS 日志提示如下: ... [ERROR] plugin/errors: 2 update.traefik.io. A: read udp 10.42.0.3:38545-&…

进程间通信(重点)

概念 进程是一个独立的资源分配单元,不同进程之间的资源是独立的进程并非孤立的,不同进程需要进行信息的交互和状态的传递,因此需要进程之间的通信【IPC: Inter processes communication】 如qq聊天,qq在每个人的手机上是独立的…

记录--滚动视差动画和解决方法

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最简单的代码,最极致的享受,主打的就是一个炫酷~ 滚动视差 滚动视差效果(Parallax Scrolling)是指让多层背景以不同的速度位移,形成立体的运动效果的视觉…

代码随想录算法训练营第三天 | 链表理论基础 、203.移除链表元素、707.设计链表、206.反转链表

打卡第三天,今天还是认真做了两道题目,明天要6点早起,想早点睡,加上昨天的螺旋数组(昨天想到怎么做,但是代码实现解不出来,还没有仔细看视频讲解),和今天的设计链表&…

内网渗透(三十九)之横向移动篇-pass the ticket 票据传递攻击(PTT)横向攻击

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

Pytorch 物体检测 App 体验

物体检测 App 介绍 它是使用 YOLOv5 进行对象检测的 Android 示例应用程序,使用 PyTorch 脚本化 YOLOv5 模型来检测使用该模型训练的 80 个物体对象。 YOLO(You Only Look Once)是最快和最受欢迎的对象检测模型之一,而YOLOv5 是…