热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

软件工程概论第二章:过程与生命周期模型

软件工程概论第二章:过程与生命周期模型文章目录软件工程概论第二章:过程与生命周期模型前言一、过程的含义1.1、过程定义1.2、过程特点1.3、过程的重要

软件工程概论第二章:过程与生命周期模型


文章目录

  • 软件工程概论第二章:过程与生命周期模型
  • 前言
  • 一、过程的含义
    • 1.1、过程定义
    • 1.2、过程特点
    • 1.3、过程的重要性
    • 1.4、软件开发过程
  • 二、瀑布模型
    • 2.1、核心思想
    • 2.2、优点
    • 2.3、缺点
    • 2.4、示意图
  • 三、V模型
    • 3.1、核心思想
    • 3.2、优点
    • 3.3、缺点
    • 3.4、示意图
  • 四、原型化模型
    • 4.1、核心思想
    • 4.2、优点
    • 4.3、缺点
    • 4.4、示意图
  • 五、增量模型
    • 5.1、增量模型核心思想
    • 5.2、增量和迭代区别
    • 5.3、增量模型优点
    • 5.4、增量模型缺点
    • 5.5、示意图
  • 六、螺旋模型
    • 6.1、核心思想
    • 6.2、优点
    • 6.3、缺点
    • 6.4、示意图
  • 七、敏捷宣言
    • 7.1、产生
    • 7.2、内容
    • 7.3、总体目标
    • 7.4、实现方法
    • 7.5、极限编程(XP)
  • 总结


前言

用于西电软件工程专业软件工程概论课程复习使用,主要讲解了软件工程第二章过程与生命周期模型相关知识点,以下是完整版的知识点整理资源和相关复习资料,已传至CSDN下载中:复习资料下载地址





一、过程的含义


1.1、过程定义

过程是一系列涉及活动、约束和资源的步骤,这些步骤产生某种预期的输出。


1.2、过程特点


  • 规定所有主要过程活动
  • 使用资源,受制于一组约束(例如时间表)
  • 生产中间产品和最终产品
  • 可能由具有层次结构或链接的子流程组成(过程组织为层次结构,以便每个子过程有自己的过程模型)
  • 每个流程活动都有进入和退出标准(这样就可以知道每个活动的开始和结束时间)
  • 活动按顺序组织,所以时间很明确(知晓什么时候应该开始一个什么活动)
  • 每个流程指导原则,包括每个活动的目标
  • 约束可能适用于活动、资源或产品

1.3、过程的重要性

(1)生命周期的概念:涉及产品构建的过程
(2)软件的生命周期:描述了软件产品从概念到实现、交付、使用和维护的整个过程
(3)过程的重要性


  • 对一组活动强加一致性和结构
  • 指导我们了解、控制、检查和改进活动
  • 使我们能够捕捉我们的经验并将其传递下去

1.4、软件开发过程

(1)、需求分析与定义——>系统设计——>程序设计——>编写程序——>单元测试——>集成测试——>系统测试——>系统交付——>维护


  • 每个阶段本身就可以描述为一组活动的过程(或者一组活动)
  • 每个活动包括约束、输出和资源(例如需求分析,以用户表述的功能和特征作为输入,输出就需求,约束就是产生需求说明文档的预算和进度,需求的种类和表示方法)
  • 后续会讨论每一个阶段涉及的过程,资源,活动和输出,以及如何影响最终产品
  • 每个过程都可以用不同的方式加以描述,例如文本,图等以表示过程特征

二、瀑布模型


2.1、核心思想

瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期分为8个步骤,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。


2.2、优点

(1)可强迫开发人员采用规范化的方法
(2)严格的规定了每个阶段必须提交的文档
(3)要求每个阶段交出的所有产品都必须是经过验证的。


2.3、缺点


  • 瀑布模型最大的问题是不能反映实际的代码开发方式
  • 瀑布模型中没有创建最终产品的迭代活动(大多数软件开发应用大量迭代)(一般开发是迭代的,因为可能面对没见过的问题,或者解决方案本身要随着业务情况或环境而改变,用户或开发人员都不完全了解影响期望结果的关键因素,所以或者停滞不前,或者反复重复)
  • 没有提供如何在开发过程中处理产品和活动变更的指导(假设需求可以冻结)
  • 将软件开发视为制造过程而不是创造过程
  • 最终产品前的漫长等待

2.4、示意图

瀑布模型示意图


三、V模型


3.1、核心思想


  • 编码为位于顶点,分析和设计在左边,测试和维护在右边
  • 使用单元测试来验证程序设计
  • 使用系统测试来验证架构(系统)设计
  • 使用验收测试来验证需求
  • 如果在验证和确认过程中发现问题,可以重新执行左侧的V,然后重新制定右侧的测试

3.2、优点

V模式使得隐藏在瀑布模型中的迭代和重做活动根据明确


3.3、缺点

V模型仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证


3.4、示意图

V模型示意图


四、原型化模型


4.1、核心思想

它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。


4.2、优点

