软件工程练习题-part01-软件工程概述及软件过程

简介: 软件工程练习题-part01-软件工程概述及软件过程

image.png


课程简介

“软件工程”课程是软件工程专业的核心课程,是用工程化方法指导软件开发、维护与管理的一门综合性课程,内容涉及软件分析、设计、实现、维护及项目管理相关的理论、技术、方法和CASE工具。


考试大纲

⚫重点掌握软件工程的基本概念和基本原理;

⚫结合当前我国软件企业对软件开发的需求,掌握并能运用软件工程的基本原理和实用的软件开发技术和基本的管理技术;

⚫了解软件工程学科的知识结构。


⚫(一) 软件工程概念与软件工程的基本要素

⚫(二) 软件过程

⚫(三) 软件需求与软件需求规约

⚫(四) 系统规约及软件设计

⚫(五) 软件测试

⚫(六) 软件工程管理

⚫(七) 软件质量、质量特征以及软件质量保证

⚫(八) 计算机辅助软件工程CASE 工具与环境


1d77fcda876bdece1648609c698911f0_3a05292bd6c5426aa34edc33feb1480a.png


软件工程概念与软件工程的基本要素

瀑布模型

6835db841865d0602f3541986c051ec1_68b44cf7aa394daa973fe3c12066c4ed.png

软件产品模型:


软件过程模型:


软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。典型的软件过程有瀑布模型、增量模型、演化模型(原型模式、螺旋模式)、喷泉模型、基于构件的开发模型和形式化方法模型等。


软件项目模型:

软件测试模型:


V模型 W模型 X模型 H模型 敏捷模型


CMM支撑软件质量要素

e03af58a99c6d0ef9c9ae1ca636978bc_4ec09f8f77fa42b58cf43f419bcc7328.png


CMM认为支撑软件质量的要素包括过程、产品和人员三个方面。

产品Product、过程process和人员People

举个例子,

过程要求开发人员必须按照既定的流程进行软件开发,

产品要求开发人员制作出符合规范的产品,

而人员则要求开发人员具备足够的技能与经验。

这些要素的有机结合,才能保证软件的高质量。


软件工程的质量主要取决于方法、工具、过程这三个因素,简称软件工程三要素。

方法是完成软件开发的各项任务的技术方法,为软件开发提供“如何做”的技术。

工具为运用方法而提供的自动的或半自动的软件工程的支撑环境。

过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发。


关于增量开发模型的叙述


5269c1ef925e44d459200a297aa10717_8cf26d20cad04554940867b3ca650b4f.png

融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。

增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点。此外,它还有以下优点:


第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;

由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。


增量模型有以下不足之处:


如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;

如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;

管理发生的成本、进度和配置的复杂性可能会超出组织的能力。


软件过程模型的描述不正确的是 感觉应该是B


df34e8b516081bbbd8b6e9d015316b1c_72f209d0fcb64deb8d0f1b437a7c447f.png


369cca8e67b03073cfdda377486df1be_6f3a0fe8ed854f249c0d34fa2a01abb3.png

09a50b51bc00886b31a959f1c6519687_a5d1e1e8084c414f8101618cddb5a681.png


瀑布模型与喷泉模型的区别

c119441d001b20c37cd7d79f008ef757_1aa43300d39141f6ab0b12072801a0ce.png


软件工程活动:


瀑布模型:规定了各项软件工程活动,以及它们自上而下,相互衔接的固定次序,如同瀑布流水逐级下落。可行性研究 需求分析 总体设计 详细设计 编码 单元测试 系统测试 验收测试 运行与维护

f7d57e7a812dbcfc9761bcfb4905d092_90a67e92919a48be84215a4e516d63c0.png

喷泉模型:喷泉模型主要用于描述面向对象的开发过程,“喷泉”一词体现了面向对象开发过程的迭代和无间隙特征。迭代意味着模型中的开发活动常常需要多次重复,每次重复都会增加或明确一些目 标系统的性质,但却不是对先前工作结果的本质性改动。无间隐是指在开发活动(如分析、设计、编程)之间不存在明显的边界,而是允许各开发活动交叉、迭代地进行。

