软件工程答案
第3 章 软件项目管理(习题与参考答案)[选择题]1. 软件项目管理的“4P”是()C)A. people,performance,payoff,productB. people,product,performance,processC. people,product,process,projectD. people,process,payoff,product2. ( )项目管理在现代软件开发中是不太重要的,因为大多数项目能够及时完成并成功交 付 B)A. 真B. 假3. 在软件开发的各种资源中,()是最重要的资源C)A. 开发工具B. 方法C. 硬件环境D. 人员4. 软件项目规划的第一步是()D)A. 确定项目预算B. 选择团队的组织模型C. 确定项目的约束D. 建立项目的目标和范围5. 下面的()方法最不适合你向团队成员解释他或她为什么表现不合格B)A. 个人谈话B. 项目团队会议C. 正式报告D. 电子邮件6. 功能点估算技术需要以()为基础进行问题分解A)A. 信息域B. 项目进度C. 软件功能D. 过程活动7. 软件开发团队的每一个成员都应该参与计划活动,以便()C)A. 降低计划的粒度B. 深入地分析需求C. 所有成员同意该计划D. 开始设计&在攻克技术难题时,最佳的开发团队组织模型是()。
A)A. 民主式结构B. 主程序员式结构C. 技术管理混合式结构D. 以上所有选项都不是9. 在选择开发团队组织结构时应考虑()因素E)A. 沟通的复杂程度B. 最终程序的规模大小C. 发布日期的严格程度D. 项目预算的多少E. 选项 A,B 和 C10. 在软件开发过程中避免受挫的最佳方法之一是()(A)A. 给予团队成员对于过程和技术决策的更多控制权B. 给予团队成员对于过程和技术决策的更少控制权C. 向团队成员隐瞒坏消息直到事情有所改善D. 根据生产效率奖励团队成员11. 下面的()软件特性不是引起项目协调困难的一个因素B)A. 互操作性B. 性能C. 规模D. 不确定性12. 在进行项目范围活动时,问题分解的主要范围是()E)A. 客户工作流程B. 需要发布的功能C. 用于发布功能的过程D. 软件过程模型E. 选项 B 和 C13. ()随着项目计划的不断形成,产品分解和过程分解经常是同时发生的A)A. 真B. 假14. 为了将项目失败的风险减少到最小,项目经理需要采取()(D)A. 将项目团队规模增加一倍B. 要求更大的预算C. 顺利地开始D. 跟踪过程E. 选项 B 和 C15. ()估算不可靠的唯一原因是估算人员缺乏经验。
B)A. 真B. 假16. ( )由于软件项目估算不完全可靠,所以项目开始后可以忽略这些估算 B)A. 真B. 假17. 软件项目规划的目的是()(C)A. 使客户相信项目是可行的B. 使用历史项目数据C. 使项目管理者合理地估算成本和进度D. 在投标项目之前确定大概的利润边界18. 软件项目所需的人数应该()D)A. 在估计开发需要的努力之后决定B. 由项目预算数量决定C. 从评价系统复杂性来决定D. 以上所有选项19. ()估计待开发软件产品的规模必须基于像代码行等直接度量单位B)A. 真B. 假20. 代码行估算技术需要以()为基础进行问题分解C)A. 信息域值B. 项目进度C. 软件功能D. 软件过程活动21. 功能点估算技术需要以()为基础进行问题分解A)A. 信息域值B. 项目进度C. 软件功能D. 软件过程活动22. 经验估算模型是基于()C)A. 专家基于过去项目经验的判断B. 期望值估计的细化C. 来自历史项目数据的回归模型D. 反复试验决定参数和系数23. COCOMO II是现代经验估算模型的一个实例,它需要以()为单位的程序规模信息B)A. 功能点B. 代码行C. 工作量D. 以上任何选项24. ()功能点不能用于估算面向对象的软件。
B)A. 真B. 假25. ()软件项目延迟是不可避免的,而且无法解释其原因B)A. 真B. 假26. ()将开发团队人数增加一倍可以保证项目完成时间减少一半B)A. 真B. 假27. 任务集是()的集合A)A. 工作任务、里程碑、工作产品B. 任务分配、成本估算、度量单位C. 里程碑、可交付物、度量单位D. 责任、里程碑、文档28. ()主动的风险管理有时被描述为救火B)A. 真B. 假29. 软件风险总是包括()两个特性C)A. 救火和危机管理B. 已知的和未知的风险C. 不确定和损失D. 安置人员和预算30. 风险的三种主要类型是()B)A. 商业风险、人员风险、预算风险B. 项目风险、技术风险、商业风险C. 计划风险、技术风险、人员风险D. 管理风险、技术风险、设计风险31. 下面的()是有效的软件配置项E)A. 软件工具B. 文档C. 可执行程序D. 测试数据E. 以上所有选项32. 下面的()配置对象通常不包括在项目数据库中C)A. 设计规格说明书B. 可执行程序C. 组织结构描述D. 测试计划33. 基线(Baseline)是指在项目生命周期的不同时间点上,一个或一组配置项通过()而 进入正式受控的一种状态。
C)A. 存取控制B. 质量控制C. 正式评审D. 变更管理34. ()软件工作产品一旦成为基线就不能再更改了B)A. 真B. 假35. ()如果开发小组使用自动化的项目数据库工具,那么就不需要变更控制B)A. 真B. 假36. 下面的()不是软件配置管理的任务C)A. 变更控制B. 配置状态报告C. 统计质量控制D. 版本控制37. 配置状态报告的主要目的是()C)A. 允许项目经理修改项目进度和成本估算B. 评估软件开发人员和组织的绩效C. 确保变更信息传达到受影响的团体D. 选项A和CE. 选项 A、B 和 C[练习题]1. 简要说明软件项目管理的过程参考答案: 软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、 人员、进度、质量、风险等进行分析和管理的活动软件项目管理的主要过程如下:(1) 项目启动与建议:在项目启动阶段,定义项目的商业需求,确定项目的目标和实现方 法,大致估算项目的成本和进度2) 项目规划与进度:在项目规划阶段,明确项目的各种活动、里程碑和可交付的成果, 制定软件开发计划3) 项目组织与执行:根据项目任务的要求选择合适的开发人员,组建项目团队和协调项 目资源,按照计划执行和推进整个项目。
4) 项目监督与评价:在项目执行过程中,密切关注项目的进展情况,综合评价整个项目 的实际进展,及时发现和报告实际情况与计划的偏差,在必要的情况下采取纠正行动,同时 控制和管理项目的变更5) 项目交付与总结:完成正式的项目交付工作,客户对所交付的软件产品进行验收,项 目团队培训用户并移交文档,最后分析和总结项目的经验教训2. 某个软件项目需要30名开发人员,现有两种人员组织方案:(1) 将 30 人划为一个开发组统一管理;(2) 按每个小组6 人的方式,将30 人分为5 个小组 请分析比较上述两种方案的优缺点参考答案: 由于软件规模的增大,需要多人组成开发小组共同参与一个项目的开发但是当多个人共同承 担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的 接口问题,这就产生了所谓沟通复杂性的问题沟通需要花费时间和代价,也会引起软件错 误的增加,降低开发效率1) 优点:30 人集中在同一个开发小组,人员任务的分配和调度相对容易; 缺点:沟通复杂性高,从而导致人员之间配合混乱,开发效率低2) 优点:30人划分成5 个小组,降低了沟通复杂性,提高开发效率; 缺点:小组之间的协调配合难度大。
3. 在选择人员进行软件项目开发时,应该考虑哪些因素? 参考答案: 参考因素 说明 应用领域的经验 为了成功地开发系统,开发人员必须了解相关 的应用领域 平台的经验 在编写底层程序时该因素很重要 编程语言的经验 该因素对于 短周期的项目是很重要的 教育背景 该因素可以显示候选人应该掌握的基础知识和学习能 力,由于开发人员的经验可以在项目实践中获得,该因素并非是关键的 沟通能力 由于项 目成员需要与其他人员、管理者和客户进行口头和书面交流,该因素是十分重要的适应性 适 应性可以通过候选人的各种经历进行判断,该因素反映出一个的学习能力 工作态度 项目 成员应该有积极的工作态度,乐于学习新技术,该因素很重要但是难以评估 个性 候选人 必须与团队成员关系融洽,尚没有软件工程方面的特定个性类型,该因素很重要但是难以评 估第8 章 面向对象设计(习题与参考答案)[选择题]1. ( )面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型A)A. 真B. 假2. ()系统设计的主要任务是细化分析模型,最终形成系统的设计模型B)A. 真B. 假3. ( )关系数据库可以完全支持面向对象的概念,面向对象设计中的类可以直接对应到关系数据库中的表。
B)A. 真B. 假4. ( )用户界面设计对于一个系统的成功是至关重要的,一个设计得很差的用户界面可能导致用户拒绝使用该系统A)A. 真B. 假5. 内聚表示一个模块( )的程度,耦合表示一个模块( )的程度 B, D)A. 可以被更加细化B. 仅关注在一件事情上C. 能够适时地完成其功能D. 联接其他模块和外部世界6. 良好设计的特征是()E)A. 模块之间呈现高耦合B. 实现分析模型中的所有需求C. 包括所有组件的测试用例D. 提供软件的完整描述E. 选项B和DF. 选项 B、C 和 D7. ( )是选择合适的解决方案策略,并将系统划分成若干子系统,从而建立整个系 统的体系结构;( )细化原有的分析对象,确定一些新的对象、对每一个子系统接口和类进 行准确详细的说明A, B)A. 系统设计B. 对象设计C. 数据库设计D. 用户界面设计&下面的()界面设计原则不允许用户保持对计算机交互的控制D)A. 允许交互中断B. 允许交互操作取消C. 对临时用户隐藏技术内部信息D. 只提供一种规定的方法完成任务 [练习题]1. 面向对象设计与面向对象分析的区别是什么?设计包括哪些活动?1=1 *面向对象分析是重点考虑系统“做什么”的问题,即运用面向对象方法对问题域进行分 析和理解,建立系统的分析模型;面向对象设计重点考虑系统“怎样做”的问题,即在分析 模型的基础上形成实现环境下的设计模型。
面向对象设计主要涉及系统设计、对象设计(或详细设计)、数据库设计和用户界面设计 等活动在类设计中,为什么建议使用set方法和get方法进行属性设置和读取?1=1 *目的在于降低类之间的耦合度下图显示了某个学校课程管理系统的部分类图,其中一个学生(student)可以知道所有注册 的教师(ins true tor), —个教师也可以知道所有注册课程的学生现在提出一个新的需求:“一个教师也可以是某些课程的学生”,那么下面设计A~E中哪一个 是最好的 ? 为 什么 ? ( 请务必说明 理由) Studentname : StringstudentID :IntegerregisteredInstruetors : Instruetor[]getRegisteredInstruetor() :Instruetor[]Instruetorname : StringinstruetorID : IntegerregisteredStudents : Student[]getRegisteredStudents() : Student[]0..* 0..* 设计 A: 设计 B: 设计 C:设计 D: Candieatename : StringeandidateID : Integerstudent : Booleaninstruetor : BooleanregisteredCandidate : Candidate[]getRegisteredCandidates() :Candidate[]0..* CandieateeandidateID : Integername :StringStudentregisteredInstruetors : Instruetor[]getRegisteredInstruetor() : Instruetor[]InstruetorregisteredStudents : Student[]getRegisteredStudents() : Student[]0..*0..*InstruetorStudentRoleregisteredCandidate :Candidate[]getRegisteredCandidates()CandieateeandidateID : Integername :String0..*0..* 0..*InstructorStudentCandicatecandidateID : Integername :StringRoleregisteredCandidate : Candidate[]getRegisteredCandidates()0..*0..* 设计 E: 参考答案:设计A:这个设计使用了一个自返关联,但其中的registeredCandidate()方法有问题。
如果一个人既是学生又是老师,那么要想同时获得他作为学生对应的所有老师,以及他作为 老师对应的所有学生,getRegisteredCandidates ()方法得到的Candidate数组中并不能区 分上述的两种结果设计B:这个设计使用了一个泛化关系,但它并没有解决题中给出的新的要求事实上, 这个设计只是在题中已有设计之上的改进,实质还是一样的,并不能描述一个教师也可以是 某些课程的学生的情况设计C:这个设计定义了一个Role类,学生和教师是Role类的两个子类如果一个 Candida te对象是教师,可以调用Ins true tor类的get Regis teredCandida tes ()方法获得 所对应的所有学生;如果这个对象是学生,可以调用 Student 类的 getRegisteredCandidates ()方法获得所对应的所有教师;如果这个对象既是教师又是学生,那么分别调用Ins true tor 类的 get Regis teredCandida tes ()方法和 St uden t 类的 get Regis teredCandida tes ()方法 即可设计D:整个设计有着与B中类似的问题,即一个Candidate对象要么是一个学生,要 么是一个老师,不能同时都是,无法满足新的需求。
设计E:这个设计与D基本一致,只是把Candidate类与Role类之间的关联关系改成了 聚集关联,同样无法满足新的需求综上所述,设计C是最好的下图是MortgageApplication对象的状态图,假设有一个要求,即增加一个“Cancelled”, 图中除“ Closed ”状态外的任何状态都可以转换到该状态请画出修改后的状态图(请不同 的修改方法中哪种方法最好)InstructorStudentCandicatecandidateID : Integername :StringRoleregisteredCandidate : Candidate[]getRegisteredCandidates()0..*0..* 参考答案:方法 1:方法 2:方法2引入了组合状态和子状态,从而可以在组合状态Running中加入更多的子状态, 以保证组合状态的可扩展性所以说,方法2相对于方法1更好一些5. 请举例说明用户界面设计的基本原则参考答案:(1) 用户控制:用户应当感觉系统的运行在自己的控制之下在图形界面或基于Web的界 面中,用户指导程序的每一步执行;即使在程序进行某些处理或用户等待输出结果时,用户 同样保持对控制的敏感度。
举例:当程序进行某些需要占用较长时间的处理时,需要为用户提供及时的反馈信息,诸如 一个沙漏、一个等待的指示器或其他类似的东西2) 界面一致性:一致性要求用户界面遵循标准和常规的方式,让用户处在一个熟悉的和 可预见的环境之中,这主要体现在命名、编码、缩写、布局以及菜单、按钮和键盘功能在内 的控制使用等举例:一个运行在 Windows 平台上的三维几何造型系统应当采用 Windows 图形窗口的“外观 和感觉”,与Office类型软件保持一致的界面风格和操作方式3) 界面容错性:一个好的界面应该以一种宽容的态度允许用户进行实验和出错,使用户 在出现错误时能够方便地从错误中恢复举例:MicrosoftWord系统允许撤消用户对文档的许多最近操作,从而处理用户的误操作问 题4) 界面美观性:界面美观性是视觉上的吸引力,主要体现在具有平衡和对称性、合适的 色彩、各元素具有合理的对齐方式和间隔、相关元素适当分组、使用户可以方便地找到要操 作的元素等举例:清华大学软件学院综合信息服务系统的Web界面在平衡和对称、色彩、元素分组、用 户方便地查找信息等方面进行了良好的设计5) 界面可适应性:界面可适应性是指用户界面应该根据用户的个性要求及其对界面的熟 知程度而改变,即满足定制化和个性化的要求。
所谓定制化是在程序中声明用户的熟知程度, 用户界面可以根据熟知程度改变外观和行为;所谓个性化是使用户按照自己的习惯和爱好设 置用户界面元素举例:系统允许用户选择语言类型(中文、英文、意大利文等,)并系统根据用户定制的语言 类型显示不同语种的用户界面第9 章 软件实现(习题与参考答案)[选择题]1. ()在程序设计中使用括号以改善表达式的清晰性A)A. 真B. 假2. ()在程序设计中应尽可能对程序代码进行优化B)A. 真B. 假3. ()不要修补不好的程序,要重新写A)A. 真B. 假4. ()程序中的注释是可有可无的B)A. 真B. 假5. ()对递归定义的数据结构不要使用递归过程B)A. 真B. 假6. 为了使程序能在不同的计算机上运行,程序应当具有较好的()(A)A. 可移植性B. 可重用性C. 可维护性D. 可适用性7. 对于开发面向数据库应用的软件,应当选择的程序设计语言是()C)A. CB. PASCALC. SQLD. JAVA&下面对提高程序编码效率没有影响的是()D)A. 选择良好的设计方法B. 选择良好的算法C. 选择良好的数据结构D. 变量名的使用9. 为了保证软件的质量,使其具有较好的可维护性,关键在于()。
B)A. 选择合适的程序设计语言B. 选择好的程序设计风格C. 具有好的数据结构D. 选择好的运行环境10. 下面的()不是良好编码的原则C)A. 在开始编码之前建立单元测试B. 建立一种有助于理解的直观布局C. 保持变量名简短以便代码紧凑D. 确保注释与代码完全一致练习题] 1. 列出三种常见的专用程序设计语言,并说明它们的应用领域参考答案:(1) JAVA 语言:适用于跨平台的企业应用软件(2) LISP 语言:适用于人工智能软件(3) SQL 语言:适用于数据库应用软件2. 选择一个你认为最能满足软件工程要求的程序设计语言,并说明理由 参考答案:略3. 选择一种面向对象程序设计语言,总结其主要特性和特殊机制参考答案:略4. 你认为是否应该强制采用软件编码规范?请举出2-4个赞成的理由和1-3个反对的理由参考答案:赞成理由:(1) 增强代码的可读性2) 增强代码的可移植性3) 减少不必要的程序错误反对理由:1) 缺少个性2) 降低程序效率5. 请分析比较下面两个 for 循环的优缺点 第一个 for 循环:for (i = 0; i < N; i++){if (condition)DoSomething();elseDoOtherthing();}。




