软件工程
软件工程概述
软件工程概念的提出是由于软件危机的出现
软件工程指运用计算机科学、数学管理科学等相关原理,以工程化的原则、工程化的方法来解决软件的问题的工程,其主要目的是提高软件的生产率,提高软件的质量,降低软件成本
软件工程的三要素—方法、工具、过程
- 方法—指完成软件开发各项任务采用的技术
- 工具—为了运用方法而需要采用软件的支持环境
- 过程—为了获得高质量、低成本软件的一系列框架
软件生命周期
- 可行性分析与项目开发计划----确定要开发的目标以及可行性,明确要解决的问题,该问题有没有可行的解决办法,如果有,需要多少费用、资源、时间,进行可行性分析,主要产物是可行性分析报告和项目计划书
- 需求分析----为了解决提出的问题,确定软件的功能、性能、用户的界面,将系统提出逻辑模型,主要产物是软件需求说明书
- 软件设计----将前面分析的逻辑模型转化为物理模型,分为概要设计和详细设计;
概要设计为设计系统的结构,由哪些模块组成,模块的结构层次、模块之间的调用、模块之前的调用、模块之间的交互,整体的数据结构和数据库结构,对于测试人员来说,还要确认集成测试的范围,主要产出为概要设计书;
详细设计主要完成每个模块功能的描述和设计,把功能编写一系列程序代码可实现的逻辑过程,主要产出为相机设计说明书;
- 编码----将逻辑过程写成具体的程序代码,将物理模型转换为实际运行的系统
- 测试----针对编写的程序模块,检查各个模块是否实现其功能,给出相关的评测报告
- 维护----将程序代码发布至用户环境,进入维护阶段;维护是信息系统生命周期中花钱最多、延续时间最长的活动
软件定义阶段
基于瀑布模型,将软件分为定义阶段、开发阶段、运行维护阶段
定义阶段包括问题定义、可行性研究、需求分析
需求的层次
需求的层次包括业务需求、用户需求、系统需求
- 业务需求–企业或客户对系统实现目标的要求
- 用户需求–用户的具体目标
- 系统需求–从系统角度来看软件的需求,包括功能需求、非功能需求、设计约束
功能需求–在系统中必须实现的功能需求
非功能需求–系统必须具备的属性,包括安全性、性能等
设计约束–在进行软件设计时限制的条件
需求的特征
需求的特征–完整性、正确性、可行性、可验证性、必要性、一致性
完整性–每一项需求都必须描述清除,使设计阶段人员能够获得正确的信息
正确性–正确的描述功能逻辑
可行性–在已知环境下可实现
必要性–每项需求都编写需求,可以追溯到每个用户
一致性–所有需求只有一个明确的统一的解释(术语等方面)
可验证性–每项需求是否可以通过测试用例去验证
软件开发阶段
开发阶段包括需求分析、软件设计、编码、测试
概要设计
概要设计也叫做总体设计
概要设计的内容–设计软件系统总体结构、数据结构及数据库设计
设计软件系统总体结构
- 划分功能模块
- 模块功能和职责
- 模块间的调用关系
- 模块间的信息传递
- 评价模块结构的质量
软件体系结构是在概要设计阶段进行的
数据结构及数据库设计
详细设计
- 代码设计–信息的代码设计,比如说信息在系统中怎么管理
- 输入/输出设计
- 用户界面设计
- 处理过程设计
- 其他设计任务–标准化设计、描述设计结果、拟定实施方案
系统结构设计原则
- 分解一一协调原则–把系统看作为一个整体,自顶向下分解、协调
- 自顶向下的原则
- 信息隐蔽、抽象的原则–信息隐蔽指的是通过封装技术,把一些机密信息,封装在模块内,用户只能看到输入输出;抽象指的是把具体的事情抽象成类或更高层的对象,通过系统去解决
- 一致性原则
- 明确性原则
- 模块的扇入系统和扇出系数要合理
扇入:当前模块实现功能需要调用其他功能调入的个数称为扇入,扇入越大越好,扇入越大,模块的通用性越强,重复利用率较高
- 模块的规模适当