「软件项目管理」软件项目范围计划——需求管理与任务分解

序言

在需求管理中,我们总会遇到各种各样的问题。比如:需求的隐含错误;客户不断增加需求、变更需求;……。往往这些需求就是导致我们项目失败的根本原因。‘

那接下来,我们先用一张图来对项目失败的原因进行分析。具体如下图:

项目失败的原因分析

基于以上的原因分析,自然地,我们也就知道了软件需求在软件项目管理中不可撼动的地位。

那么在接下来的文章中,就来了解下软件需求各方面的内容。

叮,开始学习吧~👏

一、软件需求定义及层次

1、定义

指用户对 软件功能性能 的要求。(用户希望软件能做什么事情,完成什么样的功能,达到什么样的性能)

2、层次

软件需求的层次有以下三个方面的内容:

业务需求→用户需求→功能需求

二、软件需求管理过程

1、管理过程

软件需求管理过程包含两个方面的内容,分别是需求开发需求管理

需求开发的路径是:需求获取→需求分析→需求规格编写→需求验证;而需求管理指的是:需求变更

下面我们将对以上这几个概念进行一一解析。

2、需求获取

首先我们要先分析用户的要求,分析完成之后,那么我们就要去获取这个用户的要求,并让软件去实现它。随之,软件就得到了软件需求如下图所示:

需求获取

3、需求分析

需求分析是为最终用户所看到的系统建立一个概念模型,是对需求的抽象描述。 如下图所示:

需求分析

4、需求规格编写

需求分析工作完成的一个基本标志是形成了一份完整的规范的需求规格说明书

5、需求验证

在确定了需求之后,我们需要进行以下验证:

  • 需求是正确的吗?
  • 需求是一致的吗?
  • 需求是完全的吗?
  • 需求是实际可行的吗?
  • 需求是必要的吗?
  • 需求是可检验的吗?
  • 需求是可跟踪的吗?
  • 最后的签字

6、需求变更

在软件的某些周期,我们总会遇到需求变更的问题。那对于需求变更来说,主要需要了解以下内容。

(1)需求变更管理的主要工作

需求变更管理的主要工作有:

  • 建立需求基线
  • 确定需求变更控制过
  • 建立变更控制委员会 (SCCB)
  • 进行需求变更影响分析
  • 跟踪所有受需求变更影响的工作产品
  • 建立需求基准版本和需求控制版本文档
  • 维护需求变更的历史记录
  • 跟踪每项需求的状态
  • 衡量需求稳定性

(2)需求变更控制流程

需求变更的控制流程如下图所示:

需求变更控制流程

三、软件需求分析方法

1、原型分析方法

原型分析方法需要经过三个步骤,分别是需求分析→原型方法→原型评价如下图所示:

原型分析方法

2、结构化分析法(基于数据流建模)

(1)定义

  • 20世纪70年发展起来的面向数据流的方法
  • 是一种自顶向下逐步求精的分析方法
  • 根据软件内部数据传递变换的关系进行分析的

(2)结构化分析方法的技术

  • 数据流图 (DFD)
  • 数据字典 (DD)
  • E-R
  • 系统流程图

3、面向对象的用例分析法(基于UML建模)

(1)定义

  • 基于面向对象的情景分析方法
  • 用户角度出发考虑的功能需求
  • 用例是系统向用户提供一个有价值的结果的某项功能

(2)UML需求视图

  • 用例视图 - Use case Diagram
  • 顺序图 - Sequence Diagram
  • 状态图 - State Diagram
  • 活动图 - Activity Diagram

4、功能列表

(1)图例

功能列表法的图例如下所示:

功能列表法

(2)基于功能列表的实例

现在,我们来看一个基于功能列表的实例。如下图所示:

基于功能列表的实例

5、敏捷分析法

敏捷分析法包含以下三个部分,分别是:

  • 用户故事模板

    As a<type of user>,
    I want<some goal>,
    So that<some reason>.
    

    用户故事常常写在卡片上,然后将其部署到上,便于讨论

  • 评价用户故事

  • 用户故事迭代优先级

    第一组:
    ①must have;②should have;③could
    第二组:
    have/want to have
    

四、任务分解

1、任务分解定义

(1)定义

  • 任务分解指的是将一个项目分解为更多的工作细目或者子项目,使项目变得更小、更易管理、更易操作。

(2)WBS和工作包

  • WBS ,即 Work Breakdown Structure ,表示任务分解结构。WBS 是任务分解的结果。
  • 工作包,是 WBS 最低层次的可交付结果,是 WBS 的最小元素。

(3)WBS和工作包的区别

WBS 和工作包的区别如下:

  • WBS 是对项目由粗到细的分解过程;
  • WBS面向交互结果的
  • 同时,WBS 组织定义了整个项目范围;
  • 工作包WBS最低层次的可交付成果(如下图所示);
  • 工作包应当由唯一主体负责。

WBS和工作包的区别