(1)有助于满足用户真实需求
(2)原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确描述用户需求。
(3)软件产品的开发基本上是按线性顺序进行的
(4)建造出原型系统,开发人员可以加速软件开发过程,节约软件开发成本。


4.3、缺点

(1)所选用的开发技术和工具不一定符合主流的发展。
(2)快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
(3)使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。


4.4、示意图

原型化模型


五、增量模型


5.1、增量模型核心思想

它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动。第一个版本纳入一部分需求,下一个版本纳入更多的需求,依此类推,直到系统完成。每个中间版本都要执行必需的过程、活动和任务。


5.2、增量和迭代区别


  • 增量开发:从小的功能子系统开始,并在每个新版本中添加功能
  • 迭代开发:从完整的系统开始,然后随着每个新版本的发布更改每个子系统的功能

5.3、增量模型优点

(1)能在较短时间内向用户提交完成一些有用功能的工作产品。
(2)逐步增加产品的功能可以使用户有充裕的时间学习和适应新产品。
(3)项目失败风险较低
(4)优先级最高的服务首先交付,然后再将其他增量构建主次集成进来,这意味着,最重要的部分将接受最多测试。


5.4、增量模型缺点

与其他模型相比,需要更精心的设计。


5.5、示意图

增量模型


六、螺旋模型


6.1、核心思想

螺旋模型是一种演化软件开发过程模型。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。


6.2、优点

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


6.3、缺点

要求开发人员必须具有丰富的风险评估经验和专门知识。


6.4、示意图

包括:制定计划,目标约束可选项,风险评估与分析,开发和测试
螺旋模型


七、敏捷宣言


7.1、产生

20世纪70-90年代提出的开发方法,都是试图在软件构思、文档化、开发和测试过程中强加某种形式的严格性;90年代后期,就出现了抵制严格性的开发人员,强调灵活性的作用,即“敏捷宣言”


7.2、内容


  • 重视个人和互动胜过流程和工具
  • 更愿意花时间制作可工作的软件,而不是制作综合文档
  • 专注于客户协作而不是合同谈判
  • 专注于应对变化,而不是制定计划然后执行

7.3、总体目标

尽可能早地、持续地交付有价值的软件,使客户满意


7.4、实现方法


  • 极限编程 (XP): 激发开发人员规划,使管理最小化
  • Crystal:基于每个项目都需要一组独特的策略和约定的概念的方法集合;人对软件质量有重要影响,交流与经常性交付,提高人的素质,软件质量也会提升。
  • Scrum:30 天迭代; 多个自组织团队;日常“scrum”协调。
  • 自适应软件开发 (ASD):设立目标,围绕如何组织构建达成目标,变化包括在内。

7.5、极限编程(XP)

(1)特征:
沟通:客户和开发者之间的持续交流
简单:选择最简单的设计或实现
勇气:承诺尽早并经常交付功能
反馈:开发过程中内置于各种活动中的循环
(2)十二个方面:


  • 现场客户 ( On-site Customer )
  • 代码规范 ( Code Standards )
  • 每周40小时工作制 (40-hour Week )
  • 计划博弈 ( Planning Game ):要求结合项目进展和技术情况,确定下一阶段要开发与发布的系统范围。
  • 系统隐喻 ( System Metaphor ):通过隐喻来描述系统如何运作、新的功能以何种方式加入到系统。它通常包含了一些可以参照和比较的类和设计模式。
  • 简单设计 ( Simple Design )
  • 测试驱动 ( Test-driven )
  • 代码重构 ( Refactoring ):代码重构是指在不改变系统行为的前提下,重新调整、优化系统的内部结构以减少复杂性、消除冗余、增加灵活性和提高性能。
  • 成对编程 ( Pair Programming )
  • XP:认为开发小组的每个成员都有更改代码的权利,所有的人对于全部代码负责。
  • 持续集成 ( Continuous Integration ):提倡在一天中集成系统多次,而且随着需求的改变,要不断的进行回归测试。
  • 小型发布 ( Small Release ):强调在非常短的周期内以递增的方式发布新版本,从而可以很容易地估计每个迭代周期的进度,便于控制工作量和风险;同时,也可以及时处理用户的反馈。
    (3)过度极限问题:
    极限编程的实践是相互依赖的,需要很多人复盘当时的考虑(如果其中一个被修改,则会出现漏洞)
    表达为一组测试用例的需求必须由软件通过(系统通过了测试,但不是客户支付的费用)(用例不能完全代表需求,可能是面向解决方案的)
    重构的代价(很难在不降低其架构的情况下重新设计系统)

总结

第二章主要知识点是生命周期模型的优缺点以及核心思想,了解模型适用于什么样的软件开发。


推荐阅读
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 解决PR倒放后视频卡顿的方法及操作步骤
    本文介绍了解决PR倒放后视频卡顿问题的方法,通过标记入点和出点,并进行渲染,可以有效解决视频卡顿的情况。详细的操作步骤包括:继续播放视频,标记入点和出点,选择渲染效果,等待渲染完成,清除标记等。通过理论与实践的结合,可以更好地帮助大家解决PR倒放后视频卡顿的问题。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
author-avatar
月光女孩2602906135_166
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有