戚 帅,梅 斌(中讯邮电咨询设计院有限公司,北京100048)
随着移动互联网业务的飞速发展,电信运营商的传统增值业务受到了极大的冲击,新兴业务研发、上线与推广需求迫切。此外,“互联网+”观念已逐步深入人心,传统业务纷纷寻求与移动互联网的有效结合与突破,对电信运营商的IT服务支撑能力提出新的要求和挑战。因此,电信运营商亟需建设一支高素质的自有IT软件开发团队,打破业务部门与IT支撑部门之间的沟通壁垒,提供高效、安全、可靠的软件研发、交付与迭代能力。关于自有IT 软件研发团队的组建模式及管理方法等,读者可参考目前互联网企业及银行软件开发中心的运行模式。
一般人对于软件开发的理解就是“编写代码”,从而充满畏惧心理,认为自己知识不足、经验缺乏而不能胜任。实际上,编码测试仅是其中相对简单的环节,需求分析和设计才是开发过程的重要核心环节。软件开发要求IT人员能够准确理解并转化业务需求、熟悉一般的软件开发流程,同时具备一定的软件开发实践经验。本文将结合目前个人实践,简述软件开发流程,分享软件开发案例实践及心得体会。
软件开发是将用户需求合理转化为代码实现的过程,是一项包含了需求调研和分析、软件设计、代码编制、测试等环节的系统性工程。
按照软件开发的不同阶段,可将软件开发分为以下环节。
1.1.1 调研阶段
在与用户充分沟通的基础上,对用户待解决的问题进行汇总、定义,并结合技术、人力、资金等多方面因素论证项目实施的可行性,包括技术方案、资源需求、预期收益、实施步骤等。开发人员将根据可行性结果,决定项目的最终取舍。
1.1.2 分析阶段
开发人员对用户需求进行汇总、分解和梳理,通过需求规格书的形式进行书面化表达,并最终得到用户的进一步确认。分析要素包括功能需求、性能需求、接口需求、可靠性和可用性需求等,分析方法主要有结构化分析方法、数据流程图、数据字典等方法。
1.1.3 设计阶段
开发人员根据需求说明书的要求,设计软件体系结构、划分子系统或模块、定义数据结构和接口关系等,并形成书面设计文档。该阶段可分为概要设计和详细设计。
概要设计(又称系统设计),是对软件结构、运行流程的初步规划和设计,包括基本处理流程、模块划分、功能分配、接口规划等。在概要设计的基础上,开发者进行软件系统的详细设计。详细设计应具体描述各功能模块所涉及的算法、数据结构、类结构、接口调用关系等,以便指导开发者据此进行编码和测试。
1.1.4 编码阶段
开发人员通过某一程序设计语言将软件设计转换为计算机可执行的程序或程序集合。开发者根据软件设计文档中对数据结构、算法分析、模块功能、界面设计等方面的设计要求,实现各功能模块,最终达成功能、性能、界面、接口等方面的设计要求。开发者应充分了解软件开发语言、开发工具等,合理选择开发语言和工具有利于保证软件开发效率和质量。
1.1.5 测试阶段
通过人工或自动化的方式来检测程序是否能够达到预期的设计要求,并在此过程中寻找、解决可能导致出现问题的因素。按照软件开发的不同阶段,可分为单元测试、集成测试、验收测试、回归测试等;按照是否关心软件内部实现的角度,可分为白盒测试、黑盒测试、灰盒测试等。
1.1.6 交付阶段
在软件测试达到要求后,软件开发者向用户提交软件安装程序、用户手册、需求报告、设计报告、测试报告等。用户在开发者的指导和协助下,完成应用软件的安装、部署和上线。
1.1.7 维护阶段
开发者根据用户需求的变更或软件运行环境的变化,对软件进行适当修改,以纠正运行中发现的错误或提升软件能力。软件开发者应根据服务合同提供相应的运维服务,包括软件版本升级、软件故障排查等。
软件开发过程环节复杂、参与的专业人员多样,需要通过系统的研发管理体系进行质量、安全等方面管理。下面简单介绍几种常用的IT 技术及软件开发管理方法论。
1.2.1 项目管理知识体系(PMBOK)
项目管理知识体系(PMBOK)是美国项目管理协会对项目管理所需知识、技能和工具的概括性描述。PMBOK将项目管理划分为9个知识领域,分别为范围管理、成本管理、质量管理、时间管理、人力资源管理、沟通管理、采购管理、风险管理、集成管理等。PMBOK每四年更新一次,目前已更新至第五版。PMBOK应用广泛,适用于包括软件开发在内的工程项目管理实践。
1.2.2 能力成熟度模型CMM/能力成熟度模型集成CMM I
能力成熟度模型(CMM)是软件工程学会(SEI)提出的软件工程管理方法。能力成熟度模型集成(CMMI)将软件开发过程定义为5 个不同的成熟度等级,分别是初始级、可重复级、已定义级、可管理级、优化级,5 个等级的成熟度水平依次递增。CMM 通过对软件开发和维护各个环节进行监控和评价,通过增量方式促进软件过程管理的优化和提升。
在CMM 得到广泛认可和应用后,SEI 又陆续开发出系统工程、软件采购等多个领域的能力成熟度模型,并得到了良好的应用。但是对于一些大型软件企业而言,可能需要采用多个能力成熟度模型进行过程管理。CMMI 在此背景下提出,将各相关专业领域的成熟度模型融入统一的框架中,可用于指导跨项目、部门或者整个组织的过程改进。相比CMM,CMMI 增加了系统工程、集成的过程和产品、采购等专业领域,应用范围已不再局限于软件开发管理。
1.2.3 敏捷开发思想
传统的瀑布开发模式(也称生命周期模式)将项目过程划分为若干阶段,每个阶段顺序执行,并且严重依赖于之前已完成的阶段。这种模式限制了开发期间各开发团队之间的交互,从而导致软件开发效率和软件质量的不可控。
敏捷开发针对瀑布开发的缺点提出,目的是提高软件团队的开发效率和响应速度。敏捷开发以用户需求进化为核心,通过迭代的、循序渐进的方式进行软件功能模块的增量开发和更新。一般而言,敏捷开发适用于小型团队,重视开发团队成员之间的交流、反馈和总结,专注于交付对用户有价值的软件产品,主要方法有Scrum、极限编程(XP)等。
背景:部门员工的工作进展、工作计划通过Excel周报填写的形式向上级领导汇报,上级领导汇总后再统一报给部门领导审核;部门领导根据员工的工作表现、工作量、工作业绩等多方面考核员工绩效。这种人工填报、汇总的方式效率较低、时效性较差,已逐渐无法适应快节奏的工作安排。
需求:部门计划开发一款员工绩效管理系统(网站),可满足员工周报填写、历史周报查看、工作计划安排等需求。同时,可为多名部门领导提供便捷的绩效考核、汇总计算的手段。此外,需提供常用文件下载功能,便于文件电子化管理。
要求:支持用户数大于或等于100;1 个月之内上线,业余时间完成。
这是一个相对简单的应用开发需求,数据结构、数据处理流程均相对清晰。经过与委托方、部门员工的充分沟通、确认,分析得到以下需求要点。
a)员工信息管理:提供员工基本信息的增加、删除、查看等功能,包括姓名、编号、性别等信息。
b)项目信息管理:提供项目基本信息的增加、删除、查看等功能,包括项目名称、编号、要求完成时间、负责人、参与人、项目状态等信息。
c)个人周报填写:提供填报界面,列出所有该用户相关的、未完成的项目列表。用户可针对每个项目填写、修改、保存最近一周的工作总结、下周工作计划及其他待说明信息。
d)个人历史周报查询:提供查询界面,可通过时间维度、项目维度查看历史周报记录。
e)部门历史周报查询:提供查询界面,可通过时间维度、项目维度、人员维度等查询部门所有人的历史周报记录,便于合理安排个人工作计划。
f)员工绩效考核:提供人员月度绩效评分页面,相关领导可从工作表现、工作业绩、工作能力等方面为各员工打分。系统自动汇总各领导的打分数据,并支持数据导出。
g)常用文件下载:提供文件上传、删除、下载等操作,上传、下载时提供百分比进度条。
h)其他常用功能:提供包括用户登录、权限管理、数据统计等常用功能。
目前主流的网站编程技术有LAMP、J2EE、Asp.Net等。LAMP 的开发架构是Linux+Apache+MySQL+PHP,主要使用PHP 开发;J2EE 的开发架构是UNIX+Tomcat+Oracle+JSP 的组合,主要使用JAVA 开发;Asp.Net 的开发框架是Windows Server+IIS+SQL Server+ASP的组合,主要使用C#或VB开发。3种技术各有优缺点,均能够很好地满足此次开发需求。
考虑到开发者本身的语言熟悉程度、IDE 易用性及部署难度,最终选择使用Asp.Net 进行本次开发。Asp.Net 提供了以MVC 模式为基础的Asp.Net Web 应用程序框架,通过把项目分成Model、View 和Control⁃ler,减少了项目之间的耦合,使得复杂项目更加容易维护。此外,微软提供了ADO.Net Entity Framework 框架,可方便地转换、管理应用程序和数据库对象,减少开发者的开发工作量、提升开发效率。系统前端开发使用Html+JavaScript 的组合,并采用Bootstrap 进行样式设定。
图1示出的是技术框架示意图。
图1 技术框架示意图
结合需求分析和技术选型,最终将软件功能分成基础数据管理、周报管理、绩效评价和系统管理等4个部分,每个部分又细分为若干功能模块(见图2)。
图2 功能框架示意图
2.5.1 Entity Framework
Entity Framework(EF)是微软以ADO.NET 为基础发展而来的一组开源的、支持开发面向数据的应用程序的技术,目前已更新至EF7版本。EF遵循对象映射关系(ORM)思想,通过抽象化数据结构的方式,让开发者可通过操作数据对象的方式操作关系型数据库,屏蔽了不同数据库厂商间的差异,极大地提升了开发效率。
实体数据模型(EDM)是EF的核心,自上而下可分为概念层、映射层和存储层。概念层(CSDL)定义数据结构模型,供上层应用程序调用;存储层(SSDL)对应数据库实体,完成对数据库的具体操作;两者间的对应关系由映射层(MSL)实现。EF体系结构如图3所示。
2.5.2 Bootstrap
Bootstrap 是Twitter 推出的一个开源的、基于HT⁃ML5 和CSS3 的前端开发框架,目前更新至3.3.5 版本。Bootstrap 中包含了丰富的Web 组件,包括下拉菜单、按钮组、导航条、路径导航、分页、排版等。此外,Bootstrap 还自带了13 个jQuery 插件,包括模式对话框、标签页、滚动条等。
Bootstrap 使用简便,通过在文件中引用其css 文件,并在页面元素上进行class 属性设置,即可实现简洁、美观的页面样式设置。本次工程的前端框架采用Bootstrap 3版本,同时结合使用了包括jQuery、AJAX等多种前端展示技术。
2.6.1 周报填写
员工登陆后,展示该员工待填报项目列表。员工根据实际工作情况,分别填写项目总结、工作计划及意见和建议等。用户可以随时点击右侧的“点击保存”按钮进行保存。
2.6.2 周报查询
员工可查看部门历史周报和个人历史周报,了解他人的工作进展和计划安排。可以按照时间、人员或项目等维度进行查询。
2.6.3 绩效评估
领导可登录该页面,针对员工本月的业绩、能力、表现等进行打分,各项分数按照不同的权值自动进行加权。系统会将不同领导的打分自动进行汇总,并导出绩效评估记录。
经过紧张的开发、调试与测试,系统如期上线。目前,部门员工通过登录系统进行工作周报填写、工作计划安排、工程进度维护等,极大地提高了工作效率。在整个开发过程中,个人也收获了不少经验和心得,分享如下。
a)项目经理按照目标安排,跟踪项目进度、协调成员之间的沟通交流。涉及到对外合作时,应提前完成需求分析和接口设计,避免不必要的时间浪费。
b)“迭代”为先,保持“十年磨一剑”的初心,但行动上仍需“小步快跑”。产品设计上,产品经理应充分考虑需求实现与开发成本之间的平衡,按照功能模块的优先级进行适当取舍;开发技术上,根据业务规模、时间要求等因素选择合适的技术手段,以最快时间内实现“能用”的基础要求,在后续版本中逐步完成新技术的引入和更新。产品经理应具备前瞻意识,提前规划未来若干个版本的产品演进路线,并根据用户反馈、开发进展等及时调整。
c)产品UE 设计直观、合理,满足易用的要求;产品UI设计尽量简洁、美观。
d)开发人员应善于学习、利用开源项目,取长补短。代码注释应规范完整,便于后续人员交接。
为了应对移动互联网业务的不断冲击,电信运营商需尽快建立自有的、高素质的IT 软件开发团队,实现对新兴业务及时、有效的支撑。软件开发是一个系统性的工程,需要各个环节人员分工协作、充分配合才能完成。IT员工应不断学习,掌握系统的软件开发方法,提升个人知识储备和实践经验,应对不断变化的挑战。
[1] 张海藩.软件工程导论[M].5 版.北京:清华大学出版社,2008:91-140.
[2] 麦斯阿塞克.需求分析与系统设计[M].马素霞,译.北京:机械工业出版社,2009:29-30.
[3] Johanna Rothman.项目管理修炼之道[M].郑柯,译.北京:人民邮电出版社,2010:112-113.
[4] 斯里格.软件项目管理与敏捷方法[M].李晓丽,译.北京:机械工业出版社,2010:29-37.
[5] Project Management Institute. 项目管理知识体系指南(PMBOK 指南)[M].5版.许江林,译.北京:电子工业出版社,2013:60-61.
[6] 马丁,邓辉.敏捷软件开发(原则模式与实践)[M].北京:清华大学出版社,2003:3-16.
[7] 刘哇勇. 学习Entity Framework 中的Code First[EB/OL].[2015-09-20]. http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_Co⁃deFirst.htm l.
[8] Liam Wang. ASP.NET MVC 小牛之路[EB/OL].[2015-09-20].http://www.cnblogs.com/willick/p/3195560.html.
[9] Jon Galloway,Brad Wilson,K.Scott Allen. ASP.NET MVC 5 高级编程[M].5版.孙远帅,译.北京:清华大学出版社,2015:1-10.
[10]W 3School. ASP.NET MVC-教程[EB/OL].[2015-09-20]. http://www.w3school.com.cn/aspnet/mvc_intro.asp.
[11]Scott Millett.ASP.NET 设计模式[M].杨明军,译.北京:清华大学出版社,2011:344-356.
[12]徐涛.Web 开发技术丛书:深入理解Bootstrap[M].北京:机械工业出版社,2014:1-3.
[13]党建.Web 开发技术丛书:Web 前端开发最佳实践[M].北京:机械工业出版社,2015:4-5.
[14]曹刘阳.编写高质量代码—WEB 前端开发修炼之道[M].北京:机械工业出版社,2010:8-9.
[15]Ross Harmes,Dustin Diaz.JavaScrip 设计模式[M].谢廷晟,译.北京:人民邮电出版社,2009:8-9.