在软件生命周期内,根据市场和客户的需求,会不断的引入新的功能。由于经验、技术、视野、开发流程等方面的差异,不同的软件工程师的开发出的功能质量各不相同;经常出现功能不全、稳定性差、并发低、容错性差等缺点,可谓是一千个程序员能开发出一千个不同质量的功能。笔者结合亲身经历和它山之石总结出下面的功能开发流程,在流程上提高功能质量。

一、 需求分析

一般来说,需求分析是由产品经理来作的。软件工程师(以下称工程师)会拿到产品经理整理的需求文档。其实,工程师在阅读需求文档时,也是在作需求分析,只不过不是客户原始的需求,而是产品经理加工过的。但是从实践来看,工程师最好还是要更多的了解一下原始需求,然后结合产品的需求文档,可以更好的把握需求、更好的设计软件架构和功能。

注:
问: 为啥不由工程师直接和客户谈需求呢?
答: 主要有两点原因

a. 现代社会都是分工合作,追求效率,一个人完成所有环节效率会低、会疲惫

b. 工程师大多不擅长沟通,比较严谨、木讷、逻辑性强,真就是真,假就是假,处理事情不够友好

二. 架构设计

需要确定功能的架构,如有必要,需要与相关人员一起讨论,主要基于以下几点:

1. 是否可以在已有功能基础上进行扩展

在已有功能基础上扩展开发量会少,是最常用的开发方式。缺点是会造成两个功能耦合度高,一个功能修改错误可能会影响到另一个功能。

2. 是否以独立服务(进程)的形式存在

当前的主流软件(功能)呈现形式倾向于微服务架构,这样可以解耦合、扩展性强。功能间通过通信协议实现调用(http等)。

3. 是否以多线程形式构建

在多线程软件中,新功能可以运行在一个独立的线程中,通过线程间通讯方式为主线程提供服务。优点是不会阻塞主线程

4. 是否以静态(动态)库形式实现

库是给第三方(模块)使用的一种常见形式

5. 是否以函数形式实现

如果是小功能,可以用函数接口的形式提供给其它接口调用

6. 确定影响范围

需要确定功能开发涉及哪些模块(或小组)

本阶段要产生架构方案,最好以邮件形式告知各相关人员并确认

三、概要&详细设计

写概要和详细设计文档,主要包括以下内容:

1. 功能的说明

2. 以流程图、时序图或状态机形式表示功能运行逻辑

注: 画图耗费时间而且变更比较麻烦,尽量少画图,多用文字描述

3. 定义模块间通讯消息协议和消息格式

4. 数据库相关修改

5. 给出边界条件

6. 估算开发时间

7. 与相关人员开会,确认文档

本阶段产出设计文档,最好以邮件形式告知各相关人员并确认

四. 编码实现

根据已经确定设计方案和设计文档进行编码实现,注意以下关键点:

1. 函数、变量的命名要可读

2. 函数接口要考虑扩展

3. 函数体不能过大

4. 函数内分支不宜过多,三层以内

五、代码审查

编码完成,编译通过,并且经过基本的验证后,开始代码审查。

1. 是否影响函数接口的扩展性

2. 函数是否太大,是否需要拆分

3. 函数名称和实际功能是否有偏差,是否需要抽象成新的接口

4. 有无动态分配内存,内存使用后是否回收(包括goto和return场景)

5. 是否会影响其它模块

6. 检查是否有死循环(循环条件是否正确)

7. 循环等算法是否有优化的必要

六. 自测试

根据测试用例(测试组提供或自己根据需求文档编写)进行完整的、系统的全面测试;此外,应该对一些非功能性的如异常流程进行测试

七、联调

如有必要,同其它组进行联调,确认功能没有问题

八、代码规范检查

根据代码规范检查生成的patch,修改使其符合制定的代码规范,参考如下:

1. 如空格/TAB问题
2. 未使用变量等
3. 是否有未初始化变量
4. 是否需要添加必要的注释

九. 代码提交

提交代码时,要注意以下几点:

1. 不要提交多余的文件
2. 不要遗漏新增加的文件
3. 写好提交日志信息

