什么是流程?

流程是任何可重复的一组动作。流程通常由团队来决定,以确保事情会以某种方式完成。流程有很多其他名称:规则、指导方针、形式、程序或限制规定。

软件开发流程,就是软件开发过程中重复的一组动作,是软件开发应遵循的一套规则、程序或规定。

好的流程可以提高项目完工的机会,而且效益要大于成本。

好的软件开发流程可以让软件开发的收益大于所付出的成本。

软件开发流程即软件设计思路和方法的一般过程,包括对软件先进行需求分析,设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编码和调试、程序联调和测试以及编写、提交程序等一系列操作以满足客户的需求并且解决客户的问题,如果有更高需求,还需要对软件进行维护、升级处理,报废处理。

软件开发流程分为: 需求分析——概要设计——详细设计——编码——测试——维护 

软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。 

软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。

需求分析

该过程的目的:获取用户的需求,界定项目的范围与规模,并针对用户的需求 确定技术解决方案。

该过程中,通过与用户的交流沟通,可以形成需求规格说明书,该说明书可以 明确软件开发的范围,需要实现的功能,采用的技术,内部与外部的接口,软件面 向的环境,用户对系统的性能要求,以及其他特殊要求,乃至开发软件的安全性, 可用性,灵活性,可靠性,可维护可扩展性,可能的故障和对故障处理的要求等等 事项。

1.向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。

2.系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。

3.系统分析员向用户再次确认需求。

概要设计


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

概要设计过程,是从收到需求规格说明书后即可开始的。该过程中通过定义软件概要设计过程,指导设计人员去实现能满足用户需求的软件产品。

软件体系结构设计部分细分:

  • 确定系统的架构:技术经理和设计人员要确定软件的开发框架(Framework)和软件各层的实现方针。
  • 确定系统的总体结构(细化子系统/功能模块划分)对规模大的系统,技术经理按照软件体系结构设计模式,按业务将系统分解为若干子系统,同时为每个子系统分配功能,做成系统总统结构图,并识别功能之间的接口关系。
  • 根据分解的功能和客户方的责任权限分配情况,技术经理识别每个功能被使用的人员(岗位)以及相应使用权限。
  • 为了更好的进行数据库的设计和界面设计,技术经理组织设计人员依据分解的功能和识别的数据库表,识别每个表与各个功能之间的操作关系,形成“功能与数据关联图”。
  • 确定分解的各功能的实现方式,进一步识别可重用和进行采购内容,并将识别部分记录到《开发计划》中。

功能设计设计包括:画面设计,报表设计,文件设计
数据库设计:概要设计阶段的数据库设计一般要经历“逻辑设计→优化”等步骤,通常要迭代进行。具体的操作有:

  • 定义数据库表;
  • 确定存取权限;
  • 定义视图;
  • 确定数据库的物理分布;
  • 估算数据量;
  • 性能验证。

外部接口设计:如果软件包括与外部的数据通信,则需要对外部接口进行设计。并
形成相关的文档。

在进行完概要设计之后:项目经理/技术经理可以依据概要设计结果和《需求规格说明书》,开始着手考虑需要集成的关键功能模块、集成的次序和需要测试的接口、功能等内容和测试的环境要求等工作,开始编写结合及系统《软件测试计划》。并且需要以概要设计结果为基础,进行第二次项目规模估算,来修正第一次项目规模估算。

详细设计


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

详细设计过程,从概要设计书经过客户认可后开始,是由设计人员负责将《概要设计书》中的概要设计转化为开发人员能实现的《详细设计书》的工作的过程。

该过程的目的:通过定义软件详细设计过程,指导设计人员去实现能满足用户需求的软件产品。

选定和作成详细设计标准:原则上采用选用公司以往类似项目的详细设计标准,并根据项目的实际情况做适当的修改使用。如果客户提供详细设计标准,可直接采用,公司的详细设计标准只作为补充。
“详细设计标准”内容可分为:

  • l 命名规约(详细设计用);
  • l 数据库存取标准(连接方法/事务处理/排它控制) ;
  • l 日志输出方法;
  • l 出错处理方法;
  • l 目录构成等。

