1 Star 0 Fork 0

wyvern / sd

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
  
软件部产品开发指南
汪洋
2018年10月

这个“指南”结合了自己在公司和项目开发过程积累的一些经验所编写,希望能够为公司软件项目开发提供指导。

软件开发是一个复杂的工程,符合“冰山效应”--即用户一般只提供了10%的表面需求,另外90%的需求需要去深入挖掘才能获得,因此软件开发需要团队成员间相互配合,需要对团队进行科学的管理,需要对预完成目标进行系统的分析并做出合理的规划,需要使用科学的方法,这些方面如有缺失,都会对整个工程产生巨大影响。

冰山效应

团队开发方式

曾经有一个项目要求在用户界面(UI)上显示源码功能,这个功能看起来十分简单,但是在开发过程中发现,用户真正的需求是通过源码判断数据的正确性,于是引入了判断正确性的算法,并为有可能的错误数据做高亮标记,后来为了更直观显示还提供了刻度尺的功能。

用户的需求往往是不准确、不完善或者具有二义性的,所以用户的需求是不断变化的。我们不能要求用户需求不能变化,因此要应对这种变化,一是将变化控制在一定范围内,再就是适应这种变化。 上面的两种方法,就是敏捷开发模式中的思想,软件团队采用敏捷开发方式来适应变化拥抱变化。

敏捷开发:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 ---百度百科

注: 其他开发方式不做赘述,例如:极限编程,瀑布模式开发等。

敏捷开发团队的组建

软件团队角色:项目经理,产品经理,架构师,设计师,UI工程师,后端开发工程师,测试工程师和质量保证人员;

各角色职能:

  1. 项目经理:负责编制《软件需求规格说明书》与《项目开发计划》,同时负责代码审查、培养新员工等。
  2. 产品经理:负责项目期间的产品功能、性能定义,根据目前实际情况,产品经理可由项目经理兼任。
  3. 美工:负责项目期间的产品外观设计,根据公司的实际情况,可以同产品经理、项目经理和有前段经验的人员共同完成原型设计。
  4. 架构师:负责项目期间的产品软件实现设计和技术支持,提供《软件概要设计》、《软件详细设计》和《数据库设计说明书》文档,根据公司的实际情况,架构师可由开发主程兼任。
  5. UI工程师(设计师):负责产品原型设计和开发。
  6. 后端开发工程师:负责系统后端代码编写。
  7. 测试工程师和质量保证人员(QA):负责项目期间的产品测试,并编写《测试报告》。

这样分的主要原因是每项工作由最专业的人完成,物尽其用,人尽其才。

软件生命期

软件开发生命周期应包括以下几个阶段:需求分析和计划、软件设计、编码开发、软件测试和软件试运行;应遵循敏捷开发方式和ISO规范,不断进行迭代和软件版本升级;

敏捷开发模式

需求分析需要编写《用户需求说明书》,并根据功能编制《需求规格说明书》,然后提出合理的软件开发计划(甘特图)和资源需求。此阶段需要通过技术评审。

注:需求分析可以根据原型设计共同开展;

需求变更应控制在合理范围,原则上在一个迭代周期内不进行需求变更,但是如果出现严重的功能偏差、对软件架构产生影响、对产品定位产生影响等情况,可以进行变更。

注:

  • 需求变更后应伴随计划变更。
  • 计划制定后应发布产品功能路线图;

设计阶段需要根据需求分析结果进行软件概要设计、软件详细设计、数据库设计和原型设计;技术选型也应在此阶段完成。此阶段需要通过研发中心软件技术评审。

注:

  • 概要设计采用“4+1视图”方法
  • 详细设计可以考虑采用DDD(Domain-Driven Design)方法
  • 数据库设计应遵循第三范式

开发人员根据以上两个阶段输出进行编码开发和联调联试;代码应及时提交到git平台(gitblit)进行管理;

由项目经理进行发布版本进行测试,对于版本规定应符合研发中心软件部关于版本管理方法(详见Redmine),测试完成后输出测试报告;

技术的选择

原则

应优先选择选用成熟、文档全面、开发人员熟知、轻量级可扩展的技术; 尽可能使用免费软件和具有商业友好性的开源软件。 开源协议

研发平台

操作系统应支持Linux和Windows7以上操作系统,优先在Linux进行代码开发。部署的目标操作系统可选择Centos7或以上。 选择Centos系列版本,还有一个原因在于华太分机使用的协议不支持Debian系列。 未来将考虑基于Docker的微服务方式进行软件部署,使系统更容易平行扩展,如果能够结合“消息总线”和“熔断器”技术,将能够实现系统的高可用性。

技术选用

语言的选择

因C#语言在商业化支持和跨平台方面不如Java语言,所以开发语言采用ava。主要使用java8和java11两个版本。

UI端技术