2c56d4aacc1aac216b72613d80559e55_ce2e80ae35904a55bff1f026bf537294.png


软件开发模型:


首先开发模型有几种主要的分类:原型化模型、结构化模型、面向对象化模型、Jackson模型等等,这些都是模糊的分类概念,没有很明确的划分标准。

重要的是能区分原型化模型和结构化模型,因为两者是互补的,其他只要抓住他们的具体特点就可以了,这里不做赘述。

84b80a06fde0a83c08b1fda6a652a837_5c48de6ee8f24b4182967e735644452a.png


参考:https://blog.csdn.net/Biu_Destiny/article/details/116893974


生存周期的基本过程包括

bf749f2da04ec7e2dd9daf05cd2bbe6d_8153e813031644e885c00ff0f479bdd2.png


软件生存周期中可能执行的活动分为


5个基本过程、

9个支持过程

7个组织过程,

每一生存周期过程划分为一组活动,每一项活动进一步划分为一组任务。

24b6d6271856e6e5cb3a07dcb65ba1cf_3f31ae40f4564e3da58c2b61ff498767.png

基本过程

生产直接相关活动活动

1.获取过程:为需方而定义的活动,启动,招标,合同,对供方监督,验收等 ;

2.供应过程:为供方而定义的活动,启动,准备投标,签订合同,编制计划,执行,交付和完成;

3.开发过程:为开发方而定义的活动:需求、设计、编码、测试、安装、验收;

4.运作过程:为操作方而定义的活动:运行测试,系统运行,用户支持 ;

5.维护过程:为维护方而定义的活动:问题和修改分析,修改实现,维护评审/验收,迁移,软件退役

支持过程

58d1fb3fe4cf42b99ee90dd897a8e2d1.png

组织过程

cb67f71dbf0449be8e2f1a4d9397b888.png


编制预算和进度表属于CMMI什么级别

编辑预算和进度表属于CMMI已管理级“项目策划”过程域的专用实践 √


CMM 五个级别的定义


1)初始级(Initial):软件开发过程中偶尔会出现混乱的现象,只有很少的工作过程是经过严格定义的,开发成功往往依靠的是某个人的智慧和努力。

2)可重复级(Repeatable):建立了基本的项目管理过程。按部就班地设计功能、跟踪费用,根据项目进度表进行开发。对于相似的项目,可以重用以前已经开发成功的部分。

3)已定义级(Defined):软件开发的工程活动和管理活动都是文档化、标准化的,它被集成为一个组织的标准的开发过程。所有项目的开发和维护都在这个标准基础上进行定制。

4)已管理级(Managed):对于软件开发过程和产品质量的测试细节都有很好的归纳, 产品和开发过程都可以定量地分解和控制。

5)优化级(Optimizing):通过建立开发过程的定量反馈机制,不断产生新的思想,采用 新的技术来优化开发过程。


51372c33827440f69fdc09f346bb6bac.png

14ab69179ab14873a4cd994cec59708c.png

参考本文下面的: 拓展 4.CMMI


RUP未使用的技术

参考:统一软件开发过程(RUP)

RUP 是Rational Unified Process统一开发过程,使用的技术有:


迭代 增量式 用例驱动

RUP是用例驱动的,以架构为核心,迭代和增量的软件过程框架,它提供一种演进的特性。


未使用的技术为:


测试驱动开发

测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。


软件是什么

软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。

工程是将理论和只是应用于实践的科学,其目的是经济有效地解决实际问题。


软件=程序+数据+文档


程序:计算机可以接受一系列指令,运行时可以提供所要求的功能和性能

数据:使得程序能够适当地操作信息的数据结构。

文档:描述程序地研制过程、方法和使用的图文资料。


软件具有复杂性、一致性、可变性和不可见性等


