• 1. 邸书灵 信息科学与技术学院 2013-3-8软件工程概论 Introduction to Software Engineering
  • 2. 知识回顾软件过程 2.1 软件过程的概念 2.2 软件过程模型 2.3 案例:微软公司的软件开发过程软件过程的定义 软件过程的基本活动6 软件过程的制品瀑布模型、快速原型模型增量模型、螺旋模型、 形式化方法模型、 基于组件的开发模型递进式的的软件开发策略。 5阶段:规划阶段、设计阶段 开发阶段、稳定阶段、发布阶段软件过程是软件工程人员为了获得软件产品而在软件工具的支持下实施的一系列软件工程活动。问题提出、软件需求规格、软件设计、软件实现、软件确认、软件演化2
  • 3. 知识回顾软件过程模型 瀑布模型 快速原型模型 增量模型 螺旋模型 形式化方法模型 基于组件的开发模型3
  • 4. 引言随着软件开发规模和开发队伍的日益扩大,软件开发不是个别开发人员可以解决的事情,为了有效地保证软件项目能够按照预定的成本、进度及质量要求顺利进行,有必要将软件项目管理引入软件开发过程。 事实证明软件项目管理有利于将开发人员的个人开发能力化为企业的开发能力,并使企业的软件开发能力不断提高和成熟。4
  • 5. 第三章 软件项目管理3.1 软件项目管理概述 3.2 人员组织与管理 3.3 项目沟通管理 3.4 软件项目规划 3.5 软件风险管理 3.6 软件配置管理5
  • 6. 第三章 软件项目管理3.1 软件项目管理概述 3.1.1 软件项目的特征 3.1.2 软件项目管理的“4P” 3.1.3 软件项目管理活动6
  • 7. 管理的重要性 (1/4)软件项目开发的任务 按照预定的进度、成本和质量,开发出满足用户要求的软件产品。 用户需求 确保软件质量 成本限制 进度限制软件开发成本约束进度约束高质量软件用户需求7
  • 8. 管理的重要性(2/4)软件工程的解决方法-运用工程化的手段进行软件开发。 强调过程 抽象 文档化 规范化 工具支持 ……8
  • 9. 管理的重要性(3/4)项目组由许多承担不同角色、承担不同任务的人员组成,这些人员构成了一个团体。 项目经理、需求分析人员、设计人员、程序员、测试人员…… 软件开发涉及到许多相互关联的活动,这些活动的实施直接关系到软件项目的成本和进度。 需求分析、软件设计、编码、测试…… 在软件项目实施过程中会产生大量软件制品,这些软件制品相互关联、具有不同的抽象层次。 软件需求规格说明书、软件设计规格说明书、源程序代码、可执行代码、测试用例……9
  • 10. 管理的重要性(4/4)管理软件开发过程 明确过程活动 估算各个的工作量、成本 制定计划,跟踪过程,风险控制 管理软件产品 有哪些产品,呈什么形式(规范文档),如何保证它们的质量,如何控制它们的变化 管理软件开发人员 如何组建一个好的团队、调动团队成员的积极性和激情、严明团队的纪律、促进人员之间的协调与合作10
  • 11. 3.1 软件项目管理概述软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。11
  • 12. 3.1.1 软件项目的特征软件产品的不可见性:特别的复杂性和抽象性 项目的高度不确定性 难于:估算、计划、预见问题 技术更新快 软件过程的多变化性 过程的迭代、动态变化;需求的多变性 软件人员的高流动性总之:1复杂和变化给软件项目管理带来了相当大的难度。2要降低复杂性、控制变化。12
  • 13. 人员 (People)参与 项目 (Project) 工具 (Tools)结果 产品 (Product) 3.1.2 软件项目管理的“4P” 过程 (Process)13
  • 14. (1)人员(People):谁来做(Who) 软件开发是对智力要求相对较高的工作。 人员的素质和组织管理是保证项目成功的重要因素,往往比技术更重要。 大型项目需要整个团队的努力和协作。其中开发人员的选择、组织、分工与管理是十分重要而又复杂的,直接影响整个项目的成败。3.1.2 软件项目管理的“4P”14
  • 15. (2)产品(Product):结果(What) 软件项目的目标:在规定的时间和预算内开发出满足客户需求的软件产品。 重要阶段:需求阶段(问题:软件需求的不确定性和需求规格说明的不准确) 项目管理必须能有效解决需求分析和需求变更的问题。3.1.2 软件项目管理的“4P”15
  • 16. (3)过程(Process):怎么做(How) 软件过程将软件开发和维护所用到的技术、方法、活动和工具结合起来,确保项目的成功经验和最佳实践得以有效总结和重用,并不断完善和优化。 特别注意:文档化。3.1.2 软件项目管理的“4P”16
  • 17. (4)项目(Project) 项目管理者应该在有限资源的约束下,运用系统的观点、方法和理论,对软件项目全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。 软件项目管理的核心内容是项目的规划和跟踪控制。 项目的启动和计划阶段:需要确定项目的范围和需求;并进行项目的规划、估算和资源分配,制定可行的计划。 项目的实施阶段:了解项目进展,对于可能的变更进行有效的控制和管理。3.1.2 软件项目管理的“4P”17
  • 18. 软件过程管理过程定义过程改进 人员 (People) 项目规划 软件项目管理项目实施项目监控 工具 (Tools) 产品 (Product) 项目管理与过程管理的关系项目管理:保证项目目标的成功实现。 过程管理:辅助项目管理的工作,将最佳的项目实践应用于软件开发过程。18
  • 19. 软件项目管理的关注点 产品质量? 风险评估? 项目度量? 成本估算? 项目进度? 客户沟通? 人员安排? 其他资源? 项目监控?19
  • 20. 3.1.3 软件项目管理活动软件项目的生命周期:项目启动、项目规划、项目实施和项目收尾4个阶段。20
  • 21. 1.项目启动阶段,包括: 确定项目范围:了解客户的实际需求,从功能、性能和交付要求的角度定义软件的范围,并达成正式的协议。 组建项目团队:确定每个成员的角色和职责。 建立项目环境:网络环境、软件系统、配置管理工具、文档模板等。3.1.3 软件项目管理活动21
  • 22. 2. 项目规划阶段,包括: 确定项目活动:活动内容、里程碑和可交付的文档,确定活动间的关系,估计所需的资源。 预算项目成本 制定进度计划 3.1.3 软件项目管理活动22
  • 23. 3. 项目实施阶段,包括: 监控项目执行:跟踪项目执行情况,评价进度,及时发现偏差并进行纠正。 管理项目风险:发现进度或成本等方面的风险,规避风险。 控制项目变更 3.1.3 软件项目管理活动23
  • 24. 4. 项目收尾阶段,包括: 客户验收项目 安装培训软件 总结项目经验 3.1.3 软件项目管理活动24
  • 25. 第三章 软件项目管理3.2 人员组织与管理 3.2.1 软件项目组织 3.2.2 案例:微软的软件开发组织 3.2.3 软件团队的建设25
  • 26. 3.2 人员组织与管理 在软件开发的各种资源中,人员是最重要的资源。 事实表明,优秀的软件人才和高效的组织管理是软件项目成功的关键所在。 26
  • 27. (1)民主式组织结构 小组成员完全平等,名义上的组长与其他成员没有任何区别。 大家享有充分的民主,项目工作由全体讨论协商决定,并根据每个人的能力和经验进行适当分配。 优点 同等的项目参与权激发大家的创造力,有利于攻克技术难关。 特别适合于规模小、能力强、习惯于共同工作的软件开发组。 缺点 缺乏明确的权威领导,很难解决意见分歧。 无法适用于大规模开发的情形。3.2.1 软件项目组织27
  • 28. 以主程序员为核心 – 主程序员既是项目管理者也是技术负责人 – 团队其他人员的职能进行专业化分工3.2.1 软件项目组织(2)主程序员式组织结构主程序员程序员后备程序员程序员程序员秘书负责软件体系结构设计和关键部分的详细设计,并指导程序员工作协助主程序员工作,在主程序员不在时接替其领导工作在主程序员指导下,完成指定的详细设计和编程负责完成与项目有关的事务性工作,维护资料、文档、代码和数据28
  • 29. 以主程序员为核心 主程序员既是项目管理者也是技术负责人 团队其他人员的职能进行专业化分工 优点 项目人员的专业化分工 简化了成员间沟通和协调,降低了管理复杂度 缺点 很难找到技术和管理才能兼备的主程序员3.2.1 软件项目组织29
  • 30. (3)技术管理式组织结构 技术与管理工作进行分离 -技术负责人负责技术决策 -管理负责人负责非技术性事务的管理决策和绩效评价 在这种组织结构中,明确划分技术负责人和管理负责 人的管理权限是十分重要的技术组长管理组长程序员程序员程序员3.2.1 软件项目组织30
  • 31. (3)技术管理式组织结构 大型软件开发的层次组织结构:项目经理制。 整个项目开发在项目经理的统一指导下进行。 中间的管理层可根据需要适当增加。技术组长管理组长程序员程序员程序员3.2.1 软件项目组织31
  • 32. 3.2.2 案例:微软公司的软件开发组织微软开发团队的特点 小型的、多元化的项目组织 相互依赖的角色与共同分享的职责 具备专深的技术水平和业务技能 具有强烈的产品意识,关注最终发布的软件产品 清晰的目标和远景 人人参与设计 项目组成员在同一地点办公 对于大规模项目,采取类似小型项目组的运作模式32
  • 33. 3.2.2 案例:微软公司的软件开发组织项目团队的角色划分 :6种类型角色。33
  • 34. 代表客户的想法和意见产品管理促使项目远景和范围在项 目组达到共识 管理客户的需求定义 开发和维护业务用例 管理客户的预期目标 在产品特性与开发进度之 间做出权衡 案例:微软公司的软件开发组织34
  • 35. 程序管理推动产品开发过程 管理产品规格说明促进项目团队内部的沟通和讨论 保证项目进度和报告项目进展状态 对开发过程中的关键问题做出决策案例:微软公司的软件开发组织35
  • 36. 完成产品的详细设计软件开发估计每一个产品特性的 开发时间 构建软件系统 准备产品部署案例:微软公司的软件开发组织36
  • 37. 软件测试制定测试策略和测 试计划确保产品的所有特性 都经过了严格的测试案例:微软公司的软件开发组织37
  • 38. 案例:微软公司的软件开发组织38
  • 39. 负责协调项目的运营 、支持、发布渠道等 管理项目的后勤和基 础设施管理产品发布事宜参与、管理并支持相 关的项目决策过程发布管理案例:微软公司的软件开发组织39
  • 40. 程序管理3.2.2 案例:微软公司的软件开发组织 大型项目的团队模型。 40
  • 41. 3.2.3 软件团队的建设大型项目的团队模型。 明确的目标与共同分享的项目前景 – 项目目标与客户需求相一致 – 共同认同项目的前景和目标 清晰的角色分工与紧密的团队协作 – 清晰地定义项目成员的角色和分工 – 充分认识团队合作的重要性 融洽的关系与通畅的沟通 – 共同营造和谐、宽松、团结、互爱的工作环境 – 具有高效的沟通渠道和开放坦诚的沟通氛围 高昂的士气与高效的工作 41
  • 42. 高效团队的特征明确角色和职责 各个成员清晰、明确地知道自己做什么 项目计划 监控个人表现和提供反馈 让成员知道是可接受的还是有待进一步提高 项目跟踪、质量保证 有效沟通 易于获得信息、沟通的媒介、参与、记录沟通 配置管理、会议、文档化 以事实为依据提供决策 决策要依赖于事实依据,而不是主观判断42
  • 43. 第三章 软件项目管理3.3 项目沟通管理 3.3.1 项目沟通复杂性 3.3.2 项目沟通方式 3.3.3 项目沟通活动43
  • 44. 3.3.1 沟通的复杂性软件团队的规模是影响沟通效果的重要因素之一 团队成员数量的增加会使沟通变得很困难 有n个成员的团队,沟通渠道数量=n(n-1)/2 当n>3时,沟通数量快速增长44
  • 45. 不沟通:误会。 过多沟通:耽误时间。3.3.1 沟通的复杂性定期沟通人员规模对开发效率的影响 项目团队成员数量一个在3~7人。45
  • 46. 3.3.2 常用沟通方式你认为有哪些沟通方式? 直接交谈 电话交谈 电子邮件 会议 项目网站 书面报告46
  • 47. 3.3.2 常用沟通方式直接交谈 一种由事件驱动的、基于时机的非正式信息沟通方式 适用情况 --与领导层和项目成员等的个别谈话 --从客户和用户处获取需求 --交流问题并商讨解决方案 电话交谈 也是一种直接交谈,可以不受任何地点的限制 适用情况 --重要会议或重要事项的通知 --交流简单问题47
  • 48. 3.3.2 常用沟通方式电子邮件 一种常用的沟通方式,具有异步性和及时性的特点 适用情况 --发布项目信息 --发送项目文档 --会议或事项的通知 会议 适合于许多参与者讨论、检查和协商问题,并达成一致的解决方案 常见的项目会议包括项目启动会议、阶段评审会议、解决问题会议、需求和设计评审会议、项目验收总结会议等48
  • 49. 3.3.2 常用沟通方式项目网站 保持组间交流、对外发布项目信息的理想工具 适用情况 --发布项目进展情况 --发布文档、代码等项目阶段性成果 --项目组间技术问题讨论 --提供项目资料和工具等 书面报告 一种正式的书面沟通方式,适合于复杂程度高、严谨性强的信息沟通 通常包括有关项目的重要决定、项目计划、技术文档、项目进展报告、项目工作总结等49
  • 50. 3.3.3 项目沟通活动你认为有哪些沟通活动? 50
  • 51. 3.3.3 项目沟通活动规划项目沟通 项目组内部的交流活动 --状态检查、组内讨论、需求说明、项目变更等 项目组之间的交流活动 --客户评审、项目评审、版本发布、问题讨论、项目变更等 建立基础设施 项目管理者可以建立项目的信息系统和内部网站 实施阶段性评审 包括客户参与的评审活动和项目组进行的评审活动 每周组织小组会议 每周组织组内会议进行状态检查、集体讨论和问题讨论等51
  • 52. 第三章 软件项目管理3.4 软件项目规划 3.4.1 软件规模估算 3.4.2 软件成本估算 3.4.3 软件项目计划52
  • 53. 软件项目规划是项目管理者对资源、成本和进度作出合理的估算,制定出切实可行的软件项目计划。 软件项目规划过程 确定项目的目的和范围:具体说明项目的最终产品以及期望的时间、成本、质量目标 分解和定义整个项目应包括的工作活动和任务 估算完成该项目的规模及其所需资源 制定合理的软件项目计划:包括进度、成本、质量等方面的预测3.4 软件项目规划53
  • 54. 3.4.1 软件规模估算软件项目规模是影响软件项目工作量和成本的重要因素。 常用估算方法包括代码行技术、功能点技术。54
  • 55. 代码行技术 代码行技术是一种简单而直观的软件规模估算方法,它从过去开发类似产品的经验和历史数据出发,估算出所开发软件的代码行数。 需要给出软件的范围,并进行尽可能的分解。估算每一个子功能代码行数进行累加。 代码行数估算: L=(a+4m+b)/6 a:最佳的行数 m:可能的行数 b:悲观的行数 之后可进一步估算软件开发的生产率、每行代码的成本、每千行代码的错误个数等。 3.4.1 软件规模估算55
  • 56. 生产率: P = L /PM (单位:每人月完成的代码行数) L:代码行数(单位:千行代码kLOC) PM:软件开发的工作量(单位:人月) 每行代码的单位成本: C=S/L S:软件开发的总成本 代码出错率: EQR=N/L N:软件的错误总数 EQR:每千行代码的错误数。3.4.1 软件规模估算56
  • 57. 3.4.1 软件规模估算优点 简单方便,在历史数据可靠的情况下,可以很快估算出准确的代码行数。 缺点 依赖于详细的功能分解 软件开发初期很难估算出最终软件的代码行数 估算结果与所用的开发语言紧密相关 只适合于过程式程序设计语言 57
  • 58. Homework1学习:功能点技术。 2查资料完成:其他软件规模估算方法(至少一个)。 要求:书面完成以上两题 其中,功能点技术包括技术介绍、适应性及例子。其他方法介绍技术。3.4.1 软件规模估算58
  • 59. 作业完成以上homework。
  • 60. 功能点技术功能点技术是依据软件信息域的基本特征和对软件复杂性的估计,估算出软件规模。 这种方法适合于在软件开发初期进行估算。 3.4.1 软件规模估算60
  • 61. 软件信息域的5个基本特征 外部输入:用户进行添加或修改的表格。 外部输出:产生的报表输出和屏幕输出。 外部查询:独立查询。 内部逻辑文件:软件修改或保存的逻辑纪录集合。 外部接口:与其他系统进行信息交换或共享的 文件。 3.4.1 软件规模估算61
  • 62. 每个特征都划分为简单、中等和复杂3个等级,不同等级有不同加权因子。可据下表计算未调整的功能点数信息域特征估算值简单加权因子 中等复杂单项总和 外部输入 外部输出 外部查询 内部逻辑文件 外部接口× × × × ×3 4 3 7 5 4 5 4 10 7 6 7 6 15 10= = = = = 未调整功能点总计 UFP 3.4.1 软件规模估算62
  • 63. 由于软件规模可能受可用性、可靠性等因素影响,因此需要视实际情况对以上功能点数进行调整。 FP = UFP ×[0.65+0.01×∑Fi] Fi:复杂度调整值,i=1,..,14。 Fi的取值(0,1,2,3,4,5)表示影响程度:0-没有影响,1-偶有影响,2-轻微影响,3-平均影响,4-较大影响,5-严重影响。 F1:系统需要可靠的备份和恢复吗? F2:系统需要数据通信吗? F3:系统有分布处理功能吗? F4:性能是临界状态吗?3.4.1 软件规模估算63
  • 64. F5:系统是否在一个实用的操作系统下运行? F6:系统需要联机数据项吗? F7:联机数据项是否在多屏幕或多操作之间进行切换? F8:需要联机更新主文件吗? F9:输入、输出、查询和文件很复杂吗? F10:内部处理复杂吗? F11:代码需要被设计成可重用吗? F12:设计中需要包括转换和安装吗? F13:系统的设计支持不同组织的多次安装吗? F14:应用的设计方便用户修改和使用吗?3.4.1 软件规模估算64
  • 65. 完成后,可直接用功能点表示规模,也可以将其转换成与具体开发语言对应的代码行数。3.4.1 软件规模估算65
  • 66. 各种语言的LOC/FP(平均值)程序设计语言 LOC/FP(平均值) 汇编语言 320 COBOL 91 FORTRAN 105 Pascal 91 C 128 c++ 53 VB 24 Dephi5 18 Java 4866
  • 67. 功能点技术优点 ①与程序设计语言无关,它不仅适用于过程式语言,也适用于非过程式的语言。 ②软件项目开发初期就能基本上确定系统的输入、输出等参数,能用于软件项目的开发初期。 功能点技术缺点 ①涉及的主观因素比较多,如各种权函数的取值。 ②信息领域中的某些数据有时不容易采集。 ③FP的值没有直观的物理意义。 3.4.1 软件规模估算67
  • 68. 举例:软件项目估算某公司约有3000名员工,准备开发一个简单的工资系统: 生成员工的工资单,列出工资的所有收入项和纳税扣除额,并在屏幕上显示工资单,工资单的功能复杂度是“复杂”;另外,产生7个报表,每个报表的复杂度是“简单”。 要求用户从屏幕上输入员工的基本信息(包括员工编号、基本工资、所在等级、所属部门等)和每月的考勤情况,这两个屏幕输入的复杂度为“复杂”;另外,还有一个所得税信息的输入,其复杂度为“中等”。 系统提供20个查询,每个查询的复杂度是“简单”。系统内部维护一个员工信息文件,其复杂度是“复杂”。 系统引用了3个数据表,包括员工基本信息、部门信息和所在等级,其中员工基本信息的复杂度是“中等”,其他两个的复杂度是“简单”。68
  • 69. • 计算未调整功能点举例:软件项目估算69
  • 70. 3005022041• 计算调整后的功能点 技术因素 备份与恢复 数据通信 分布式处理 性能 配置负载 联机数据输入 终端用户效率影响值 3 2 技术因素 联机更新 操作方便 内部复杂处理 可重用性 易安装 多个站点 可维护性影响值 0 5FP = 150 ×[0.65+0.01×∑Fi]= 138 举例:软件项目估算70
  • 71. 系统规模 假设用 VB 开发, 则源程序行数 LOC=24×138=3312 举例:软件项目估算71
  • 72. 小 结软件项目管理 3.1 软件项目管理概述 3.2 人员组织与管理 3.3 项目沟通管理 3.4 软件项目规划软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。软件项目管理的“4P”。软件项目的生命周期:项目启动、项目规划、项目实施和项目收尾4个阶段。 软件项目组织:3种结构。沟通的复杂性、沟通方式软件规模常用估算方法包括代码行技术、功能点技术72