`
ihuashao
  • 浏览: 4722993 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

开发者面试百问-软件项目管理部分答案

阅读更多

【上次回答了 软件开发者面试百问 中测试部分,这次,由于时间关系,简单回答一下软件项目管理部分的问题。这些问题的答案,一般没有正确与否,各个人回答不同,这里仅供大家参考。】

1.范围、时间、成本,这三项中哪些是可以由客户控制的?

范围、时间、成本,是项目管理中常说的三角关系。任何一方改变都可能牵扯到其他两方的变动。项目管理的本质,就是在保证质量的前提下,寻求这三者之间的最佳平衡。因为客户是需求方和投资方,客户有权对这三者进行控制,当然客户主要控制范围,即提出他们的需求——项目要实现的功能特性,其次,客户也非常关心能交付的时间和所付出的成本。在满足客户的需求情况下,可以在时间、成本上和客户进行交流、谈判。从项目管理的角度看,最好固定其中一项,其他两项可以根据实际状况来调节保证项目质量。

2.谁该对项目中所要付出的一切做出估算?谁有权设置最后期限?

项目成功是团队协作的结果。在对项目进行估算的时候,需要由参与项目各个环节的人进行符合实际的估算,最后汇总起来进行综合分析计算,获得项目总的估算结果。

项目的最后期限设置除了客户定死最后交付时间,其他的情况都是根据项目的进度估算结果而进行符合实际的计划得出的。

3.减少交付的次数,或是减少每个每个交付中的工作量,你喜欢哪种做法?

根据项目的类型和项目进行中的实际情况来决定,如果项目是规模比较大,时间长的,那么就应增加交付次数或者减少每个每个交付中的工作量,以便及时考察项目进展,保证项目进度。例如,一个项目按计划进行到第一个里程碑发现项目进度明显落后,而下一个检查点(也就是交付的工作量)距离还很长管理层需要及时了解其进展,那么交付的次数的就要根据现在的时间状况来增加。反过来,如果这个项目的进度非常好,甚至超前,而下一个检查点(也就是交付的工作量)距离还很短,我们就可以减少交付次数。

在传统的软件项目中,开发周期比较长,往往减少交付的次数,更好地控制质量;而现在,有一部分公司比较倾向于敏捷方法,喜欢减少每个交付中的工作量,交付周期只有几周时间(最短的周期,可能是一周),拥抱变化,更好地、更及时地满足用户的需求。而对互联网上的web应用软件开发,“减少每个每个交付中的工作量”是一个比较好的策略,力求及时获得用户的反馈,将用户的需求及时融入新的版本,及时发布出去,赢得竞争市场。例如,在我新书《软件工程导论》中专门有一节讨论“永远的Beta”的软件工程思想。

4.你喜欢用哪种图来跟踪项目进度?

还是要根据项目的特点来决定,具体项目具体对待,当然,有时也不能由自己决定,而是取决于公司已有的工具和习惯。对于复杂、规模大的项目,可能要借助甘特图和网络图来分析和跟踪进度。简单、规模小的项目根据进度报告百分比和表格跟踪就可以了。

5.迭代和增量的区别在哪里?

软件开发不是一躇而就,其过程犹如雕琢一件工艺品,由无形到有形、由粗到细,很难一次就能开发出功能完善、强大的一个版本,而往往是分阶段进行,一个版本接一个版本的发布出去。软件开发分阶段可以通过两种模型来描述,即增量模型和迭代模型

增量模型描述软件产品的不同阶段是按产品所具有的功能进行划分,先开发主要功能或用户最需要功能,然后,随着时间推进,不断增加新的辅助功能或次要功能,最终开发出一个强大的、功能完善的、高质量的、稳定的产品

迭代模型描述软件产品的不同阶段是按产品深度或细化的程度来划分,先将产品的整个框架都建立起来,在系统的初期,已经具有用户所需求的全部功能。然后,随着时间推进,不断细化已有的功能或完善已有功能,这个过程好像是一个迭代的过程。最终的目标是一致的,也是为了实现一个强大的、功能完善的、高质量的、稳定的产品。

举一个例子:假设现在要开发A,B,C,D四个大的业务功能,每个功能都需要开发两周的时间.则对于增量方法而言可以将四个功能分为两次增量来完成,第一个增量完成A,B功能,第二次增量完成C,D功能;而对于迭代开发来将则是分两次迭代来开发,第一次迭代完成A,B,C,D四个基本业务功能但不含复杂的业务逻辑,而第二个功能再逐渐细化补充完整相关的业务逻辑.在第一个月过去后采用增量开始时候A,B全部开发完成而C,D还一点都没有动;而采用迭代开发的时候A,B,C,D四个的基础功能都已经完成.

6.试着解释一下风险管理中用到的实践。风险该如何管理

风险管理的实践很多,包括头脑风暴、风险列表(checklist)等。例如,人们常采用十大风险清单:在项目进行中,不时地更新和处理项目当前风险最高的前十项风险,以保证项目不脱离主轨道。因为项目中的风险大大小小会很多。十大风险清单就是抓住重要的风险及时处理,而又关系的小风险可能也就随之消失。从这里可以看出,风险也是动态的,需要经常地、及时地评估当前的风险,例如每周或每两周进行一次风险评估。

风险管理就是通过风险的识别、预测、估算和衡量、选择有效的方法和手段,对风险进行预防、避免、降低或者转移的管理过程。

7.你喜欢任务分解还是滚动式计划?

根据项目特点来定,一般会选用任务分解的计划,责任清楚,可控性更强。滚动式计划的灵活性比较强,适应性比较好,但容易引起大家对计划不够重视,计划能力降低,或者可控性会差些。有时会将这两种方法结合起来使用。

8.你需要哪些东西帮助你判断项目是否符合时间要求,在预算范围内运作?

  • 前提是这个项目的进度计划和成本计划是符合项目实际情况并不断随着项目的时间发展而滚动更新的。
  • 确保收集的进度和花费的成本就真实可靠的。
  • 在此时项目的范围没有影响到时间和成本的规划。

那么就可以根据项目时间与计划的内容进行对比来判断项目符合时间要求,在预算范围内运作。常用的方法有基线对比法和挣值法。

9. DSDMPrince2Scrum,这三者之间有哪些区别?

  • 动态系统开发方法(Dynamic System Development methodDSDM)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。该方法的详细内容,可以参考:DSDM业务中心框架开发方法(第二版)。这种方法主要是在英国应用比较广泛。一般来说,敏捷方法适合于规模比较小、变化比较快(需求不够稳定)的项目,而对大规模软件,特别是在关键性、可靠性、安全性方面有很高要求的开发项目,则不适合。当然,可以在某些项目小组内实施;也是可以的。敏捷开发的方法很多,包括下面所说的Scrum、自适应软件开发(Adaptive Software Development,ASD)、Crystal方法和特性驱动开发(Feature-Driven Development,FDD),可以参考《敏捷软件开发生态系统》
  • PRINCE2(PRojects IN Controlled Environments 2为项目管理提供了一种结构化的方法,这种方法最早是在1989年由英国政府计算机和电信中心(CCTA)开发的,作为英国政府IT项目管理的标准。PRINCE2如今日益流行,是英国项目管理的标准,它为管理项目提供清晰界定工作框架,介绍如何协调项目中的人和活动、如何设计和监督项目以及在项目发生变更的情况下如何调整的流程。每一个流程都详细标出关键的输入、输出和具体目标及要执行的活动,这为计划偏差提供了自发的控制。这种方法把项目划分为多个管理阶段,保证让所有资源得到有效的控制。依靠严格的监控,项目在控制和组织的方式下得到执行。详细参考:http://zh.wikipedia.org/wiki/PRINCE2
  • Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。Scrum是一个包括了一系列实践和预定义角色的过程骨架,其主要角色包括同项目经理类似的Scrum主管角色——负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。在每一次冲刺(一般为15到30天周期 ),开发团队创建可用的、可随时推出的软件一个增量(小版本)。每一个冲刺所要实现的特性来自产品订单(product backlog), 产品订单是按照优先级排列的工作需求。在冲刺的过程中,没有人能够变更冲刺订单(sprint backlog),这意味着在一个冲刺中需求是被冻结的。

    管理Scrum过程有很多实施方法,从白板上的即时贴到软件包。Scrum最大的好处是它非常容易学习,而且应用Scrum不需要太多的投入。详见:http://zh.wikipedia.org/w/index.php?title=Scrum&variant=zh-cn

方法的应用,同样由项目规模、业务特点(需求是否稳定)等决定,而且还受企业文化、流程和领导意识等决定。如果需求稳定、项目规模比较大或周期比较长,一般会选用PRINCE2,相反,可能会选择DSDM或Scrum,后两者没有本质区别,只是具有不同的最佳实践

正如有人评论,国内对Scrum还比较熟悉,对DSDM、PRINCE2等不够熟悉,应用不多。而业界最熟悉的还是CMMI、RUP(IBM Rational Unify Process 统一过程)、XP(敏捷方法的极限编程 eXtreme Programming)和MSF(Microsoft Solution Framework,微软公司软件开发解决方案框架),可参考:原创软件开发过程(CMMI/RUP/XP/MSF)是与非


10.如果客户想要的东西太多,你在范围和时间上怎样跟他达成一致呢?

首先要向客户说明,如果在某个时间内去做不可能完成的工作,其结果必然是质量得不到保证,或者所化的成本过大。应该没有客户想做赔本的生意,每个客户都会重视质量,而不愿意损害自己的利益。

然后,和客户一起,按需求重要性、紧急性等对需求进行分类,分为不同的等级,然后从优先级高的需求开始,来估算不同优先级类别的需求实现的工作量。设定几个不同的开发周期或交付时间,从而由用户作出选择,例如:

(1) 只做优先级最高的那类需求,开发周期需要3个月;

(2) 做优先级最高和优先级高的那两类需求,开发周期需要7个月;

(3) 做优先级最高、高和中等的共3类需求,开发周期需要12个月;

(4) 所有需求都实现,开发周期需要18个月

用户可能选(2), 先完成两类需求,签订合同。等这合同履行很好之后,再继续下一步的开发。


原创开发者面试百问-测试部分答案

转载软件开发者面试百问


分享到:
评论

相关推荐

    软件开发者面试百问.pdf

    软件开发者面试百问是一篇关于软件开发面试的文章,作者Jurgen Appelo总结了软件开发领域中的多个知识点,涵盖软件工程的多个方面,涉及需求、功能设计、技术设计、程序设计、算法、数据结构、测试、维护、配置管理...

    软件开发面试百问-软件开发面试百问

    11. **软技能**:除了技术知识,良好的沟通能力、团队协作、项目管理能力、自我学习和适应新技术的能力也是面试官关注的焦点。 12. **行业知识**:对当前的技术趋势,如云计算、大数据、人工智能、区块链等的理解,...

    软件开发者面试百问 不要错过

    《软件开发者面试百问》是一份旨在帮助招聘者筛选优秀软件开发人才的面试问题集锦。这份资料覆盖了软件开发的多个重要方面,包括需求分析、功能设计、技术设计以及程序设计等。以下是对其中一些关键知识点的详细解读...

    转载:软件开发者面试百问

    【软件开发者面试百问】是一份旨在帮助招聘者筛选优秀软件开发者的面试问题集锦,覆盖了软件工程的多个知识领域。以下是对标题和描述中所述知识点的详细说明: 1. **需求分析**: - 非功能性需求:如性能、可用性...

    软件开发者面试百问(涵盖了软件工程知识体系中定义的大多数知识域)

    《软件开发者面试百问》是针对软件工程领域面试的一个综合指南,旨在帮助招聘者筛选出优秀的程序员和架构师。这份清单覆盖了软件工程知识体系的多个关键领域,如需求分析、功能设计、技术设计和程序设计,同时也包含...

    Java开发者技术书籍大全 - Java入门书籍,面试参考书等。.zip

    Java开发者技术书籍大全 - Java入门书籍,Java基础及进阶书籍,框架与中间件,架构设计,设计模式,数学与算法,JVM周边语言,项目管理&领导力&流程,职业素养与个人成长,格局与视野,面试参考书等。 软件...

    软件开发者面试(很有意义的)

    以下是从“软件开发者面试百问.html”这个压缩包文件中可以提炼出的一些重要知识点,这些内容对于准备面试的开发者来说是非常有价值的。 1. **基础编程知识**:面试通常会从基础编程概念开始,如数据类型、变量、...

    软件开发者面试百问百答.doc

    软件开发者面试中,经常会...以上是软件开发者面试中可能涉及的一些关键知识点,涵盖项目管理、风险管理、软件开发流程、团队协作和质量保证等多个方面。了解并掌握这些知识点对于面试和实际工作中解决问题至关重要。

    Java开发者技术书籍大全 - Java入门书籍.zip

    包括:,Java基础及进阶书籍,框架与中间件,架构设计,设计模式,数学与算法,JVM周边语言,项目管理&领导力&流程,职业素养与个人成长,格局与视野,面试参考书等。 Java是一种高性能、跨平台的面向对象...

    .NET面试题----------.NET常见面试100题帮助您轻松过面试一关

    .NET框架是微软开发的一种软件开发平台,广泛应用于构建和运行基于Windows的应用程序。这份压缩包包含的".NET面试题----------.NET常见面试100题帮助您轻松过面试一关"资源,旨在帮助求职者准备.NET相关的面试,涵盖...

    【Java面试资料】-Dubbo面试及答案(上)

    【Java面试资料】-Dubbo面试及答案(上)这份资料主要聚焦于Java开发者在面试过程中可能会遇到的关于Dubbo的相关问题及其解答。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,广泛应用于分布式系统开发。...

    软件面试题-及参考答案软件面试题-及参考答案软件面试题-及参考答案软件面试题-及参考答案

    本资料包"软件面试题-及参考答案"显然是为帮助应聘者准备软件开发岗位面试而精心编排的。它包含了一个名为"软件面试题_及参考答案.md"的Markdown文件,这类文件通常用于技术文档编写,格式清晰,便于阅读和学习。 ...

    C#开发者面试简历

    【C#开发者面试简历】 作为一位C#开发者,面试简历是展示个人技能和经验的关键工具。一份优秀的简历应该清晰地突出C#编程语言的专业技能,同时也应包含与软件开发相关的其他技术能力。以下是一些核心知识点,对于C#...

    最新大厂面试题-软件开发必备

    最后,软技能也是评估的一部分,如沟通能力、问题解决能力、项目管理经验、团队合作精神等。面试官会通过行为面试题来了解这些方面。 通过对这些知识点的深入理解和实践,软件开发人员可以更好地应对大厂的面试挑战...

    软件测试经典面试题 (超实用)

    ### 重要知识点解析 #### 1. 兼容性测试及其侧重方面 - **兼容性测试**是指在...以上内容涵盖了软件测试领域的多个核心知识点,从兼容性测试到具体的测试工具使用方法,为面试准备提供了丰富的理论基础和实践经验。

    面试宝典-鸿蒙应用,一款面向前端程序员的刷题应用

    10. **项目管理**:敏捷开发、Scrum方法论、持续集成/持续部署(CI/CD)实践。 通过对以上知识点的掌握和应用,前端开发者不仅可以提高自身技能,还能在面试中表现出专业素养,增加获得理想职位的机会。同时,"面试...

    需求分析面试总结--深交所.zip

    在IT行业中,需求分析是软件开发过程中的关键环节,它为项目的成功奠定了坚实的基础。针对“需求分析面试总结--深交所.zip”这个主题,我们可以深入探讨以下几个相关知识点: 1. **需求分析**:需求分析是软件工程...

    软件开发面试常见问题

    - 问题可能涵盖行业知识、项目管理、敏捷开发方法(如Scrum、Kanban)等。 - 面试官还会评估你的软技能,如团队协作、沟通和领导力。 6. **面试记录和反思**: - 面试后进行自我评估,记录面试官的问题和你的...

    Java开发者或者大数据开发者面试知识点整理.zip

    Java开发者和大数据开发者的面试知识点涵盖了许多领域,包括但不限于编程基础、Java核心技术、大数据处理框架、并发编程、数据库管理以及项目经验等。以下是对这些关键领域的详细解释: 1. **编程基础**:这是所有...

    Mysql----MySQL面试题和答案.rar

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。为了在面试中脱颖而出,了解并掌握MySQL的关键概念和技术至关重要。以下是一些可能会在面试中遇到的MySQL知识点,这些...

Global site tag (gtag.js) - Google Analytics