前言
时不可以苟遇,道不可以虚行。
一、软件工程的概念
- 软件是计算机系统运行的 指令、数据 和 相关文档 的集合,即软件等于程序、数据、加上文档。
- 程序:是事先按照预定功能性能等要求设计和编写的指令序列;
- 数据:是使程序正常处理信息的数据结构及信息表示;
- 文档:是与程序开发、维护和使用有关的技术数据和图文资料。
- 软件危机:是指在计算机软件开发、运行、维护和管理的过程中所遇到的一系列严重问题。
在软件开发和维护过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。
软件工程的定义
- 采用工程的概念、原理、技术和方法,在计划、开发、运行、维护和管理软件的过程中,将科学的管理和最佳的技术方法紧密结合,并采用适当工具,以比较经济的手段获得满足用户需求的可靠软件的一系列方法。
软件工程的特点:
- 软件工程是在软件开发中采用工程化的原理和方法,采用一系列科学的、现代化的方法技术来开发软件,这种工程化的思想贯穿软件开发和维护的全过程。
目标是: 实现软件研发与维护的优质高效与自动化。
软件生存周期的概念(软件策划、软件开发和运行维护)
- 软件生存周期是指从开始研发软件到软件停止使用的整个过程,即软件产品从用户提出开发需求开始,经过开发、使用和维护,直到最后淘汰的整个周期,因此也称为软件生命周期或软件生存周期,是软件工程的一个重要概念。
软件生存周期几个概念:
- 软件策划
- 需求分析
- 概要设计
- 详细设计
- 编写程序
- 测试
- 运行和维护
瀑布模型
- 瀑布模型将生存期的计划时期、开发时期和运行时期又细分为若干个阶段。
二、可行性分析
-
可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。
-
必须记住,可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
可行性分析也称为可行性研究,其目的是围绕影响软件项目研发的各种因素的可行性进行全面、系统的分析论证,是以尽可能小的成本在较短时间内和特定条件下确定软件项目是否值得研发、是否可行。
三个方面的可行性:
- 技术可行性;
- 经济可行性;
- 操作可行性。
三、需求分析
- 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
需求分析是软件项目决定开发后的首要工作,在软件的整个研发过程中最关键,也是软件工程的一个重要环节。
数据流图(DFD:Data Flow Diagram)
- 描述符号主要有四种:外部实体、数据流、加工、数据存储文件。
模块化
- 模块是构成程序的基本构件,一般软件都由其模块和子模块构成。
- 模块设计时兼顾内聚性和耦合性并保持模块相对的功能独立性。
- 内聚: 标志一个模块内各个元素彼此结合的紧密程度,是信息隐蔽和局部化概念的自然扩展。
设计时,应该力求做到功能高内聚。
功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
功能内聚是最高程度的内聚。
- 耦合: 耦合是对软件结构内不同模块之间互连程度的度量,是影响软件复杂程度的一个重要因素。
控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一个模块的功能。
- 对模块的设计应最大程度地追求:高内聚、低耦合。
描述软件结构的工具
- 层次图
- HIPO 图:“层次 - 输入 - 处理 - 输出”
概念数据模型设计
- E-R 图;
- 实体 - 联系模型采用简单的 E - R 图表达对现实的理解。
- 优点: 图形元素少,接近人的思维方式、不用考虑存储结构、存取方式和具体的数据库软件,易分析、易设计等。不熟悉计算机技术的用户也能理解并使用,适合作为数据建模起始工具。
- 矩形:表示实体集
- 椭圆:表示属性
- 用带有下划线的主键或码名的椭圆:表示主键
- 菱形:表示联系,联系类型用菱形与实体间的连线表示,外键用带有下划虚线的外键名的椭圆表示,多值属性用双线椭圆表示,派生属性用虚椭圆表示。
实体关系图的设计步骤是:先确定实体类型、实体属性和联系类型,然后画出 E-R 图。
四、软件详细设计
1、详细设计的任务
- 模块的算法设计
- 模块内的数据结构设计
- 模块接口实现设计
- 模块测试用例设计
- 编写详细设计说明书
- 详细设计评审
2、详细设计的描述工具
图形工具:
- 程序流程图
- 盒图(N - S)
- 问题分析图(PAD:Problem Analysis Diagram)
环形复杂度
- 用 McCabe 方法度量得出的结果称为程序的环形复杂度。
五、软件实现
程序语言的发展
- 第一代语言:是与机器硬件密切相关的机器语言和汇编语言。
- 第二代语言:主要应用于各种计算,包括
FORTRAN、COBOL、Pascal
和BASIC
等。 - 第三代语言:直接支持结构化构件,并且具有很强的过程能力和数据结构能力,包括结构化语言和面向对象语言,如结构化程序语言有
C
等,面向对象的语言有C++/Java/Delphi
等,大致分为:通用高级语言、面向对象的语言和专用语言。 - 第四代语言:属于超高级程序设计语言,特征:强大的数据管理能力、可对数据库进行有效的存取、查询和其他相关操作……
程序注释
- 程序注释分为:序言性注释和功能性注释。
- 序言性注释通常置于各种程序模块的开始部分;
- 功能性注释嵌在源程序体内,常放在具体语句之后,用于描述语句或程序段所要做的工作。
六、软件测试
-
软件测试的定义:在规定的条件下对软件进行操作以发现软件错误,衡量软件质量并对其是否能满足设计要求进行评估的过程;同时也是利用特定的技术和方法,运行评价和验证软件满足需求或识别运行结果的过程,并且是检测软件的正确性、完整性、安全性和软件品质的手段和过程。
-
注:软件测试的目的是发现软件中的错误。
软件测试用例设计
- 白盒测试在测试早期执行,黑盒测试主要用于测试的后期。
1、黑盒测试
- 目的是:检查程序各个功能是否能够实现,并检查其中的功能错误,则这种测试方法称为 黑盒测试方法。 黑盒测试也称为功能测试或黑箱测试。
- “黑盒” 则指测试人员只知道被测软件的界面和接口外部情况,不必考虑程序内部的逻辑结构和内部特性,只根据程序的需求分析规格说明来检查其功能是否符合规定的需求。
2、白盒测试
- 若测试规划基于产品的内部结构进行测试,检查内部操作是否按规定执行,软件各个部分功能是否得到充分使用,则这种测试方法称为白盒测试方法。
- 白盒测试主要是对程序内部结构执行路径的测试,有时称为 玻璃盒测试。
七、软件维护
- 软件维护就是在软件已经交付使用之后,为了改正错误或者满足新的需要而管理修改软件的过程。
软件维护类型的四种类型:
- 完善性维护
- 适应性维护
- 改正性维护
- 预防性维护
八、甘特图
- 甘特图又称横道图,该图是活动进度与日历表对照图。用水平线段来表示活动的工作阶段;其中 线段的长度表示完成任务所需要的时间,起点和终点分别表示任务的开始和结束时间。
- 在甘特图中,任务的完成标准是交付相应文档和通过评审。
- 甘特图清楚地表明了项目的计划进度,并能动态反映当前开发进展状况,其不足之处在于不能表达出任务之间复杂的逻辑关系。