软件工程导论学第十三章_软件项目管理
- 格式:doc
- 大小:2.91 MB
- 文档页数:34
3、下面叙述对一个计算机辅助设计(CAD)软件的需求:该CAD软件接受由工程师提供的二维或三维几何图形数据。
工程师通过用户界面与CAD系统交互并控制它,该用户界面应该表现出良好的人机界面设计特征。
几何图形数据及其他支持信息都保存在一个CAD数据库中。
开发必要的分析、设计模块,以产生所需要的设计结果,这些输出将显示在各种不向的图形设备上。
应该适当地设计软件,以便与外部设备交互并控制它们。
所用的外部设备包括鼠标、数字化扫描仪和激光打印机。
要求:(1)进一步精化上述要求,把CAD软件的功能分解成若干个子功能;(2)用代码行技术估算每个子功能的规模;(3)用功能点技术估算每个子功能的规模;(4)从历史数据得知,开发这类系统的平均生产率是620LOC/PM,如果软件工程师的平均月工资是8000元,请估算开发本系统的工作量和成本;(5)如果从历史数据得知,开发这类系统的平均生产率是6.5FP/PM,请估算开发本系统的工作量和成本。
答:(1)习题中仅对需求做了粗略描述,每项需求都应该进一步扩展,以提供细节需求和定量约束。
例如,在开始估算软件规模之前,需要确定“良好的人机界面设计特征”的具体含义,以及对“CAD数据库”的规模和复杂度的具体需求。
经过对需求的进一步精化,分解出软件的下述7个主要的子功能:·用户界面及控制机制;·二维几何图形分析;·三维几何图形分析;·数据库管理;·计算机图形显示机制;·外部设备控制;·设计分析模块。
(2)为了用代码行技术估算软件规模,应该针对每个子功能都分别估计出下述3个值:乐观值(即最小规模),悲观值(即最大规模)和可能值(即最可能规模)。
然后用式(10.1)所示的加权平均法计算每个子功能的规模,结果示于表l0.4。
(3)使用功能点技术估算软件规模时,对软件的分解是基于信息域特性而不是基于软件功能。
表l0.5给出了对5个信息域特性的估计值。
2023软件工程导论期末考试题库及参考答案一、选择题(每题2分,共20分)1. 以下哪个不是软件工程的三个基本目标?A. 可维护性B. 可用性C. 可靠性D. 高效性参考答案:D2. 软件生命周期中,以下哪个阶段是软件开发过程的核心阶段?A. 需求分析B. 设计C. 编码D. 测试参考答案:C3. 以下哪种编程范式主要用于降低软件复杂性?A. 面向对象编程B. 过程式编程C. 函数式编程D. 逻辑编程参考答案:A4. 在软件工程中,以下哪个方法用于估算软件项目的成本和进度?A. COCOMOB. WBSC. SDLCD. CASE参考答案:A5. 以下哪个是软件工程中的一个重要原则?A. 分而治之B. 一次性编写C. 重用D. 模块化参考答案:D6. 以下哪个不是软件工程的基本活动?A. 软件规格B. 软件开发C. 软件验证D. 软件测试参考答案:C7. 以下哪个是软件工程中用于提高软件质量的技术?A. 设计模式B. 重构C. 代码审查D. 单元测试参考答案:C8. 以下哪个不是软件工程的五大基本过程?A. 软件规格B. 软件开发C. 软件维护D. 软件项目管理参考答案:D9. 以下哪个是软件工程中的一个重要概念,用于描述软件系统中的各个组件之间的关系?A. 耦合B. 内聚C. 模块化D. 重用参考答案:A10. 以下哪个是软件工程中的一个重要原则,用于指导软件开发过程?A. 迭代B. 增量C.螺旋D. 模型驱动参考答案:A二、填空题(每题2分,共20分)11. 软件工程的三要素是:方法、工具和______。
参考答案:过程12. 软件生命周期包括:需求分析、设计、编码、______和软件维护。
参考答案:测试13. 软件工程中的面向对象方法包括:封装、继承和______。
参考答案:多态14. 软件工程中的 CASE 工具主要用于支持______。
参考答案:软件设计和开发15. 软件工程中的敏捷开发方法强调______、可维护性和可扩展性。
软件项目管理(三级项目)课程教学大纲英文名称:Software Project Management 课程编码:04119230学时:48/8 学分:3课程性质:专业限选课课程类别:理论课先修课程:软件工程导论、软件工程A开课学期:第6学期适用专业:软件工程一、课程教学目标通过本课程的理论教学、项目和实验训练,使学生具备下列能力:1、掌握软件工程领域软件项目管理所需的专业知识,包括项目范围、进度、成本、风险、资源、变更等方面的管理和控制。
(支持标准毕业要求1-3)2、培养学生的人文社会科学素养、社会责任感,能够在软件工程实践中理解并遵守软件工程职业道德和规范,履行相应责任;(支持标准毕业要求8-3)3、培养学生的团队精神及协作能力,能够在软件工程、多学科背景下的团队中承担个体、团队成员以及负责人的角色;(支持标准毕业要求9-1、9-2)4、能够能够通过口头或书面方式表达自己的想法,与业界同行及社会公众进行有效沟通和交流;(支持标准毕业要求10-1)5、能够使用主流的项目管理工具,如Project等工具对软件复杂软件开发过程中的进度、资源、成本等问题进行管理;(支持标准毕业要求11-1)6、能够将软件项目管理的原理和经济决策的方法用于大规模软件全生命周期过程中;(支持标准毕业要求11-2、11-3)二、课程教学目标与毕业要求的对应关系三、课程的基本内容3.1 理论教学1、项目管理及IT项目管理概述(支撑教学目标1)了解项目及项目管理的基本概念、价值及特点;理解项目管理、IT项目管理、软件项目管理之间的相互关系,理解软件项目管理的基本概念及特点。
[本章主要内容]:(1)项目与项目管理的价值。
(2)项目与项目管理概念与和特点。
(3)项目管理组织与项目管理知识体系。
(4)IT项目特征、IT项目管理特点。
(5)软件项目与软件项目管理概念与特点。
2、项目管理的环境和过程(支撑教学目标1、2、6)教学目标:了解项目管理的环境,理解系统观念和系统方法在项目管理中的应用;了解项目阶段和项目生命周期的概念,理解项目管理过程。
第十三章软件项目管理一、软件工程管理软件工程,完成软件的开发和维护,必须有严格、持续的管理方法。
软件工程管理主要涵盖:软件质量管理、软件配置管理、软件项目管理、软件安全管理、人员管理与培训等多个方面。
二、软件项目管理概述1、项目与项目管理项目是一次性的多任务工作,它具有确定的开始日期、结束日期、工作范围、经费预算、质量标准,以及特定的功能、性能和接口要求。
这一定义非常科学,它适用于所有行业,同样也是适用于软件行业。
项目管理是为了实现项目目标,运用相关的知识、技能、方法、工具,对项目的计划、进度、质量、成本、资源进行管理和控制的活动。
同样,这一定义也非常科学,适用于所有行业的,当然也适用于软件行业。
关于项目管理的目的,国际项目管理大师詹姆斯.刘易斯说到:项目管理不仅是为了节约金钱,而且是为了节省时间,缩短产品的开发周期。
2、软件项目管理软件项目管理的特点(1) 软件产品在其生产的全过程中的不可见性(2) 用户需求难以把握,会随着项目的进展而变更(3) 单件生产(生产地一次性)(4) 是智力密集型项目,受人力资源影响很大软件项目管理的主要职能软件项目管理先于任何技术活动之前开始,并且贯穿于软件的整个生命周期之中。
(1) 制定计划----规定待完成的任务、要求、资源、人力和进度(2) 建立组织----为实施计划、保证任务的完成,建立分工明确的责任机构(3) 配备人员----任用各个层次的技术人员和管理人员(4) 指导----鼓励和动员软件人员完成所分配的任务软件项目管理的主要内容(1) 人员的管理与组织(2) 软件度量(3) 软件项目计划(4) 风险管理(5) 软件质量保证(6) 软件过程能力评估(7) 软件配置管理以下是软件项目管理的主要工作:三、软件规模估算1、代码行技术----是以整个软件的代码行数作为软件规模的估算值估算方法(1) 了解软件细节(软件的功能、性能、限制、接口和可靠性等),将其细化分解成较详细的任务单元;(2) 由多名有经验的软件工程师,每人分别对各单元的代码行数做出估计(参照类似软件的相近功能模块),估计该程序模块的最小规模(设为a)、最大规模(设为b)和最可能的规模(设为m);(3) 求出a 、b 、m 的平均值,再用下式计算单元规模的估计值:64b m a ++ (4) 把软件的每个功能模块的规模估计值累加,就是整个软件的规模估计值;(5) 当程序规模较小时常用的单位是代码行数(LOC),当程序规模较大时常用的单位是千行代码数(KLOC)。
优、缺点(1) 简单、比较准确、客观(在有以往类似成果经验值的基础上);(2) 不太合理、不能适用于非过程语言,用不同语言完成同一项目估算值将不一样。
2、功能点技术----依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。
这种方法用功能点(FP)为单位度量软件规模信息域特性: P8~10估算方法:(1) 根据产品的每个信息域特性值(即Inp 、Out 、Inq 、Maf 和Inf)和软件产品所在的领域(软件类型),将其分类为简单级、平均级或复杂级,并根据等级为每个特性分配一个功能点数。
点数的值没有硬性规定,例如,一个简单级的输入项分配3个功能点,一个平均级的输入项分配4个功能点,而一个复杂级的输入项分配6个功能点;(2) 计算未调整的功能点数UFP:UFP=a1×Inp+a2×Out+a3×Inq+a4×Maf+a5×Inf其中,a i(1≤i≤5)是信息域特性系数,其值由相应特性的复杂级别决定。
(3) 计算软件技术复杂因子P12~13(4) 计算功能点数:FP=UFP×TCF,此即软件的复杂度优缺、点:(1) 与所用的编程语言无关;(2) 在判断信息域特性复杂级别和技术因素的影响程度时,存在着相当大的主观因素。
(各因素的影响值均为主观估计给出)四、工作量估算----是软件规模的函数,是从另一个角度反应的软件规模,是基于经验模型(换算函数)的1、静态单变量模型----是以软件规模为变量的一元函数。
典型的估算公式有:P15~17对Walston_Felix模型的进一步说明:(1) 详细计算公式:E=5.2×(KLOC)0.91D=4.1×(KLOC)0.36=13.47*EDOC=49*(KLOC)1.01S=0.54*E0.6(2) 说明:其中,E表示工作量,以人月(PM)计算;D表示项目持续时间,以月计算;DOC表示文档数量,以页计算;S表示人员需求,以人计算。
2、动态多变量模型----是以软件规模和开发时间为变量的二元函数。
估算公式:P18~203、COCOMO2模型COCOMO2模型P22以后体系结构模型为例介绍估算方法:(1) 模型公式:P23(2) 模型系数a的典型值为3.0(3) 确定模型指数b P26~29(4) 使用模型公式,计算工作量4、三个不同层次中的工作量估算第一层估算时,只须使用公式E= a ×KLOC b,不需要考虑成本因素,而且对于组织形、半独立形和嵌入形的这三种项目类型,模型指数和模型系数是固定的。
第二、三层估算时,使用上述完整的估算方法,但考虑的成本因素的数量不同。
五、项目开发时间估算通常,工作量估算模型也同时提供了估算开发时间T的方程,它是项目工作量的函数。
P34六、成本/效益分析根据以上估算结果,就可以进行软件成本/效益估算。
简单的成本估算,可以用KLOC数直接乘每千行代码的价格得到;一般的成本估算是用工作总量与人员平均收入相乘得到。
效益分析可依据成果投入使用后可能带来的利润,使用可行性研究中介绍的成本/效益分析方法进行分析。
七、做进度计划1、概述做进度计划的主要工作是:定义一个适用于当前软件项目的软件工作集合,包括(1)一组软件工程工作任务、(2)里程碑、(3)可交付的产品。
软件工作任务包括一些关键性的(在关键路径上)工作和一些非关键性的工作。
项目管理者的目标是定义全部项目任务,识别出关键任务,跟踪关键任务的进展状况,以保证能及时发现拖延进度的情况。
为达到上述目标,管理者必须制定一个足够详细的进度表(进度描述),以便监督项目进度并控制整个项目。
软件项目的进度安排把工作量(工作时间)分配给任务集合中的每个软件工程任务,并规定完成各项任务的起止日期,从而将估算出的项目工作量分布在计划好的项目持续期内。
进度计划将随着时间的流逝而不断演化。
在项目计划的早期,首先制定一个宏观的进度安排表,标识出主要的软件工程活动和这些活动影响到的产品功能。
随着项目的进展,把宏观进度表中的每个条目都精化成一个详细进度表,从而标识出完成一个活动所必须实现的一组特定任务,并安排好了实现这些任务的进度。
进度计划的主要工作是:2、确定项目组的最佳规模(人数)项目的人均生产效率和项目组人数P的关系:Lr=L-l(P-1)r P38对于一个规模为P的项目组,从上式导出项目组的总生产率为:Ltot=P(L-l(P-1)r)因此,存在一个最佳的项目组规模P opt,这个规模的项目组,其总生产率最高。
实例:P40注意:Brooks规律----向一个已经延期的项目增加人力,只会使得它更加延期。
3、工作量分配在前面,通过成本估算方法获得了完成某项软件开发任务所需全部工作量的估计值。
有一种称为“40-20-40规则”的工作量分配建议方案,常用于软件项目的工作量分配。
它指出:在整个软件开发过程中,编码的工作量约占20%,编码前的工作量占40%,编码后的工作量也占40%。
显然,这一分配方案是不强调编码工作的。
现在,对于大型软件项目而言,编码工作的工作量所占分额还在进一步缩小。
一般地,在计划阶段所需工作量不超过项目总工作量的2%~3%,除非是具有高风险的巨资项目。
需求分析可能占用项目工作量的l0%~25%,用于分析或原型开发的工作量与项目规模和复杂度成正比增长。
通常有20%~25%的工作量用于软件设计,用于设计评审和迭代修改的时间也必须计算在内。
由于设计时投入了相当的工作量,使编码工作变得相对简单些,用15%~20%的作量就可以完成。
测试和随后的调试工作约占30%~40%的工作量,且测试的工作量取决于软件的质量特性要求。
4、描述开发过程(用图形工具描述进度)甘特图(Gantt)----是一种简单的制定进度计划的工具,其横坐标表示日历时间、纵坐标上列出作业名称。
实例:P41~45旧木板房刷漆工程的Gantt图Gantt图的缺点:P46工程网络图----描绘任务分解情况以及每项作业的开始时间和结束时间(开始时间和持续时间),此外,它还显式地描绘各个作业彼此间的依赖关系。
图13.2旧木板房刷漆工程的工程网络在工程网络图中,用圆圈表示一个事件,圆圈内的数字表示事件的编号;实线箭头表示一个作业(任务),箭头上要标明作业的名称和估计需要的时间;虚线箭头表示任务在时间上的依赖关系。
注意,事件仅仅是可以明确定义的时间点,它表示这个时间点上有任务开始或结束。
事件并不消耗时间和资源。
作业表示一个任务的持续,通常既消耗资源又需要持续一定时间。
虚线箭头表示虚拟作业,它既不消耗时间,也不消耗资源。
甘特图简单直观,工程网络图能直接显示地描述各作业间的关系,二者各有优势,应结合使用。
*5、估算工程进度----在工程网络图的基础上步骤:计算每个事件的最早时刻:P53~54,标在事件圆圈的右上角;计算每个事件的最迟时刻:P55~56,标在事件圆圈的右下角;确定工程的关键路径,在项目实施过程中密切注视:P57计算机动时间,标在代表该项作业的箭头下面的括弧里P58利用机动时间安排出既节省资源又不影响最终竣工时间的进度表。
6 、实例:安排一个简单的软件开发项目的进度:(1) 建立初步的工程网络图(2) 计算每个事件的最早发生时刻(EET)和最迟发生时刻(LET),并在工程网络图中标明。
(3) 确定并标出关键路径。
(4) 计算非关键作业的机动时间,并在工程网络图中标出。
(5) 在时间和资源的约束下,利用机动时间安排进度。
在安排进度时,必须先保证关键作业得到满足,然后,利用机动时间安排非关键作业。
即先无条件地安排关键作业,再在约束条件下利用机动时间安排非关键作业。
假定有如下约束:“分析”需8人,“测试计划”需4人,“概要设计”需5人,“详细设计”需8人,“编码”需l0人,“测试方案设计”需2人,“产品测试”需3人,“文档整理”需3人,且要求安排进度时同一时刻的人数不超过l0人。
满足上述约束的一种进度安排方案如下表:八、人员组织1、软件开发单位的基本组织模式:2、对于小组内部成员的组织一般有三种形式:民主制程序员小组:P67~71主程序员小组:(1) 小组结构:P75(2) 小组成员分工:P76~77(3) 特点:通信信道少、效率高;主程序员、后备程序员和秘书人才难觅。