软件开发基础【信息系统监理师】
1、信息系统生命周期
2、软件的概念和特点
2.1、软件的概念
软件是与计算机系统的操作有关的程序、规程、规则及与之有关的文档和数据
2.2、软件的特点
抽象性、严密性、一次性”、智能性、持久性、依赖性、复杂性、难以度量、易出错、必须维护、成本昂贵等特点。
序号 | 描述 |
---|---|
1 | 软件是一种逻辑实体,具有抽象性 |
2 | 对软件的质量控制必须着重在软件开发方面下功夫 |
3 | 软件没有老化问题;然而它存在退化问题 |
4 | 软件的开发和运行存在移植的问题 |
5 | 软件的开发方式:手工 |
6 | 软件本身是复杂的:实际问题,程序逻辑结构所决定的 |
7 | 软件成本昂贵:投入大量、复杂、高强度的脑力劳动 |
3、软件的分类
分类方法 | 类别 | 概念 |
按软件功能划分 | 系统软件 | 能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。如操作系统、数据库管理系统、设备驱动程序以及通信处理程序等 |
支撑软件 | 是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发的工具 | |
应用软件 | 是在特定领域内开发,为特定目的服务的一类软件。其中包括特定目的的进行数据采集加工、存储和分析服务的资源管理软件 | |
按软件服务对象的范围划分 | 项目软件 | 也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发的软件 |
产品软件 | 是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。如文字处理软件、财务处理软件等 |
4、软件工程师与软件生命周期
4.1、软件工程与软件工程框架
软件工程是一类求解软件的工程,它应用计算机科学、数学和管理科学等原理,借鉴传统工程的原则和方法,创建软件以达到提高质量、降低成本的目的
软件工程是一门交叉性学科
4.2、软件工程活动
软件工程化要求以软件质量保证为核心,紧紧抓住软件生产方法、需求分析、软件设计、软件生产工具、测试、验证与确认、评审和管理等环节
活动 | 详细 |
需求 | 需求获取 |
需求确认或规约 | |
需求验证 | |
设计 | 概要设计 |
详细设计 | |
实现 | \ |
确认 | 软件测试 |
贯穿软件开发的整个过程 | |
支持 | \ |
4.3、软件生存周期
项目计划制定——>需求分析——>软件设计——>程序编码——>软件测试——>运行维护
5、需求分析阶段
5.1、需求分析阶段的主要成果
1、项目开发计划
2、软件需求说明书
3、软件质量保证计划
4、软件配置管理计划
5、软件(初步)确认测试计划
6、用户使用说明书初稿
6、软件设计阶段
6.1、软件设计阶段的主要成果
1、概要设计说明书
2、数据库设计说明书
3、软件概要设计说明书
4、用户手册
5、软件详细设计说明书
6、软件编码规范
7、集成测试计划
7、软件测试阶段
作用:软件测试是为了评价和改进产品质量、识别产品的缺陷和问题而进行的活动
目的:软件测试的目的是验证软件是否满足需求
注意事项:
1、尽早、不断地进行测试
2、程序员避免测试自己设计的程序
3、既要选择有效、合理的数据,也要选择无效、不合理的数据
4、修改后应进行回归测试
5、尚未发现的错误数量与该程序中已发现的错误数量成正比
流程:
需求分析——>概要设计——>详细设计——>编码——>单元测试——>集成测试——>系统测试——>验收测试
名称 | 解释 |
---|---|
单元测试 | 主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误 |
集成测试 | 主要目的是针对详细设计中可能存在的问题,尤其是检查各单元与其他程序部分之间的接口上可能存在的错误 |
系统测试 | 主要针对概要设计,检查系统作为一个整体是否有效地得到运行,例如在产品设置中是否能达到预期的高性能 |
验收测试 | 通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要 |
测试类型 | 组织单位 | 测试实施 |
---|---|---|
软件单元测试 | 承建单位 | 软件开发组 |
软件集成测试 | 承建单位 | 软件开发组和软件测试组 |
软件确认测试 | 承建单位 | 软件测试组 |
软件系统测试 | 业主单位 | 联合测试组 |
8、软件测试类型
软件测试类型 | 进一步细分 | 概念和使用场景 |
静态测试 | 静态分析 | 静态分析一般由计算机辅助完成。静态分析的对象是计算机程序,程序设计语言不同,相应的静态分析工具也就不同,如Purify,Macabe等。 |
代码审查 | 代码审查(包括代码评审和代码走查)主要依靠有经验的程序设计人员根据软件设计文档,通过阅读程序,发现软件错误和缺陷 | |
动态测试 | 白盒测试 | 白盒测试是一种按照程序内部的逻辑结构和编码结构设计并执行测试用例的测试方法。白盒测试通常根据覆盖准则设计测试用例,使程序中的每个语句每个条件分支、每个控制路径都在程序测试中受到检验 |
黑盒测试 | 黑盒测试是一种从软件需求出发,根据软件需求规格说明设计测试用例,并按照测试用例的要求运行被测程序的测试方法。黑盒测试着重于验证软件功能和性能的正确性,较少关心程序内部的实现过程,侧重于程序的执行结果 |
9、软件维护阶段
软件维护是生命周期的一个完整部分
可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动
交付前完成的活动包括交付后运行的计划和维护计划等;交付后完成的活动包括软件修改、培训、帮助资料等
9.1、软件维护主要可以分类
更正性维护(25%)
适应性维护(20%)
完善性维护(50%)
预防性维护(5%)
10、软件评审
软件评审是为了使软件开发按软件工程提出的过程循序进行,在各研制阶段结束时,检查该阶段的工作是否完成,所提交的软件阶段产品是否达到了规定的质量和技术要求,决定是否可以转入下一阶段研制工作
10.1、软件评审分类
内部评审+外部评审
10.1.1、外部评审的步骤
1、提出评审申请
2、成立评审组织
3、专家组审查
4、评审委员会外部评审
5、评审结论
6、对外部评审结论的处理
10.1.2、评审委员会成员(7人以上单数)
需包含以下几类人员:
1、质量管理人员
2、软件专家组成员(50%以上)
3、科研计划管理人员
4、开发组成员
5、业主单位代表
11、面向对象开发方法OMT
面向对象(00)技术是软件技术的一次革命,在软件开发史上具有里程碑的意义
随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT
这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构
OO技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质性的突破
11.1、面向对象开发方法的特点
1、自底向上的归纳: OMT的第一步是从问题的陈述入手,构造系统模型
2、自顶向下的分解:系统模型建立后的工作就是分解
3、OMT的基础是对象模型:每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据
11.2、面向对象的基本概念
名称 | 解释 |
---|---|
对象 | 是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。 |
抽象 | 是简化复杂的现实问题的途径。 |
封装 | 是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。 |
继承 | 可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。 |
多态 | 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 |
接口 | 描述对操作规范的说明,其只说明操作应该做什么,并没有定义操作如何做。 |
消息 | 体现对象间的交互,通过它向目标对象发送操作请求。 |
模式和复用 | 人们把在不同时间、不同项目中成功地解决了相似问题的相同的解决方案总结为设计模式,供后人复用。软件设计者和开发者可以通过学习和理解前人创造的模式来设计自己的软件,避免了不必要的重复,节省了大量的时间和精力,提高了软件的设计的效率。 |
12、CMMI软件能力成熟度模型
过程能力等级 | 特点 | 关键过程域 |
---|---|---|
初始级 | 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力;管理是反应式 | |
可重复级 | 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验 | 需求管理;软件项目计划;软件项目跟踪与监督;软件子合同管理;软件质量保证;软件配置管理 |
已定义级 | 已将软件管理和工程文档化、标准化、并综合成该组织的标准软件过程;所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件 | 组织过程定义;组织过程焦点;培训大纲;集成软件管理;软件产品工程;组织协调;同行专家评审 |
已定量级 | 收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解与控制 | 定量的过程管理;软件质量管理 |
优化级 | 过程的量化反馈和先进的新思想、新技术促进过程不断改进 | 缺陷预防;技术变更管理;过程变更管理 |