什么是CMMI,CMMI连续式表示中,把能力等级划分为哪几个等级。

CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。

CMMI全称是能力成熟度模型集成,CMMI认证一共有5个级别:

CMMI1级,完成级;CMMI2级,管理级;CMMI3级,定义级;CMMI4级,量化管理级;CMMI5级,优化级。


CMMI模型中,为支持对连续式表示法的使用,所有的CMMI模型在其设计与内容方面都体现了能力等级。CMMI四个能力等级定名为0级至3级,每一级是一个层次,作为继续进行过程改进的基础。


CMMI0级. 不完整级

CMMI1级. 已执行级

CMMI2级. 已管理级

CMMI3级. 已定义级

CMMI4级. 量化管理级

CMMI5级. 优化级


基于连续式表述的CMMI共有6个(0~5)能力等级,对应于未完成级、已执行级、已管理级、已定义级、量化管理级、优化级。每个能力等级对应到一个一般目标,以及一组一般执行方法和特定方法。 能力等级0指未执行过程,表明过程域的一个或多个特定目标没有被满足;能力等级1指过程通过转化可识别的输入工作产品,产生可识别的输出工作产品,关注于过程域的特定目标的完成;能力等级2指过程作为已管理的过程制度化,针对单个过程实例的能力;能力等级3指过程作为已定义的过程制度化,关注过程的组织级标准化和部署;能力等级4指过程作为定量管理的过程制度化;能力等级5指过程作为优化的过程制度化,表明过程得到很好地执行且持续得到改进。


什么是开源软件,举例说明

所谓开源,“源”即其源代码,开源就是软件的编写者将源代码免费提供给使用者,同时要求使用者遵循一定的开源规范。比如linux就是开源软件


RUP的每一个迭代周期中设计6个核心工程工作流,3个核心支持工作流,描述6个核心工作流的名称和主要目标

参考:深入理解迭代二维开发模型的6个核心过程工作流和3个核心支持工作流。

9b7d5c4041fa83303acbd70840d56f50_0bee8e39d34a4f969179122d4d8757d9.png


商业建模business modeling:商业建模描述了如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程角色和责任

需求分析requirements:需求工作流的目标是描述系统应该做什么,并未开发人员和用户就这一描述达成共识。为了达到该目标,要对需求的功能和约束进行提取、组织和文档化;最重要的是理解系统所解决问题的定义和范围。定义系统功能及用户界面,该工作流的主要结果为软件需求说明书。

分析与设计Analysis&design:分析与设计工作流是把需求转换为未来系统的设计,为系统开发一个健壮的结构并调整设计使其余实现环境相互匹配,优化其性能。分析设计结果是一个设计模型和一个可选的分析模型。

实现Implementation:实现工作流的目的在于通过层次化的子系统形式定义代码的组织结构,实现类和对象,对开发出的组件进行单元测试,集成单个开发者的组件,使其成为可执行的系统。定义代码的组织结构,实现代码,单元测试,系统集成。

测试Test:在完成需求捕获、分析、设计、实现等阶段的开发后,得到了源代码,这时就必须开始寻找软件产品中可能存在的错误与缺陷。检验所有需求是否被正确实现,确保在发布前发现所有错误和缺陷。

部署Deployment:目的是生成版本,并把软件分法给最终用户。部署工作流描述了:软件打包,生成软件本身之外的产品,安装软件,为用户提供帮助。


配置与变更管理:配置与变更管理工作流描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更工作流提供准则来管理演化系统中的多个遍历,跟着软件过程中的多个版本。工作流描述了如何并行开发,分布式开发,如何自动化创建工程。同时也阐述了对产品修改原因,时间和人员保持审计记录。


项目管理project management:目标包括为项目的管理提供框架,为计划,人员配置执行提供准则。


环境environment:环境工作流的目的是向软件开发组织提供软件开发环境,包括过程和工具


软件生存周期中可能执行的活动分为5个基本过程,这5个基本过程是什么,每一个基本过程与软件项目的哪一方相关。

