这个“指南”结合了自己在公司和项目开发过程积累的一些经验所编写,希望能够为公司软件项目开发提供指导。
软件开发是一个复杂的工程,符合“冰山效应”--即用户一般只提供了10%的表面需求,另外90%的需求需要去深入挖掘才能获得,因此软件开发需要团队成员间相互配合,需要对团队进行科学的管理,需要对预完成目标进行系统的分析并做出合理的规划,需要使用科学的方法,这些方面如有缺失,都会对整个工程产生巨大影响。
曾经有一个项目要求在用户界面(UI)上显示源码功能,这个功能看起来十分简单,但是在开发过程中发现,用户真正的需求是通过源码判断数据的正确性,于是引入了判断正确性的算法,并为有可能的错误数据做高亮标记,后来为了更直观显示还提供了刻度尺的功能。
用户的需求往往是不准确、不完善或者具有二义性的,所以用户的需求是不断变化的。我们不能要求用户需求不能变化,因此要应对这种变化,一是将变化控制在一定范围内,再就是适应这种变化。 上面的两种方法,就是敏捷开发模式中的思想,软件团队采用敏捷开发方式来适应变化拥抱变化。
敏捷开发:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 ---百度百科
注: 其他开发方式不做赘述,例如:极限编程,瀑布模式开发等。
软件团队角色:项目经理,产品经理,架构师,设计师,UI工程师,后端开发工程师,测试工程师和质量保证人员;
各角色职能:
这样分的主要原因是每项工作由最专业的人完成,物尽其用,人尽其才。
软件开发生命周期应包括以下几个阶段:需求分析和计划、软件设计、编码开发、软件测试和软件试运行;应遵循敏捷开发方式和ISO规范,不断进行迭代和软件版本升级;
需求分析需要编写《用户需求说明书》,并根据功能编制《需求规格说明书》,然后提出合理的软件开发计划(甘特图)和资源需求。此阶段需要通过技术评审。
注:需求分析可以根据原型设计共同开展;
需求变更应控制在合理范围,原则上在一个迭代周期内不进行需求变更,但是如果出现严重的功能偏差、对软件架构产生影响、对产品定位产生影响等情况,可以进行变更。
注:
- 需求变更后应伴随计划变更。
- 计划制定后应发布产品功能路线图;
设计阶段需要根据需求分析结果进行软件概要设计、软件详细设计、数据库设计和原型设计;技术选型也应在此阶段完成。此阶段需要通过研发中心软件技术评审。
注:
- 概要设计采用“4+1视图”方法
- 详细设计可以考虑采用DDD(Domain-Driven Design)方法
- 数据库设计应遵循第三范式
开发人员根据以上两个阶段输出进行编码开发和联调联试;代码应及时提交到git平台(gitblit)进行管理;
由项目经理进行发布版本进行测试,对于版本规定应符合研发中心软件部关于版本管理方法(详见Redmine),测试完成后输出测试报告;
应优先选择选用成熟、文档全面、开发人员熟知、轻量级可扩展的技术; 尽可能使用免费软件和具有商业友好性的开源软件。
操作系统应支持Linux和Windows7以上操作系统,优先在Linux进行代码开发。部署的目标操作系统可选择Centos7或以上。 选择Centos系列版本,还有一个原因在于华太分机使用的协议不支持Debian系列。 未来将考虑基于Docker的微服务方式进行软件部署,使系统更容易平行扩展,如果能够结合“消息总线”和“熔断器”技术,将能够实现系统的高可用性。
因C#语言在商业化支持和跨平台方面不如Java语言,所以开发语言采用ava。主要使用java8和java11两个版本。
html5不仅能开发桌面应用程序,还可以采用hybird方式开发Android和苹果手机App,技术通用性好,是未来的技术方向。 与html5相比较,wpf技术学习成本高,不能跨平台运行。软件部选择html5作为主要前端技术。 目前应用到的一些前端框架:
主要使用spring boot 未来会过渡到springcloud技术
从成本和实用性上考虑,关系型数据库选择mysql5.6+,文件数据库采用sqlite。
大数据采用hadoop技术体系。
私有云技术选择cloudstack,相比较而言,openstack版本间兼容性差,运维成本高。基于kvm的cloudstack是私有云一个不错的选择。
重点关注edgex foundry.
采用hybird开发方式,UI尽量使用Html5技术,支持Android4.4+版本。
原则上尽量避免直接集成第三方SDK。多数SDK都不稳定,需要进行系统测试,谨慎使用。
具体根据场景选择协议,下面按顺序优先参考使用:
系统应面向服务进行架构,尽量使用spring cloud为以后可扩展性做准备。
注:
- 软件不应过度设计,过犹不及。过度设计会增加开发成本和维护成本,而未来是不可预测的,良好的软件架构应该能够满足现在的需求而不是未来的需求。如果需求完全不明确,就应避免“为后期可能接入的第三方”开发接口这样的需求。
前端、服务端、UI端 边缘计算,容器+基础设施的混合云,Hadoop大数据+Spark
缓存,内存使用 双网卡分流 过滤 存储 jvm优化 线程的使用
RabbitMQ RestAPI 高可用的考虑,可以使用微服务架构 数据库优化
测试前应根据《用户需求说明书》和《需求规格说明书》编写《测试用例》。
测试尽量采用自动化测试方法;如果条件允许,尽量模拟现场工况进行测试,测试应包括功能测试、性能测试和压力测试等。测试后输出《测试报告》并组织软件进行验收;
注:
- 应逐步引入自动化测试
- 应重视模拟测试软件开发和项目辅助工具的开发
- 如有条件,可进行单元测试
- 后期自动化维护软件的开发也很重要,可以减少人力成本
- 发布的版本号请参考软件部软件版本管理方法
- 发布的版本应给出说明
评审验收合格发布的软件,现场需要试运行,期间产生的问题,开发人员要及时修复;需求不当之处,尽快进行迭代开发;
编码开发按语言类型分别遵守研发中心软件部发布的《C#编码规范》和《Java编码规范》;
各类文档书写应符合软件部已发布的规范;
系统不稳定可以归结为几条,
基于私有云的大数据中心,应该是公司产品一个趋势。
可选择的项目管理工具较多,工具的选择应适合团队的需要,软件部使用Redmine进行项目管理。
按使用场景选择maven或gradle。
目前软件部使用gitblit搭建源码仓库 git开发尽量采用分支开发方法,鼓励多创建分支,分支上如果产生可用版本,需要添加Tag标记。
使用脚本进行自动化编译,定时发布测试版本。
注:
- 需要符合ISO规范
- 源码提交到gitblit平台
- 开发计划--甘特图
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。