软工这门学科给了我一个新的视角,软件开发原来不仅仅是编码而已,还有很多其他复杂的工作。软件工程是指指导计算机软件开发和维护,要科学的掌握这门方法就要熟知和运用12个软工文档。
我把软件工程分成了三个阶段:前期的需求、计划分析、中期的设计和测试,最后后期的维护与管理。
软件工程 — 前期
计划分析阶段
在项目开始时,往往要先进行系统定义,确定系统硬件、软件的功能和接口。系统定义要充分理解问题,对问题的解决办法进行论证;评价问题解决办法的不同实现方案;表达解决方案,以便进行复审。
01.可行性研究报告
02.项目开发计划
目的 | 对开发机房收费系统的费用、时间、进度、人员组织、硬件设备的配置、开发环境和运行环境的配置进行说明,为下一步开发做准备。 |
预期读者 | 项目开发人员和管理人员 |
需求分析阶段
软件需求分析任务:借助当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
步骤:1.深入描述软件的功能和性能。2.确定软件设计的约束和软件同其他系统元素的接口细节。3.定义软件的其他有效性需求
分析法流程:当前系统模型化——物理模型抽象化——现有的逻辑模型中加入现有的需求——把逻辑模型实例化物理模型——具体化目标系统
这个阶段要编辑的文档有:软件需求说明书;数据要求说明书;初步的用户手册;修改、完善与确定软件开发实施计划
03.软件需求说明书
06-2.数据要求说明书
目的 | 把数据分成静态和动态,规范使用数据 |
预期读者 | 开发人员和数据库管理人员 |
11.初步用户手册
目的 | 描述用户的输入和软件的输出结果,以及部分功用途、和运行环境与使用方法。 |
预期读者 | 开发人员、用户 |
软件工程 — 中期
设计阶段
需求分析阶段结束后,系统必须“做什么”的结论已经明确了,下一步就要考虑如何实现系统的需求。
设计阶段包含软件设计与程序设计,这两种设计都要基于面向对象技术。
软件设计过程为:
1.制定规范
2.软件系统结构的总体设计
3.处理方式设计
4.数据结构设计
5.可靠性设计
6.编写概要设计阶段的文档
7.概要设计评审-概要说明书和数据库说明书,完善用户手册
传统的软件工程采用结构化设计(SD),且采用自顶向下,逐步细化的方法。
结构化包含了模块化,就是把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,一般采用耦合性和模块内聚度量模块的独立性。独立性越强,耦合级别越低。
每个模块之间还具有模块内聚的特性,表现模块的紧密程度,功能内聚最优。
抽象化:软件系统进行模块设计时,可有不同的抽象层次。
层次1(高层次抽象):用问题所处环境的术语来描述这个软件。
层次2:任务需求的进一步细化,这个层次不能直接实现,未给出”怎么做“的信息。
层析3:程序过程表示,以2D绘图生产任务,下一步就进入编程阶段。
结构化设计方法:首先研究、分析和审查数据流图;根据数据流图决定问题类型:变换型或事物型;根据数据流图推导出初始的结构图;然后不断修改这俩图,对数据字典细化补充;制定测试计划。
04.概要设计说明书
目的 | 说明整个系统的体系结构,以及需求用例的各个功能点在结构中的体现,为系统的详细设计人员进行详细设计师的输入参考文档。 |
任务 | 确定设计方案和结构设计 |
预期读者 | 开发人员 |
05.详细设计说明书
目的 | 为了得出系统的精确描述,设计出程序的蓝图,式程序员根据此蓝图写出代码。 |
任务 | 过程设计、接口设计和数据设计 |
预期读者 | 开发人员 |
06.数据库设计说明书
目的 | 提供了数据库设计的可视性以及软件支持所需的信息,应用于机房收费系统的开发前期,主要叙述了用户对项目的一些要求,进一步确定软件的功能和性能,对每个功能标准进行定位,为后期数据库设计指引方向,也可以为系统程序设计提供借鉴与参照。 |
预期读者 | 开发人员和数据库管理人员 |
测试阶段
软件分析、设计过程中难免存在各种各样的错误,需要通过测试查找错误,以保证软件的质量。
软件确认结束时应完成的文档有:测试分析报告、经修改并确认的用户手册和操作手册、项目开发总结。
测试的目的:
测试是程序的执行过程,目的在于发现错误
一个好的测试用例在于能发现至今未发现的错误
一个成功的测试是发现了至今未发现的错误的测试
测试的原则:
1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭
2.测试用例应有测试输入数据和对应的预期输出结果这两部分组成
3.程序员用避免检查自己的程序
4.在设计测试用例时,应包含合理输入条件和不合理的输入条件
软件开发是自顶向下,逐步细化的过程,测试过程是依相反顺序安排的自底向上,逐步集成的过程。
07.测试计划
目的 | 描述测试活动的范围、方法、资源和进度。目的就是尽可能多的找到系统中的漏洞,并且设计出测试用例,对系统进行测试。 |
测试用例 | 黑盒测试、白盒测试 |
预期读者 | 开发人员、测试人员 |
08.测试分析报告
09.项目开发总结报告
目的 | 项目开发基本已经完成,此项目开发总结报告,是在分析我们在开发过程总结经验和教训,为我们以后的开发项目积累经验,从而减少成本。 |
预期读者 | 所有参与项目相关人员 |
10.操作手册
目的 | 编写操作手册的目的是让使用此软件的人了解整个操作步骤和正确使用系统,保证系统的安全性和完整性。 |
预期读者 | 开发人员,用户等。 |
11.用户手册
目的 | 编写本文档的主要目的是给使用者提供一个使用指南,以便为首次使用该该系统的用户说明使用方法,以及给正在使用或即将使用的用户在使用的过程中遇到的问题提供解决的办法。 |
预期读者 | 开发人员,用户等。 |
12.开发进度报告
对项目的开发进度,耗资和当前状态进行跟进,以及经费进行总结并且实时列出下个月的计划,从而实现时间金额资源的充分利用,至此软工文档就结束了。
软件工程 — 后期
软件后期的维护与管理同样重要,三种维护类型分别是:改正性维护——占20%、适应性维护——占25%、完善性维护——占50%、还有其他维护占5%
维护的策略是:
1.改正性维护:开发周期间未能发现的遗留错误
2.适应性维护:指软件适应运行环境的改变而进行的一类维护;因硬件或支持软件改变引起的变化;将软件移植到新机器上;软件适用对象的较少改变
3.完整性维护:提高软件性能和软件可维护性而对软件修改的过程。
4.预防性维护:为了给未来的改变奠定更好的基础而修改软件的维护活动。
项目管理过程:
1.启动一个软件项目 在指定软件项目计划前,必须明确项目的目标和范围,考虑候选的解决方案,表明技术和管理上的要求。
2.度量 未来了解产品开发的技术过程和产品本身 作用是为了有效地定量进行管理
3.估算 在软件项目管理过程中关键的活动就是定制项目计划 在做计划必须就需要的人力(以月为单位)、项目持续时间(以年或月为单位)、成本(以元为单位)作出估算
4.进度安排 预先对进度如果计划? 工作怎么样就位? 如何识别定义好的任务?
5.跟踪和控制 一旦建立了开发进度安排,就可以开始着手追踪和控制活动;由项目管理人员负责追踪在进度安排中标明的每一个任务,还可以对资源重新定向,对任务重新安排,做最坏的结果。