5个基本过程:


1、获取过程:为需方而定义的活动,启动,招标,合同,对供方监督,验收等

2、供应过程:为供方而定义的活动,启动,准备投标,签订合同,编制计划,执行,交付和完成

3、开发过程:为开发方而定义的活动:需求、设计、编码、测试、安装、验收

4、运作过程:为操作方而定义的活动:运行测试,系统运行,用户支持

5、维护过程:为维护方而定义的活动:问题和修改分析,修改实现,维护评审/验收,迁移,软件退役


9个支持过程:


1、文档编制过程

2、配置管理过程

3、质量保证过程

4、验证过程:确定软件产品是否满足在以前的活动中施加于它们的要求和条件的过程。合同验证,过程验证,需求验证,设计验证,编码验证,集成验证,文档验证

5、确认过程:确定需求和最终的、已建成的系统或软件产品是否满足特定的预期用途的过程。该过程包括下列任务:


1、为分析测试结果准备选择的测试需求、测试用例和测试规格说明

2、确保这些测试需求、测试用例和测试规格说明反映特定的预期用途的特殊要求

3、测试包括强度、边界和异常输入测试


6、联合评审过程:评价某个项目的一项活动的状态和产品,项目管理评审,技术评审

7、审核过程:在适当时确定与需求、计划和合同的符合性

8、问题解决过程

9、易用性过程


7个组织过程


1、管理过程:为生存周期过程中的管理包括项目管理而定义的基本活动

2、基础设施过程:为建立生存周期过程基础结构而定义的基本活动

3、改进过程

4、人力资源过程

5、资产管理过程

6、重用大纲管理过程:为组织的重用大纲主管而定义的活动,启动,领域评估,重用评估,策划,执行和控制,评审和评价

7、领域工程过程:领域工程师的活动和任务,领域分析,领域设计,资产供应,资产维护


拓展

1.简述软件过程、软件生存周期、软件过程模型(软件生存周期模型)三者之间的概念区别。

软件过程: 是软件生存周期中的一系列相关过程所涉及的活动。过程是活动的集合;活动是任务的集合;任务是将输入转换为输出的操作。

软件生存周期: 软件从生到死的过程。可划分为定义、开发和运行三个周期,包括可行性分析、项目计划、需求分析、软件设计、编码与测试、运行和维护等阶段。

软件过程模型: 是一种软件过程的抽象表示;是从一个特定的角度表现一个过程,一般使用直观的图形来表示软件开发的复杂过程。软件过程模型主要根据软件的类型、规模、特别是软件的开发方法、开发环境等多种因素确立。


区别:

软件生存周期是一个过程,主体是软件;

而软件过程是从软件的诞生开始及其生命周期的过程,是这个过程中所涉及的一系列活动;

软件过程模型则是该一系列活动(软件过程)的抽象表示。


2.软件过程就是软件开发过程吗?为什么?

不是。软件开发过程只是软件过程中的一个阶段,软件过程按照承担软件开发工作的主体分为基本过程、支持过程、组织过程三大类,其中基本过程按照过程中活动的不同主体分为获取过程、供应过程、开发过程、运行过程、维护过程,所以说软件开发过程只是软件开发过程中的一个部分。


3.软件测试模型

参考:https://blog.csdn.net/WeirdoGiraffe/article/details/124883325

与开发模型一样,软件测试根据不同的被测对象、测试背景、被测对象质量要求、项目进度要求等,可以采用不同的测试模型实施测试活动,来指导软件测试活动安排。

业界常见模型:


1、V模型

2、W模型(双V模型)

3、X模型

4、H模型

5、敏捷模型


V模型

V模型是所有软件测试模型中最为大家熟知的一种模型。它是从瀑布研发模型演变而来的测试模型,如图所示。

10283cf55d67efd40bf65b5be2282db1_2a6b16555021492baa2a92e9dd47a855.png


V模型流程是从上至下,从左到右

①测试工程师在研发人员编程过程中,对其生成的代码函数做单元测试