html5不仅能开发桌面应用程序,还可以采用hybird方式开发Android和苹果手机App,技术通用性好,是未来的技术方向。 与html5相比较,wpf技术学习成本高,不能跨平台运行。软件部选择html5作为主要前端技术。 目前应用到的一些前端框架:

  • 渲染zrender
  • 图表echart
  • 通用框架jquery

Java库

主要使用spring boot 未来会过渡到springcloud技术

数据库

从成本和实用性上考虑,关系型数据库选择mysql5.6+,文件数据库采用sqlite。

大数据

大数据采用hadoop技术体系。

云平台选择

私有云技术选择cloudstack,相比较而言,openstack版本间兼容性差,运维成本高。基于kvm的cloudstack是私有云一个不错的选择。

边缘计算技术

重点关注edgex foundry.

移动端App开发

采用hybird开发方式,UI尽量使用Html5技术,支持Android4.4+版本。

集成SDK

原则上尽量避免直接集成第三方SDK。多数SDK都不稳定,需要进行系统测试,谨慎使用。

协议

具体根据场景选择协议,下面按顺序优先参考使用:

  • http协议
  • AMQP协议

软件架构世界观

系统应面向服务进行架构,尽量使用spring cloud为以后可扩展性做准备。

注:

  • 软件不应过度设计,过犹不及。过度设计会增加开发成本和维护成本,而未来是不可预测的,良好的软件架构应该能够满足现在的需求而不是未来的需求。如果需求完全不明确,就应避免“为后期可能接入的第三方”开发接口这样的需求。

监测系统的系统架构

前端、服务端、UI端 边缘计算,容器+基础设施的混合云,Hadoop大数据+Spark

分机软件架构

缓存,内存使用 双网卡分流 过滤 存储 jvm优化 线程的使用

服务端软件架构

RabbitMQ RestAPI 高可用的考虑,可以使用微服务架构 数据库优化

质量保证和维护

测试前应根据《用户需求说明书》和《需求规格说明书》编写《测试用例》。

测试尽量采用自动化测试方法;如果条件允许,尽量模拟现场工况进行测试,测试应包括功能测试、性能测试和压力测试等。测试后输出《测试报告》并组织软件进行验收;

注:

  • 应逐步引入自动化测试
  • 应重视模拟测试软件开发和项目辅助工具的开发
  • 如有条件,可进行单元测试
  • 后期自动化维护软件的开发也很重要,可以减少人力成本
  • 发布的版本号请参考软件部软件版本管理方法
  • 发布的版本应给出说明

评审验收合格发布的软件,现场需要试运行,期间产生的问题,开发人员要及时修复;需求不当之处,尽快进行迭代开发;

规范

编码开发按语言类型分别遵守研发中心软件部发布的《C#编码规范》和《Java编码规范》;

各类文档书写应符合软件部已发布的规范;

项目经验

监测分机

系统不稳定可以归结为几条,

  1. 硬件问题,比如NI采集卡采集时网络断开会引起蓝屏,华太采集卡不够稳定,阿尔泰采集卡不够稳定等
  2. 传输速率过大时间长(基于NI采集卡方式的软件和前期未经过滤时),导致内存溢出。
  3. 软件代码逻辑不合理,这个问题已经进行代码检车和调整。
  4. 数据在内存中的拷贝 针对以上问题,建议:
  • 设计时注意内存和线程的使用系统内存使用
  • 针对硬件进行测试
  • 尽量避免使用SDK而使用基于协议的方式集成
  • 进行JVM优化

数据中心

基于私有云的大数据中心,应该是公司产品一个趋势。

工具

可选择的项目管理工具较多,工具的选择应适合团队的需要,软件部使用Redmine进行项目管理。 项目管理工具

构建工具

按使用场景选择maven或gradle。

源码管理

目前软件部使用gitblit搭建源码仓库 git开发尽量采用分支开发方法,鼓励多创建分支,分支上如果产生可用版本,需要添加Tag标记。 gitblit

自动化编译

使用脚本进行自动化编译,定时发布测试版本。

一些经验

  • “九层之台,起于累土;千里之行,始于足下。”,凡是成功的软件产品,每个细节都很重要,应该稳扎稳打,才能做出好的软件产品。
  • "勿在浮沙筑高台",软件项目应遵循工程的规律,需求分析是根基。

交付物

  1. 《用户需求说明书》
  2. 《需求规格说明书》
  3. 《开发计划》
  4. 《软件概要设计说明书》
  5. 《软件详细设计说明书》
  6. 《数据库设计说明书》
  7. 《软件接口设计说明书》
  8. 《测试用例》
  9. 《测试报告》
  10. 《软件帮助手册》
  11. 《软件部署手册》

注:

  • 需要符合ISO规范
  • 源码提交到gitblit平台
  • 开发计划--甘特图

空文件

简介

软件开发管理 展开 收起
HTML
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
HTML
1
https://gitee.com/wyangvip/sd.git
git@gitee.com:wyangvip/sd.git
wyangvip
sd
sd
master

搜索帮助