开发类
需求分析师
在确定项目后需求分析师和客户进行深入和细致的沟通。理解业务和客户在他们中业务中用到交互方式;还需要理解这个项目中牵涉到的各种利益相关人员,要充分的从他们的想法中得到规范的业务需求。重要的是深入的理解业务需求,梳理出需求的各个功能点,每个功能的业务性质,另外还需要挖据出系统的非功能性需求。因为客户并不懂软件专业,他们的口述完全是对未来系统的模糊想法,有些客户可能前后描述的需要自相矛盾, 好的需求分析师不仅能清晰的掌握业务需求,不仅将需求从业务人员的口述的功能提炼出需求分析报告,这份报告在不需要接触客户的情况下,开发人员都能清晰一致地理解,高级的需求分析工程师还能从需求中抽象出本质的内容,对于不稳定的需求找出其中的本质问题,可以给出各种重用的方法。能够挖据出潜在的需求问题,对于业务能够提出可兼容、可扩展的需求解决方法。除对需求本身的分析,还得能够理解客户的组织机构、人员组成,关键人物的业务要求。他作出的分析报告,不仅客户中的基层人员能够接受,还能满足高层领导的要求。经过需求分析师的辛苦劳动,最后会给出一份《软件需求规格说明书》,这份说明书为以后的工作奠定了重要的基础。它详细的描述了系统有哪些功能点,每个功能点的操作和数据格式,系统使用者的分类,功能点的优先级,系统的非功能性需求,数据字典,系统的应用环境,扩展点,维护功能,甚至界面要求。
需求分析方法:
1. 绘制系统关联图,这种关联图是用于定义系统与系统外部实体间的界限和接口的简单模型。同时它也明确了信息流和实物流。
2. 创建用户接口(系统操作界面)原型,开发一个可能的局部实现,这样使得许多概念和可能发生的事更为直观明了。用户通过评价原型将使项目参与者能更好地相互理解所要解决的问题。注意要找出需求文档与原型之间所有的冲突之处。
3. 分析需求可行性,在允许的成本、性能要求下,分析每项需求实施的可行性,明确与每项需求实现相联系的风险,包括与其它需求的冲突,对外界因素的依赖和技术障碍。
4. 确定需求的优先级别。以优先级为基础确定产品版本将包括哪些特性或哪类需求。当允许需求变更时,在特定的版本中加入每一项变更,并在那个版本计划中作出需要的变更。
5. 为需求建立模型,需求的图形分析模型是软件需求规格说明极好的补充说明。它们能提供不同的信息与关系以有助于找到不正确的、不一致的、遗漏的和冗余的需求。这样的模型包括数据流图、实体关系图、状态变换图、对话框图、对象类及交互作用图。
6. 创建数据字典,数据字典是对系统用到的所有数据项和结构的定义,以确保开发人员使用统一的数据定义。在需求阶段,数据字典至少应定义业务数据项以确保客户与开发小组是使用一致的定义和术语。分析和设计工具通常包括数据字典组件。
7. 使用质量功能调配,将产品特性、属性与对客户的重要性联系起来。该技术提供了一种分析方法以明确那些是客户最为关注的特性。QFD将需求分为三类:期望需求,即客户或许并未提及,但如若缺少会让他们感到不满意;普通需求;兴奋需求,即实现了会给客户带去惊喜,但若未实现也不会受到责备
使用的工具:UML,VISIO,思维导向工具MindManager
开发工程师
俗称程序员,流传一句话“恭喜,你选择开发工程师做为自已的职业;悲哀,你选择开发工程师做为自已的职业”。这句话真的是非常有意思,好的开发工程师,可能从写代码做起,掌握了丰富的开发技术(c,c#,java)很快的做到系统分析师,架构师,产品设计师,走向管理层作部门主管或是CIO。辛苦的工程师可能从c到c++,再到java,开发使用的工具也是经常变化。技术在不断进步,工程师也得不断学习,从COM,DCOM,COM+,.netRemoting,WebServices,WCF等等,总是跟着技术跑。在日常工作中也是废寝忘食,非常疲惫,而且还经常让测试人员呼来喊去,偶尔还会被老板教育。我曾经的一个同事做了7、8年开发,非常优秀有一次出差回来,发现他不在了,辞职走人,以为跳槽到大公司去了,后来同事告诉我他出去开了家陕西面馆。软件开发工程师有一般来分:.net、java。我本人做.net开发,属于微软阵营。本人不太喜欢讨论哪个阵营好哪个有前途,之所以没有做java一直在微软的.net阵营混,完全偶然,工作和项目上的需要。目前也没有计划去做java。但是会经常关注java的发展,了解一些新技术。
日常工作包括:
1、根据项目具体要求,承担开发任务,按计划完成任务目标
2、独立完成软件系统及模块的编码
3、负责编制与项目相关的技术文档
4、配合系统分析人员完成软件系统及模块的需求调研与需求分析
5、配合系统分析人员完成软件系统及模块的设计
6、协助测试试人员完成软件系统及模块的测试
一个公司内的开发工程师都会分等级,高级开发工程师、开发工程师、助理开发工程师。一个正常运行的软件公司不是那种从零开始的,都会有自己的技术积累、成熟的开发框架、公共开发组件。一般的工作都是在此基础做开展。新项目开发了,高级开发工程师可能分到的任务都是系统技术核心部分,如开发框架,公共代码,数据库设计,数据字典管理等;开发工程师会做一些一般功能的实现,比如系统中的几个模块;助理开发工程师等级较低,会在前辈的基础上使用公司的技术基础开发一些简单功能或模块,一般是照着前辈的代码抄。高级开发工程师为公司的技术打下坚实的基础,写一些公共组件和代码。或是应用新技术作些示范,教大家如何使用。开发工程师能够独立的完成自己的任务,提出一些好的想法。助理工程师会好好学习,融入到整体技术环境中。
开发工程师是系统最终实现的实施者,工作有很强的成就感。他掌握的开发技术很多,掌握数据库系统Oracle、MySql、MS SqlServer,基础开发语言C、C++,JAVA,C# ,系统建模语言UML,XML,开发环境VS、ECLIPSE、JDEVELOPER、NetBeans,服务器环境Win2003、Redhad、Unix等,应用服务环境IIS、Websphere、weblogic,开发框架.net framework 、java容器、Hibernate、Spring,流行的实现技术设计模式、三层结构、COM+、webServices、WCF、WPF,SLIVELIGHT。实事求是的将说开发工程师是一种中间职业状态,原因很简单谁也不原意每天爬在键盘上废寝忘食狂敲代码。在项目经理的不断催促下赶进度,不断的接到测试工程师的错误报告,惭愧的说不小心做错了,马上改。偶尔还会和不懂事的客户纠缠如何操作。但是不是所有人都能突破开发工程师晋升到高级职位。但是反过来说开发工程师是系统实现的最直接的工程师,就像一个宏伟的建筑,设计者只是在纸上画画,但是需要施工方辛苦的劳作,最终拔地而起。可想在你的辛苦劳动下一点一滴完成的了这项工程,成就感是非常大的。而且在编写代码作开发的阶段会积累很多很多的经验,需要不断的学习新的技术,在有的时候高级职位还需要向你请教。所以另外一方面开发工程师可能是很多高级职位必须经历的过程,几乎所有的软件高级职位的招聘都有几年的开发工作经历,丰富的开发和实施经验才能使你在高级职位上,在系统还没有开发时,就能预见和分析出系统的技术需要等等问题,带领大家成功的完成任务。
系统分析师
经过几年的开发工程师经历,积累了丰富的开发经验,在不断的努力下你的职位得到提高已经不用再每天Coding了,可以写写文档、画画图做设计了。
系统分析师主要参与或主管以下工作:包括业务需求、实现功能、性能要求的分析和总体技术设计工作。参与并指导开发工程师完成详细设计文档和代码编写,解决系统关键部分的设计和开发工作,制定技术文档的格式、内容。对系统实现的程序代码、脚本、数据库等交付物进行审计和质量管理。
系统分析员要不断的学习,不断的实践,不断的更新知识,不断的优化自己的知识结构,这一切都使得系统分析员成为稀有人才。在软件组织中属于高级职位。好的系统分析员师都是从优秀的开发工程师中产生的,有着坚实的开发功底,丰富的编程经验。没有对系统本身进行过透彻剖析和编码实践,很难领会到其中一些难以言述的精华。
系统架构师
在软件和硬件系统没有发展到现在的应用规模时,人们普遍的认为,教科书也在说 程序=数据结构 +算法。但是随着系统的发展,程序处理数据量、并发介入客户、系统的需求变更、运行维护等等的工作使得大家对软件的架构越来越重视。不仅数据结构(数据库设计、类、字段等)算法的实现技术有很大的进步,而且对系统技术结构,系统各组件的设计,系统的部署等等方面更加重视了。随着计算机网络操作系统、、虚拟化技术、WEB服务器、应用服务器、中间件、应用程序容器,SOA,企业服务总线等技术的推广架构设计已成为软件系统的首要考虑。在经过一些项目的实施之后,人们逐渐意识到,即使你对系统有良好的分析和设计,但是由于没有在软件架构方面做深入的分析在随后的系统运行中,麻烦越来越多。比如我们怎么在不影响业务运行的情况下将需要更换的组件撤下,将新开发的组件上线。一个大单位中上线的系统越来越多,怎么统一管理这些系统共享的数据资源,使各系统在任何时候都能拿到同样的数据又能及时地更新。系统架构师是要站在系统之上和企业所有系统系统之间去分析,在未来多少年之内采用何种技术企业的信息系统能够轻松应对业务需求。
结束
经过了解以上这些职位,我想大家对一个软件公司都有些什么样的人有了一定的了解,在一个有一定规模的软件组织中分工是非常详细的。希望这次讲座大家对软件公司的技术类职位不再陌生,不要只知道我我将来就要搞软件呀,能够清楚自己的目标。