②单元测试通过后进行集成测试

③集成测试通过后做系统测试、验收测试


V模型缺点:


项目早期的缺陷,在后期才能发现


W模型

W模型是在V模型的基础上演变而来的,一般又称为双V模型。在V模型中,研发活动没有完成、无任何输出物时,测试工程师无法开展测试工作,相对而言,测试活动严重滞后。为了解决V模型的缺点,W模型提出了测试活动与研发活动并行的概念,并且在生产流程演进过程中,增加了验证与确认活动。

15fbd9e65785e3995a5bc44bb56deed5_bf83ed8241aa41b5b0d91447ded53422.png


W模型从用户需求开始,研发团队根据用户需求进行需求分析、概要设计、详细设计、编码开发等活动,测试团队则根据用户需求进行验收测试、系统测试、集成测试及单元测试设计。测试工作与研发活动分离,实现了并行操作。测试活动伴随着整个研发过程,而不仅在研发有成果输出后才参与。

W模型强调了测试活动不仅仅包括研发活动所产生的软件源代码,还考虑各种文档,如需求文档、概要设计文档、详细设计文档、代码等。

W模型要求测试活动从用户需求阶段就介入,有利于尽早地发现问题,在模型实施过程中,时刻进行确认(validation)、验证(verification)活动


X模型

X模型产生的背景亦与V模型有关,V模型的缺点是测试活动滞后于研发活动,无法尽早地开展测试活动。而X模型与W模型一样,提出的初衷都是解决V模型的缺点。

X模型的基本思想是由Marick提出的, Robin F.Goldsmith进行了完善。X模型如图所示。

1dac3971402d3fe15adef73192abb9c9_94ed9db5391a4e21934e9cd76a9dfce4.png


X模型左边表明针对单独的程序片段n进行独立的编码和测试活动,以此为基本过程,不断迭代,通过集成活动最终成为可执行程序,然后再对这些可执行程序进行测试。通过集成测试的成品可以进行封装并提交给系统测试环节或直接给用户。多条并行的曲线表示变更可以在各个部分发生。

X模型提出了探索性测试的概念。探索性测试与常规的测试方法不同,无须事先制定测试计划或设计,有经验的测试工程师可根据自己的思维活动及对被测对象的理解,在测试计划之外发现更多的软件错误。但探索性测试通常情况下仅作为其他测试方法的补充,因其消耗测试资源较多,且受制于测试工程师的经验,所以不能成为独立的测试方法。


H模型

H模型将测试活动与其他研发流程独立,测试活动分为测试准备与测试执行两个部分,便于测试设计与测试执行活动定义,如图所示。测试准备活动包括测试需求分析、测试计划、测试设计、测试编码、测试验证等,测试执行包括测试运行、测试报告、测试结果分析、确认回归测试等。

3ae5d8cc7ce3eeebc2f3288508828b64_3d61663860ad4f1f9f51f4a1d144ae47.png


H模型与W模型一样,揭示了软件测试活动应该是一个独立的软件生产流程,贯穿整个软件生命周期,测试活动应该尽早准备、尽早执行,当测试准备工作完成后,一旦到达测试就绪点,就可开展测试执行活动,不会受制于研发活动。


敏捷测试模型

强调从客户角度进行测试;

重点关注迭代测试新功能,不再强调测试阶段

尽早测试,不间断测试,具备条件即测试

强调持续反馈

预防缺陷重于发现缺陷


演化模型与原型模型

演化模型也是一种原型化开发方法,与快速原型模型略有不同。


在快速原型模型中,原型的用途是获知用户真正的需求,一旦需求缺点了,原型即被抛弃了。

而演化模型开发的过程则是从初始模型逐步演化为最终软件产品的渐进过程,


也就是说,快速原型模型是一种“抛弃式”的原型化方法,而演化模型则是一种“渐进式”的原型化方法。


4.CMMI

参考:https://deepmind.t-salon.cc/article/6396

