🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. 章节概述和章节框架
3. 获取并分析需求
3.1 需求
3.1.1 需求是什么
3.1.2 需求的类型
3.1.3 需求的特征
3.1.4 需求的表示
3.2 需求的引出
3.2.1 风险承担者
3.2.2 需求引出的具体手段
3.3 需求分析
3.3.1 需求前期处理
3.3.2 需求下的约束
3.3.3 需求分析的全过程
3.3.4 补充知识
3.6 需求文档化
3.6.1 为什么要文档化
3.6.2 文档化的结果是什么(需求规格说明(SRS))
3.7 需求的确认
3.7.1 需求确认
3.7.2 需求复审
3.8 需求的测量
3.8.1 测量集中的领域
3.8.2 测量措施
4. 总结
1. 前言
在进入本篇文章前,大家可以先去看看另三篇文章:
【软件工程】第一章·软件工程概述-CSDN博客
【软件工程】第二章·软件过程(过程与生命周期建模)-CSDN博客
【软件工程】第三章·计划和管理项目(详解活动图计算关键路径、最早开始时间、最晚开始时间、冗余时间)-CSDN博客
首先想带大家先来简单复习一下前面的内容:
第一章·软件工程概述:
1、软件工程是什么——定义、方法、作用。
2、软件工程的前世今生——出现的问题(error、fault、failure)、应对方法(问题分析方法+系统化方法+工程化方法)。
3、软件工程的未来——Wasserman 规范(抽象、分析设计方法和符号描述系统、软件过程、软件体系结构、重用和复用、用户界面原始模型、测试代码、工具和集成环境)
第二章·软件过程与生命周期:
1、过程与生命周期是什么
- 过程是一系列有序的任务,涉及活动、资源和约束(过程不是步骤而是步骤的集合)。
- 生命周期是软件从概念、实现、交付到使用、维护的整个过程。软件开发全过程称为软件生命周期。
2、过程模型
- 种类:瀑布模型、原型化瀑布模型、V模型、原型化模型、阶段化开发模型、螺旋模型、敏捷方法模型
- 联系:
- 瀑布模型是基础。
- 原型化瀑布模型结合原型化模型与瀑布模型(设计阶段产生原型化模型,在测试阶段考虑是否返回)。
- V模型(将设计与测试之间都建立起通道)。
- 原型化模型(不是具体模型,是一种思想,每一个步骤都可以产生原型去分析)。
- 阶段化开发模型(开发版本和使用版本分离,分离导致需要选择迭代开发/增量开发/迭代进化开发/统一过程开发)。
- 螺旋模型(是迭代思想和原型化思想的结合)。
- 敏捷方法模型(撇弃原型化和迭代化带来的冗余,将目标转化为:快【尽早交付】、准【持续有价值的软件交付活动】、狠【直到客服满意】)(四大原则:个体和交互胜过过程和工具、可运行软件胜过面面俱到的文档、客户合作胜过合作谈判、响应变化胜过遵循计划)
- 核心思想:迭代思想、增量思想、原型化思想
第三章·计划和管理项目:
1、计划项目
- 时间计划:项目进度、项目活动、里程碑、活动图、最早开始时间、最迟开始时间、冗余时间、关键路径。
- 工作量计划:估(专家估算:Delphi技术、乐观悲观法、Wol技术)、算(算式公式:(a+bSc)m(X)、COCOMO模型:aKLOC^b)
2、管理项目
- 人员管理:人员技术、工作方式、项目组织安排(结构性与创造性、一个领导模式、忘我方法模式)
- 风险管理:什么是风险、风险管理活动(风险评价:风险识别、风险优先级、风险分析)(风险控制:风险降低、风险化解、风险管理计划)、风险降低(风险避免、假设风险、转移风险)、风险化解(6种风险的6种应对方式:产品过大、功能复杂、系统不支持、测试时间、产品控制、协同工作)
2. 章节概述和章节框架
明确一个点:Wasserman 规范(抽象、分析设计方法和符号描述系统、软件过程、软件体系结构、重用和复用、用户界面原型、测试、工具和集成环境)贯穿软件开发全过程。
章节联系:Wasserman 规范中第一个是抽象,抽象包括:问题分析、项目计划管理之外,还应该有需求分析部分。换句话说,我认为在开始真正的软件设计分析开始之前,都需要抽象方法。
思考:只有抽象去思考,才能抓住问题的重点;只有抽象去思考,才能分析整个项目的重点从而弄清楚项目所要求的需求。
需求对于系统开发来讲是第一步,也是“决定生死”的一步,所以只有确定正确的需求才能保证后期的工作方向是正确的,否则只会做无用功,劳民伤财。确定需求需要进行诸多方面的操作,本章针对需求的确定、需求建模、复审需求、文档化需求等方面对需求进行研究。
3. 获取并分析需求
软件开发的前期需要进行的就是软件分析,软件分析的最后一步也就是最重要的一步就是需求分析。只有做好需求分析,才有可能做好后面的软件开发任务。
3.1 需求
3.1.1 需求是什么
定义:用户关于软件系统的期望行为的综合描述,涉及系统的对象、状态、约束、功能等。
3.1.2 需求的类型
需求:
①功能需求:描述系统内部功能或系统与外部功能的交互作用,涉及系统输入应对、实体状态变化、输出结果、设计约束、过程约束等。
②非功能需求:描述软件方案必须具备的某些质量特征,例如系统性能、安全性、响应时间等。
3.1.3 需求的特征
需求的特征:
正确性;一致性;无二义性;完备性;可行性;相关性;可测试性;可跟踪性。
补充:
正确:我们和客户都应该评审需求文档,确保它们符合我们对需求的理解
一致:一般来讲,如果不可能同时满足两个需求,那么这两个需求就是不一致的。
无二义:如果需求的多个读者能够一致、有效地解释需求,那么需求就是无二义性的。
完备:如果需求指定了所有约束下的、所有状态下的、所有可能的输入的输出以及必需的行为,那么这组需求就是完备的。
可行:当用户要求两个或更多的质量需求时,常常会出现可行性问题
相关:有时,某个需求会不必要地限制开发人员,或者会包含与客户需要没有直接关系的功能。
可测试:如果需求能够提示验收测试(明确证明最终系统是否满足需求),需求就是可测试的。
3.1.4 需求的表示
需求的表示就是对需求进行建模。
建模可以使用UML统一建模语言,例如用例图、类图等来表示,具体见如下文章:
【软件工程】一篇入门UML建模图(用例图、对象图、顺序图与协作图)-CSDN博客
【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)-CSDN博客
3.2 需求的引出
需求的引出是极为重要的一部分,我们必须使用各种技术来确定客户和用户到底想要什么。
3.2.1 风险承担者
风险承担者包括:委托人,客户,用户,领域专家,市场研究人员,炉石或审计人员,软件工程师或其他技术专家。
核心思想:
1、风险承担者是指项目出现问题,会有真实利益受损的群体。
2、只有与风险承担者会谈才有参考价值。非风险承担者的建议不一定可信。
3.2.2 需求引出的具体手段
①与风险承担者进行会谈
②评审相关文档
③观察当前系统
④做用户的学徒,当用户进行任务时更详细的进行学习
⑤以小组形式与用户和风险承担者交谈
⑥使用特定领域的策略
⑦就如何改进产品,与当前的和潜在用户进行集体讨论
具体手段大致可以分为:
1、会谈(和风险承担者会谈):个人/小组
2、关注特殊领域/特殊人群(潜在用户)
3、观察学习:观察系统、学习用户使用情况
4、文件审查:查看相关文档
3.3 需求分析
在引出需求后,面对众多的需求我们需要做的第一件事就是需求的前期处理,不然庞大的需求会让我们眼花缭乱。
3.3.1 需求前期处理
前期处理就是要让庞大的需求更加有逻辑,有针对性。
1、优先级划分;
2、需求的规范化(正式名字、唯一定义、量化描述)。
(1)需求的优先级划分
当进行需求的引出时,可能会碰到大家对“需求是什么”存在分歧,此时采用对需求进行
优先级划分的方法是有效的。
①必须要被满足的需求
②非常值得做但是不是必须的需求
③可选的需求(可做可不做)
(2)需求的规范化:
①针对需求确定一种量化的描述方法,避免模糊的表达方式
②将各种指代用词替代为实体的正式名字
③每个名词或事项应在需求文档中给出唯一定义
3.3.2 需求下的约束
①设计约束:已经做出的设计决策或限制问题解决方案集的设计决策。涵盖物理环境、接口、用户等方面。
②过程约束:对用于构建系统的技术和资源的限制,涵盖资源、文档等方面。
3.3.3 需求分析的全过程
这里我们在意的是需求分析这一个活动的完整过程:
①原始需求获取:客户给出的需求
②问题分析:理解需求并通过建模或模型化方式进行描述
③规格说明草稿:利用符号描述系统将定义规范化表示
④需求核准:开发人员与客户进行核准
⑤软件规格说明(SRS)
信息获取——客户需求、自我建模分析
需求分析结果——规格说明书
3.3.4 补充知识
问题:需求分析时,若小团队且需求不确定,可采用敏捷开发方法;若大团队进行需求确定的开发时可采用“重量级”过程。
①敏捷开发方法的需求建模
适用范围:小团队,不确定的需求
方法:增量式开发(或迭代式开发)
②“重量级”过程
适用范围:大团队,确定的需求
特点:开发人员将编码推迟到已经对需求进行了建模和分析,详细的设计已完成,其中每一步都需要模型,模型间是相关的、相互配合的,以便于设计完全实现需求。
核心要点:
1、不同软件过程可以结合起来使用。
2、软件过程可以结合迭代式思想、增量式思想、原型化思想使用。
3、迭代式和增量式这种分阶段开发思想相当适用于敏捷开发 。
3.6 需求文档化
3.6.1 为什么要文档化
配置管理的一种方式,使得需求分析的每个阶段都有文档进行参考。
配置管理:是对软件开发过程以及软件生命周期过程的控制,具体来说就是让软件过程各阶段文档保持一致的系列过程。
软件配置管理:
定义:一种标识、组织和控制修改的技术,目的是最有效的提高生产率,能够协调软件开发,使混乱减少到最小。(协调开发,使混乱最小化)
任务:制定软件配置管理计划;确定配置表示规则;实施变更控制;报告配置状态;进行配置审核;进行版本管理和发行管理。
与软件开发过程的关系:变更的评估和批准都需要由软件配置管理人员去做,开发过程应纳入配置管理过程的控制之下。
忽视软件配置管理可能导致的混乱现象:发错了版本,安装后不工作,异地不能正常工作,已经解决的缺陷过后又出现错误,开发人员把产品拿出去出售赢利,找不到最新修改了的源程序,找不到编程序的人
3.6.2 文档化的结果是什么(需求规格说明(SRS))
将需求重述为关于要构建的系统将如何运转的规格说明。
需求定义在说需求是什么,需求规格说明在说系统在这个需求定义下能做什么。
软件工程师的目标:让系统能做什么的范围尽量包括需求是什么的范围。
需求定义和需求规格说明的关系如下图所示:
3.7 需求的确认
3.7.1 需求确认
检查需求规格文档与需求定义的对应性。
3.7.2 需求复审
再一次审查已经通过的需求规格文档。
3.8 需求的测量
3.8.1 测量集中的领域
产品,过程,资源
3.8.2 测量措施
①产品方面:需求的数目;评估需求文档
②过程方面:需求变化的数目;引起需求变化的原因
4. 练习题
4. 总结
本文到这里就结束啦~~
目前【软件工程】系列已经完成:
【软件工程】第一章·软件工程概述-CSDN博客
【软件工程】第二章·软件过程(过程与生命周期建模)-CSDN博客
【软件工程】第三章·计划和管理项目(详解活动图计算关键路径、最早开始时间、最晚开始时间、冗余时间)-CSDN博客
持续更新中🎢🎢🎢
如果觉得对你有帮助,友友们可以点个赞,收个藏呀~