软件工程
1 软件工程方法学三要素:方法、工具、过程
2 软件生命周期:问题定义、可行性分析、需求分析(时间最长)、设计(概要设计、详细设计)、编码、测试、运行维护
3 软件开发模型
1)瀑布模型
文档驱动
优点:按模板进行,根据各阶段检查评审,正确则向下进行(射线)
缺点:文档过多、线性模型、缺乏灵活性、前期未发现错误,将一直存在直到交付
适用:需求明确、很少变更的项目
2) 快速原型模型
原型辅助开发
抛弃式原型方法
1)探索型原型 用于需求分析阶段;目标模糊,搞清需求
2)实验型原型 用于设计阶段;判断项目可行性
渐进式原型方法
3)演化模型/变换模型/演化型原型 做出原型,不断完善,演化为最终系统
适用对软件需求缺乏准确认识
优点:多次反馈不断完善验证产品需求,多次产生项目进程数据、心理鼓舞
缺点:不明确需求,总体设计困难;缺乏严格过程管理;用户多次试错产生负面情绪
3)增量模型
1)概念:瀑布模型和原型模型的融合;功能细化、分别开发:不断制作积木块(从核心开始),做一块搭一块,让用户操作一次,反馈结果供下次开发使用;引入增量包概念,设计增量包的需求
2)优点:人员分配灵活、用户参与、有利风险把控、
3)适用:需求经常变化的软件开发过程
4)螺旋模型
瀑布模型和演化模型的结合,增加风险分析
优点:设计灵活,各阶段可变更;用户参与各个阶段;小分段构建大型系统,成本计算容易
缺点:迭代次数过多增加开发成本,延迟时间;需要有丰富项目评估经验和专业知识,否则会造成巨大损失
5)喷泉模型
用户需求为动力,对象为驱动的模型。各阶段相互迭代,无间隙(各阶段间没有明显边界)
6)基于构建的开发模型
1)特点:系统模块化,创建构件库,开发时组合使用构件库内构建
2)阶段:软件的需求分析和定义、体系结构设计、构件库建立(完善丰富构件库)、应用软件构件、测试和发布
3)优点:构件复用,提高开发效率
缺点:缺乏通用的组装结构标准,有风险
7)快速应用模型(RAD)
瀑布模型的“高速”变种,不以高级语言为单位而是以构件为单位,增量型,使用大量可复用构建堆积。若时间紧,则多级堆积(分块堆,堆完再堆)
适用:正确理解需求,约束项目范围
4 软件开发方法
1)结构化分析(SA)和设计(SD)
1)SA:面向数据流的需求分析方法,常用工具:数据流图、数据字典,产生文档:数据流图、数据字典、软件需求说明书
1)数据流图(DFD)
描述数据流从输入到输出的变换流程
不同于程序流程图,可以表现范围广(系统-模块),分层数据流图
2)数据字典(DD)
定义每个数据,就像汉语词典(保证数据在系统中的一致性)
组成:1)数据项:只含一个数据,又称数据元素
2)数据流:由多个相关数据项组成
3)数据文件:如数据库
2)结构化设计(SD):面向数据流的设计方法,分为概要设计和详细设计
1)概要设计/结构设计/总体设计
基本任务:设计软件系统结构,进行模块划分,确定每个模块的功能、接口、模块间的调用关系
设计工具:结构图、数据字典、判定树、判定表
2)详细设计
基本任务:为每个模块设计其实现的细节
设计工具:程序流程图、盒图(NS图)、问题分析图(PAD)、程序设计语言(PDL)
2 面向数据结构的设计
根据输入/输出数据结构导出程序结构,如Jackson和Warnier
3 面向对象的分析与设计
面向对象的方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等来构建系统的软件开发方法
面向对象=对象+类+继承+通信,运用此方法的软件系统是面向对象的
1)对象 :系统中用来描述客观事物的一个实体,构成系统的一个基本单位。对象图:对象名、属性值、具体操作(类的实例化(new))
属性/状态/数据:描述对象的静态特征(实例化的类的属性(对象实例化时会赋值))
操作:规定了对象的行为/所能提供的服务(实例化的类的方法)
封装:信息隐蔽技术
2)类:一组具有相同属性和相同操作的对象的集合(class),创建对象的模板。类图:类名、属性、操作
3)继承:特殊类的对象拥有一般类的全部属性与操作。有单/多重继承
4)多态性:同一操作,作用于不同对象有不同解释,产生不同结果
5)消息:消息传递是对象间通信的手段。一个对象通过向另一个对象发送消息来请求其服务。
组成:接受对象名、调用的操作名、适当的参数
作用:告诉对象要完成什么操作,而不是如何完成操作
5 软件测试与维护
1)软件测试:发现软件错误和缺陷的主要手段
2)测试用例:由测试数据和预期结果构成。
1)为了发现程序中的错误,应竭力设计能暴露错误的测试用例
2)好的测试用例是发现至今为止尚未发现的错误
3)一次成功的测试是发现了至今尚未发现的错误的测试
3)软件测试准则
1)应该尽早地、不断地进行测试,软件测试贯穿于软件开发过程的始终
2)所有的测试都应追溯到用户需求
3)应该从小规模测试开始,并逐步进行大规模测试
4)应该远在测试之前就制定出测试计划
5)80%的错误可能出现在20%的模块中
6)应该由独立的第三方从事测试工作
7)对非法和非预期的输入数据也要像合法数据一样编写测试用例
8)检查软件是否做了应该做的事仅是成功了一半,另一半是看软件是否做了不该做的事
9)在规划测试时不要设想程序中不会查出错误
10)测试只能证明软件中有错误,不能证明软件中没有错误
4)软件测试分类
1)从测试阶段分:单元测试、集成测试、确认测试、系统测试
2)从测试方法分:白盒测试、黑盒测试
3)回归测试指修改了旧代码后,重新进行全部或部分以前的测试用例,确认有无引入新错误
5)测试阶段
1)单元测试/模块测试
1)概念:针对软件设计的最小单位(模块)进行正确性检验的测试工作。
2)检查:每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,以及发现各模块内部可能存在的各种错误
3)测试人员:开发人员
4)辅助模块:借助驱动模块(用于测试模拟的主程序)和桩模块(子模块)完成
1)驱动模块:相当于被测模块的主程序(调用测试模块),接受测试数据,把这些数据传递给被测模块,输出实测结果
2)桩模块:代替被测模块的子模块(返回值给被测模块);做少量数据操作(并非子模块所有功能),但不能啥也不做
5)计划阶段:软件详细设计阶段
6)方法:白盒测试
2) 集成测试/组装测试/联合测试
1)把通过单元测试的模块集成在一起,测试模块之间的协作性
2)从组装策略分
一次性组装(把所有模块一次性组装在一起)、增量式组装(自顶向下、自底向上及混合式)
1)自顶向下组装:不需要驱动模块
2)自底向上组装:不需要桩模块
3)每个版本提交时,进行性冒烟测试/版本验证测试/提交测试,验证主要功能是否实现
3)计划阶段:概要设计阶段完成
4)方法:黑盒测试
3)确认测试/有效性测试
1)验证软件功能、性能及其他特性是否和用户需求相一致
2)计划阶段:需求分析阶段
3)根据用户参与程度分类:
1)内部确认测试:软件开发组织内部按软件需求说明书进行测试
2)Alpha测试:由用户在开发环境下测试
3)Beta测试:由用户在实际使用环境下进行测试
4)系统测试
1)将已确认的软件、计算机硬、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试。针对整个产品系统进行测试,验证系统是否满足需求
2)计划阶段:系统(需求)分析阶段完成
3)内容:功能测试、性能测试(非功能性要求)、健壮性测试、用户界面测试、安全性测试、安装与反安装测试
网友评论