软件开发流程--学习笔记

背景

当客户提给我们一个项目需求后,我们并不是马上着手于进行编码去实现,而是去进行需求分析等等调研分析工作,编码工作反而是较为靠后的工作。

不同的公司不同的项目也许一些细节存在不同,但我们都按照着一个大致相同的软件开发流程进行工作。为什么规范软件开发流程?它的作用是什么?它又有哪些步骤呢?

产生原因及作用

“软件危机"与"软件工程":1960 年代中期

“软件危机”于60年代中期软件开始作为一种产品被广泛使用,出现了“软件作坊”专职应别人的需求写软件。

这一软件开发的方法基本上仍然沿用早期的个体化软件开发方式,但软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。

“软件危机” 就这样开始了!

1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议_上第一次提出了“软件危机”(software crisis)这个名词。

概括来说, 软件危机包含两方面问题:

  1. 如何开发软件,以满足不断增长,日趋复杂的需求;
  2. 如何维护数量不断膨胀的软件产品。

同年秋季,NATO (北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。

在那次会议上第一次提出了软件工程(software engineering)这个概念。软件工程是一门研究如何用系统化、规范、数量化等工程原则和方法去进行软件的开发和维护的学科。

软件工程包括两方面内容:软件开发技术和软件项目管理。软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。

60年代末“软件危机”后出现的第一个生命周期模型:
分析 -> 设计 -> 编码 -> 测试 -> 维护。

人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。
一些重要文档格式的标准被确定下来,包括变量、符号的命名规则以及原代码的规范式。

个人理解

个人认为,规范软件开发流程的作用究其根本,就是为了让客户满意的同时尽可能降低开发维护成本。

正如之前的产生原因部分所说:

软件危机包含两方面问题:

  1. 如何开发软件,以满足不断增长,日趋复杂的需求;
  2. 如何维护数量不断膨胀的软件产品

可以看出,其实问题的本质就是两个:
1.客户需求日益复杂
2.开发维护成本逐渐提升

根据问题提出的解决方案,作用自然就是解决问题咯。

至于网上所说得作用是透明,能够让用户放心之类,在我看来更像是一个附加小作用。

软件开发流程

网络上关于具体开发流程都是各执一词,根据查阅的一些资料发表一下个人的看法。个人理解为软件开发流程大致可以分成六个大阶段:

需求 -> 设计 -> 编码 -> 测试 -> 交付 -> 维护

我会结合网上查阅的一些资料以及当前就职公司新员工培训中的相关资料,根据个人理解进行逐一分析。

如有错误,还请见谅。

需求

这是整个流程中其他阶段的基础。如果不能明确需求,那么最后得到的软件只会与客户所想要的南辕北辙。

需求阶段分为如下三个步骤:
一、 需求调研
二、 需求分析
三、 需求确认

需求调研

顾名思义,需求调研的主要工作进行调研。调研又分为几个方向:

客户调研
与客户交谈,向客户提问题;参观客户的工作流程,观察客户的操作;向客户群体发调查问卷。

同行/专家调研
与同行、专家交谈,听取他们的意见。

同类产品调研
分析已经存在的同类软件产品,提取需求。

行业调研
从行业标准、规则中提取需求。

其中,客户调研是最重要的。在调研完成后,可以召开需求调研会议进行汇总讨论。之后就是进行需求分析了。

需求分析

相关人员可以用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
最后,用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。

需求确认

显然,这一步就是向用户再次确认需求。确认之后,为了让开发人员,产品经理等项目相关人员厘清客户需求,确保设计的产品与客户需求一致,会做出一份《需求说明书》文档,同时以便于开发人员进行设计和测试人员进行验收。

设计

设计分为概要设计和详细设计。

概要设计

首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。

概要设计也可以理解为架构设计。这个阶段主要是总体的架构、模块、流程设计等等。可以类比做为设计房屋时的主要支架结构。

详细设计

在概要设计的基础上,开发者需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。

详细设计会定义类包的层次结构、调用关系、成员函数、成员变量;函数名称、作用、输入输出;数据类型结构等等。可以类比做设计房屋时考虑的房间功能划分、准备摆放的家具位置等等。

编码

在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题!

没什么好说的,注意按照之前的设计内容进行编码即可。
程序员最重要的编码在软件开发流程方面反而还没什么需要强调的重点(狗头),或着可能只看不同公司的代码规范方便后续测试?

测试

测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。软件测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会有不可预料的问题存在。完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,直到这个软件被彻底淘汰为止。

测试很重要,不过同样有关软件开发流程方面知识着重点并不多。在流程方面的话,测试会存在一个阶段划分顺序:

  1. 单元测试:又称模块测试。对软件的组成单位进行测试,其目的是检验软件基本组成单位的正确性。测试对象是软件测试的最小单位:模块。
  2. 集成测试:也称联合测试(联调)、组装测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。单元测试是一个模块内部的测试,集成测试是在模块之间进行测试(至少两个)。
  3. 系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。虽然系统测试包括冒烟测试和回归测试,但三者之间是有严格的先后顺序的,即:先冒烟、再系统、后回归。
  4. 验收测试交付测试):是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。

更多测试流程及分类相关知识可参照:测试的流程以及分类

交付

在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
《用户安装手册》应详细介绍安装软件对运行环境的要求、安装软件的定义和内容、在客户端、服务器端及中间件的具体安装步骤、安装后的系统配置。
《用户使用指南》应包括软件各项功能的使用流程、操作步骤、相应业务介绍、特殊提示和注意事项等方面的内容,在需要时还应举例说明。

需要注意的是,交付并不意味着仅仅只是交付软件,还有其他的相关文档。

维护

维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。
1、软件数据库管理
2、用户跟踪培训
3、故障分析解决

作为开发周期的最后阶段,维护涉及到报告并修复在测试期间未能发现的错误。在修复方式上,我们既能够采取立即纠正错误的方式,也可以将其作为常规性的软件更新。

此外,软件项目团队还会在此阶段从用户处收集反馈,以协助软件的改进,并提高用户的软件使用体验。

知识拓展

软件开发生命周期(SDLC)

软件开发生命周期(Software Development Life Cycle,SDLC)包含了软件从开始到发布的不同阶段。它定义了一种用于提高待开发软件质量和效率的过程。因此,SDLC旨在通过最少的资源,交付出高质量的软件。为了避免产生严重项目失败后果,软件开发的生命周期通常可以被划分为如下六个阶段:

  1. 需求收集
  2. 设计
  3. 软件开发
  4. 测试和质量保证
  5. 部署
  6. 维护

值得注意的是,这些阶段并非是静态的,它们可以进一步地被分解成多个子类别,以适应独特的开发需求与流程。

虽然SDLC通常都会遵从上述步骤它们在实现方式上略有不同,最主要有6种SDLC方法:
瀑布、敏捷、精益、迭代、螺旋、DevOps方法

有关这6种SDLC方法详情可见:软件开发完整流程——知乎常用的几种软件生命周期模型

软件评审

在软件的生命周期内所实施的对软件本身的评审。
评审本身根据不同的评审阶段,分为需求评审,功能评审,质量评审,成本评审,维护评审等。
评审的组织部门通常可以由需求部门,技术部门,质量控制部门,产品部门等。
评审的结果通常根据不同的评审目标形成评审结果。

参考资料

1.软件发展历史(时间轴)
2.软件开发流程——百度百科
3.软件开发完整流程——知乎
4.软件评审——百度百科
5.测试的流程以及分类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值