软件工程导论学习笔记——(1)基础知识(含一二章课后题答案)

本文主要是介绍软件工程导论学习笔记——(1)基础知识(含一二章课后题答案),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

引言

一、软件工程

1.1软件的定义及特点

1.2软件危机

1.2.1产生原因

1.2.2典型表现

1.3软件工程概述

1.3.1软件工程方法学

1.3.2软件工程的基本原则

二、软件过程

2.1软件生命周期

2.2软件过程的定义

2.3软件过程模型

2.3.1瀑布模型

2.3.2螺旋模型

2.3.3喷泉模型

2.3.4快速原型模型

2.3.5增量模型

三、参考答案

3.1第一章课后参考答案

3.1.1练练手

3.1.2动动脑

3.2第二章课后参考答案

3.2.1练练手

3.2.2动动脑


引言

尊敬的读者:
您好!在此次博客中,我将分享一些有关软件工程导论的重要观点和理论。这些内容均摘自清华出版社出版的《软件工程导论》一书。在此,我郑重声明,本次分享的目的是为了传播和普及软件工程领域的知识,绝非抄袭或剽窃。以下为本书的相关信息,以兹证明:
书名:《软件工程导论》
编著:吴艳 曹平
出版社:清华大学出版社
出版日期:2021.2(2022.7重印)
希望本次分享能够为您带来收获,并激发您对软件工程领域更深入的研究。再次感谢您的关注与支持!
敬请期待后续内容,我们将一同探索软件工程的奥秘。
顺祝商祺!


一、软件工程

1.1软件的定义及特点

定义:

        软件是计算机中硬件相互依存的部分,它不仅包括程序,还包括数据相关文档,是三者的完整集合。

  • 程序:按事先设计好的功能和性能要求执行的指令序列。
  • 数据:程序处理、加工的对象和处理信息的数据结构。
  • 文档:与程序开发、维护和使用相关的各类资料总称。

特点:

  1. 软件是一种逻辑产品,具有抽象性,更多地带有个人智慧因素,这使得软件与其他的机械制造、建筑工程有许多不同。
  2. 软件没有明显的制造过程,不会损坏,但会因为质量和不可维护性被废弃。因此,软件产品数量和质量在相当长的实践中还得依靠技术人员和管理人员。
  3. 软件的开发和维护成本高,且涉及诸多社会因素。

1.2软件危机

        软件危机是指在计算机软件开发和维护过程中遇到的一系列严重问题。

1.2.1产生原因

  1. 与软件自身特点有关,逻辑产品,缺乏可见性,规模大且复杂;修改、维护困难。
  2. 软件开发与维护的方法不当:忽视需求分析;重视现,轻设计;轻视软件维护。
  3. 供求矛盾是永恒的主题:需求的增长和变更,使得开发者力不从心。

1.2.2典型表现

  1. 软件开发成本和进度不可控。
  2. 软件产品不能满足用户的需求。
  3. 软件产品的质量难以保证。
  4. 软件可维护性差。
  5. 软件缺乏适当的软件文档支持。
  6. 软件成本在计算机系统总成本中所占的比例逐年上升。
  7. 软件生产率跟不上计算机应用普及和深入的趋势。

1.3软件工程概述

1.3.1软件工程方法学

        软件工程方法学包括三个要素,即方法、工具和过程。

  1. 方法:完成软件工程项目的技术手段,回答“怎么做”的问题。
  2. 工具:为运用方法提供自动或半自动的支撑环境。
  3. 过程:为了获取高质量软件所需完成的一系列任务框架,包括支持软件开发各个环节的控制和管理。

        目前使用最广泛的软件工程方法学为传统方法学面向对象方法学

1.3.2软件工程的基本原则

  1. 采用适宜的开发模型
  2. 采取合适的设计方法
  3. 提供高质量的工程支持
  4. 重视开发过程的管理

二、软件过程

2.1软件生命周期

(1)软件定义①问题定义
②可行性分析
③需求分析
(2)软件开发Ⅰ系统设计④总体设计
⑤详细设计
Ⅱ系统实现⑥编码和单元测试
⑦综合测试
(3)运行维护⑧软件维护

2.2软件过程的定义

        软件过程(Software Produce)是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。概括地说,软件过程描述为了开发出用户需要的软件,什么人(Who)在什么时候(When)做什么事(What)以及怎么做(How)这些事,以实现某一个特定的具体目标。

2.3软件过程模型

2.3.1瀑布模型

        1970年,温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到20世纪80年代早期,它一直是唯一被广泛采用的软件开发模型。

  • 核心思想:

        按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为可行性研究需求分析设计编码综合测试运行维护六个部分,并且规定了这些活动自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。

  • 过程:

        从上一项活动接受该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动,甚至更前面的活动。

        因此,对于需求经常变化的项目而言,瀑布模型毫无价值。

瀑布模型如图1图2所示(实线代表开发过程,虚线表示维护过程)

图1 传统的瀑布模型
图2 实际的瀑布模型
  • 瀑布模型的优点:
  1. 可强迫开发人员采用规范的方法。
  2. 严格地规定了每个阶段必须提交的文档。
  3. 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
  • 瀑布模型的缺点:
  1. 只能通过文档谅解产品,不能经过实践的需求是不切实际的。
  2. 固定的顺序导致纠正前期错误的代价越来越高。
  3. 需求变动带来很大风险。
  • 瀑布模型适用于:
  1. 需求是预知的。
  2. 软件实现方法是成熟的。
  3. 项目周期较短。