软件工程中新功能开发流程相关推荐

  1. ssm中怎么用location.href跳到controller层_聊聊自动驾驶中的功能开发

    在知乎上看过不少大牛写的自动驾驶技术介绍文章,大多谈到的是AI, Deep Learning, Computer Vision等等感知(Perception)层面的.但在各个传感器(雷达.摄像头.激光 ...

  2. Django后台项目之用户管理功能开发流程

    项目功能开发流程 1 先写列表页(加载出来数据就行) ob = User_vip.objects.filter(is_del='004001').order_by('-cts') 2 写添加功能 2. ...

  3. 【自动驾驶中的功能开发】

    知荐 | 聊聊自动驾驶中的功能开发 原创 mob604756eedb0b2021-04-16 10:51:39 文章标签java文章分类Java编程语言阅读数143 在知乎上看过不少大牛写的自动驾驶技 ...

  4. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能...

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序  Excel Services中新功能 从SP Server ...

  5. 智能座舱架构与功能开发流程详解

    作者 | Jessie 出品 | 焉知 智能汽车座舱发展主要经历了四个阶段:包括电子座舱阶段.智能助理阶段.人机共驾阶段.第三生活空间.当前随着智能汽车在AI算法.智能驾驶上的不断发展进入了L3级自动 ...

  6. uni-app微信小程序订阅消息功能开发(流程讲解篇)

    温馨提示 微信小程序中废弃了"模板消息",,微信小程序模板消息 使用场景 首先我们需要明白微信订阅消息使用场景,比如客户点了一份美团外卖客户需要知道当前订单商家是否接单,或订单是否 ...

  7. 支付宝支付功能实现原理,微信公众号中实现支付宝支付功能开发流程

    这篇文章使用一些简单的代码例子来解释微信接入支付宝支付功能的操作步骤,即使新手也可以轻松参透的. 第三方支付是指具备一定实力和信誉保障的独立机构,采用与各大银行签约的方式,通过与银行支付结算系统接口对 ...

  8. 浅谈软件工程中的“原型开发”

    最近作者在参与一个APP的简单开发项目,关于图书推荐.在进行项目探索的时候,不明确用户需求,不知如何下手,于是便和小伙伴们一起交流,在各个相关软件中寻找灵感,最终慢慢摸索出一个简单粗糙的雏形,这便是原 ...

  9. jeeplus代码中配置并开发流程

    需求 流程绘制 一.配置流程 在流程工具类ActUtils.java中配置(添加)流程信息 二.在前台leaveList页面添加使用流程的触发事件(提交按钮) 三.编写代码[本文仅针对流程(提交事件) ...

最新文章

  1. 量子力学在计算机上的应用,量子力学在医学科学中的应用
  2. 程序猿悲喜录:魔都,想说爱你不容易
  3. 6、图书类别修改删除功能
  4. dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试
  5. vc 文件总行数_Spark中的文件源(上)—— Spark的文件组织方式
  6. 不用static,巧用对象.方法调用java中的函数
  7. 20145109 《Java程序设计》第七周学习总结
  8. Delphi JSON总结
  9. YY前端HTML规范
  10. 前端常用PS技巧总结之将图片背景透明化
  11. 第三章 枚举(炸弹人、火柴棍等式、全排列)
  12. Nginx负载均衡探活max_fails和fail_timeout的设置、根据参数转发upstream
  13. 尚硅谷谷粒商城第十二天 商品详情页及异步编排
  14. python分析红楼梦中人物形象_《红楼梦》中女性人物形象分析
  15. You-get视频下载工具
  16. 气象历史数据和空气质量历史数据资源汇总免费
  17. 如何做好ERP项目启动会
  18. 怪异的JavaScript系列(一)
  19. 对渗透测试工程师来说,学历重要嘛?
  20. 简单 洛谷 P1563 【模拟】玩具谜题普及场

热门文章

  1. Java 诊断工具Arthas初识、安装及试用
  2. 角度转度分秒lisp函数_自改小程序,提示错误,运行另一个lisp后就不会出错,求帮忙!...
  3. 简约生活的72条观念
  4. 数量金融学(8):Markowitz均值-方差模型(2)
  5. python调用sendcloud模板发送带附件的邮件
  6. PV_Characteristic:基于MATLAB/Simulink的光伏特性程序
  7. TI C2000 刷flash意外锁芯片的解决办法
  8. vue时间天气插件_vue创建天气webapp
  9. [推荐] 一个 Node.js 技术选型案例:使用 CARMEN 作为卡牌手游技术栈
  10. 0622_ArcMap添加地图地图(矢量底图与影像地图)_太乐地图插件ArcTailer.tlb