程序模块划分:按程序模块为单位划分程序模块,并对程序模块进行分类,识别共通功能、方法。并形成相关的文档。
共通功能设计:确定各类处理功能逻辑(如:输入数据项目检查、数据库表更新处理、报表打印等)存放位置及相互关联的序列图,分层图。抽出各程序的共通功能(如:数据库连接,信息显示处理,出错处理,日志处理,共通部品等),按“详细设计标准”优先统一设计, 并形成相关的文档。

数据库物理设计:确定数据库的资源,管理、分配数据库的资源。建立数据库,数据表,视图,相关的索引,触发器等等。
最后针对所有的设计生成文档管理。

编码


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

从详细设计完成之后,就进入了编码及单元测试的过程,该过程中要先有编码人员对详细设计学习了解完成后开始,通过编码与单元测试的环节完成软件的代码开发工作。在该过程中,应当规范编码过程,提高编写代码的质量,便于代码编写者以外的人员对代码进行审查、修改、维护。同时也应该规范单元测试过程,确保有效地找出软件中的缺陷,提高软件的质量。


工作流程:
编码与单元测试全体过程:
(编码前准备与单元测试审查在下面单独列出。)
编码时要求:

  • l 根据《详细设计书》和《编码规范》等,按合格代码的 5 项性质(正确性、一致性、规范性、清晰性、高效性)要求进行编码。
  • l 在编写代码告一段落后,首先检查代码的书写,并做必要的修改,使其符合编码规范。
  • l 对代码以白盒测试方法的观点进行调试(自测)和优化,并排除出现的缺陷,特别是内部逻辑错误。

编写和审查单元测试项目表:

  • l 设计人员或编码人员或测试人员根据《详细设计书》和相应样板程序的单元测试《测试项目表》编写各程序的单元测试《测试项目表》。

代码评审:

  • l 按照开发管理表的安排,由代码审查人员根据《代码评审检查表》对代码进行审查,并记录审查结果。
  • l 评审过程中指出缺陷时,小组长/项目经理安排相关人员重复上述过程返工修改和评审。
  • 过程结束时:
  • l 在编码及单元测试工作临近结束时,技术经理根据客户的要求安排设计人员编写各种用户使用文档,如《安装手册》、《用户手册》、《维护手册》、《在线帮助》和客户需要的其他文档。
  • l 编写完成后应通过同行评审(评审参照《评审过程》进行)或通过系统测试来验证文档的正确性,验证通过,归入库中。
  • l 由于用户手册主要是在需求规格说明书的基础上制定的,也可安排人员在项目的概要设计阶段开始就可以编制。该部分文档在系统测试前要完成。

 编码前准备:

  • l 项目经理调整本阶段的《开发管理表》或甘特图和制定单元《软件测试计划》,并组织开发人员进行评审。评审通过后,将《开发管理表》或甘特图和单元《软件测试计划》传达到全部编码人员。
  • l 技术经理准备相关的技术实现方案和程序复用清单,并将识别的可重用的程序记录到《开发计划》中。优先组织小组长及有丰富编码经验的编码人员对各样板程序及对应的单元《测试项目表》进行评审,并对编码人员进行讲解(含编码规范、共通部品_方法一览等)。
  • l 编码人员阅读详细设计书、编码规范及其相关文档,明确编码任务,准备代码级复用代码,将不理解的问题填写到《问题管理表》,必要时组织会议讨论解决。
  • l 搭建编码及单元测试环境。搭建编码及单元测试支撑环境, 如: 硬件,OS,DBMS,WEBSERVER,测试工具等。 在所搭建测试支撑环境中建立编码及单元测试运行环境(包括:测试用数据库及程序编辑/调试/运行配置)。