2.3.2螺旋模型

        1988年,巴利·玻姆(Barry Boebm)正式发表了软件系统开发的“螺旋模型”,强调了其他模型忽视的风险分析,特别适合于大型复杂且昂贵的系统级应用软件。

图3 螺旋模型的结构

        螺旋模型沿着螺旋线进行若干次迭代,图3中的四个象限分别代表了制定计划风险分析实施工程客户评估

  • 基本做法:

        在“瀑布模型”的每个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成为一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。

  • 螺旋模型的优点:
  1. 螺旋模型是一个风险驱动的模型,强调可选方案和约束条件,从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发中。
  2. 设计上的灵活性,可以在项目的各个阶段进行变更。
  3. 以小的分段构建大型系统,使成本计算变得简单容易。
  4. 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
  5. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
  6. 维护只是模型的另一个周期,维护和开发之间没有本质区别。
  • 螺旋模型的缺点:
  1. 采用螺旋模型需要有相当丰富的风险评估经验和专业知识,在风险较大的项目开发中如果未及时标识风险,势必造成重大损失。
  2. 建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户的需求。
  3. 过多的迭代次数会增加开发成本,延迟提交时间。
  • 螺旋模型的项目适用的几个方面:
  1. 就近开发,需求不明确的情况,便于风险控制和需求变更。
  2. 大规模软件的项目开发。

2.3.3喷泉模型

        喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

        该模型中,软件开发过程自上而下周期的各个阶段是相互迭代和无间隙的。

        喷泉模型如图4所示

图4 喷泉模型

        无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限。

  • 喷泉模型优点:
  1. 该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。
  2. 多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。
  3. 可以提高软件项目的开发效率,节省开发时间。
  • 喷泉模型缺点:
  1. 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,这样很不利于项目管理。
  2. 要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
  • 喷泉模型适用于面型对象的软件开发过程。

2.3.4快速原型模型

        略(想了解可查看《软件工程导论》一书)

2.3.5增量模型

        略(想了解可查看《软件工程导论》一书)


三、参考答案

3.1第一章课后参考答案

3.1.1练练手

(1)(2)(3)(4)(5)
BBABC
(6)(7)(8)(9)(10)
ACCAD

3.1.2动动脑

1.简述结构化方法与面向对象方法的主要特点,如何将两种方法结合在一起,有效开发软件项目?

  1. 结构化方法:
  2. 适合小型项目开发
    1. 数据和功能分离
    2. 文档驱动(瀑布模型)
    3. 模块化(功能)
    4. 软件结构:自顶向下,逐层分解
    5. 便于测试和维护
    6. SA➡SD➡SP(数据流程图)
    7. 数据模型、功能模型、行为模型(ER、DFD、SC)

面向对象方法:

  1. 适合中大型项目开发
    1. 数据和功能封装à对象
    2. UML驱动(UP)
    3. 模块化(对象)
    4. 软件结构:对象之间交互(6种关系)
    5. 便于维护和扩展
    6. OOA➡OOD➡OOP(类图)
    7. 对象模型、功能模型、动态模型(Class、User Case、Statement)

无论使用哪种开发方法,或者是混合哪几种开发方法,都要因地制宜,依据需求分析和系统要求,做出最好的选择或组合。

2.软件工程教材中,经常会叙述发现并改正错误的重要性,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,怎么能在设计阶段就清楚它?”,判断这个观点是否正确,并且给出理由。

【解答】

  1. 设计也能发现Bug:
    1. 设计过程本身就应该设计校验。
    2. 在软件开发流程中,TDD是解决这个问题的方式。
    3. 减少问题不是直接不产生Bug,而是能够及时发现并消除Bug。
    4. 编码之前,先编写测试单元。
    5. 每次编码结束,都应该运行测试单元,确保代码能够通过。

3.2第二章课后参考答案

3.2.1练练手

(1)(2)(3)(4)(5)
DDBDD
(6)(7)(8)(9)(10)
AABBC

说明:螺旋模型适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),因此,并不适用全部的大型软件。

3.2.2动动脑

1)研究下XP,理解测试如何驱动开发,并举例说明。

【解答】

  1. 测试驱动开发的基本过程
    1. 明确当前要完成的功能。可以记录成一个 TODO 列表。
    2. 快速完成针对此功能的测试用例编写。
    3. 测试代码编译不通过。
    4. 编写对应的功能代码。
    5. 测试通过。
    6. 对代码进行重构,并保证测试通过。
    7. 循环完成所有功能的开发。

(2)为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特点,并举例说明。

【解答】

  1. 喷泉模型特点
    1. 使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号。
    2. 用建模工具描绘的模型贯穿在开发各个阶段。
    3. 整个开发过程都是吻合一致的,或者说是无缝连接的。
    4. 容易实现各个开发步骤反复多次迭代,达到认识的逐步深化。
    5. 喷泉模型则体现了面向对象软件开发过程迭代和无缝的特性。

续后文:软件工程导论学习笔记——(2)项目启动阶段(含三四五章课后题答案)

https://blog.csdn.net/Prayer41/article/details/135378751

这篇关于软件工程导论学习笔记——(1)基础知识(含一二章课后题答案)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/643836

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识