㈠ 如何营造高效软件开发团队
这个理论的东西太多了,理论上的原则就是严格遵守software engineering规范,就不给你啰嗦了,各种书籍资料一大堆,网上一搜也一大堆。
主要给你说说我这些年组织团队的心得体会吧:
首先,高效率的软件开发团队的关键因素是团队结构和"人"。
选择团队组织结构和人员是非常重要的起始环节。而且这两个方面是相辅相成的。团队组织结构大体上分为横向和纵向两种,横向结构表示团队成员的权限和等级是相同的,即每个人在团队中的作用和地位是一样的;纵向表示团队是一种从上而下的管理组织结构,典型的分为项目经理、架构人员、主程序员、程序员、测试负责人、测试专员等等。具体的实践过程中,还会把这两种结构相互融合,构成横向为主纵向为辅,或者横向为辅纵向为主的组织结构。
在选人上,一般注重人员沟通能力和技术能力,学习能力虽然也很重要,但是绝对不是高效软件开发团队需要重视的方面。我是不会要技术能力差的人的,这种人只能浪费大家的时间,要么不断跟他解释、要么就要等待他完成自己的学习曲线,高效的开发团队中不会有技术能力差的人。如果有人说他自己学习能力强,短时间就能提高自己,那么我会说,请你先用短时间来提高自己,再申请加入我的团队。很多企业都是先招人,然后慢慢培养,但是先进的企业即使是招人来培养也是招能力高的人(比如着名高校的优秀应届毕业生)。
选好人后,再根据现有人员来决定到底是哪种架构。如果手上的人员沟通能力普遍非常强,那么横向为主的架构是首选;如果他们的沟通能力较弱,而个别人沟通能力强,那么纵向为主的架构是首选。
其次,必须运用奖惩等激励机制来提高责任心。很多人在团队中工作,都只是为了工资、积累经验等与自身有关的因素,其实不能过分要求他们对团队负责。但是作为团队组织者,必须让他们把自己与团队结合起来,让他们的自身利益与团队利益协调一致。比如,订立团队项目终结奖励机制,对团队成员进行项目红利分配,在订立项目合同的时候对项目的红利分配定为浮动式,可以设定为如果客户在一段时间的软件使用期内找到一个不能在2天内解决的bug,该bug涉及的负责人员的项目红利相应减少一定份额;这样就能在开发的过程中充分调动所有人的积极性,尽量的完善用户需求、架构设计、代码质量、测试环节,为了减少用户可能发现的bug,并且完善文档,用来提高解决bug的效率,从而能保证自己最后得到的项目红利不会减少,或者不会过分减少。
其实还有很多类似内容涉及到提高软件开发团队效率,主要原理是和营造团队文化、营造团队成员的集体思维意识有关。
㈡ 软件开发步骤包括哪些过程
软件系统开发分为以下几个步骤:
一、需求分析
1、需求分析有分为业务需求、用户需求、功能需求三种 类型:
A、业务需求(business requirement):反映了组织机构或客户对系统、产品高层次的目的要求,它们在项目视图与范围文档中予以说明。
B、用户需求(user requirement) :文档描述了用户使用产品必须要完成的任务,这在使用实例文档或方案脚本说明中予以说明。
C、功能需求(functional requirement):定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。
2、需求调研分析
A、相关系统分析员和用户初步了解需求,然后用WORD列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
B、系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚例用系统大致的大功能模块,大功能模块有哪些小功能模块,并且还例出相关的界面和界面功能。
C、系统分析员和用户再次确认需求。
二、软件设计
概要设计
首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计
进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
业务需求和用户需求是软件需求分析的基础,也是软件构建的前提。系统分析员通过对业务需求和用户需求的分解,将其转换成形式化描述的软件功能需求。开发软件系统最为困难的部分,就是准确说明开发什么。这就需要在开发的过程中不断的与用户进行交流与探讨,使系统更加详尽,准确到位。这就需要确定用户是否需要这样的产品类型以及获取每个用户类的需求。
详细设计
在概要设计的基础上,开发者需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,应当保证软件的需求完全分配给整个软件。以便进行编码和测试。详细设计应当足够详细,能够根据详细设计报告进行编码。编码
在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。软件交付准备在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。 《用户安装手册》应详细介绍安装软件对运行环境的要求、安装软件的定义和内容、在客户端、服务器端及中间件的具体安装步骤、安装后的系统配置。 《用户使用指南》应包括软件各项功能的使用流程、操作步骤、相应业务介绍、特殊提示和注意事项等方面的内容,在需要时还应举例说明。
三、测试
测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。
四、培训及上线
再次强调内容整理于网络资源,仅供参考。
㈢ 如何成为一名优秀的软件研发工程师
如何成为一名优秀的软件研发工程师
随着社会的高速发展,电脑的使用也已经日益普及。同时Java的应用可以说是无处不在,从桌面应办公用到网络数据库等应用,从PC到嵌入式移动平台,从Java小应用程序(Applet)到架构庞大的J2EE企业级解决方案,处处都有Java的身影,就连美国大型太空项目当中,也使用了Java来开发了控制系统和相关软件。如此巨大的应用市场,造就了JAVA软件工程师的巨大需求,选择JAVA,有无数机会在等着你!
职业发展路径:
根据IDC的统计数字,在所有软件开发类人才的需求中,对Java软件工程师的需求达到全部需求量的60%-70%。 目前,虽然Java人才的薪水很高,但是对该类人才需求旺盛的IT企业却很难招聘到合格的Java人员。其中,最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人要求有较大的差距。因此,计算机专业的大学生欲成为Java工程师,最便捷的一条路就是参加以实战项目为主要教学方法的Java职业技能培训,从而有效地缩短同企业具体用人要求之间的差距。
从事该行业所需的职业素质,您具备吗?
第一、需求分析能力
对于软件工程师而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者, 他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?
一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这 时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能 上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于 非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于 项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时 候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失 去这些准则。
程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同 样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的, 前者强调的是更好的.支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安 装使用的简捷性。
第二、项目设计方法和流程处理能力
程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比 如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的 整体设计。
设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。
一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立 数据词典;他需要加工逻辑流图以形成整体的系统处理流程。
一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。 当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把握。
第三、复用设计和模块化分解能力
这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?
作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑, 而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的 分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需 求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做 的,但是后来不一样了,机器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立 部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的 汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程 也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随 意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都 是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便 挂接,这就是复用化的模块设计明显的一个佐证。
将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅 仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的 工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。
第四、整体项目评估能力
作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配 置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评 估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需 要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件 系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不 如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财 富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基 本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累 那种产品化研发的经验,这也是没有办法的事情。
第五、团队组织管理能力
完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能 力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因 为这里面设计了一些技术性的指标和因素。
首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码 行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。
其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主 程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的 需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥 组队的效率。 ;
㈣ 软件团队的如何建设和软件开发如何管理
这些素质中,有些我们可以通过考试的方法了解,有些可以询问,也有不少特质需要我们自己去感知。在我们招聘的过程中,技术人员的笔试是很重要的,必须根据需要设立不同的考题对人员进行考察。对于人员的能力和经验除了考虑目前他所具备的能力以外,还要考虑他的潜力,有些人具有很强的学习能力,在具备一定基础知识的情况下,可以降低对这种人经验的要求。除了能力以外,一个人的情商对于我们的组织来说非常重要。我们可以通过心理测试的方式了解一个人的情商,同时,最重要的是,作为管理者,我们必须要具有感知一个人性格特点的能力。这样,在招聘过程中,我们才能尽量做到选择出合适的人才。在选择人才的时候,我们不要一味追求便于管理,不要怕有能力的人。对于性格过于内向的人我们也要多加考虑,很多内向的人同时也具有执拗、各色、生硬、融合性差的特点,因此内向不等于便于管理。 有了合适的人选,团队建立了,还需要不断提升团队的能力,需要培养具有特色的团队精神。正如一个球队,有了合适的人选,还必须有高质量的训练,严格的细节要求,才可能在竞争中获得胜利。一个团队也是一样,需要不断的提升技术能力,提升凝聚力,提升协作能力,提升士气,才能在一个个项目中获得成功。 那么,团队精神的培养,团队能力的提升从何着手呢?首先要确立团队的风格,例如建立这样一种团队风格:分享、透明、责任、协作、团结、激情。在确立了这个风格以后,要在日常的工作中加以贯彻。 分享,主要是指技术的分享,可以定期举办技术讲座,让每个人都参与进来,领导者可以确立技术方向,然后大家分享彼此的知识和经验,这种方式可以很快地提升团队整体技术能力,分享的过程中也增加了成员间的相互了解和信任。 透明,是指管理上要透明,在我们的团队中没有不能拿出来说的秘密(工资除外),团队成员间秘密的形成也是团队隔阂的开始。 积极的态度、责任心是软件开发必不可少的素质,不同的责任心开发出来的软件可用性、性能、稳定性、出错率可能相差很远,发现由责任心引起的问题一定要坚决处理,提出公开的批评,根据情况作出适当的处罚,确保以后避免类似的错误。 软件工程的过程和软件设计的模块化、分层结构导致了软件组织成员分工的不同,这就要求成员间要有很高的协作性、团结性。对各项工作多进行讨论,不要怕争论,不要独断专行,最后执行讨论后的结果,多讨论有助于增进协作和团结。 每个人都需要一个舞台,在团队管理中一定要了解每一个团队成员的特点和能力,把最适合的任务分配给他,要为每一个人营造一个舞台,要充分发挥每个人的作用。软件是一个团队的工作,不是团队中一个明星的工作。就象篮球是5个人的运动,足球是11个人运动一样。要让所有的团队成员都参与到工作中来,一同享受工作的乐趣和成功的喜悦。不要造成忙的忙,闲的闲的现象,那样的话忙的、闲的都会产生不满情绪,最终导致不可调和的矛盾。 除了上述方法可以培养团队的精神,促进团队能力的提升以外,另外一个重要的手段是确立团队不同阶段目标,并讨论采用什么样的手段达到目标。目标包括项目目标和能力目标,只有有了正确的目标,在团队精神的鼓舞下,团队才会产生激情。很多时候,激情的迸发可以产生意想不到的力量。 在培养团队精神的时候也要避免一些严重影响团队精神的事情发生。不要任人唯亲,要唯贤是用;不要独断专行,要群策群力;不要高压强制,要鼓励引导。 在建设了一个好的团队以后,任务已经完成了一半。软件工程的特殊性要求我们在软件开发上要有一套合理的管理方法。这在很多软件工程的着作中作了大量的描述,这里我们只是做一个简单的经验介绍。我们分成一下3点进行阐述: .规范 .流程 .考核 规范。无论开发什么软件系统,都必须按照一定的规范进行。软件开发过程采用规范进行管理的必要性相信任何一个管理者都会有明确的认识,这里我们只谈采用什么规范,怎么样执行规范。软件工程的规范主要有CMM和ISO9000。通常我们采用CMM规范,并根据软件组织的具体情况对规范进行相应的裁减。不管怎么裁减,在开发管理过程中,以下一些关键环节是不可缺少的:需求分析,架构设计,概要设计,编码,测试。通常,我们可以利用配置管理和版本管理的工具来进行开发过程的管理。在这些过程中,我们必须按照一定的CMM规范产生相应的过程输出。我们采用的规范都要形成相应的书面材料或者模版以供员工阅读。总结一下我们需要的基本模版:需求分析模版、设计模版(架构、模块、数据)、编码规范、测试规范,基本管理工具:版本管理、配置管理、测试流程管理。 流程。流程涵盖软件组织的内部流程以及软件组织和需求单位之间的外部流程。外部流程包括需求讨论流程、需求确认流程、系统初审流程、系统终审流程等等。内部流程包括需求分析流程、设计流程、开发流程、测试流程等等。每个组织要根据自身特点和项目特点按照CMM规范的要求制定流程,并对流程进行讲解,按照流程严格执行。在流程的各个环节完成软件项目的输出:需求书、设计书、代码、产品、测试记录、说明书等等。 除了正确的规范和流程以外,任何一项工作都要进行考核。考核可以是全方位的,除了工作业绩外,协作意识、学习意识、责任意识都在考核的范围内。软件的输出是个人脑力劳动的输出,独立完成同一个功能,不同的开发人员输出产品的性能、稳定性很难完全一致,因此工作业绩的量化很难,对于工作业绩可以采用以下公式进行评估: 工作业绩=工作量(小时)*复杂度(1-10)*创新性(1-10,是否可以参考以前的项目)*重要性(1-10)*质量(1-10)。 不要用输出代码或者文档的长度来衡量工作量,因为有时一项重要的任务思考很长时间,但是输出却很短。复杂度、创新性、重要性、质量包含了对能力的评估,使得能力强的人工作业绩能够得到体现。复杂度、创新性、重要性、质量标准的确定是很难的,不同的人有不同的见解,这套标准需要软件工程的人员专门研究确定,这个标准可以是公司自身的标准。协作意识、学习意识、责任意识也是考核的一方面,这些标准的制定也需要软件工程人员研究后确定。 最后我们对软件开发团队的建设、软件开发管理的一些理念做一个总结: .根据技术要求、项目要求确定团队的模块功能,既能满足要求又不能形成岗位重复和浪费。 .选择合适的团队成员,利用书面测试考察应聘者的能力、经验,感知应聘者的情伤,避免招聘难于融合到团队的人员。 .建立团队的风格,比如:分享、透明、责任、协作、团结、激情。确立正确的团队目标,给每个人一个合适的舞台去发挥,同时避免不利于团队精神形成的管理方法。 .制定适合企业的软件工程规范,并严格执行。 .制定适合企业的流程,并严格执行。 .制定适合企业的考核体系,并严格执行。
㈤ 软件项目开发工作流程
软件开发流程可份为8步
一:需求分析
1.相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
2.系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。
3.系统分析员向用户再次确认需求。
二:概要设计
首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
三:详细设计
在概要设计的基础上,开发者需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。
四:编码
在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。
五:测试
测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会有不可预料的问题存在。完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,直到这个软件被彻底淘汰为止。
六:软件交付
在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
七:验收
用户验收。
八:维护
根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改。
㈥ 如何制作开发一个软件
1、需求分析
相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。
系统分析员向用户再次确认需求。
2、概要设计
首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。
3、详细设计
在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。
4、编码
在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。
5、测试
测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。软件测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。
6、软件交付
在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
7、验收
用户验收。
8、维护
根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改。
(6)怎么组织软件研发扩展阅读
软件开发专业主要培养德智体全面发展,具有一定计算机软硬件维护、网络组建、维护管理的高级实用技术型人才。
通过专业的学习,能熟练掌握常用的计算机软件的使用、维护与技巧;在硬件方面学生应了解计算机硬件的发展,熟练掌握计算机组装的方法,能熟练运用应用软件检测计算机性能、故障的范围所在,掌握硬件故障的一般处理方法。
在网络方面,学生应掌握如今流行网络的技术特点,掌握网络工程、网络维护、网络安全及应用方面的知识。能胜任一般网络工程方案的设计、组建、网络维护、及简单网站的建设与维护。
㈦ 如何创建软件开发团队
这只是Tim Lister在Agile 2013的演讲中引用开发生活学习的两个例子,他是一位富有经验的软件开发人员。为了更好的一起合作,我们努力了四十年,他在田纳西州的纳什维尔这样说。
Lister是位于纽约市Atlantic Systems Guild公司的主席,也是《华尔兹与熊:管理软件项目风险(Waltzing With Bears: Managing Software Project Risk)》、《人件:生产项目和团队与肾上腺素吸毒者(Peopleware: Proctive Projects and Teams and Adrenaline Junkies)》以及《模板僵尸:理解模式的项目行为(Template Zombies: Understanding Patterns of Project Behavior)》这几本书的联合作者。他给开发人员分提出一些项目管理方面的建议,开发人员如何培养他们的职业生涯,如何处理仲裁纠纷涉及的挑战,以及在Agile 2013会议上的更多分享,此一年一度会议由非盈利组织软件组织敏捷联盟(Agile Alliance)举行的。
他的建议包括如下:
在创建软件开发团队中,选择雇佣合适的人员并不仅仅只是第一步,它也是最重要的一步
。Lister回忆了一下他作为软件项目领导的一天,当时他是一个承包商,不负责招聘。有一个新人第一天来公司报道。Lister当时只看到那个人的简历,没有其它别的。Lister把年轻的开发员直接带到了代码前,让他马上参与到项目中。不幸地,这个新人对于代码的喜爱并不如他在他的简历上和面试中表现的那样。午饭时候他离开了,再也没有回来 。
从雇佣到组织一组开发人员,组织一个软件开发团队,这在任何一个项目中都是最重要的,Lister.说。项目经理需要尽职尽责地调动起所有有希望的团队成员。
不要害怕把最好的和最闪光的人员放在一个团队中。
Lister回忆了在1992他在国防部的Arlie委员会项目中工作的情景。当时他在软件开发人员名册中看到一些了不起人员的名字,如Grady Booch,他担心可能会血溅当场。
即使大部分的团队成员过去曾是大佬级人物,可能会有一些争执,但项目还是会顺畅地运行。项目中的每一个人,为了软件系统的开发都会把个人自我放到一边。如果一大群像我们一样的自大狂可以胜任它,Lister说,你的团队也有很多机会。
当软件团队内部出现争论时,让每一个人都发现自己的意见。
确保他们知道他们很努力,而且他们的意见将会被考虑,即使他们只是在抒发自己的个人情感,没有提出解决方案。
Lister在他担任美国仲裁协会法官时学到了一个教训。在仲裁中,如果双方都是进行情感的请求,这将不会提到法庭上打官司。通常,对方律师将试图指出反对理由,转移话题,停止讨论另一个方面。年长的仲裁者给Lister展示了一项技术,他称为神奇的手指(the magic finger)用于这些情况。该技术要求法官用手指在空气中指一个律师站的方向,同时保持目光接触证人。一方面,他让律师知道,作为一个法官知道将要发生什么,你选择认可它。另一方面,法官对另一边也做了相同的处理。神奇的手指也用来解决小组内部争端, Lister.说。
记录下你所做的、你的专业见解及意见。
写作经验是有价值的,无论你是写论文、博文、对行业出版物或书籍的文章,Lister说。为了记录,开发人员必须把他的思想紧密地结合,并确保它支持某个观点。这一流程提升了编者每天的工作质量。
记录还要让同行审查。从Lister的经验来年,同行审查提供了强有力的支持、包含重要的反馈和有趣的讨论。有论文对于提取的你思想和意见,并把些思想从一个框架移动到另一个框架是一个很好的方法,他说。
找到工作的乐趣,并享受工作。
它引用了软件组织Red Gate软件公司,在此公司中应用开发的确是很享受。联合创始Neil Davidson 和Simon Galbraith培养了这样的一个环境和文化:在此环境和文化中好的开发人员茁壮成长。走进这个地方,你会不自觉地笑,他说。
㈧ 如何组织软件开发团队
这跟你要开发什么软件、使用什么开发模式、有多少预算、有多少开发时间等很多因素有关,比较复杂。在软件工程领域,这是一个大问题,相关论文不计其数,有兴趣可以查阅期刊文献。
给你说说最常用的吧,是一种基于纵向管理结构和瀑布开发模式来进行组织的开发团队。分为:
项目负责人:负责统筹项目运营方面的一切事务,预算管理、进度查询、会议组织安排、职能分配、客户对话洽谈等等。
架构师:负责进行需求分析、软件架构构建、概念与逻辑设计、功能细分、系统性能分析等等。
前台/界面设计师:主要负责软件GUI设计。
数据库工程师:负责数据库的搭建、优化和管理。
程序员:负责后台代码编写。
测试员:根据软件测试技术来进行相应的功能测试,比如黑盒、白盒测试、单元测试等等。
客服人员:负责软件到客户的安装、使用、售后、答疑等问题。
根据项目大小和任务量,每一个职能分类可以是一个人或几个人,形成局部纵向上下级负责制,比如项目经理与副经理、界面设计总监与界面设计师、总软件工程师与程序员等等。
㈨ 高效软件开发团队如何建设
苏州软件公司认为软件项目团队是由一组为了实现某一软件项目而相互协作的个体所组成的群体。它的根本使命是在项目经理的直接领导下,为实现具体项目的目标,完成具体项目所确定的各项任务而共同努力,协调一致和有效地工作。 三国志里有句话:“伏龙、凤雏,两人得一,可安天下。”刘备得到伏龙、凤雏二人,而汉室最终没有复兴。这说明一个道理:有了优秀的人才,也不一定能干成一番事业。因此,需要将优秀的软件人才组织成一个高效的软件团队。软件项目团队运行的成功与否,决定着软件项目最终的成败。下面从3个方面探讨与软件团队建设有关的问题。 高效软件开发团队的特征 苏州adnroid开发认为高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作的基础之上的,成员共同迎接挑战,有效地计划、协调和管理各自的工作以至完成明确的目标。高效的开发团队具有如下特征。 1)具有明确且有挑战性的共同目标 有一个故事:一条猎狗将兔子赶出了窝,一直追赶他,追了很久仍没有抓到。一个牧羊人看到此种情景停下来,讥笑猎狗说:“你们两个之间小的反而跑得快很多。”猎狗回答说:“你不知道我们两个跑是完全不同的,我仅仅为了一顿餐而跑,而他却是为了性命而跑呀。”这个寓言揭示了:兔子与猎狗做一样的事情,都拼命地跑步,然而,他们的目标是不一致的,其目标的不一致,导致了其动力也会不一样。 同理,在软件项目团队中,不同成员的目标可能是不一致的。但是,高效的项目团队必须拥有一个明确的而且有挑战性的目标,这个目标就是客户的需求。项目团队中的所有成员都应该了解和认同这一目标,并且将个人的发展计划与项目目标相协调,为实现项目的美好前景而共同奋斗。 2)团队具有很强的凝聚力 苏州安卓软件开发认为钓过螃蟹的人或许都知道,篓子中放了一群螃蟹,不必盖上盖子,螃蟹是爬不出去的,因为只要有一只想往上爬,其他螃蟹便会纷纷攀附在它的身上,结果是把它拉下来,最后没有一只能够出去。团队里常有一些人,嫉妒别人的成就与杰出表现,天天想尽办法破坏与打压,如果不予去除,久而久之,组织里只剩下一群互相牵制、毫无凝聚力的螃蟹。 在一个高效的软件开发团队中,项目成员为一个整体共同进行工作,应该充分认识到团队合作的重要性,将整体的成功与个人的利益联系起来。团队成员之间应该相互支持、互相交流,形成强大的凝聚力。 3)具有融洽的交流环境 一个软件开发团队即使没有高深的技术背景,没有突出的项目管理能力,只要其内部交流通畅并以务实态度解决问题,一样可以开发出优秀的产品。软件开发团队的内部交流是很重要的,是建设一个有战斗力的团队所应充分重视的。团队内部交流包括两方面:技术交流和思想交流。 苏州erp软件认为团队成员的技术交流不但可以增进团队成员之间的友谊,更能拓宽成员的技术视野,迅速提高成员的技术水平,对一些基础、模糊问题的探讨,可以使其清晰,问题明确,并达成一致意见。团队成员的思想交流有助于团队成员形成战友、挚友的关系,共同营造一个和谐、团结、友爱的工作环境。因此,高效的软件开发团队必须具有融洽的交流环境。 4)具有共同的工作规范和框架 高效软件开发团队具有规范性及共同框架的工作,对于项目管理具有规范的项目开发计划,对于分析设计具有规范和统一框架的文档及审评标准,对于代码具有程序规范条例,对于测试有规范且可推理的测试计划及测试报告等。并且所有成员都明白自己的职责,知道必须完成什么计划、由谁来完成、什么时候开始、什么时候结束、按什么顺序等。 5)采用合理的开发过程 苏州plc开发认为软件的开发不同于一般商品的研发和生产,开发过程中会面临着各种难以预测的风险,比如需求的变化、人员的异动、技术的瓶颈、同行的竞争等,高效的软件开发团队往往是采用了合理的开发过程去控制开发过程中的风险、提高软件的质量、降低开发费用,这样的团队会根据自身的必要程度决定要执行哪些工作?如配置管理、资源管理、版本控制、代码控制等,团队还合理地分划并定义开发过程的里程碑,决定每项活动内容的底线和审评标准,决定各项活动的先后关系或送代的关系等。
㈩ 怎样管理软件开发团队
高效软件开发团队的特征
高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作的基础之上的,成员共同的迎接挑战、有效的计划、协调和管理各自的工作以至完成明确的目标,高效的开发团队具有如下特征:
1、 具有明确且有挑战性的共同目标 一个具有明确的而且有挑战性目标的团队比目标不明确或不具有很大的挑战性目标的团队效率高得多,通常技术人员往往会因为完成了某个明确的任务,而且这个任务的完成具有挑战性的意义而感到自豪,反过来团队成员为了获取这种自豪的感觉而更加积极的工作从而带来团队开发的高效率,如作为系统设计人员很清楚的知道在什么时候要做到什么,什么时候开始做,什么时候必须完成,为了完成工作必须面临哪些挑战,怎么解决这些困难等为设计出一个高质量的软件项目提供了重要保证,而模模糊糊的去设计一个系统或模模糊糊的就去编写代码是非常危险的,而且会为此付出高昂代价,因此高效的软件开发团队具有挑战性的共同目标。
2、 团队具有很强的凝聚力 在一个高效的软件开发团队中,成员们凝聚为一个整体共同进行工作,他们是相互支持、互相交流、互相尊重的,而不是相互推卸责任、保守、相互指责的,在一些散乱的开发团队中往往存在这样的问题,一些程序员是比较保守的,明明知道另外的模块中需要用到一段与自己已经编写完成但有些难度的程序代码,他也不愿拿出来给其它程序员共享,不愿与系统设计人员交流,这样给项目的进度造成了些不可度量的因素。
3、 具有融洽的交流环境 在一个开发团队中,每个人行使自己的职责,如需求分析人员制定需求规格说明、系统设计人员做系统概要设计和详细设计、项目经理配置项目开发环境并且制定项目计划等,但每个人的工作不可能做到完美的,如系统概要设计的文档可能有个别地方词不达意,做详细设计的时候就可能会造成误解,项目经理制定计划时可能忽略了某种风险的存在而造成执行者过于紧张的压力等等情况都需要大家通过交流、反馈的手段然后协商解决的,因此高效的软件开发团队是具有融洽的交流环境的,而不是那种简单的命令执行式的。
4、 具有共同的工作规范和框架 高效软件开发团队具有规范性及共同框架的工作,对于项目管理具有规范的项目开发计划,对于分析设计具有规范和统一框架的文档及审评标准,对于代码具有程序规范条例,对于测试有规范且可推理的测试计划及测试报告等等。并且所有成员都明白自己的职责,知道必须完成什么计划?由谁来完成?什么时候开始?什么时候结束?按什么顺序?等,总之一个高效的开发团队无论是工作内容还是工作流程都具有不同程度的规范性和标准风格的框架。
5、 采用合理的开发过程 软件的开发不同于一般商品的研发和生产,开发过程中会面临着各种难以预测的风险,比如需求的变化、人员的异动、技术的瓶颈、同行的竞争等,高效的软件开发团队往往是采用了合理的开发过程去控制开发过程中的风险、提高软件的质量、降低开发费用,这样的团队会根据自身的必要程度决定要执行哪些工作?如配置管理、资源管理、版本控制、代码控制等,团队还合理的分划并定义开发过程的里程碑,决定每项活动内容的底线和审评标准,决定各项活动的先后关系或迭代的关系等。总之高效的软件开发团队的开发过程的原则是高效率、高质量、低成本。