软件开发工作的几点感想
一、软件开发中的角色划分
在一个软件项目从规划、论证到设计、实现的整个过程中,需要众多不同技能的人员参与,为了便于任务分工和人尽其才,在项目小组中应当设定许多角色,小组成员都拥有相应的角色,每种角色都必须具备相应的技能,同时从事相应的工作。
在整个软件工程过程中,一般可划分下面几类角色(可根据公司的规模和项目规模调整):系统研发工程师、项目经理、系统分析员、系统设计工程师、软件编码工程师、软件测试工程师、系统支持工程师等。系统研发工程师(也叫产品经理)负责软件产品的功能设计,他对市场有敏锐的洞察力和感悟力,同时对软件技术内涵有深刻的理解(不一定对语言本身非常熟悉),能够把握市场需要什么,知道什么样的需求可以通过软件实现,实现的成本有多大,他熟悉同类产品或相关产品的优势和不足。项目经理负责人员安排和项目分工,保证按期完成任务,对项目的各个阶段进行验收,对项目参与人员的工作进行考核,管理项目开发过程中的各种文档,直接对公司领导层负责,他既能处理好与客户之间的关系,又能协调好项目小组成员之间的关系。系统设计工程师负责软件产品的系统设计,包括需求分析、概要设计和详细设计(最好详细到对象的每个函数接口),他非常熟悉软件工程理论,熟悉常规的软件设计思想(例如结构化设计思想、面向对象OOP设计思想)和常用技术,包括语言、服务和组件技术(例如CORBA、COM、DCOM、JAVARMI、JAVABEAN、EJB等),能熟练使用一种CASE工具进行设计并能用规范化的文档清晰地描述出来,同时他能准确的理解软件产品的功能和知道如何实现,而且对相关语言非常熟悉,能面向特定语言完成系统的详细设计。软件编码工程师负责软件模块的编码实现,他非常熟悉相关的语言细节,熟悉软件基础理论和常用算法,熟悉常规的软件编码标准。软件测试工程师负责软件测试工作,尽量发现软件设计和编码中的缺陷,他熟悉常用的软件测试方法,能设计测试用例,能够细心地做软件测试工作。系统支持工程师负责帮助用户顺利实施软件系统,他能够编写软件使用手册、对用户进行培训,熟悉相关的软件运行环境。
在以上几种角色中,系统研发工程师、系统设计工程师和项目经理是最重要的三个角色,他们的能力和经验是项目成功的根本保证,是公司最宝贵的技术财富。
根据项目的规模不同,角色划分和设置也不仅相同,对于较大规模的项目,可能由多人担任一个角色,对于小规模的项目可能一人就担任多个角色,但是与角色相关的职能划分是不可少的。
角色划分是为了适应任务的分解和合理分工,是为了安排合适的人做合适的事,相应角色的人员必须作好相应角色的事,不能因为自己可以做另一个角色的事,就忘记了自己的主要任务。
二、软件企业的技术体系建设
软件技术是在日新月异地发展的,任何人要想熟悉所有的软件技术是不现实的,软件技术涉及到不同的层次和不同的领域,不同层次有不同层次的协议和功能,上一层次的技术是建立在下一层次的基础之上的,任何人要学习软件技术,必须明确相应的层次,要把注意力集中在本层次的功能和协议上,不要深究下一层怎么实现,这是最关键的。
不要一味的追逐新技术,软件只是一种工具,最重要的是用这个工具做什么有价值的东西,要学会以不变应万变,因为万变不离其宗。
一个好的软件工作者,最重要的是有悟性和创造力,对市场的感悟、对软件技术的感悟,把二者进行有机结合形成软件产品的创造力。
软件开发人员应该在一条技术主线上深入学习和研究,在一条主线的前提下,再研究常用的规范和技术。对于初学者,在掌握好一条主线的相关知识的基础上就可以迅速设计软件产品,而不应把面开的太广。譬如,掌握一点基础理论、一门数据库系统、一门开发工具就可以开发常用的信息管理系统。切记在同一层面上涉猎太多,学了PB,又研究VB,是毫无意义的重复。对一个公司来说,也应有一个技术主线,以及与之相关的一只开发队伍,这样才能实现软件复用和人才复用。
在一个公司中,不应鼓励技术人员都去努力学习新技术,要给每位员工一个角色定位,要求他做好相应角色的工作,为了作好工作必须拥有相应角色的技术。对于大多数人来讲,自己可能不知道该学什么好,需要公司帮他定位。任何人在不影响本角色工作的基础上可以有自己的学习计划,但不应作为公司的计划。公司根据员工人能力的变化可以及时调整其角色。
对于一个公司来说,应下大力气培养系统研发工程师和系统设计工程师,好的系统研发工程师(或称为产品经理)能保证一个软件项目甚至一个公司沿着一个正确的方向走,好的系统设计工程师能保证软件实现预定的功能。纲张则目举,有了纲,目就容易定了。有了好的系统设计,软件编码工作就很容易,单纯的软件编码工程师也容易找。如果有大量的软件高手,但是谁也做不了系统设计,这些人在一块做项目,沟通和合作都成问题,做出的软件就可想而知了。
三、软件产品定位理论
软件是一种服务工具,它辅助人类实现管理和服务。人类工作的任何一个领域,软件都可以进入。软件应用领域非常广阔。
与其说研究软件产品如何定位,不如说是研究人类在管理和服务上的需求,哪些需求可以用软件实现、该需求的市场有多大、客户能支付的费用有多大等,都是必须研究的范围。
常规的需求,基本已经实现了,没有实现的不是因为技术达不到就是因为经费和市场的问题。因此必须去挖掘潜在的需求和把握将要扩大的需求,就是要创新。
降低软件开发成本就变相的提高了公司的利润,因此在开发软件项目的时候要仅可能的利用已有的组件和代码,构建新的产品,实现代码级复用,如果能开发通用化的软件产品,实现软件级的复用就更好了。开发大范围的通用软件比较困难,开发某个行业的通用软件相对容易些。
好的软件产品并不一定非得使用了多高深的技术,关键是在适当的时刻推出适当的产品。能把各种不同的技术融合在一起也是一个很好的卖点。
总之,对一个软件公司来说,技术、产品、管理(包括公司管理和技术管理)和市场是最重要的四个要素,作为公司的管理层要时时刻刻确保这四项要素能得到很好的管理和控制。