软件
- 定义 : 是程序及所有使程序正确运行所需要的相关文档和配置信息。(程序+数据+文档)
- 特点
- 1)软件是一种逻辑实体,而不是具体的物理实体
2)软件不存在磨损和老化的问题,但存在退化的问题
3)软件具有“复杂性”,其开发和运行常受到计算机系统的限制
软件危机
- 定义:是指在计算机软件开发、使用、维护过程中遇到的一系列严重问题和难题
-
表现:
- 对软件开发成本和进度的估计常常很不准确(经费不足,工作量大)
- 开发的软件不能满足用户的需求(需求分析不到位)
- 开发的软件可维护性差(文档不规范,程序结构不好)
- 开发的软件可靠性差(测试不到位,软件质量差)
()内简析该表现的原因
-
原因:
- 软件开发费用不断增加,且规模越来越大
- 软件开发管理困难且复杂
- 软件开发技术和工具落后
软件工程
- 定义:是将理论和知识应用于实践的科学,它借鉴了传统工程的原则与方法,以求高效地开发高质量软件。
- 三要素
- 方法
- 工具
- 过程
- 基本原则
- 信息隐藏
- 模块化
- 可验证性
- 抽象
- 局部化
- 一致性
- 完整性
软件生命周期
- 定义 :软件产生直至报废的生命周期。
- 基本过程
- 可行性分析和项目开发计划
- 要解决什么问题?该问题是否有可行的解决方法?若有方法,则需要多少资金,多少资源,耗时多久?
- 需求分析
- 确定软件系统具有哪些功能
- 概要设计
- 设计软件的结构,该结构由哪些模块组成
- 详细设计
- 确定每个模块使用的算法和数据结构
- 编码
- 把详细设计的结果翻译成选定语言所写的程序
- 测试
- 尽可能多地发现软件中的错误
- 维护
- 修改和完善软件,使其能够持久地满足用户的需求
- 可行性分析和项目开发计划
瀑布模型
-
特点
1.文档形式驱动
2.整体开发模型
3.逆转性很差,缺乏灵活性
4.保证按时交付软件产品 -
适用条件
1.开发期间需求很少变化
2.用户很少参与开发工作
3.用户使用环境很稳定
4.低风险项目
增量模型
-
特点
1.任务或功能模块驱动
2.非整体开发模型
3.分构件提交产品,逐步增加产品功能
4.软件体系结构是开放的 -
使用条件
1.开发期间需求可能随时变化
2.用户可参与整个开发工程
3.拥有较好的类库和构件库
4.中等或高风险项目
原型模型
-
特点
1.快速实现系统的初步模型
2.开发者与用户充分交流
3.由外向内的设计过程
4.限制创新 -
使用条件
1.需求定义不清晰的软件开发
2.项目组成员交流困难,无法协同工作
3.已有产品或产品的原型,只需客户化的工程项目
用例图
-
作用 描述一个软件系统需要完成什么样的功能
类图
-
作用 描述模型的静态结构,表示了系统中的类以及类与类之间的关系
对象图
- 作用 显示了一组对象和他们之间的关系
状态图
- 作用 描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应
需求分析
- 定义 是开发人员经过细致的调查分析,准确理解用户的要求,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到需求规格说明书的过程
功能模型
- 作用 描述了系统的“功能”性质,指出发生了什么
- 表达工具
- 在结构化分析中,利用数据流图进行描述
- 在面向对象分析中,利用用例图进行描述
-
数据流图
- 定义 :是描述数据处理过程的工具。它从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程。
对象模型
- 作用 表示静态的、结构化的、系统的“数据”性质,确定发生的客体
- 表达工具
- 在结构化分析中,利用E-R图进行描述
- 在面向对象分析中,利用类图进行描述
-
E-R图
- 作用: 提供了表示实体类型、属性和联系的方法
动态模型
- 作用 描述系统的过程和行为,确定什么时候发生
- 表达工具
- 状态图
数据字典
- 定义 :关于数据的信息的集合
- 作用 :为数据流图上每个成分加以定义和说明
程序设计语言(PDL)
- 定义 : 一种用于描述功能模块的算法设计和加工细节的语言,它是一种伪码,专门用来描述加工逻辑
概要设计
- 任务 确定不同的模块、控制关系和模块之间接口的定义
详细设计
- 任务 设计不同模块的算法和数据结构
软件体系结构
- 定义 具有一定形式的结构化元素,即构件的集合。包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组合连接起来。
抽象
- 定义 忽略事物间的细微差别,将彼此间相似、共性的东西进行概括
模块化
- 定义 解决一个复杂问题时把软件系统划分为若干个模块的过程
模块信息隐藏
- 定义 一个模块将自身内部的信息对其他模块隐藏起来,以避免其他模块不恰当地访问和修改
模块独立性
- 定义 每个模块只完成系统要求的独立的子功能,并且与其他模块联系最少且接口简单
- 度量标准
1.耦合性 :一个软件结构内部不同模块间联系的紧密程度
2.内聚性 :一个模块内部各个元素彼此结合的紧密程度
- 偶然内聚 (最低程度的内聚)
- 逻辑内聚
- 时间内聚
- 过程内聚(一个操作的输出不一定是下一个操作的输入)
- 通信内聚(使用同一个输入或输出数据)
- 顺序内聚(后一个功能的执行依托前一个功能的结果)
- 功能内聚 (最高程度的内聚)
软件测试
- 定义 :是为了发现错误而执行程序的过程
- 方法 :
- 静态测试
- 黑盒测试
- 定义 :根据被测软件功能来进行测试,也称功能测试或数据驱动测试
- 白盒测试
- 定义 :按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定的要求正确工作。其以程序的结构为依据,也称为结构测试
- 层次(过程)
- 单元测试
- 定义 :针对程序模块,进行正确性检验的测试。
- 目的:发现各模块内部可能存在的各种差错。
- 集成测试(组装测试或联合测试)
- 定义 :在单元测试的基础上,将模块或组件按照设计要求组装起来同时进行测试。
- 目的:发现与接口有关的问题,即模块或组件之间的协调与通信。
- 确认测试(验收测试、有效性测试)
- 目的:验证软件的有效性,即验证软件的功能和性能及其他特性是否与用户要求的一致。
- 系统测试
- 定义 :将通过确认测试的软件,作为整个基于计算机系统的一个元素,除被测程序外,还包括硬件、原来存在的其他软件、数据和人员等其他系统元素,在实际环境下,对计算机系统进行一系列的组装测试和确认测试。
- 单元测试
白盒测试
-
方法
1.逻辑测试法- 语句覆盖 :每条语句至少执行一次
- 判定覆盖 :每一判定的每个分支至少执行一次
- 条件覆盖 :每一判定中的每个条件,分别按“真”“假”至少执行一次
- 判定/条件覆盖
- 条件组合覆盖
2.路径测试
黑盒测试
-
方法
1.等价类划分法- 有效等价类
- 无效等价类
2.边界值分析法
3.错误推测法
4.因果图法
α测试
- 定义 :软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)在受控制的环境下进行测试,试图发现错误并修正,是目前广泛使用的两种确认测试方式之一。
-
目的 :评价软件产品的FURPS,尤其注重产品的界面和特色。
F指Functional(功能),U指Usability(可使用性),R指Reliability(可靠性),P指Performance(性能),S指Support(支持)
β测试
- 定义 :软件开发公司组织各方面的典型用户在实际使用环境中使用β版本,并要求用户报告异常情况、提出批评意见,是目前广泛使用的两种确认测试方式之一。
- 目的 :衡量软件产品的FURPS,尤其注重产品的可支持性。
调试
- 定义 :又称排错或纠错,软件调试与成功的测试形影相随。
- 目的 :根据测试时所发现的错误,找出原因和具体的位置,进行改正。
软件维护
- 定义 :在软件交付使用之后,为了纠正软件的错误、满足新的需求或者适应新的软硬件环境而对软件进行修改的过程。
-
类型
- 改正性维护 :针对在系统运行过程中暴露出的隐藏的错误而进行的一种维护活动。在软件使用初期,此项维护工作量会比较大。
- 完善性维护 :针对用户后期对软件产品提出的新功能或性能要求,维护人员扩展软件功能,提升软件性能,使产品具有更高效率的维护工作。
- 适应性维护 :为了使软件产品能够适应各种软硬件环境的变化而对软件所做的维护。
- 预防性维护 :在软件问题出现之前,主动提高软件可靠性,为以后的改进奠定基础的维护工作。这种维护常常与软件再工程过程联系密切。
软件可靠性是指在给定时间间隔内,程序运行成功的概率。
可维护性
- 定义 :为了纠正软件的错误、满足新的需求或者适应新的软硬件环境而对软件进行修改的难易程度。
- 决定因素
1.可理解性
2.可修改性
3.可测试性
4.可移植性
5.可重用性
可行性分析
-
目的 从各个方面去综合对比分析,对比成功或失败的可能性有多大,是否值得立项等
-
要素
1.市场可行性分析
2.政策可行性分析
3.技术可行性分析
4.成本效益分析
编码
- 定义 :将详细设计的结果翻译成指定程序设计语言所写的源程序。
编码风格
- 定义 :编码的基本原则。
- 表现方面
1.源程序文档化
2.数据说明
3.语句构造
4.输入/输出风格
5.效率
软件质量
- 定义 :软件产品满足规定的或隐含的与需求能力有关的全部特征和特性
面向对象的基本概念
- 对象 :系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和一组对属性的操作组成。
- 类 :对对象的抽象,是对具有相同属性和相同操作的一组相似对象的定义
- 封装 :把对象的属性和操作结合在一起,组成一个独立的单元,并尽可能隐藏对象的内部细节。
- 继承 :表示类之间的层次关系,使某类对象可以自动拥有另外一个或多个对象的全部属性和操作。
- 多态 :同一消息被不同对象所接受时,可能导致不同的行为。
- 消息 :对象发出的服务请求,一般包括提供服务的对象标识、服务标识、输入信息和应答信息等信息。