(说明: 根据需要,编码环境和单元测试环境可以不同。)

 单元(以程序模块为单位)测试与审查:
按照开发管理表的安排,由项目开发人员根据单元《测试项目表》对代码进行
交叉单元测试:

  • l 准备单元测试用驱动程序及桩模块等。
  • l 准备单元测试用数据(含确认客户提供的测试数据)。
  • l 实施测试并记录测试结果,记入单元《测试项目表》。
  • l 单元测试过程中所发现缺陷时,项目经理安排相关人员重复上述过程返工修改和评审。
  • l 技术经理或组长对记录有测试结果的《测试项目表》进行审查,并在表中记录审查人。

测试

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

通过测试过程中,通过有效地完成软件工程中的结合测试和系统测试工作,验证软件系统是否遵循概要设计并且满足产品需求。

熟悉需求分析或概要设计工作产品和测试要求:

  • l 熟悉需求分析或概要设计工作产品。
  • l 了解客户对测试的要求。

制定测试计划:

  • l 测试组长按照《软件测试计划》模板制定结合及系统测试计划,和项目经理协商安排结合及系统测试工作。

评审测试计划:

  • l 测试组长组织开发人员对制定完成的结合及系统测试计划进行评审。评审参照《评审过程》进行。评审通过后,将测试计划传达到全部测试人员。

准备测试需要准备:

  • l 检查是否已可以进行了相应的测试:是否已完成单元测试。
  • l 结合及系统测试前,测试人员从配置库中提取要测试的代码及测试所必须的文件,安装到测试运行环境中。
  • l 准备测试数据(含客户提供的测试数据)并装入测试用数据库。

测试和评审:

  • l 按照开发管理表的安排,由测试人员根据《测试项目表》对代码进行测试并记录测试结果。
  • l 根据项目情况将全部拷贝或只拷贝缺陷的测试结果,记入《测试项目表》和《缺陷处理单》。
  • l 确认测试过程中所发现缺陷时,测试组长安排设计人员和编码人员确定修改方案,重复”编码及单元测试过程”和“软件测试过程”的相关步骤返工修改、测试和评审。

附测试缺陷管理指南流程图:

 编写和内部评价测试报告 :

  • l 全部结合及系统测试结束后,参照相关标准。测试组长组织有关部门对结合及系统测试的结果进行综合评价,确认测试报告的结论。
  • l 如果使用模拟测试环境,还应评价模拟环境与现实环境的差异,确认测试报告的结论。
  • l 当所有发现的缺陷都得到解决,测试的实际值符合目标值,而且缺陷倾向趋向异常路径,无重大缺陷存在时,判定测试结束。
  • l 如果客户有要求,将结合及系统《测试报告》提交客户。

上述各个过程应该记录相关文档并入库保存。

软件交付


在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。

 

维护

根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改。

对于软件的开发流程,不一定要完全参照软件工程的思想,完成每一步。因为软件开发的针对性和客户即为自身的特殊性,可以引入如下的内容:

1. 建立基线库等版本管理机制,使用版本管理工具,有助于实现版本的控制,有助于代码的共享, 最终是归于有助于提高项目的开发和维护。
2. 完善文档的管理,建立各阶段文档模板,对于软件开发的每个环节,按照规定完成各个文档等资料,有助于项目开发的健壮性和高效性。
3. 做好已有项目的数据搜集整理工作,提取可重复利用模块。分析已完成项目,分析曾经犯过的错误和失败之处,避免以后的工作中再次的出现。
4. 因为涉及到即将增多的开发人员,有必要整理一个代码规范,便于代码共享,工作移交,后期修改维护等等工作。对于同种语言的开发者 ,应当统一开发环境,开发工具,以便于协作开发。
5. 项目组应当定期召开会议(例如:周例会),以供开发人员交流开发进展,讨论开发中出现的问题,有助于更深刻的理解项目,增强沟通,提升团队间的凝聚力。
6. 完善周报日报制度。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