软件开发生命周期(Software Development Life Cycle)(一)

程序员的三大美德:懒惰,不耐烦和傲慢。———— Perl 之父 Larry Wall

每个程序员都有其不同的创造力,自认为是上帝的宠儿,却忘了良好的软件系统不可能缺少团队合作的力量。

一个良好的软件项目就像是一个生态系统,生产者、消费者、分解者,每一个环节都不可或缺,只有整个生态分工协作,才能打造健康、可拓展、可持续的软件系统。因此,好的项目应该是团队合作的结果,并且其生命周期应该是良性的,每个环节都被重视的。

从8月份开始着手现在的项目,已经过去了三个月了。最近开发的过程中,遇到了项目最开始考虑的一些问题。于是在想,真正的软件开发应该是有一个标准的过程吧,于是网上找了一些这方面的资料。

1. 什么是软件开发周期?

软件开发周期( Software Development Life Cycle ),也即软件开发流程,系统开发流程。软件开发周期可以保证系统从需求分析,系统设计,开发实现,再到发布,部署生产的整个流程中顺利进行。

软件开发生命周期在早期借鉴了制造业和建筑业的一些经验。比如在建筑行业中,商业分析师首先需要获取客户的需求,设计师设计方案,工程师负责建设,最后对产品(一般是建筑,桥梁,道路等)进行测试和修改。后来一大部分的商业分析师开始进入计算机行业,并开始分析计算机行业中用户的需求,与此相对应的是一批工程师也开始进入计算机行业,进行程序的开发工作。后来,计算机技术开始在人们的日常生活中担任着越来越重要的角色,各行各业开始重视起来计算机,并在计算机技术上投入了越来越多的资源。由于各行各业的需求都具有个性化,单一的解决方案也不能适用于各个行业的实际。因此,在拥有不同的行业背景和需求的企业中,现代软件开发流程在怎样描述、组织和管理工作上不会有太多的偏差。

现代软件开发流程,主要具有以下几个模型:

  • 流水线模型
  • 可迭代的模型
  • 敏捷的模型
  • 快速的模型

一个系统的开发流程(SDLC)主要包括:设计,开发,维护,迭代,修改,测试,发布等步骤,但总结起来其实主要有以下五个步骤:计划,设计,开发,测试,部署。
在这里插入图片描述

1. 计划

商业计划书是一个项目发起人的最初的想法,这一时期,整个项目的前景和边界已经被定义了出来。团队的高层充分研究了在经济、可操作、技术领域上的可行性。在策划阶段,质量保证和风险评估也被准备好,以降低任何不可预测的风险。商业论证文档(Business Case Documentation) 应该在这一阶段准备好,总结归纳所有的想法,并对计划有一个宏观的把控。

这类似于商业计划——BP。科研工程项目可能在工程和科研上都有所侧重,但是不像普通的科研和工程项目,每个项目具体的侧重点也不尽相同。当前的项目比较侧重于工程,但是在专利、软件著作权以及论文上也有一些要求。由于当初在项目定位的时候不够清晰,导致后边做计划时出现了诸如:开发侧重点,功能实现及页面设计上的问题。根据甲方的一些要求和资源,制定清晰的、可操作的、可行的计划是非常重要的。由于项目初期的功能需求文档没有清晰的定位,加之甲方自己没有一个准确的模型,导致后边出现推倒重来的惨剧。

2. 设计

产品设计需要以清晰明确的需求为前提,软件需求说明文档(Software Requirement Specification) 应当包含需求的所有细节,并且在产品设计之前应该征得用户和客户的同意。

根据需求说明文档,将会有很多的产品设计架构被提出来,这些将会被团队的中层成员写成设计说明文档,并且得到团队的高层及项目股东的评审。设计说明文档将会基于一些标准进行评估,这些标准包括但不限于预算、时间、用户友好性,风险性、集成度等。

从当前的项目来看,设计很重要,由于团队人员较少,最开始设计的时候只是自己一个人做了一个功能设计,前端页面设计的比较少,后边在开发的过程中,出现了不断调整前端设计的局面。从整个系统的生命周期来看的话,甲方随时添加删除需求是经常发生的事,但做到整体架构的统一也是最初设计必须做到的。

系统设计的过程中,本着分层和模块化的原则,可以比较清晰的描述出整个系统运行的逻辑。系统的每个子模块要实现什么功能,这些子模块在前端显示如何,后台的逻辑实现如何,数据库如何设计,这些都应该在这个阶段加以考虑的。

3. 开发

在得到最好的设计说明文档后,实施阶段立刻开始被执行,程序员开始根据项目的设计说明文档开发软件,于此同时应该遵循本公司定义的编码规范。公司应该提供统一的开发工具,以保证所有的程序开发人员可以并行的工作。在技术层面上,软件开发人员应该编写 系统功能说明书(Function Specification) 以记录系统提供的所有功能。

