问题定义
问题定义指在项目初期,从客户或用户处获取需求,弄清用户需要计算机解决的问题根本所在,以及项目所需的经费和资源的文档,最终使开发人员与客户就所构建的系统的范围达成一致意见。
用户调查
对用户进行访谈,调查,初步了解项目范围,需要解决的问题以及项目经费的重要信息。
编写《系统目标与范围说明》
将本阶段的结果写成相应的文档,即《系统目标与范围说明》。
可行性研究
软件可行性分析最根本的任务是用最少的代价,对以后的行动方针提出建议。如果问题没有可行的解释,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。
确定项目的规模和目标
分析员对有关人员进行调查访问,仔细阅读和分析有关的材料,对项目的规模和目标进行定和确认,清晰地描述项目的一切限制和约束,确保分析员正在解决的问题确实是要解决的问题。
研究正在运行的系统
收集,研究,分析现有系统的文档资料和使用手册,实地考察现有系统,在考察的基础上,访问有关人员,确定目标系统必须完成的基本功能。
建立新系统的高层逻辑模型
根据对现有系统的分析研究,逐步明确了新系统的功能,处理流程以及所受约束,然后使用数据流图和数据字典,概括的描述高层的数据处理和流动。
重新定义问题
将新系统的高层逻辑模型与项目的问题及目标进行比较,重新复查问题定义,工程规模和目标。
导出和评价各种方案
分析员建立了新系统的高层逻辑模型,并进行复查后,要从技术的角度出发,提出高层逻辑模型的不同方案,即导出若干较高层次的物理解法。根据技术可行性,经济可行性,社会可行性对各种方案进行评估,去掉行不通的解法,得到可行的解法。
推荐可行方案
根据之前可行性研究的结构,应该决定该项目是否值得去开发。若值得开发,那么可行的解决方案是什么,并且说明该方案可行的原因和理由。
草拟开发计划
初步确定工程进度表,开发人员,所需要的资源以及对项目所需要的时间进行估计。
编写《可行性研究报告》
将该阶段的可行性研究过程的结果写成相应的文档,即《可行性研究报告》。
提交审查
用户和使用部门对《可行性研究报告》进行仔细审查,从而决定该项目是否进行开发,是否接受可行的实现方案。
需求分析
需求分析要求开发人员准确理解用户的需求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转化到相应的形式功能规约(需求规格说明)的过程。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
制定需求分析计划
需求分析是一项重要的工作,也是最困难的工作,这个阶段可能会耗费相当的时间,人力以及物力。若有明确的计划进行指导,将使得需求分析工作更加有条不紊的进行。
需求获取
需求获取是一个对准备建立的系统和正在使用的系统进行信息收集并从这些信息中提取用户需求和系统需求的过程。可以通过用户面谈,实地考察,用例,需求专题讨论会等方式发现,获取需求。
分析和综合
分析人员根据导出的需求,进行移植的分析检查,在分析,综合中逐步细化软件功能,划分成各个子功能,找出各元素之间的联系,接口特性和设计上的限制。
导出软件的逻辑模型
根据分析与综合的结果,细化可行性研究阶段形成的高层逻辑模型,包括数据流图和数据字典,E-R图,状态转换图等,以图文的形式建立起性系统的逻辑模型。
协商与沟通
在有多个项目相关人员(信息持有者)参与的地方,需求将不可避免的发生冲突,在这个阶段需要对需求的优先权进行排序并通过协商发现并解决这些冲突。
编写《需求规格说明书》
把双发共同的理解与分析的结果用规范的方式描述出来,形成《需求规格说明书》,并向下一阶段提交,作为今后各项工作的基础。
需求验证
为保障软件质量,确保软件开发成,一旦对系统提出一组要求之后,必须严格验证这些需求的正确性,一般从一致性,完整性,现实性,有效性四个方面进行验证。在这个阶段,系统客户和系统开发人员必须详细地阅读需求文档并检查其中的错误,一旦检查出任何问题必须记录下来,接着客户就需要和开发人员协商如何解决问题。
修改完善开发计划
在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确的估计开发成本,进度以及资源要求,因此,对原计划要进行适当修正。
技术审查和管理复审
用户和使用部门对《需求规格说明书》进行仔细的审查,通过后该文档将作文今后工作的基础。
概要设计
概要设计也成为总体设计,在这个极端需要确定软件的总体结构,也就是软件应该由哪些模块组成,以及模块与模块之间的接口关系,软件系统主要的数据结构,同时还要制定测试计划,形成概要设计说明书。
制定规范
尽管每个开发组织都有概要设计规范,但是不同的应有有些特殊性,所以应该针对具体的软件特点,制定出合适的规范。包括设计文档的编制标准,编码的信息形式,与硬件、操作系统的接口规约,命名规则等。
设想供选择的方案
在概要设计时,设计人员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。此时设计人员有充分的自由比较不同的实现方案,一旦选出了最佳方案,将能大大提高系统的性价比。
推荐最佳方案
综合分析对比各种合理方案的利弊,推荐一个最佳方案,并为最佳方案制定详细的实现计划。用户和有关技术专家应该认真审查,若符合需求并且完全能够实现,则提请负责人审批。方案被接受后者进入下一阶段。
功能分解
为确定软件结构,首先需要从现实角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,将复杂的功能分解成一系列比较简单的功能。经过分解细化之后,通常一个模块只完成一个适当的功能,每个模块对于大多数程序员都是易于理解的。
软件结构设计
设计软件模块的结构就是要把软件模块组成良好的层次系统,描述各模块之间的关系。顶层模块调用它下层模块,每个下层模块再调用更下层的模块,最下层的模块完成最具体的功能,这样自顶向下实现一个完整的功能。
数据设计
数据设计包括数据结构设计,文件设计和数据库设计。根据需求分析阶段获得的数据要求,确定实现系统所必须的数据,数据之前的关系,存储数据的实体。
制定测试计划
为了保证软件的可测试性,软件在一开始就要考虑软件的测试问题,但是这个阶段的测试计划应该是针对软件结构的测试和系统测试。
编写《概要设计规格说明书》
将本阶段的成果编制为相应的文档,即《概要设计规格说明书》。
其他文档编写
需要提交审查的文档还包括用户手册,测试计划,实现计划等,还需要对这些文档进行编写。
技术审查和管理复审
最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由客户从管理角度进行复审。
详细设计
详细设计阶段的根本目的是确定应该怎样具体地实现所要求的系统,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以吧这个描述直接翻译成用某种程序设计语言书写的程序。
数据结构设计
数据结构设计指的是对需求分析,概要设计阶段确定的概念性的数据进行确切的定义。
物理设计
对数据库进行物理设计,即确定数据库的物理结构。物理结构主要是指数据库的存储记录格式,存储记录安排和存储方法,这些都依赖于具体使用的数据库系统。
算法设计
在总体设计的结构完成之后,结构各个环节的实现是多解的。这就需要用系统设计与分析的技术来描述。可以使用某些图形、表格、语言等工具将每个模块处理过程的详细算法表示出来。
界面设计
用户界面的设计现在显得比较重要,可以采用字符用户界面设计,图形用户界面和多媒体人机界面设计。这就要结合具体的系统来处理。
其他设计
根据软件系统的类型,可能还要进行其他设计,例如:代码设计,输入/输出格式设计,人机对话设计,网络设计等。
编写《详细设计规格说明书》
将本阶段的成果编制为相应的文档,即《详细设计规格说明书》。
技术审查和管理复审
最后应该对详细设计的结果进行严格的技术审查,所有处理过程的算法和数据库的物理结构等都要进行评审。
编码
编码即把软件设计的结果翻译成用某种程序设计语言书写的程序。作为软件工程中的一个阶段,编码是对设计的进一步具体化,因此,程序的质量主要取决于软件设计的质量。但程序设计语言的选择以及编码风格也对程序的可靠性,可读性,可测试性和可维护性产生深远的影响。
选择合适的程序设计语言
编程语言在软件活动中处于中心地位,选择一门适合的编程语言十分重要。通常从应用领域,算法与计算复杂性,数据结构的复杂性,效率等几个方面考虑某一语言是否可选作编码语言。
制定编码规范
良好的代码风格和编码规范可以降低程序出错的几率,提高程序的易读性和质量,利于构造大软件所必须的团队开发,同时也可以有效降低程序的维护成本。
建立数据库系统
根据之前数据与数据流程分析以及数据库设计的结果建立数据库结构。
程序编码
使用选定的程序设计语言,将详细设计中的过程性描述翻译成用该语言编写的源程序(源代码)。
技术审查和管理复审
最后应该对编码的生成的源程序进行严格的技术审查,确保程序运行结果正确有效,满足要求。
测试
测试是为了发现错误而执行程序的过程,即根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。
测试用例设计
是以发现错误为目的而精心设计的一组测试数据,测试用例={输入数据+期望结构}。测试用例将用于之后的测试。
单元测试
单元测试针对程序模块,进行正确性检验的测试。其目的在于发现各模块内部可能存在的各种差错,验证它们是否符合模块功能说明的需求。单元测试需要从程序内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
集成测试
集成测试是组装软件的系统技术,即在单元测试的基础上,需要将所有模块按照设计要求组装成为系统,并在此过程中进行测试,其主要目标是发现与接口有关的问题。
确认测试
确定所开发的软件是否符合软件需求规格说明书的要求。
系统测试
把新开发的软件安装到系统中,检查它能否与系统的其余部分协调运行。
编写《测试分析报告》
将本阶段的成果编制为相应的文档,即《测试分析报告》。