漫谈软件开发过程

背景

一个合理而又有效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。目前软件开发一般过程包含以下几个步骤:理解需求、架构设计、单元测试、监控埋点、集成测试、性能测试、文档样例、上线流程和变更管理,下面我将针对以上几个步骤进行详细阐述。

理解需求

需求向来就是软件开发过程中最不好明确描述、易变的东西。对于一个新的需求(或产品),我们应该先问自己为什么要做这个需求(产品),多问自己why,如果做了需求(产品),会给公司或客户带来什么价值,解决什么痛点,而不是一上来就问怎么做以及做什么。

架构设计

刚接触架构设计的童鞋,会专注于细节中,我在这里想向大家灌输的理念是:大处着眼,小处着手(Think Big,But act Small),也就是说软件开发者首先要理清整体架构,否者,做出来的东西可能不能满足我们的需求。

单元测试

当领导让你写单元测试时,你可能会想这不是降低你的代码生产率吗?其实,长期来看,写单元测试是很有必要的。如果后期我们需要对代码进行变更或扩展时,这些单元测试能够帮助我们做回归测试,而且开发效率也会慢慢提高。如果没有单元测试,可能在项目刚开始时编码效率挺快的,但是随着代码越来越复杂,项目代码出问题的概率会越来越高,甚至于当我们想扩展原来的代码,发现根本不能扩展。因此,软件开发者必须要写单元测试,以测试驱动开发(TDD,Test Driven Development)。

监控埋点

相较于传统软件公司更加注重单元测试,互联网公司更加强调实时监控。我们知道互联网时代的流量非常大,而且用户需求会随时发生变化,即使我们花再多的时间去做测试,我们还是很难找到代码中的缺陷。这就要求我们不仅要做单元测试,还要求我们去做监控(核心指标、框架调用链、日志、告警通知等埋点)。监控其实是线上测试,线上反馈,它可以实时的告诉我们系统的健康状况。

集成测试

当各个模块开发测试完成之后,就需要整合各个模块。这里需要我们注意的是每个模块单独测试时没问题的,但是整合时可能存在问题,这就要求做集成测试。在做集成测试时涉及到不同团队成员的沟通协调,这就要求我们具有良好的沟通能力。

性能测试

性能测试包括Load Testing(负载测试)、Stress Testing(压力测试)、Spile Testing(尖峰测试)、Scalability Testing(扩展性测试)等。在互联网时代性能测试是非常重要的,就如同我们人类一样,当我们不给自己施加压力,我们都不知道自己的潜力有多少,同时,也会暴露出自己的缺陷。只有经过多轮的、细粒度的性能测试才能保证产品上线后不会出现问题。

文档样例

在我认识的很多开发人员中,他们认为编写文档样例没什么用。但是,我们生产出来的产品最终是要给用户使用的,用户从来不关心的架构设计的如何好、代码写的如何好,他们只关心文档样例写的怎么样,因为这些是他们要用的,如果我们不提供清晰的样例,就会提高他们的理解难度。这就要求我们平时要养成产品思维。

上线流程

经过上述这些步骤之后,接下来就是将产品推上线。而产品上线也需要一套流程:1. 开发人员将最终版本推送到版本控制系统中;2. 构建服务器(Jenkins)会定期的从版本控制器中抓取代码来做单元测试,如果没有问题,则将代码发送到测试环境中,测试环境通过之后,再将代码发送到性能测试服务器进行非功能性的性能测试;3. 最后,将代码发布到生产环境中。

变更管理

如果我们需要对线上代码进行修改,就需要变更管理。变更管理需要我们评估一下变更的影响, 对哪些人会有影响。同时,还需要有应急预案,如果变更失败怎么回退。通过上述方式尽量让变更变得可控。

总结

介绍完软件开发的一般过程之后,我们发现这个过程适合大部分情况,但在一些特殊情况,比如紧急发布、线上有明显事故等,需要我们快速的救火,在这种情况下我们就会绕开上述这些流程。

原文发布于微信公众号 - 木可大大(mukedd)

原文发表时间:2018-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

一分钟读懂兼容测试报告(一):概况篇

? WeTest 导读 在WeTest深度兼容测试上线之后,为大量手游及应用挖掘了兼容问题,为测试开发同学提供了极大的便利。为了能够让测试开发同学能够迅速的了...

1532
来自专栏杨建荣的学习笔记

运维开发流程梳理和思考

记得之前梳理过一个运维开发流程,也做了一些实践,从我的认识和理解来看,其实这更适合一个团队内的协作。

2193
来自专栏solarest的专栏

为您的组织机构选择正确的企业云解决方案

云计算作为一种强大的新技术,正在被越来越多的组织迁移和使用。然而向云的迁移也着实让人担心。开发复杂度、时间损耗、安全风险、噩梦般的应用迁移方案还有不成熟的私有云...

2126
来自专栏软件测试经验与教训

软件测试从零开始

3699
来自专栏华章科技

还不知道这 11 个超酷的编程新工具你就 out 了!

在这篇文章中,我们将列出你在日常工作中能够使用的新的开发工具。很多对在线流媒体感兴趣的开发人员已经开始在他们的开发环境中使用这些新工具,因为相比他们的旧的设施来...

992
来自专栏葡萄城控件技术团队

[经验总结] 关于单元测试

偶然想起@jeffz_cn在twitter上问:“私有方法真的不应该单元测试吗?为什么?我觉得有的组件只是逻辑复杂一些,因此会提取私有方法,并且测试这些私有方法...

1948
来自专栏技术杂文

微服务:真正的架构模式

微服务的相关知识和它的神秘令我着迷。概念上的微服务就像是现代最有趣的流行架构之一。它足够功能强大,有着广泛的使用方法;也足够模糊,难以统一而论。

2733
来自专栏架构师之路

feed流拉取,读扩散,究竟是啥?

答:微博,微信朋友圈,Pinterest是典型的feed流业务,系统中的每一条消息就是一个feed。

3073
来自专栏犀利豆的技术空间

我的写作工具链

写作是技术输出的重要手段。自己也写了一年多的文章,累计也超过五万多字。今天就想谈谈自己对于写作的一些看法以及写作时使用到的工具。工欲善其事必先利其器。

1792
来自专栏程序你好

数据库设计中的6个最佳实践步骤

如果设计得当,数据库是记录、存储、检索和比较数据的强大工具。然而,一个没有经过精心设计和目的的数据库不仅仅是无效的,它对那些使用它最多的人(开发人员)来说是一个...

1372

扫码关注云+社区

领取腾讯云代金券