团队开发不可缺少的就是版本控制软件,git是不错的选择,但即使使用了git,也会遇到各种各样的问题。比如说:我们使用的系统环境,软件环境不一样,我们定义的路径不一样,我们使用了不同的数据库软件等等。因此,在开发前统一操作环境是非常必要的,企业内部都会有自己的标准,这会大大提高企业开发效率,避免因冲突引起的时间浪费。另外如果无法避免使用不同的环境,代码的健壮性优势就体现了出来,即使使用了不同数据库软件,通过配置简单的配置文件,可以轻松的转换到自己的环境下。这也是必须考虑的。

4. 测试

软件测试应该被视为一个子阶段,并且应该在所有阶段中被执行。尽管如此,程序员,最终用户和质量保证专家应该完成两个主要任务。原因是,程序员知道如何让程序更好的运行,所以他们可以指出程序中最有价值的部分;最终用户更加关注于使用习惯,以确保软件可以满足用户的需求。最终,质量控制专家从体系结构,安全性,与其他系统的集成等各个方面对软件进行整体检查。因此,应该准备不同类型的测试计划给这三类测试人员,来执行测试阶段。

功能测试是程序开发人员经常做的事情,功能测试工作会贯穿程序开发的始终。用户测试也是非常重要的,系统最终是要给用户去用,用户习惯与开发人员的习惯不同,所以他们的测试就很值得借鉴,这样可以提高我们系统的可用性。

5. 部署

部署前应该确保已经通过了所有的测试环节,并且软件系统已经能够正确地成功运行。最后决定是否应该将软件部署在生产环境中,并且,此阶段应该获得管理会的批准。部署计划(Deployment Plan) 应该清晰明确,并且获得批准实施。安装手册,管理手册,用户手册等都应该编写完整。技术团队应该准备好回答涉及软件系统所有的问题。根据最终的软件系统,编写好 应急预案(Contingency Plans) ,对于新部署的软件来说,通用的应急解决方案是后置软件发布日期并且要重新进行测试。对于已经上线的软件来说,很有可能会回滚到以前的版本中,后置发布时间,并且解决已经发现的缺陷。

现在Java的WEB项目部署起来还是比较简单的,但是在部署前,应该做好充分的准备,各种突发情况的紧急处理,部署失败后的回滚等都需要被充分考虑。

2. 为什么需要软件开发周期?
Reason 1: 质量保证和质量控制

质量保证(Quality Assurance)是在产品的开发过程中一系列的确保产品质量的活动。与此同时,质量控制(Quality Control)是在产品开发完成后,一系列的确保质量的活动。QA是保证产品在开发的过程中防止出现缺陷,QC是识别在已经开发完成的产品中的缺陷。QA的目标是尽可能地消除软件缺陷,以此来提高QC这一步操作。QC目标是识别在QA环节中遗漏的缺陷。因此,在QA主动的质量处理和QC响应式的质量处理下,可以保证发布的产品可以达到一个高标准,而且不会带来意想不到的问题。

Reason 2: 更容易地实现控制

在软件开发周期的5个核心的步骤中,有许多的文档需要编写。应准备多份文档,为程序员和测试人员提供指导和说明,以供程序员和测试人员遵循,并认可和批准管理层和批准者的活动和采取的措施。

  • Business Case; 商业论证
  • Software Requirement Specification(SRS); 软件需求说明
  • Design Document Specification(DDS); 设计文档
  • Functional Specification; 功能说明
  • Test Plan; 测试计划
  • Deployment Plan; 部署计划

在这些文档的帮助下,将不会有一些意外发生。用户需求将会得到满足,另外,项目进度也会符合项目的计划。

Reason 3: 满足用户的需求,甚至超出用户的期望

质量保证和质量控制可以保证产品按照用户的需求那样进行发布,但是,用户在将来应用系统的过程中,由于技术的迭代和商业环境的变化,非常有可能会增加系统的功能。因此在设计阶段,设计师不仅应该给出用户需求的解决方案,同时也应该考虑到系统的灵活性、可用性,以及由于系统用户的增加带来的最大系统负载问题等。这些隐藏的需求,通常不会出现在用户需求中,但是他们希望每一个产品都是经过深思熟虑的。

3. 角色

为了有效的完成上面所提到的软件开发周期中的五个阶段,三类关键成员应该总是参与到项目中,而且他们的活动占据了整个项目95%的项目周期,他们在不同的阶段担任着不同的角色,来检查和监控其他人的工作以确保在整个项目周期中,做出的每一个决定都是合规和必要的。

1. 项目经理
  • 定义项目的范围和目标
  • 预算控制
  • 资源分配
  • 业务文档
  • 协调项目高层管理
  • 推出和批准
2. 商业分析/系统分析
  • 在产品实现期间,与终端用户进行交流
  • 业务和系统文档
  • 评估业务需求
  • 设计系统架构,业务流程和用户界面
  • 确保业务需求被正确的分析以及方案的正确实施
  • 确保商业和技术角色之间关系
  • 质量评估和控制
3. 程序开发者/方案开发者
  • 结实业务需求,并将商业需求转换成可部署的解决方案
  • 技术研究
  • 解决产品缺陷
  • 准备功能规范
  • 按照约定的策略进行测试
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值