一、系统开发基础知识
需求分析和设计方案
软件工程基本知识
软件危机
软件危机的主要表现
1. 对软件开发成本和进度的估计不准确
2. 用户不满意
3. 软件质量不高、可靠性差
4. 软件常常不可维护、错误难以改正。
5. 缺乏适当的文档资料
6. 软件成本占系统总成本的比例逐年上升
7. 软件开发速度跟不上计算机发展速度
软件工程
大型的,复杂的软件系统的开发是一项工程,必须按工程学的方法组织软件的生产与管理,必须经过计划,分析,设计,编程,测试,维护等一系列的软件生命周期阶段。
IEEE对软件工程的定义:软件工程是开发,运行,维护和修复软件的系统方法。
软件工程方法学包括3个要素:方法,工具和过程。方法是指完成软件开发各项任务的技术方法;工具是指为运用方法而提供的软件工程支撑环境;过程是指为获得高质量的软件所需要完成的一系列任务的框架。
目前使用最广泛的软件工程方法学是结构化方法学和面向对象的方法学。
软件生命周期
1970年,Boehm提出了软件生命周期的瀑布模型(waterfall model),它典型地刻画了软件生命周期的阶段划分。瀑布模型将软件生命周期划分为八个阶段:问题定义,可行性研究,需求分析,总体设计,详细设计,编码,测试,维护。八个阶段归纳为三个时期,计划
期,开发期和运行期。其中问题定义和可行性研究属计划期,维护属运行期,其余为开发期。
结构化方法学概述
1977年以后出现的结构化方法学也称为生命周期方法学,它采用结构化技术(结构化分析,结构化设计和结构化实现)来完成软件开发的各项任务。这种方法学把软件开发生命周期划分为若干个阶段,然后按顺序完成第个阶段的任务。
结构化方法学具有以下特点:
(1) 阶段性;
(2) 推迟实施;
(3) 文档管理。
结构化分析
结构化分析(structured analysis,SA)方法是一种面向数据流的需求分析方法,它的基本思想是自顶向下逐层分解。
数据流图和数据字典是结构化分析的工具,软件需求说明书是需求分析阶段的最后成果。
1,数据流图
数据流图(data flow diagram,DFD)用来描述数据流从输入到输出的变换过程。
DFD的基本成分:数据流,加工,文件和源/宿。
2,数据字典
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素定义的集合。
数据流图和数据字典共同构成了系统的逻辑模型。
数据字典中有四种类型的条目:
(1) 数据项条目;
(2) 数据条目;
(3) 文件条目;
(4) 加工条目。
3,软件需求说明书
软件需求书把在软件计划中确定的软件范围加以展开,制定出完整的信息描述,详细的功能说明,恰当的检验标准以及其他与要求有关的数据。
结构化设计
系统设计主要包括体系结构设计,接口设计,数据设计和过程设计。
结构化设计(structured design,SD)方法是一种面向数据流的设计方法,它是以结构化分析所产生文档(数据流图,数据字典和软件需求说明书)为基础,自顶向下,逐步求精和模块化的过程。结构化分析通常可分为概要设计和详细设计。概要设计的任务是确定软件系统的结构,进行模块的功能,接口经及模块间的调用关系。详细设计的任务是为每个模块设计实现的细节。
1. 软件设计的概念与原则
(1) 模块化
模块是指执行某一特定任务的数据和可执行语句等程序元素的集合,通常是指可通过名字来访问的过程,函数,子程序或宏调用。
模块化就是将一个待开发的软件划分成若干个可完成某一子功能的模块,每个模块可以独立地开发,测试,最后组装成完整的程序。
定义模块大小的标准:
可分解性;
可组装性;
可理解性;
连续性;
保护性。
(2) 内聚
内聚是指一个模块内各个元素彼此结合的紧密程序。内聚有以下几种,由弱到强排列:
偶然内聚;
逻辑内聚;
瞬时内聚;
过程内聚;
通信内聚;
顺序内聚;
功能内聚。
(3) 耦合
耦合是对一个软件结构内不同模块之间互连程序的度量。耦合强弱取决于模块接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
模块间的耦合程度强烈影响系统的可理解性,可修改性,可测试性和可靠性。
耦合可以分为以下几种,强度由主到低:
内容耦合;
公共耦合;
外部耦合;
控制耦合;
标记耦合;
数据耦合;
非直接耦合。
模块的高内聚,低耦合原则称为模块独立性原则。
(4) 深度,宽度,扇入和扇出。
深度表示软件结构中控制的层数;
宽度是软件结构中同一个层次上的模块总数的最大值;
扇出是指该模块直接调用的下级模块的个数;
扇出是指直接调用该模块的上级模块的个数。
(5)作用域和控制域
模块的作用域是指受该模块内一个判定影响的所有模块的集合。模块的控制域的指该模块本身以信该模块直接或间接调用的所有模块的集合。
(6)功能的可预测性
功能的或预测性是指对相同的输入数据能产生相同的输出。
2.概要设计
概要设计的重要任务是设计软件的结构,也就是要确定系统是由哪些模块组成的,以信这些模块相互间的关系。
SD方法采用结构图(structure chart)来描述程序的结构。构成程序结构图的主要成分有模块,调用和数据。
(1) 概要设计的具体步骤
第一步:复查基本系统模型;
第二步:复查并精化数据流图;
第三步:确定数据流图的信息类型;
第四步:根据流的类型分别实施变换分析或事务分析。
第五步:根据软件设计原则对得到的软件结构图进一步优化。
(2) 概要设计说明书
是概要设计的最后成果。
详细设计
详细设计阶段的根本目标就是确定应该怎样具体地实现所要求的系统,得出对目标系统的精确描述。
(1) 结构化程序设计
(structured programming,SP)采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。
三种基本控制结构:顺序结构,IF_THEN_ELSE 型分支结构(选择结构)和DO_WHILE型循环结构。
(2) 过程设计工具
描述程序处理过程的工具称为设计工具,主要包括程序流程图,盒图(N-S图),PAD图和伪码(PDL)。
(3) 人机界面设计
主要包括系统响应时间,用户帮助设计,出错信息处理和命令交互设计等。
(4) 详细设计说明书。
面向对象方法学概述
面向对象=对象(objects)
+类(classes)
+继承(inheritance)
+消息通信(communication with message)
(1) 对象与封装
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
对象的三要素:对象标识,属性和服务。
封装是对象的一个重要原则。它有两层含义:第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子子里面。
(2)类
类是对具有相同属性和服务的一个或一组对象的抽象定义。
类和对象是抽象描述与具体实例的关系,一个具体的对象被称为类的一个实例。
(3) 继承和多态性
继承(inheritance)的定义为:特殊类的对象拥有其一般类的全部或部分属性。
多态性(polymorphism)是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
(4)消息通信
消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识,消息名,输入信息和回答信息。
消息通信也是面向对象方法中的一条重要原则,它与封装密不可分。消息通信为它们提供了惟一佥的动态联系途径,使它们的行为能够互相配合,构成一个有机的系统。
只有同时使用对象,类,继承和消息通信,才是真正面向对象的方法。
面向对象方法学的优点
(1) 与人类习惯的思维方式一致;
(2) 稳定性好;
(3) 可重用性好;
(4) 较易开发大型软件产品;
(5) 可维护性好。
面向对象的分析
1, OMT方法简介
OMT(Object Modeling Technique)方法的OOA(Object-Oriented Analysis,OOA)模型包括对象模型,动态模型和功能模型。
对象模型表示静态的,结构化的系统的数据“数据”的性质。通常用类图表示。
动态模型表示瞬时的,行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。通常用状态图表示。
功能模型表示变化的系统的“功能”性质,它指明系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。通常用数据流图表示。
2, 建立对象模型
复杂系统的对象模型通常有以下五个层次组成:类及对象层,结构层,主题层,属性层和服务层。分别对应建立对象模型的五项主要活动:确定类与对象,确定结构与关联,划分主题,定义属性和定义服务。
3. 建立动态模型
第一步:编写典型交互行为的脚本。
第二步:从脚本中提取出事件,确定触发第个事件的动作对象以及接受事件的目标对象。
第三步:排列事件发生的次序,确定第个对象可能有的状态及状态间的软件关系。
4. 建立功能模型
OMT方法中的功能模型实际上就是结构化方法中的数据流图。
面向对象的设计
1. OOA与OOD的关系
2. 设计问题域部件;
3. 设计人机交互部件;
4. 设计任务管理部件;
5. 设计数据管理部件。
二、开发环境
软件工具
软件工具是指用于辅助软件开发,运行,维护,管理,支持等过程中的活动的软件,通常也称为CASE(computer aided software engineering,计算机辅助软件工程)工具。通常可将软件工具分为软件开发工具,软件维护工具和软件管理工具。
1, 软件开发工具
(1) 需求分析工具;
(2) 设计工具;
(3) 编程工具;
(4) 测试工具。
2, 软件维护工具
(1) 版本控制工具;
(2) 文档分析工具
(3) 开发信息库工具;
(4) 逆向工程工具;
(5) 再工程工具。
3, 软件管理工具
(1) 项目管理工具;
(2) 配置管理工具;
(3) 软件评估工具。
集成开发环境
软件开发环境是指支持软件产品开发的软件系统。
集成软件开发环境是一种把支持多种软件开发方法和开发模型,支持软件开发全过程的软件工具集成在一起的软件开发环境。
集成型开发环境通常可由工具集和环境集成机制两部分组成。环境集成机制主要有数据集成机制,控制集成机制和界面集成机制。
三、软件测试与软件评审
1, 软件测试的目的
软件测试的目的就是在软件投入生产运行之前,尽可能多地发现软件产品中的错误和缺陷。
2, 测试分类
软件测试通过可分为单元测试,集成测试和系统测试。
(1) 单元测试
单元测试(unit testing),也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的错误,单元计划应该在详细设计阶段制定。
单元测试着重从以下几个方面对模块进行测试:模块接口,局部数据结构,重要的执行通路,出错处理和边界条件。
(2) 集成测试
集成测试(integration testing),也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。
(3) 系统测试
系统测试是软件测试中的最后的,最完整的测试,它是在单元测试,集成测试的基础上进行的,它从全局来考察系统的功能和性能要求。系统测试计划应该在需求分析阶段制定。
通常,系统测试包括确认测试(validation testing)和验收测试(acceptance testing).
3,测试方法
(1)白盒测试
又称结构测试,主要用于单元测试阶段。
(2)黑盒测试
又称功能测试,主要用于集成测试和确认测试阶段。
(3)灰盒测试
介于前两者之间。主要用于集成测试阶段。
软件评审
狭义的“软件评审”通常指软件文档和源程序的评审。广义的“软件评审”还包括与软件测试相结合的评审有及管理评审。软件评审包括软件需求评审,概要评审,详细评审,软件验证和确认评审,功能检查,物理检查,综合检查和管理评审。
测试设计和管理
1, 白盒测试的测试用例设计
白盒测试根据软件的内部逻辑设计测试用例,常用的技术是逻辑覆盖,即考查用测试数据运行被测程序时对程序逻辑的覆盖程度,主要的覆盖标准有六种:语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,条件组合覆盖和路径覆盖。
2, 黑盒测试的测试用例设计
黑盒测试根据软件需求说明书所规定的功能来设计测试用例,它不考虑软件的内部结构和处
理算法。
常用的黑盒测试技术包括等价类划分,边值分析,错误推测和因果图等。
3, 错误曲线图与收敛性;
4, 错误注入法
5, 排错;
6, 软件测试管理准则;
7, 测试计划与测试分析报告。
四、项目管理
制定项目计划
制定项目计划的过程叫做规划,项目规划是预测未来,确定任务,估计可能碰到的问题并提出完成任务和解决问题的有效方案,方针,措施和手段以及所必需的各种活动和工作成果的过程。
质量管理与质量评估
软件质量是软件与明确叙述的功能和性能需求,文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
质量管理
(1) 质量需要分析;
(2) 质量计划;
(3) 质量保证;
(4) 质量控制;
(5) 质量改进。
质量评估
(1) 功能性;
(2) 可靠性;
(3) 可用性;
(4) 效率;
(5) 可维护性;
(6) 可移植性。
过程管理
过程管理是为确保项目按时完成所需要的种活动。过程管理主要包括项目工作分解。项目进度制订和项目进度控制等。
过程管理的技术与方法
(1) Gantt图;
(2) PERT图与关键路径;
(3) 持续时间的压缩;
(4) 资源均衡;
(5) 时差的应用。
配置管理
软件配置管理的基本概念。
(1) 软件配置项
软件配置项是指在软件开发过程中产生的全部信息,主要包括:源程序和可执行程序;软件文档;数据。
(2) 基线
基线是指已通过正式复审的软件配置项。IEEE对基线的定义为:已通过正式复审的软件中
间产品或软件文档,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。
1. 软件配置管理的主要任务
主要有五项任务:任务标识,版本控制,变化控制,配置审计和配置报告。
人员计划和管理
人员计划和管理是指有效地使用涉及项目的人员所需要的一组活动。
人员计划和管理的主要内容
(1) 组织和人力资源规划;
(2) 人员获取;
(3) 管理项目成员的工作;
(4) 团队建设。
人员计划和管理的技术与方法
(1) 用网络计划技术和系统工程模型实现人力资源均衡优化;
(2) 组织结构图;
(3) 责任分派表;
(4) 冲突管理;
(5) 培训。
文档管理
国家标准局于1988年1月批准并发布的《GB8567―1988计算机软件产品开发文件编制指南》规定在一项软件开发过程中应该产生14种文件。
A, 可行性研究报告;
B,项目开发计划;
C,软件需求说明书;
D, 数据要求说明书;
E,概要设计说明书;
F, 详细设计说明书;
G, 数据库设计说明书;
H, 用户手册;
I, 操作手册;
J, 模块开发卷宗;
K, 测试计划;
L,测试分析报告;
M,开发进度月报;
N, 项目开发总结报告。
高质量的文档就体现:针对性;精确性;清晰性;完整性;灵活性。
在软件开发过程中,软件文档的变更手续为:提议―评议―审核―批准―实施。
开发和组织的作用
1. 民主制;
2. 技术权威制;
3. 项目经理制。
成本组织
成本组织包括项目的资源规划、费用估算,费用规划和控制等各项活动。成本组织的目的是预测计划项目费用,控制项目费用并确保项目在预算的约束条件下完成。
成本组织的主要内容
(1) 资源规划;
(2) 费用估算;
(3) 制订费用计划;
(4) 费用控制;
(5) 财务决算。
成本组织的技术与方法
(1) 费用分解结构(CBS)
(2) 挣得值分析;
(3) 类比估算法;
(4) 参数模型法;
(5) 自下而上的估算;
(6) 计算机估算软件;
(7) 费用变更标识和变更控制系统。
风险管理
主要活动有风险识别,风险估算,风险评价和风险控制。
五、系统的可审计性
系统审计是独立于系统开发者,系统使用者的第三方――系统审计师彩客观的标准对系统的策划,开发,使用维护等相关活动和产物进行完整的,有效的检查和评估。
系统审计涉及整个系统的生命周期,审计对象涵盖整个系统所有活动和中间产物,并包括与系统实施有关的外部环境。
审计方法
系统审计按照系统的生命周期可以分为计划审计,开发审计,执行审计,维护审计以信覆盖整个系统周期的管理审计。
审计跟踪
审计跟踪是系统活动的流水线。
六、系统运行和维护知识
系统运行
系统运行环境管理
系统运行环境管理包括硬件环境,软件环境,网络环境和数据库环境。
系统成本管理
7个环节:成本预测,成本决策,成本计划,成本控制,成本核算,成本分析,成本考核,其中的两大核心内容是成本控制与成本核算。
系统运行
作业调度
作业调度为实现工作量管理的完全自动化提供全方位的功能,完成作业的定置,安排,监视以及执行结果的检测。
数据I/O管理
有并行I/O方式和串行I/O方式。
用户管理
用户管理的主要任务是对网络用户的基本信息及账号及账号信息等进行分类管理。
用户所注册的ID号是用户在网络中的惟一标识。
设备和设施管理
1. 电源
2. 空调设备;
3. 设备管理;
4. 设施安全管理。
系统故障管理
故障管理过程包括三个步骤:发现故障,分离故障,修复故障。
安全管理
性能管理
系统运行工具
1. 自动化操作工具;
2. 监控工具;
3. 诊断工具。
系统转换
1, 转入运行阶段;
2, 运行测试;
3, 版本控制
版本控制包括版本管理,系统发行,版本标识和发行管理。
系统运行服务标准
计算机系统运行服务执行的主体包括:(1)系统使用单位;(2)系统开发单位;(3)系统经销单位;(4)专业的技术服务单位。
系统运行服务标准就明确服务内容,服务方式,服务收费标准和违约等条款。
七、系统维护
系统维护是在系统交付使用之后直至系统被淘汰的整修时期内为了改正错误或满足新的要求而修改系统的活动。
维护的类型
(1) 改正性维护;
(2) 适应性维护;
(3) 完美性维护;
(4) 预防性维护;
维护的实施
1. 日常检查
2. 定期维护
(1) 病毒防治;
(2) 数据备份;
(3) 数据整理;
(4) 故障排除;
(5) 硬件清洗;
(6) 维修计算机硬件,恢复计算机系统,计算机网络维护,调试等。
3, 事前维护和事后维护
4, 远程维护
硬件维护
硬件维护是指硬件交付用户使用之后,为了保证硬件的继续使用或满足新的需要而对系统所做的修理,完善,调试,测试等过程。
硬件维护也分改正性维护,适应性维护,完善性维护和预防性维护。
软件维护
影响软件的可维护性的因素有:可理解性,可测试性,可修改性。
面向对象方法的的对象封闭机制,消息通信机制,继承机制和多态机制从根本上提高了软件
的可维护性。
结构化方法学中的模块化,信息隐蔽,高内聚,低耦合原则也提高了可维护性。
软件维护管理是指为保证维护质量,提高维护效率,控制维护成本而进行的维护过程管理,它要求对软件的第次“修改”均需要经过申请,评估,批准,实施,验证等步骤。
软件维护管理的核心是维护评估和维护验证。维护评估的主要工作包括:判定维护申请的合理性与轻重缓急,确定维护的可行性与时间及费用,制定维护策略与维护计划等。维护验证主要审查修改后的软件是否实现了维护目标,软件文档是否也做了相应的修改。
维护合同
计算机系统的维护通常有四种方式:(1)由系统使用单位自选维护;(2)由系统开发单位负责维护;(3)由系统经销单位负责维护;(4)委托专业的技术服务公司进行维护。后三种情况均需要签订维护合同。
维护合同应明确维护内容,维护方式,维护职责,收费标准和违约责任等条款。