一图详解CMMI能力成熟度模型的5个级别与22个过程域,收藏学习

软件工程基础 重点推荐

CMM与CMMI的关系

凡奉信息 CMMI-DEV(开发视图)


CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。

CMMI全称是能力成熟度模型集成,CMMI认证一共有5个级别:


CMMI1级,完成级;CMMI2级,管理级;CMMI3级,定义级;CMMI4级,量化管理级;CMMI5级,优化级。


在CMMI中,每一种CMMI学科模型都有两种表示法:


阶段式表示法和连续式表示法。

不同表示法的模型具有不同的结构。连续式表示法强调的是单个过程域的能力,从过程域的角度考察基线和度量结果的改善,其关键术语是“能力”;

而阶段式表示法强调的是组织的成熟度,从过程域集合的角度考察整个组织的过程成熟度阶段,其关键术语是“成熟度”。


eb809479995a5589815fe7468dbc5ad5_da5e9a477672434db9824e1f79f11a0c.png

c7892d1ffaa8dedafd43ea5198ae647f_0546b58d0bb24fd488730ce936320cec.png

CMMI过程域

CMMI V1.3一共有22个过程域,过程域(PA):描述了整个过程改进活动中应侧重关注或改进的某个方面的问题,针对每个过程规定目标,根据目标实践。每个过程域有明确的目标(Goal)和实践(Practice),目标和实践包含:


GG(Generic Goals),中文名为通用目标,对应GP(Generic Practices),中文名为通用实践,应用于能力维度,所以适用于所有关键过程域。


SG(Specific Goals),中文名为特定目标,对应SP(Specific Practices),中文名为特定实践,应用于过程维度,只能适用某一特定关键过程域。


CMMI 的等级、过程域、目标和实践的关系如下:



406ec593d75f4bbf9becca6e0cdf6ad2.png

e05c6ec82fb2b32466e70803f53d87d1.png

CMMI实践域

实践域是CMMI(Capability Maturity Model Integration,能力成熟度模型集成)框架中的一个重要概念,指的是一个可重复使用的标准实践集合,这些实践已经被证明在特定领域内有效。

实践域以往被称为称为“过程域”,如:配置管理,现在叫做“实践域”。对于2.0版,则有25个适用的实践域。与以前版本的CMMI模型一样,“实践域”介绍了定义实践意图的关键活动的要求和描述。


CMMI的实践域分为两个层次:通用实践域和特定实践域。通用实践域包括项目管理、工程、过程和产品支持,这些实践都是为了支持整个组织的过程改进和项目管理。而特定实践域则是根据不同的业务领域和行业制定的一些特定的实践,以更好地应对各种特殊需求。


举个例子,针对软件开发领域,CMMI中的特定实践域包括需求管理、设计管理、测试管理等等。这些实践可以帮助软件开发组织建立更好的需求管理、设计管理、测试管理机制,提高软件开发生产效率,优化软件开发流程。


总结

本系列博客是软件工程的相关博客,本文是第一部分软件工程概述及软件过程练习题。

相关文章
|
敏捷开发 项目管理
软件工程概述
软件工程是一门研究如何以系统化、规范化、可靠性和高效性的方法开发和维护软件的学科。它涵盖了软件开发的各个阶段,包括需求分析、设计、编码、测试、部署和维护等。
54 0
|
3月前
|
敏捷开发 算法 安全
【 第十章】软件设计师 之 软件工程概述
软件设计师 之 软件工程概述 备考资料
【 第十章】软件设计师 之 软件工程概述
|
数据处理
【软件工程】第三章
【软件工程】第三章
|
6月前
|
测试技术 监控 项目管理
软件工程part01-软件工程概述及软件过程
软件工程part01-软件工程概述及软件过程
软件工程part01-软件工程概述及软件过程
|
测试技术 程序员 开发者
【软件工程】第六章
【软件工程】第六章
|
设计模式 算法 架构师
【软件工程】软件设计概述
【软件工程】软件设计概述