2、任务分解形式

任务分解主要有两种形式分别为:

  • 图表形式(组织机构图式)
  • 提纲式

(1)图表形式的WBS(组织结构图式)

如下图所示:

图表形式的WBS

(2)提纲式

类似于下方这样:

1 变化计数器
      1.1 比较两个版本的程序
         1.1.1
         1.1.2
         1.1.3
        1.2 找出修改后的程序中增加和删除的代码行
           1.2.1
           1.2.2
        1.3 统计修改后的程序中增加和删除的代码行数
           1.3.1
           1.3.2

3、任务分解过程

(1)五大步骤

任务分解的过程要经过三个过程,输入→分解→ WBS 。有以下步骤:

  • 确认并分解项目的主要组成要素

  • 确认分解标准

  • 确认分解是否详细

  • 确认项目交付成果(可以编写 WBS 字典

  • 验证分解正确

(2)分解标准

任务分解的过程有两大标准,分别是:

  • 分解标准应统一;
  • 不能同时使用两种标准进行分解。

(3)分解标准举例阐述

第一种: 分解标准应统一

分解标准应统一

第二种: 不能同时使用两种标准进行分解

不能同时使用两种标准进行分解

(4)WBS字典

WBS 字典如下图所示:

WBS字典

4、任务分解方法

任务分解有4种方法,分别是:

  • 模板参照
  • 类比
  • 自顶向下
  • 自底向上

(1)模板参照

如下图所示:

模板参照

(2)类比

  • 有些项目在某种程度上具有相似性;
  • 可以采用类似的 WBS 作为参考。

(3)自顶向下

如下图所示:

自顶向下

(4)自底向上

如下图所示:

自底向上

5、任务分解结果

(1)检验分解结果标准

  • 最底层要素是否是实现目标的充分必要条件
  • 最底层要素是否有重复的
  • 每个要素是否清晰完整定义
  • 最底层要素是否有定义清晰的责任人
  • 是否可以进行成本估算和进度安排

(2)WBS任务分解建议

  • 最低层是可控的可管理的,但是不必要过细
  • 每个Work package 必须有一个提交物
  • 定义任务完成的标准
  • 有利于责任分配
  • 推荐任务分解到40小时以内

五、结束语

上述文章中,我们讲解了软件项目范围计划中的需求管理和任务分解,从多个方面去剖析软件需求分析。

到这里,本文的讲解就结束啦!希望对大家有帮助~

🛵专栏直通车

软件项目管理👉https://juejin.cn/column/7024826582841688077

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
禅道是第一款国产的开源项目管理软件。它集产品管理项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。注重实效的管理思想,合理的软件架构,简洁高效的操作,优雅的代码实现,灵活的扩展机制,强大而易用的api调用机制,多语言支持,多风格支持,搜索功能,统计功能——这一切,您通过禅道,都可以拥有!禅道在手,项目无忧! 禅道的功能列表: 1. 产品管理:包括产品、需求计划、发布、路线图等功能。 2. 项目管理:包括项目任务、团队、build、燃尽图等功能。 3. 质量管理:包括bug、测试用例、测试任务、测试结果等功能。 4. 文档管理:包括产品文档库、项目文档库、自定义文档库等功能。 5. 事务管理:包括todo管理,我的任务、我的Bug、我的需求、我的项目等个人事务管理功能。 6. 组织管理:包括部门、用户、分组、权限等功能。 7. 统计功能:丰富的统计表。 8. 搜索功能:强大的搜索,帮助您找到相应的数据。 9. 灵活的扩展机制,几乎可以对禅道的任何地方进行扩展。 10. 强大的api机制,方便与其他系统集成。 禅道项目管理软件7.2.stable版本于5月25**正式发布,该版本主要增强安全方面的限制,优化调整操作和界面的细节,增强自定义。 修改记录 完成的功能: 727 实现模块更换产品功能 1260 项目和产品增加拖动排序功能 1446 一件安装包控制面板在2012和8.1下面进行测试 1518 创建事务类型任务的时候加一个全选按钮 1520 提需求页面计划下拉表只显示未过期的计划 1530 禅道参照然之里面的做法,直接对视图做权限的控制。 1532 项目-需求页面左侧添加模块列表 1533 产品、项目的搜索框添加上下按键选择的功能 1535 调整测试任务创建页面的名称的文案:版本名称改为 任务名称 1536 权限反过来控制。只能限制他访问那些产品或者项目。 1537 加强对管理员弱口令的检查。 1538 写插件,上传插件的时候需要创建ok文件。 1539 搜索自定义标题做striptags, specialchars处理。 1540 用例的expect, result也做处理。 1541 测试结果也需要做处理。 1542 需求的spec也需要做处理。 1543 敏感操作增加管理员口令的检查 1544 所有项目页面增强按照产品检索功能 1545 一键安装包启动之前判断已经安装的服务和当前的路径是否正确。 1546 调整版本和发布的关联bug,关联需求的操作。 1547 调整计划的关联需求和关联bug页面 1557 批量操作页面涉及到数字的文本框取消自动填充功能 1564 批量操作页面的chosen控件选择了某一个比较长的值之后,鼠标悬浮,显示title提示。 1565 需求的详情页面根据关联的项目的信息增加分解任务的链接。 1566 列表页面点击箭头也可以排序。 1567 安装和升级页面推荐其他的产品。 1568 计划任务增加删除备份的任务项 1576 使用zui最新的统计报表程序替换fushincharts 1584 升级集成环境里面的ioncube loader 1610 为将来的**期添加待办的时候,时间从早晨开始计算 1612 让用户选择产品和项目的组合关系 1613 产品和项目在判断代号唯一的时候排除已经删除的 1617 组织动态搜索的时候**期字段增加**期选择框 修复的BUG: 710 禅道和svn集成功能,注释的字符没有进行安全过滤 709 后台备份显示文件大小错误 708 需求详情页面创建用例,模块信息没有带过去 707 bug批量操作只有4个批量操作都有权限时候才能看到按钮 706 提用例页面下拉框样式不统一 704 项目关联需求页面未关联需求ID没有显示3位 700 strtotime 在跨界的时候获得上个月时间的错误 699 计划关联需求时候的搜索,所属计划怎么把所有的都列出来了? 696 测试-bug 已延期标签搜索条件和列表页面延期提醒条件不一致
习 题 答 案 习题一答案 一、选择题 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档   D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具  B) 方法、工具和过程  C) 方法、对象和类  D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型 B) 瀑布模型 C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求  B) 软件设计  C) 风险分析  D) 软件实 现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch   B) UML   C) Coad   D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护 B) 低的开发成本 C) 高性能 D) 短的开发期 9. 软件工程学的目的和意义是( )。 A) 应用科学的方法和工程化的规范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的软件 二、 判断题 1. 软件就是程序,编写软件就是编写程序。(×) 2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模型进行开发。(×) 4. 结构化方法和JSP方法都不适合于大型软件的开发。(√) 5. 原型化开发方法包括生成原型和实现原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×) 10. RCP法与RSP法的主要区别是前者采用循环渐进的开发方式,原型将成为最终的产品,而后者将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性;  ● 软件产品的生产主要是研制;  ● 软件不存在磨损和老化问题,但存在退化问题;  ● 软件产品的生产主要是脑力劳动;  ● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式; ● 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。 2. 软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。    硬件特征:价格贵、存储容量小、运行可靠性差。    软件特征:只有程序、程序设计概念,不重视程序设计方法。   ② 程序系统阶段。    硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。    软件特征:程序员数量猛增,开发人员素质低。   ③ 软件工程阶段。    硬件特征:向超高速、大容量、微型化及网络化方向发展。    软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。 3. 什么是软件危机?其产生的原因是什么? 答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增 加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术 不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件生存周期模型?它有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性); ● 需求分析与规格说明(明确系统的规格和要求); ● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习题二答案 一、 选择题 1. 需求分析的主要目的是(B C)。 A) 系统开发的具体方案 B) 进一步确定用户的需求 C) 解决系统是“做什么的问题” D) 解决系统是“如何做的问题” 2. 需求分析的主要方法有(C D)。 A) 形式化分析方法 B) PAD图描述 C) 结构化分析(SA)方法 D) OOA法 3. 面向对象的分析方法主要是建立三类模型,即(D)。 A) 系统模型、ER模型、应用模型 B) 对象模型、动态模型、应用模型 C) E-R模型、对象模型、功能模型 D) 对象模型、动态模型、功能模型 4. SA法的主要描述手段有(B)。 A) 系统流程图和模块图 B) DFD图、数据词典、加工说明 C) 软件结构图、加工说明 D) 功能结构图、加工说明 5. 画分层DFD图的基本原则有(A C D)。 A) 数据守恒原则 B) 分解的可靠性原则 C) 子、父图平衡的原则 D) 数据流封闭的原则 6. 在E-R模型中,包含以下基本成分(C)。 A) 数据、对象、实体 B) 控制、联系、对象 C) 实体、联系、属性 D) 实体、属性、联系 7. 画DFD图的主要目的是(A D)。 A) 作为需求分析阶段用户与开发者之间交流信息的工具 B) 对系统的数据结构进行描述 C) 对目标系统的层次结构进行描述 D) 作为分析和设计的工具 8. 数据字典是数据流图中所有元素的定义的集合,一般由以下四类条目组成(C)。 A) 数据说明条目、控制流条目、加工条目、数据存储条目 B) 数据流条目、数据项条目、文件条目、加工条目 C) 数据源条目、数据流条目、数据处理条目、数据文件条目 D) 数据流条目、数据文件条目、数据池条目、加工条目 9. 在需求分析阶段主要采用图形工具来描述的原因是(B C)。 A) 图形的信息量大,便于描述规模大的软件系统 B) 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重 要的细节 C) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用 户之间达成一致的需求 D) 图形比文字描述简单、形象 二、 判断题 1. 在进行了可行性分析后,需求分析就只需要解决目标系统的设计方案。(×) 2. SA法是面向数据流,建立在数据封闭原则上的需求分析方法。(√) 3. HIPO法既是需求分析方法,又是软件设计方法。(√) 4. 在面向对象的需求分析方法中,建立动态模型是最主要的任务。(×) 5. 加工小说明是对系统流程图中的加工进行说明。(×) 6. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。(×) 7. 需求分析的主要方法有SD法、OOA法及HIPO法等。(×) 8. 分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。(×) 9. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R 图。(√)  10. 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。(√) 三、 问答题 1. 什么是需求分析?需求分析阶段的基本任务是什么? 答: 需求分析是当前软件工程中的关键问题,需求分析阶段的任务是:在可行性分析的基础上,进一步了解、确定用户需求。准确地回答 “系统必须做什么?” 的问题。获得需求规格说 明书。还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽取需求 分析现行系统存在需要解决的问题。获取足够多的问题领域的知识,需求抽取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 。 (2) 模拟和分析需求 需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型的要求包括实现的独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。 (3) 传递需求 传递需求的主要任务是书写软件需求规格说明。 (4) 认可需求 就是对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。 (5) 进化需求 客户的需要总是不断(连续)地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问题。对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当前的发展是软件家族法 ,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性, 并进行关于变化的推理。 2. M公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度 超过一页(B5)。 参考答案提示: 应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。 3. 如何画分层数据流图? 答: 总的原则是:至顶而下,逐层分解(画分层数据流图)。 比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。 顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 底层:由不再进行分解的基本加工组成。 4. 加工小说明有哪些描述方法? 答: ● 结构化语言:介于自然语言和形式语言(如谓词逻辑)之间。 ● 结构化英语:通常由外层和内层结构组成。 ● 汉语的情况:精确、简明扼要、文体可以灵活。 ● 判定表:适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。 ● 判定树:本质上与判定表相同,图形表示更易于理解。 5. 考察下图中子图、父图的平衡。 图1 图2 参考答案: 图1中子图与父图不平衡。子图是父图中加工2的分解,加工2 有输入数据流M和N,输出数据流T,而子图则只有一个输入数据N,却有两个输出数据流T与S。 图2中子图是父图中加工3的分解,虽然表面上加工3只有一个输入数据流“订货单”,而子图却有三个输入数据流,但是如果“订货单”是由“客户”、“账号”和“数量”三部分组成,即有如下数据条目,订货单=客户+账号+数量(2.2.5数据词典),则子、父图平衡。 6. 画出银行取款过程的DFD图。问题描述为:储户用存折取款,首先填写取款单,根据“ 账卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款 数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。 参考答案: 7. 常用的软件需求分析方法有哪些? 答: 结构化分析方法(SA)、功能分解法、信息建模法、面向对象的分析方法(OOA)。 习题三答案 一、 选择题 1. 模块的基本特征是(A C)。 A) 外部特征(输入/输出、功能) B) 内部特征(输入/输出、功能) C) 内部特征(局部数据、代码) D) 外部特征(局部数据、代码 ) 2. SD方法的设计总则是(C D)。 A) 程序简洁、操作方便 B) 结构清晰、合理 C) 模块内聚性强 D) 模块之间耦合度低 3. 软件设计的主要任务是(A B D)。 A) 将分析阶段获得的需求说明转换为计算机中可实现的系统 B) 完成系统的数据结构和程序结构设计 C) 完成模块的编码和测试 D) 对模块内部的过程进行设计 4. 设计阶段应达到的目标有(A D)。 A) 提高可靠性和可维护性 B) 提高应用范围 C) 结构清晰 D) 提高可理解性和效率 5. 从工程管理的角度来看,软件设计分两步完成(D)。 A) ①系统分析②模块设计 B) ①详细设计②总体设 计 C) ①模块设计②详细设计 D) ①总体设计②详细设 计 6. 模块独立性准则由以下定性指标来衡量(BD)。 A) 分解度    B) 耦合度    C) 屏蔽性    D) 内聚性 7. 用户界面设计的任务包括(A B C)。 A) 确定用户界面类型 B) 建立任务模型 C) 建立用户模型 D) 建立功能模型 8. 程序设计语言可以分为(B C D)。 A) 面向过程的语言    B) 机器语言 C) 高级语言    D) 汇编语言  9. 程序效率包括(A C D)几个方面的内容。 A) 代码效率     B) 运行效率    C) 存储效率     D) I/O效率 10. SP方法中的基本控制结构有(A B C)。 A) 顺序结构 B) 选择结构 C) 重复结构 D) GOTO结构 11. 内部文档可用注释语言书写,注释语言分为(A B C D)。 A) 序言性注释 B) 描述性注释 C) 功能性注释 D) 状态性注释 12. 为使程序中数据说明更易于理解和维护,必须遵循以下原则(A B C) 。 A) 数据说明的次序应当规范化 B) 一个语句说明多个变量时,各变量名按字母顺序排列 C) 对于复杂的数据结构,要加注释,说明在程序实现时的特点 D) 定义变量名应按字母顺序排列 13. 源程序的效率与(D)阶段确定的算法的效率直接有关。 A) 概要设计 B) 总体设计 C) 单元设计 D) 详细设计 14. 在详细设计翻译转换成源程序代码后,算法效率反映为对程序的哪几个方面的要求 (C D)。 A) 读写速度 B) 代码长度 C) 存储容量 D) 执行速度 15. 提高程序效率的根本途径在于(B C)。 A) 编程时对程序语句进行调整 B) 选择良好的设计方法 C) 使程序最大限度的简洁 D) 选择良好的数据结构与算法 二、判断题 1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。 (×) 2. 在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。(×) 3. 信息隐蔽原则有利于提高模块的内聚性。(√) 4. 中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使 用事务分析技术得到初始的模块结构图。(×) 5. SD法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。 (×) 6. 所谓结构冲突,是指输入数据与输出数据之间很少或没有结构上的对应关系。通常解决 的办法是:构造一个或者多个中间结构,在输入和输出结构之间进行转换。(√) 7. 当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。(×) 8. JACKSON方法是以数据流、数据封闭性准则逐层分解的。(×) 9. 程序设计语言的工程特性包括:可移植性、可重用性、可维护性、局部性和顺序性。(×) 10. 项目应用领域是选择语言的关键因素。(√) 11. FORTRAN、Pascal、C语言、PL/1和汇编语言都是科学工程计算可选用的语言。(×) 12. 要用快速原型法开发软件,应选用4GL语言。(√) 13. 提高程序效率的根本途径是选择良好的设计方法、数据结构与算法。(×) 14. 良好的程序设计风格简单说就是高的编程技巧。(√) 三、简答题 1. 模块内联系和模块间联系有哪些种类? 答:块间联系的各种类型的划分,从以下3方面考虑: ● 按块间联系的方式(可分为直接引用与过程调用); ● 按块间共用信息的作用(可分为数据型、控制型与混合型); ● 按块间共用的信息数量多少(信息多联系紧密)。 (1) 块间联系的类型,按照耦合度由大到小分为: 内容型:直接引用另一模块的内部信息; 公共型:两个模块引用共同的全程数据区; 控制型:模块间传送的信息用于控制模块的内部逻辑; 复合型:模块间传送复合的数据结构; 数据型:模块间传送单个数据项。 (2) 块内联系的类型,按照内聚性从小到大分为: 偶然型:模块内部没有必然联系; 逻辑型:逻辑上相似的功能放进一个模块; 瞬时型:将同时执行的语句放在一个模块; 通信型:模块中的各部分引用共同的数据; 顺序型:模块中一部分的输出是另一部分的收入; 功能型: 模块中刚好包含了完成一个基本任务所必需的成分。 2. 分析以下DFD图,说明属于哪种类型的DFD图,并按照相应的变换将其转换为初始的模块 结构图。 参考答案:(略) 3. 下图是修改文件记录的DFD图,请确定其主加工。 解:主加工为:账号、修改、写记录。 4. 按照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进 行改进? 解: (1) 尽可能建立功能模块; (2) 消除重复功能; (3) 模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间 联系; (4) 模块的大小适当; (5) 模块的扇入扇出数不宜太多。 5. 根据模块的作用范围与控制范围的原则,判定a、b两图的正确性。 解:显然,图a不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。 图b的模块设计合理。 6. 图a中,模块G为判定,判断涉及到模块B、F、G,请指出设计中的错误,再根据改进模 块图的基本原则,画出1~2个改进方案(不改变模块G的判断关系),并说明是按照哪条基本 原则进行改进的。 解:图b为一个改进方案,将模块G的位置提高,使其作用范围为控制范围的子集,减少模块 之间的联系。 7. 编码阶段的主要任务是什,应交付的结果是什么? 答:编码阶段的主要任务是为每个模块编写程序。即是:将详细设计的结果转换为用某种计 算机语言写的程序——源程序代码。编码阶段应交付的结果是带有“程序内部文档”的、不 再含有语法错误的程序。 8. SP法的自顶向下,逐步求精方法的优点有哪些? 答:此法符合人们解决复杂问题的普遍规律,可提高软件开发的成功率和生产率;而且用先 全局后局部、先整体后细节、先抽象后具体的逐步求精过程,开发出来的程序具有清晰的层 次结构,因此程序容易阅读和理解。这样,程序自顶向下,逐步细化,分解成一个树型结构 。 因此,在同一层次的节点上做细化工作,相互之间没有联系,它们之间的细化工作相互独立 ;在任何一步发生错误,一般只影响它下层的节点,同一层其他节点不受影响;在以后的测试中,也可以先独立地一个节点一个节点地做,最后再集成。这样,程序清晰和模块化,使 得在修改和重新设计一个软件时,可复用的代码量最大。 9. 为了使程序具有良好的设计风格,应注意哪些方面的问题? 答:(1) 标识符应按意取名。 标识符即符号名,包括:模块名、常量名、标号名、子程序名、数据区名、缓冲区名等。 这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对 程序功能的理解。 (2) 程序应加注释,它分为两类:序言性注释和功能性注释。 序言性注释应置于每个模块的起始部分,主要内容有:①说明每个模块的用途,功能;②说明模块的接口即调用格式、参数描述及从属模块的清单;③数据描述;④开发历史 。 功能性注释是嵌在源程序体中的,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“做什么”,或是执行下面的语句会发生什么情况;而不是解释下面“怎么做”,因为怎么做常常是与程序重复的,且对读者理解程序没有什么帮助。 10. 样评价程序的执行效率?它与程序清晰性的关系是怎样的? 答:许多程序员往往片面追求效率,其实程序系统的成本不仅包括运行所需的机时,同时还应把程序员及操作员所花费的人力考虑进去。在编程时为追求效率而损害可读性或可靠性,会给以后的维护工作带来困难,所以从整体上看来是不值得的。 此外,还应该认识到,提高程序效率的根本途径在于:选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句进行调整。 (1) 追求建立在不损害程序可读性或可靠性基础上,要先使程序正确、清晰,再提高程序 效率。 (2) 不能因为贪图效率上的小利,而破坏程序的清晰性。 (3) 让编译程序去作简单的优化。 (4) 提高程序效率的根本途径在于:选择良好的设计方法和良好的数据结构与算法,而不是靠编程时对程序语句做调整。 11. 假定:需要编一个求解一元二次方程根的子程序,加入到现有的子程序库中,供其他程序员使用。要求: (1) 为该子程序写一个序言性注释; (2) 用PASCAL语言或其他语言写出这个子程序(要把根的性质,如:实根、复根、降为一次方程等有区别地通知调用者),并加上描述性注释。 答案:(略) 习题四答案 一、选择题 1. 面向对象程序设计的基本机制(ABC)。 A) 继承 B) 消息 C) 方法 D) 结构 2. 下列属于面向对象的要素有(BCD)。 A) 分类性 B) 抽象 C) 共享 D) 封装 3. 下列选项中属于面向对象开发方法的有(ACD)。 A) Booch B) CAD C) Coad D) OMT 4. 下列属于Coad方法中面向对象的分析模型的层次有(AB)。 A) 主题层 B) 对象层 C) 应用层 D) 接口层 5. 一个类属性依其特征划分,其类型有(ABCD)。 A) 描述型 B) 定义型 C) 派生型 D) 参考型 6. 在进行面向对象分析时,所采用的模型有(ABD)。 A) 对象模型 B) 动态模型 C) 静态模型 D) 功能模型 7. 状态是对象属性的值的一种抽象,它的性质有(AB)。 A) 时间性 B) 持续性 C) 有序性 D) 有穷性 8. 数据流图中的处理必须用对象中的操作来实现常见的操作有(ABCD)。 A) 查询 B) 动作 C) 活动 D) 访问 9. 建立继承关系时所采用的方式有(AC)。 A) 自顶向下 B) 从内到外 C) 自底向上 D) 从复杂到简单 10. 对象是人们要研究的任何事物主要的对象类型有(ABCD)。 A) 有形实体 B) 作用 C) 事件 D) 性能说明 二、判断题 1. 面向对象的的方法是以类作为最基本的元素,它是分析问题解决问题的核心。(×) 2. 类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(√) 3. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。 4. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件, 多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(×) 5. 面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。(√) 6. 面向对象的设计的主要目标是提高生产效率,提高质量和提高可维护性。(√) 7. 对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。(√) 8. 面向对象的分析是用面向对象的方法对目标系统的问题空间进行理解、分析和反映。通过对象层次结构的组织确定解空间中应存在的对象和对象层次结构。(√) 9. 类的设计过程包括:确定类,确定关联类,确定属性,识别继承关系。(√) 10. 复用也叫重用或再用,面向对象技术中的“类”,是比较理想的可重用软构件。有三种重用方式:实例重用、继承重用、多态重用。(√) 11. 主题是一种关于模型的抽象机制,它是面向对象模型的概貌,也是关于某个模型要同时考虑和理解的内容,主题起一种控制作用。(√) 12. 面向对象的分析由对象、结构、继承性和基于消息的通信构成。(×) 13. 支持继承性是面向对象程序设计语言和传统程序设计语言在语言机制方面的根本区别。(√) 14. 面向对象的分析过程主要包括三项内容:理解、表达和验证。(√) 15. 面向对象的设计的主要目标是提高生产效率、提高质量和提高可维护性。(√) 三、 简答题 1. 与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别? 答: (1) 消息传递必须给出信道的信息,通常要指出明显的接受方。 (2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一 接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。 (3) 消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。 2. 阐述面向对象的特征,并做简要的解释。 答: (1) 对象惟一性。 每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。 (2) 分类性。 是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 (3) 继承性。 是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。 (4) 多态性。 是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。 3. Coad方法主要由面向对象分析OOA和面向对象设计OOD。OOA方法分析过程和构造OOA概念模型的顺序由5个层次组成,请简述这5个层次。 答: (1) 发现类及对象。描述如何发现类及对象。从应用领域开始识别类及对象,形成整 个应用的基础,然后,据此分析系统的责任。 (2) 识别结构。该阶段分为两个步骤。第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。 (3) 定义主题。主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。 (4) 定义属性。其中包括定义类的实例(对象)之间的实例连接。 (5) 定义服务。其中包括定义对象之间的消息连接。 4. 面向对象程序设计有哪些优点? 解:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性 ,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、 更新和升级。继承和封装使得应用程序的修改带来的影响更加局部 化。 5.比较面向对象方法与结构化方法的特点。 解:分析是问题抽象 (做什么),设计是问题求解 (怎么做),实现是问题的解 (结果)。任 何方法学对客观世界的抽象和求解过程都是如此。在问题抽象阶段,结构化方法面向过程, 按照数据变换的过程寻找问题的结点,对问题进行分解。因此,与面向对象方法强调的对象 模型不同,描述数据变换的功能模型是结构化方法的重点。如果问题世界的功能比数据更复 杂或者更重要,那么结构化方法仍然应是首选的方法学。如果数据结构复杂且变换不多, 那么如果以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。 由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。而面向 对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。 在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果数据结构复杂,则模块独立性很难保证。面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。 在软件工程基本原则中有一条“形式化原则”,即对问题世界的抽象结论应该以形式化语言 (图形语言、伪码语言等)表述出来。结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。 6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构、静态逻辑、动态逻辑、静态物理和动态物理。试描述一下这四种特性。 解:静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模 型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如 基数(一对一、一对多、多对多),也在对象模型中表示。 动态逻辑模型描述对象之间的互相作用。互相作用通过一组协同的对象,对象之间消 息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。 静态物理模型通过模块描述代码的布局。动态物理模型描述软件的进程和线程体系结 构。 习题五答案 一、选择题 1. 下列不是模型元素的是(D)。 A) 关联 B) 聚合 C) 依赖 D) 笔记 2. UML具有扩展性,常见的扩展机制有(BCD)。 A) 修饰 B) 版类 C) 加标签值 D) 约束 3. UML语言支持的建模方式有(ABD)。 A) 静态建模 B) 动态建模 C) 模块化建模 D) 功能建模 4. 下列各种图可用于动态建模的有(ACD)。 A) 状态图 B) 类图 C) 序列图 D) 活动图 5. 下列属于状态的组成部分的有(AB)。 A) 名称 B) 活动 C) 条件 D) 事件 6. UML中包括的事件有(ABCD)。 A) 条件为真 B) 收到另一对象的信号 C) 收到操作调用 D) 时间表达式 7. 属性的可见性有(ABD)。 A) 公有的 B) 私有的 C) 私有保护的 D) 保护的 8. 用例之间的关系有(BCD)。 A) 友元 B) 扩展 C) 使用 D) 组合 9. 应用于通用化约束的方式有(ABCD)。 A) 完整 B) 不相交 C) 不完整 D) 覆盖 10. 消息的类型有(ABC)。 A) 同步 B) 异步 C) 简单 D) 复杂 二、 判断题 1. UML建模语言是由视图、图、模型元素和通用机制构成的层次关系来描述的。 (√) 2. UML是一种建模语言,是一种标准的表示,是一种方法。 (×) 3. 泳道是一种分组机制,它描述了状态图中对象所执行的活动。 (×) 4. 同步消息和异步消息的主要区别是:同步消息的发送对象在消息发送后,不必等待消息处理,可立即继续执行,而异步消息则发送对象必须等待接收对象完成消息处理后,才能继续执行。 (×) 5. 类图中的角色是用于描述该类在关联中所扮演的角色和职责的。 (√) 6. 类图用来表示系统中类和类与类之间的关系,它是对系统动态结构的描述。 (×) 7. 用例模型的基本组成部件是用例、角色和用例之间的联系。 (√)
起源 项目管理是第二次世界大战后期发展起来的重大新管理技术之一,最早起源于美国。有代表性的项目管理技术比如关键路径法(CPM)和计划评审技术(PERT),甘特图(Gantt chart)的提出,它们是两种分别独立发展起来的技术。 甘特图(Gantt chart)又叫横道图、条状图(Bar chart)。它是在第一次世界大战时期发明的,以亨利·L·甘特先生的名字命名,他制定了一个完整地用条形图表进度的标志系统。 其中CPM是美国杜邦公司和兰德公司于1957年联合研究提出,它假设每项活动的作业时间是确定值,重点在于费用和成本的控制。 PERT出现是在1958年,由美国海军特种计划局和洛克希德航空公司在规划和研究在核潜艇上发射“北极星”导弹的计划中首先提出。与CPM不同的是,PERT中作业时间是不确定的,是用概率的方法进行估计的估算值,另外它也并不十分关心项目费用和成本,重点在于时间控制,被主要应用于含有大量不确定因素的大规模开发研究项目。 随后两者有发展一致的趋势,常常被结合使用,以求得时间和费用的最佳控制。 20世纪60年代,项目管理的应用范围也还只是局限于建筑、国防和航天等少数领域,但因为项目管理在美国的阿波罗登月项目中取得巨大成功,由此风靡全球。国际上许多人开始对项目管理产生了浓厚的兴趣,并逐渐形成了两大项目管理的研究体系,其一是以欧洲为首的体系——国际项目管理协会(IPMA);另外是以美国为首的体系——美国项目管理协会(PMI)。在过去的30多年中,他们的工作卓有成效,为推动国际项目管理现代化发挥了积极的作用。 项目管理发展史研究专家以20世纪80年代为界把项目管理划分为两个阶段。 项目管理(Project Managementpm)是美国最早的曼哈顿计划开始的名称。后由华罗庚教授50年代引进中国(由于历史原因叫统筹法和优选法)。台湾省叫项目专案。 发展 在冷战的史普托尼克危机(苏联发射第一颗人造卫星)之前,项目管理还没有用做一个独立的概念。在危机之后,美国国防部需要加速军事项目的进展以及发明完成这个目标的新的工具(模型)。 在1958年,美国发明了计划评估和审查技术(PERT),作为的北极星导弹潜艇项目。与此同时, 杜邦公司发明了一个类似的模型成为关键路径方法(CPM)。 PERT 后来被工作分解结构(WBS)所扩展。军事任务的这种过程流和结构很快传播到许多私人企业中 [1] 。 随着时间的推移,更多的指导方法被发明出来,这些方法可以用于形式上精确地说明项目是如何被管理的。这些方法包括项目管理知识体系(PMBOK),个体软件过程(PSP),团队软件过程(TSP),IBM全球项目管理方法(WWPMM),PRINCE2. 这些技术试图把开发小组的活动标准化,使其更容易地预测,管理和跟踪。 项目管理的批判性研究发现:许多基于PERT的模型不适合今天的多项目的公司环境. 这些模型大多数适合于大规模,一次性,非常规的项目中. 而当代管理中所有的活动都用项目术语表达。所以,为那些持续几个星期的“项目”(更不如说是任务)使用复杂的模型在许多情形下会导致不必要的代价和低可操作性。因此,项目识别不同的轻量级的模型,比如软件开发的极限编程和Scrum技术。为其他类型项目而进行的极限编程方法的一般化被称为极限项目管理。 分类 编辑 项目管理本身属于项目管理工程的大类,项目管理工程包括:开发管理(DM)、项目管理(PM)、设施管理(FM)以及建筑信息模型(BIM)。 而项目管理则又分为三大类:信息项目管理、工程项目管理、投资项目管理。 信息项目管理 是指在IT行业的项目管理。 工程项目管理 主要是指项目管理在工程类项目中的应用,投资项目以及施工项目管理。其中,施工版块主要是做到成本和进度的把控。这一板块主要使用工程项目管理软件来把控。 投资项目管理 主要是用于金融投资版块的把控,偏向于风险把控。 特性 编辑 普遍性 项目作为一种一次性和独特性的社会活动而普遍存在于我们人类社会的各项活动之中,甚至可以说是人类现有的各种物质文化成果最初都是通过项目的方式实现的,因为现有各种运营所依靠的设施与条件最初都是靠项目活动建设或开发的。 目的性 项目管理的目的性要通过开展项目管理活动去保证满足或超越项目有关各方面明确提出的项目目标或指标和满足项目有关各方未明确规定的潜在需求和追求。 独特性 项目管理的独特性是项目管理不同于一般的企业生产运营管理,也不同于常规的政府和独特的管理内容,是一种完全不同的管理活动。 集成性 项目管理的集成性是项目管理中必须根据具体项目各要素或各专业之间的配置关系做好集成性的管理,而不能孤立地开展项目各个专业或专业的独立管理。 创新性 项目管理的创新性包括两层含义:其一是指项目管理是对于创新(项目所包含的创新之处)的管理,其二是指任何一个项目管理都没有一成不变的模式和方法,都需要通过管理创新去实现对于具体项目的有效管理。 临时性 项目是一种临时性的任务,它要在有限 的期限内完成,当项目的基本目标达到时就意味着项目已经寿终正寝,尽管项目所建成的目标也许刚刚开始发挥作用 [2] 。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值