软件工程课件_第1页
软件工程课件_第2页
软件工程课件_第3页
软件工程课件_第4页
软件工程课件_第5页
已阅读5页,还剩275页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程--

原理、方法与应用第一章绪论软件与软件危机软件工程学传统软件工程和面向对象软件工程软件工程的应用软件程序、软件与软件产品独唱-->小合唱-->合唱-->万人大合唱

|||简单程序较复杂程序软件软件定义:软件=程序+数据+文档程序:按事先设计的功能和性能需求执行的指令序列数据:是程序能正常操纵信息的数据结构文档:与程序开发、维护和使用有关的图文材料软件的特征软件是逻辑的,而不是物理的软件开发与人关系密切软件开发成本大软件生产是简单的拷贝软件不会磨损和老化软件受环境影响大软件维护易产生新的问题软件开发的发展过程计算机应用发展软件数量多规模大软件成本高质量低个体化软件开发方法软件维护困难软件危机软件工程软件危机定义计算机软件的开发和维护过程所遇到的一系列严重问题表现对软件开发成本和进度的估算很不准确用户很不满意质量很不可靠没有适当的文档软件成本比重上升供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势硬件/软件成本变化趋势

硬件

软件

100%0%195519701985软件技术进步落后于需求增长软件危机原因客观:软件本身特点逻辑部件规模庞大主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护软件危机解决途径组织管理工程项目管理方法技术措施软件开发技术与方法软件工具软件工程学的范畴软件工程学指导计算机软件开发和维护的工程学科工程管理+开发技术软件开发技术软件开发方法学软件工具软件工程环境软件工程管理软件管理学软件经济学软件度量学两种程序设计方法程序设计的两次飞跃结构化程序设计程序=数据结构+算法面向对象程序设计程序

=对象

+消息

面向过程和面向对象的编码存款取款利息结算帐户余额帐户余额利息结算存款取款两类软件工程方法传统软件工程软件分析

总体设计

详细设计

面向过程的编码

测试

面向对象软件工程软件分析与对象抽取

对象详细设计

面向对象的编码

测试

软件工程的应用软件工程指导中小型软件软件工程指导大型软件软件工程的成就软件工程的局限第二章软件开发模型传统开发模型瀑布模型(waterfallmodel)快速原型模型(rapidprototypemodel)演化开发模型增量模型(incrementalmodel)螺旋模型(spiralmodel)面向对象开发模型构件集成模型(componentintegrationmodel)

形式化开发模型转换模型(transformationalmodel)净室模型(cleanroommodel)软件生存周期计划时期问题定义可行性分析开发时期需求分析软件设计编码测试运行时期软件维护瀑布模型问题定义可行性研究需求分析软件设计编码测试维护计划时期开发时期运行时期瀑布模型特点阶段的顺序性和依赖性推迟实现的观点质量保证存在问题不适合需求模糊的系统快速原型模型需求分析原型开发最终系统设计原型评价最终系统实现用户反馈快速原型模型特点快速开发工具循环低成本种类渐进型抛弃型增量模型规格说明设计实现和集成交付客户规格说明设计实现和集成交付客户规格说明设计实现和集成交付客户规格说明设计实现和集成交付客户增量1增量2增量3增量n增量模型增量小而可用的软件特点在前面增量的基础上开发后面的增量每个增量的开发可用瀑布或快速原型模型迭代的思路螺旋模型螺旋模型特点瀑布模型+快速原型+风险分析迭代过程一个螺旋式周期

确定目标,选择方案,选定完成目标的策略

风险角度分析该策略

启动一个开发阶段

评价前一步的结果,计划下一轮的工作

构件集成模型构件集成模型特点面向对象基于构件库融合螺旋模型特征支持软件开发的迭代方法

软件重用面向对象的基本概念对象Object类Class继承Inheritance消息Message面向对象对象+类+继承+消息通信对象Object客观世界中的实体状态(静态属性Attributes)操作(动态行为Methods)对象::=<ID,MS,DS,MI>IdentifierMethodSetDataStructureMessageInterface对象的特点以数据为中心对象是主动的实现数据封装本质上有并行性模块独立性好类Class和实例Instance类相同属性和行为的对象的抽象实例特定类所描述的一个具体对象子类直接继承父类的数据和操作继承的传递性,单继承、多重继承继承(Inheritance)家具桌子椅子衣柜床椅子的实例多态性Polymorphism概念不同类层次共享一个方法名相同的参数特征和返回值类型多种不同实现C++中虚函数实现动态联编重载Overloading函数重载同一作用域多个名字相同的函数参数特征不同静态联编运算符重载消息Message对象间的交互手段形式:Message:[dest,op,para]DestinationObjectOperationParameters转换模型形式化规格说明与需求比较后修正变换2变换1变换n测试形式化开发记录系统需求目标系统转换模型特点形式化软件开发方法

形式化需求规格说明

变换技术程序自动生成技术

确保正确净室模型需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证增量1增量2增量n净室模型净室思想在分析和设计阶段消除错误在“洁净”状态下实现软件制作形式化盒结构表示分析和设计正确性验证增量模型小结软件开发模型是不断发展的各种软件开发模型各有优缺点选用时不必拘泥与某种模型可组合多种模型也可根据实际创建新的模型第三章软件需求分析需求分析的任务与步骤需求获取的常用方法分析建模软件需求说明结构化分析方法面向对象分析方法需求分析的任务和步骤需求分析的任务建立分析模型

编写需求说明

需求分析的步骤需求获取

需求提炼

需求描述

需求验证

需求获取的常用方法联合分析小组

用户代表、领域专家和系统分析员客户访谈

充分准备,寻找共同语言循循序渐进、逐步逼近

问题分析与确认

多个来回分析建模结构化分析模型面向对象分析模型分析模型描述工具DFD、DD和PSPECCFD、CSPEC和STDE-R图

用例图,对象-关系图,对象-行为图

结构化分析模型加工说明数据对象说明CFD,STD图DFD图E-R图DD控制说明面向对象分析模型属性、操作、协作者对象-行为模型对象-关系模型类/对象模型使用实例分析模型描述工具结构化分析工具DFD、DD和PSPECCFD、CSPEC和STDE-R图

面向对象分析工具用例图,类对象图对象-关系图对象-行为图数据流图DFD描述系统逻辑模型信息在系统中的流动和处理用途交流信息的工具结构化分析和设计的工具

数据流图DFD组成符号圆框代表加工箭头代表数据流向方框代表源点和终点双杠表示数据文件或数据库分层从高层到低层分解前后的数据流必须一致命名数据流处理领书单

进书通知

购书单

缺书单

DFD练习—售书系统学生教材购销系统书库保管员领书单进书通知

进书通知

购书单缺书单

DFD练习—售书系统1销售2采购书库保管员学生F1教材存量表

F2缺书登记表

数据字典DDDFD中所有元素的定义的集合内容数据流数据流分量数据存储处理(一般不用DD描述)数据字典DD定义数据的方法自顶向下分解数据数据元素的组合方式顺序:A+B选择:[A|B]重复:1{A}5可选:(A)数据字典DDDD的用途分析阶段的交流工具包含控制信息数据库设计的基础例子P41例3.6加工说明加工说明PSPEC说明DFD中的每个加工描述工具结构化语言判定表判定树加工说明—例子结构化语言P42-43,例3.7,3.8判定树P44,例3.9判定表P44,例3.9CFD和CSPEC适合实时系统的分析与DFD和PSPEC类似和DFD与PSPEC配合使用表示控制流和控制加工CFD和DFD的关系

数据条件控制输入加工激活信号控制输出输入数据加工模型PSPEC控制模型CSPEC输出数据

控制输入CFD的符号表示控制信息或事件引用控制说明DFD和CFD例子---DFD信号半分钟数据光电管采集计数传送工控机处理实时数据显示班数据处理半小时数据班数据DFD和CFD例子---CFD翻屏人工驱动信息时钟半小时半分钟某型号累加物品经过信号半分钟数据光电管采集计数传送工控机处理实时数据显示班数据处理半小时数据班数据STD描述软件状态变迁符号表示矩形---系统状态箭头---状态转变方向规则表达式---事件/触发行为状态1状态2事件/触发行为STD例子20秒到/翻屏生成最新数据/翻屏半小时到/工控处理半分钟到/传送空闲/采集物品经过/计数采集PLC计数传送工控处理实时翻屏E-R图用于对复杂数据的用作数据分析和建模实体、属性和关系组成符号0:11:10:m1:mE-R图例子电话机生产厂商经销商用户生产购买使用经销用例图用例:系统和外部角色的交互符号表示:

系统名称系统用例名用例角色关联UseCase图例子保险商务系统签定保险单销售统计客户统计客户保险销售员用例之间的关系扩展关系使用关系组合关系《扩展》签保险单签汽车购买契约《使用》《使用》签保险单签汽车保险单签房屋保险单对象-关系图从E-R图演变而来描述对象间关系学生书出版商购买来自1:10:m1:11:1对象-行为图描述对象的动态行为对象状态转换图事件轨迹图事件流图对象状态转换图例子加纸纸用完故障修复打印故障打印完成接到打印命令就绪打印缺纸故障事件轨迹图例子[打印机忙]保存文件[打印机就绪]打印文件打印文件打印文件计算机打印服务器打印队列打印机事件流图例子[打印机忙]保存文件[打印机就绪]打印文件打印文件计算机打印队列打印服务器打印机软件需求说明(SRS)引言信息描述功能描述行为描述质量保证接口描述其它结构化分析方法基本步骤自顶向下,功能分解分层DFD由后向前,定义数据和加工DD,PSPEC根据需要,分析复杂数据和动态模型E-R图,CFD,CSPEC,STD编写SRSDFD的复审父图和子图不平衡未区分局部文件和局部外部项分解的速度太快不遵守加工编号规则面向对象分析方法基本步骤定义系统的用例领域分析,建立类对象模型建立对象-关系模型建立对象-行为模型编写SRS定义用例回答问题—发现角色使用系统主要功能的人是谁?

需要借助于系统完成日常工作的人是谁?

谁来维护、管理系统,保证系统正常工作?

系统控制的硬件设备有哪些?

系统需要和哪些其它系统接口?

对系统产生的结果感兴趣的人和事是哪些?

定义用例回答问题—发现用例角色需要从系统中获得哪种功能?需要角色做什么?

角色需要读取、产生、删除、修改或存储系统中的某种信息吗?

系统中发生的事件需要通知角色吗?角色需要通知系统某件事吗?这些事件能干什么?

系统需要输入/输出的是什么信息?这些输入/输出信息从哪儿来

?到哪儿去?

系统当前的实现要解决的问题是什么?

领域分析

目的发现或创建可广泛应用的类,以便复用

分析特定的应用领域

形式公共对象、类、子集合和框架等类对象建模(一)确定分析模型中的类对象考察系统用例汇总名词、名词短语得到候选对象确定类对象必要的信息、需求、服务多个属性、公共操作类对象建模(二)定义类结构与层次一般----特殊整体----部分定义主题和子系统高层抽象例子电话话筒按键连接线话机人电话人教师大学生小学生学生中学生建立对象—关系模型步骤复审需求描述和用例陈述找出表示关系的动词或动词短语用线连接起来,箭头表示方向给连接命名,标上基数对象-关系图例子1:10:11:11:10:11:m1:11:11:m0:m1:11:10:m1:11:11:m1:11:m1:11:m1:1部门流水线工序材料在制品1:m不良品指标数据1:m1:1规格实时数据建立对象行为模型基本过程评估用例,理解系统中的交互序列找出驱动交互序列的事件为每个用例创建事件轨迹为对象创建状态转换图第四章软件设计概述软件设计的任务软件设计的基本概念模块化设计设计需要处理的问题设计文档及其复审软件设计的任务分析模型设计模型设计文档回答Howtodo?可以分为概要设计、详细设计软件设计包括数据设计体系结构设计接口设计过程设计软件设计的任务数据设计信息模型软件数据结构体系结构设计定义软件部件间的关系接口设计软件内部、外部及与人之间的通信过程设计软件组件的过程性描述软件设计的基本概念模块(module)与构件(component)模块:定义输入、输出和特性的程序实体构件:可重复使用的软件组件抽象(abstract)与细化(refinement)抽象:分层次考虑和处理问题(数据和过程)细化:从高到低的逐步分解过程信息隐藏对其它模块隐藏模块内部的数据和过程软件复用Designwithreuse,designforreuse

模块化设计(modulardesign)分解(decomposition)模块独立性(moduleindependence)自顶向下(top—downdesign)自底向上(bottom—updesign)分解(decomposition)C(P1+P2)>C(P1)+C(P2) E(P1+P2)>E(P1)+E(P2)

C为问题的复杂度,E为解题需要的工作量

模块数接口成本最小成本区M软件开发工作量总成本模块成本模块独立性(moduleindependence)内聚(cohesion)模块内部各成分之间耦合(coupling)一个模块与其它模块之间模块的独立性高

块内联系强

块间联系弱

内聚1234567

弱强低内聚中内聚高内聚

内聚cohesion1.偶然性内聚

coincidentalcohesion2.逻辑性内聚

logicalcohesion3.时间性内聚

temporalcohesion4.过程性内聚

proceduralcohesion5.通讯性内聚

communicationalcohesion6.顺序性内聚

sequentialcohesion7.功能性内聚functionalcohesion逻辑性模块

读入分数平均/最高?计算平均分计算最高分输出结果耦合coupling1.非直接耦合nodirectcoupling

2.数据耦合datacoupling

3.特征耦合

stampcoupling

4.控制耦合controlcoupling

5.外部耦合

externalcoupling6.公共耦合

commoncoupling7.内容耦合

contentcoupling弱耦合数据耦合非直接耦合模块2模块1模块4模块3特征耦合(参数表传递数据结构)公共耦合DCBANL自定向下和自底向上设计自顶向下顶层开始逐步分解由底向上选择关键部分先设计扩展到整个系统设计需要处理的问题协同设计谁最合适设计系统的某一方面?

如何使组内成员相互了解别人的设计?

如何协调设计组件使整个系统统一?

用户界面设计让用户驾驭软件,不是软件驾驭用户

减少用户的记忆

保持界面的一致性

并发系统设计怎样确保同时执行的组件间对共享数据的一致性

并发处理(顺序执行)1、

组件1查询X是否为空。2、

组件1被告知X不为空。3、

组件2查询X是否为空。4、

组件2被告知X不为空。5、

组件1出栈,删除最后一个元素。6、组件2想出栈,但X已为空,系统进入非法状态。

并发处理1、

组件1询问栈X是否为空。2、

组件1被告知栈X不为空。3、

组件2询问栈X是否为空。4、

组件2被告知栈X不为空。5、

组件1出栈,删去最后一个元素,并锁住栈X。6、

组件2想出栈,但被告知X已上锁。7、

另一个组件加了一个元素到栈X中。8、

组件2被告知X已开锁(由于外部进程或者因为组件2再次尝试)9、 组件2出栈。

软件设计文档软件设计说明书1)

范围

2)

数据设计

3)

体系结构设计4)接口设计

5)

模块的过程设计

6)其他

包括测试的考虑,确保设计满足所有需求,设计约束和一些特殊注解等内容。

设计复审(designreview)及早发现设计中的缺陷差错的传播复审的内容概要设计复审

系统的总体结构,模块划分,内外接口

详细设计复审

各个模块的具体设计

设计复审(designreview)复审的方式FormalreviewDesignreviewmeetingInformalreviewWalk-through第五章传统的设计方法结构化设计模型结构化设计方法过程设计Jackson方法PSPEC结构化设计的内容数据对象描述CFDDFDE-RDDCSPEC过程设计

接口设计体系结构设计数据设计结构化设计的内容结构设计—概要设计体系结构设计SC图接口设计SC图数据库设计物理数据模型过程设计—详细设计模块的处理过程N-S图,PAD,PDL等描述工具—SC图SC图的组成符号(P88)矩形框来表示模块

带箭头的连线表示模块间的调用关系传入和传出模块的数据流SC图中的模块符号传入传出变换源漏控制SC图中的模块调用简单调用

选择调用

循环调用ABCDABC面向数据流的设计方法DFD图的类型

变换型结构

事务型结构

从DFD图到SC图的映射

复审DFD图,必要时可再次进行修改或细化鉴别DFD图的结构特征:事务?变换?按照规则,把DFD图为初始的SC图改进初始的SC图变换结构的DFD变换中心传入传出信息传入流传出流

变换流时间事务型结构DFD事务中心接受路径动作路径同时存在两类结构T传入变换传出事务中心变换分析划分DFD图的边界

建立初始SC图的框架顶层都只含一个用于控制的主模块

第一层包括传入、传出和中心变换三个模块

分解SC图的各个分支

分解实质上是“映射”

例子—划分DFDPEDCBAWRUVQabcdeprwuv传入部分变换中心传出部分第一级分解MEMTMCMAc,ec,eu,wu,w传入分支的分解GetEAtoBReadDDtoEReadABtoCGetBGetCMAc,ecebbcaabddb传出分支的分解WriteWUtoVWriteVPutUMEw,uwuuvv变换中心的分解MTRPQepc,prrw,u初始SC图MCMTQPRMEWriteWPutUUtoVWriteVAtoBReadAGetBDtoEReadDBtoCGetCGetEMA事务分析在DFD图上确定边界事务中心接受部分(包括接受路径)发送部分(包括全部动作路径)

画出SC图框架

DFD图的三个部分分别映射为事务控制模块,接受模块和动作发送模块

分解和细化接受分支和发送分支

例子—划分DFD传入T变换传出接受部分事务中心动作部分Example----first-levelfactoring发送事务控制接收顶层第一层混合结构C1AC3BC2DLFGEKJabb1b2b3c1c2c3defghjklm优化结构设计的指导规则

对模块分割、合并和变动调用关系的指导规则

提高内聚,降低耦合后简化模块接口少用全局性数据和控制型信息保持高扇入/低扇出的原则

作用域/控制域规则

作用域不要超出控制域的范围

位置离受它控制的模块越近越好

扇入和扇出MMM的扇入M的扇出例子:扇出计算实发工资取得工资数据编外人员扣款编外人员工资编外人员税收薪金制工资额计时制工资额常规扣款税收扣款煎饼形结构不可取!例子:扇出常规扣款编外人员实发工资

计算实发工资取得工资数据计时工人实发工资计薪工人实发工资编外人员扣款编外人员税收编外人员工资税收扣款计时制工资额薪金制工资额塔型结构过程设计

目的确定模块采用的算法和块内数据结构

任务:编写软件的“过程设计说明书”

为每个模块确定采用的算法

确定每一模块使用的数据结构

确定模块接口的细节

过程设计的原则清晰第一的设计风格结构化的控制结构逐步细化的实现方法过程设计工具流程图N-S图伪代码PDL语言N-S图S1S2顺序CTFS1S2选择WhileC

S

SUntilC

循环Jackson方法实体动作实体结构初始建模系统功能系统时间系统实现Jackson表示法Jackson图Jackson伪代码ABCAB0C0AB*顺序选择重复AseqAselectcond1Aiter{until

或while}condBBCorcond2BendAC

endAendA

(a)顺序(b)选择(c)重复面向对象设计的任务面向对象设计的任务

系统设计

系统整体结构的设计

对象设计

对OOA模型中类/对象模型的具体化和细化

消息设计

从对象-

关系模型,设计出消息模型

设计模型复审面向对象设计责任设计消息设计类及对象设计子系统设计属性、操作、协作者对象-行为模型对象-关系模型类/对象模型使用实例系统设计过程⑴

划分子系统;⑵

确定需要并发运行的子系统并为它们分配处理器;⑶

描述子系统之间的通信;⑷

确定系统资源的管理和控制;⑸

确定人机交互构件;⑹选择实现数据管理和任务管理的基本策略。

四种主要子系统问题域子系统人机交互子系统任务管理子系统数据管理子系统划分子系统划分原则模块化、功能独立、信息隐藏同一个子系统的类拥有共同特性同一个子系统的类具有共同目的同一个子系统的类提供相似服务同一个子系统的类间相对高耦合子系统标准有明确的借口,与其他子系统通信一般类只和子系统内部的其它类协作处理并发操作并发的对象(子系统)同时异步作用于同一事件处理将并发子系统分配到不同处理器将并发子系统分配到同一处理器系统提供同步控制描述子系统间的通信子系统协作模型客户/服务器端对端请求客户子系统contract服务器子系统peersubsystempeersubsystem请求请求人机交互设计分类分析用户特点,设计不同界面增加用户界面专用的类和对象利用快速原型演示,改进界面设计任务管理设计策略确定任务的特征定义一个协调者任务和与之关联的对象集成其它任务和协调者步骤识别由事件驱动和时间驱动的任务识别关键性任务、任务优先级和任务管理类定义任务必要时扩充有关任务的类和对象数据管理设计解决对象数据的存储和检索数据管理设计定义数据格式与所使用的数据存储管理模式相关设计相应的操作说明对象及所属类和对象如何存储自己对象设计

设计模型对象数据结构算法消息传递控制分析模型类属性方法关系行为对象描述对象描述协议描述:一组消息和对消息的注释

实现描述:对对象接收到某个消息后所执行的操作的实现细节的描述

算法设计

程序构件与接口

对象间的接口和对象的整体结构

领域对象的设计设计目的——支持软件复用设计内容调整需求复用已有的组件引入父类,分组管理领域类添加一般化类以建立协议调整OOA模型设计复审设计模板第七章统一建模语言UMLUML简介静态建模动态建模物理架构建模RUPUMLUnifiedModelingLanguage近10年来OOSE最重要的成果贡献者:GradyBooch,IvarJacobson,

JinRumbaugh中文网站http://www.umlUML的组成UML的模型元素表示模型中的某个概念表示模型元素之间的关系UML的元模型结构元元模型层元模型层模型层用户模型层UML模型UML模型图静态图动态图视图用例视图逻辑视图并发视图构件视图部署视图UML的特点统一标准面向对象表达能力强大可视化UML的应用用于描述系统开发的不同类型于不同阶段从需求分析到软件设计到软件测试及维护可视化问题描述,帮助理解问题帮助建立各阶段的文档获取和交流有关应用问题求解的知识辅助构建系统静态建模用例模型用例图表示从最终用户的角度描述系统功能类和对象模型类图和对象图表示类图ClassDiagram学生姓名:string学号:string书书名:string价格:real 1 购买

0..*

属于

对象图ObjectDiagram王平:学生姓名:王平学号:020106英语:书书名:英语价格:26.5数学:书书名:数学价格:21.8对象间关系关联关系

(Association)

聚集关系(Aggregation)

泛化关系(Generalization)

依赖关系(Dependency)

细化关系

(Refinement)包图子系统A子系统D子系统B子系统C子系统E子系统F动态建模状态图(StateDiagram)时序图(SequenceDiagram)协作图(CollaborationDiagram)活动图(ActivityDiagram)消息同步消息异步消息简单消息状态图StateDiagram超时到达上楼上楼到达上楼到达在底楼向上移动向底楼移动向下移动空闲[打印机就绪]打印文件时序图(SequenceDiagram)[打印机忙]保存文件打印文件打印文件计算机打印服务器打印队列计算机协作图(CollaborationDiagram)[打印机忙]保存文件[打印机就绪]打印文件打印文件计算机打印队列打印服务器打印机活动图ActivityDiagramDiskfreeDiskfull显示磁盘满显示在打印删去显示信息建立打印文件Win.printAll()^printer.print()物理架构建模逻辑架构和物理架构逻辑架构物理架构构件图配置图RUP—基于UML的统一建模过程第八章编码和语言选择

编码的目的编码的风格编码使用的语言编码的目的

编码模块的过程性描述一一一>源程序(不可执行的)(可执行的)编码的过程熟悉所选语言的功能和程序开发环境

仔细阅读设计文档详细设计

弄清要编码的模块的外部接口与内部过程

编码的风格追求“聪明”和“技巧”---〉提倡“简明”和“直接”

使用标准的控制结构

清晰的前提下求取效率

.Makeitrightbeforeyoumakeitfaster..Makeitclearbeforeyoumakeitfaster..Keepitrightwhenyoumakeitfaster.(求快不忘保持程序正确).Keepitsimpletomakeitfaster.(保持程序简单以求快).don’tsacrificeclarityfor“efficiency”.(书写清楚,不要为“效率”牺牲清楚)源程序的文档化

(codedocumentation)有意义的变量名称适当的注释标准的书写格式——用分层缩进的写法显示嵌套结构的层次;——在注释段的周围加上边框;——在注释段与程序段、以及不同程序段之间插入空行;——每行只写一条语句;——书写表达式时,适当使用空格或圆括号等作隔离符;

程序设计语言的发展面向机器的语言高级语言(第3代)甚高级语言机器语言(第1代)汇编语言(第2代)结构语言基础语言面向对象语言第4代语言语言的选择选择编码语言的标准

应用领域

算法与计算复杂性

数据结构的复杂性

效率的考虑

适用各类应用领域的语言

年代应用领域主要语言其他语言20世纪60年代商业COBOLAssembler科学计算FORTRANALGOL、BASIC、APL系统AssemblerForth人工智能LISPSNOBOL

现代商业COBOL、C++、Java、电子表格C、PL/1科学计算FORTRAN、C、C++JavaBASIC系统C、C++、JavaAda、Modula人工智能LISP、Prolog

第九章软件测试

测试的基本概念

黑盒测试

白盒测试

测试用例设计

多模块程序的测试策略

面向对象系统的测试

测试的基本概念

测试(testing)的目的与任务

目的:发现程序的错误

任务:通过执行程序,暴露潜在的错误

纠错(debugging)的目的与任务

目的:定位和纠正错误

任务:消除软件故障,保证程序的可靠运行

测试的特性

挑剔性

抱着为证明程序有错的目的去测试

复杂性

设计合适的测试用例

不彻底性

Dijkstra一句名言:“程序测试只能证明错误的存在,但不能证明错误不存在”

经济性测试的种类

静态分析(不执行程序)静态分析器代码复审(CodeReview)动态分析(执行程序)黑盒测试测试程序功能白盒测试测试程序结构测试的文档

测试计划

测试项目的名称各项测试的目的、步骤和进度测试用例的设计

测试报告测试项目名称实测结果与期望结果的比较发现的问题测试达到的效果

黑盒测试

等价分类法(equivalencepartitioning)把输入数据的可能值划分为若干等价类

有效等价类和无效等价类每一无效等价类至少需要一个测试用例

例子某工厂公开招工,规定报名者年龄应在16周岁至35周岁之间(到2002年3月30日止)即出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。

“出生年月”的等价分类

输入数据有效等价类无效等价类出生年月①6位数字字符②有非数字字符③少于6个数字符④多于6个数字符对应数值⑤在196702—198603之间⑥<196702⑦>198603月份对应数值⑧在1—12之间⑨等于“0”⑩>12黑盒测试边界值分析法(boundaryvalueanalysis)

使被测程序在边界值及其附近运行,从而更有效地暴露程序中潜藏的错误

错误猜测法(errorguessing)

猜测被测程序在哪些地方容易出错

针对可能的薄弱环节来设计测试用例

白盒测试

逻辑复盖测试法(logiccoveragetesting)

用流程图来设计测试用例

逻辑复盖测试的5种标准发现错误的能力

强语句覆盖每条语句至少执行一次判定覆盖每一判定的每个分支至少执行一次条件覆盖每一判定中的每个条件,分别按“真”、“假”至少各执行一次判定/条件覆盖同时满足判定复盖和条件复盖的要求条件组合覆盖求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次白盒测试路径测试法(pathtesting)着眼于程序执行路径的测试方法

程序图(programgraph)

点覆盖边覆盖路径覆盖测试用例设计黑盒测试用例设计三角形分类程序见教材p205白盒测试用例设计学生成绩查询程序见教材p208软件的纠错纠错的策略试凑法跟踪法推理法常用的纠错技术插入打印语句设置断点掩蔽部分程序蛮力纠错技术多模块程序的测试策略

测试的层次性

单元(模块)测试(unittesting)综合(集成)测试(integrationtesting)确认测试(validationtesting)系统测试(systemtesting)程序错误的类型

语法错误

结构性错误

功能性错误

接口错误

单元测试

目的

通过模块测试,使其代码达到模块说明书的需求

任务

(1)对模块代码进行编译,发现并纠正其语法错误;(2)进行静态分析,验证模块结构及其内部调用序列是否正确;(3)确定模块的测试策略,并据此设计一组测试用例和必要的测试软件;(4)用选定的测试用例对模块进行测试,直至满足测试终止标准为止;(5)编制单元测试报告。

单元测试实施步骤编译静态分析器检查代码评审动态测试测试驱动模块测试桩模块集成测试

目的将经过单元测试的模块逐步组装成具有良好一致性的完整的程序任务制订集成测试实施策略确定集成测试的实施步骤,设计测试用例逐一地添加模块,进行测试集成测试策略与步骤

自顶向下测试

先广后深实施步骤

先深后广实施步骤

由底向上测试

混合方式测试(sandwichtesting)

对上层模块采取自顶向下测试

对关键模块或子系统采取由底向上测试

确认测试

目的

确认组装好的程序是否满足(SRS)的要求任务有效性测试(黑盒测试)配置复审(confingurationreview)

验收测试—专用

alpha与beta测试—通用系统测试

目的

软件安装到系统中以后,能否与系统的其余部分协调运行

任务测试是否与硬件协调运行测试是否和原来就有的其它软件协调运行

测试是否完成SRS对它的要求

终止测试的标准规定测试策略和应达标准规定至少要查出的错误数量面向对象系统的测试

OO软件的测试策略

OO软件测试用例设计

OO软件的测试策略OO软件的单元测试

全面地测试类和对象所封装的属性和操纵这些属性的操作的整体

发现类的所有操作中存在的问题

与其他的类协同工作时可能出现的错误

OO软件的集成测试

基于黑盒方法的集成测试

基于线程的测试(thread-basedtesting)

基于使用(use-based)的测试

OO软件的测试策略OO软件的确认测试和系统测试采用传统的黑盒法OOA阶段的用例所描述的用户交互进行测试导出OO系统测试的测试用例对象—行为模型时序图等模拟用户实际使用环境OO软件测试用例设计

(1)

每个测试用例都要有一个唯一的标识,并与被测试的一个或几个类相关联起来;(2)

每个测试用例都要陈述测试的目的;(3)

对每个测试用例要有相应的测试步骤,包括被测对象的特定状态、所使用的消息和操作、可能产生的错误、测试需要的外部环境等

OO概念对测试用例设计的影响

继承的成员函数需要测试

子类的测试用例可以参照父类

类测试用例设计

基于故障的测试用例设计基于用例的测试用例设计类间测试用例设计

类—关系模型

类—行为模型

第十章软件复用

软件复用的基本概念 领域工程基于构件的开发

面向对象与软件复用

小结

软件复用的基本概念

软件复用的定义

软件复用的重要性

软件复用的目的是能更快、更好、成本更低地生产软件制品。一般地说,在软件开发中采用复用构件可以比从头开发这个软件更加容易。软件复用的粒度

按照可复用的粒度,软件制品从小到大分为以下几类:源代码复用软件体系结构复用应用程序生成器领域特定的软件体系结构的复用领域工程所谓的“领域”,指的是一组具有相似或相近软件需求的应用系统所覆盖的功能区域。通过领域分析(domainanalysis)找出最优复用,对它们进行设计和构造,形成为可复用构件,进而建立大规模的软件构件仓库的过程,就是领域工程。横向复用和纵向复用

横向复用是指复用不同应用领域中的软件元素。纵向复用是指在一类具有较多公共性的应用领域之间进行软部品复用。领域分析用户需求软件开发与构件开发目标软件确认可复用构件库检索理解领域分析

定义领域分析是在特定应用领域寻找最优复用,以公共对象、类、子集合和框架等形式进行标识、分析和规约。目标是获得领域分析模型

领域分析的输入和输出

建造可复用构件

创建领域构件的设计框架

标准数据

标准接口协议程序模板构件模型

建立可复用构件库

三种分类模式

枚举分类

门面分类

属性-值分类

基于构件的开发

构件集成模型应用系统工程面向对象与软件复用

OO方法对软件复用的支持复用技术对OO方法的支持小结软件复用是在软件开发中避免重复劳动的解决方案。通过软件复用,可以提高软件开发的效率和质量。软件复用研究被视为解决软件危机,提高软件生产效率和质量的现实可行的途径。第十一章软件维护软件维护的种类

软件可维护性

软件维护的实施

软件维护的管理

软件再工程

软件维护的种类完善性维护(perfectivemaintenance)

适应性维护(adaptivemaintenance)纠错性维护(correctivemaintenance)预防性维护(preventivemaintenance)

软件可维护性

(maintainability)

影响可维护性的软件属性

可理解性(understandability)

可修改性(modifiability)

可测试性(testability)对可维护性的定量度量提高可维护性的途径提供完整和一致的文档

采用现代化的开发方法

软件维护的实施

不严重

⊕维护人员纠错严重名单测试*⊕已修改⊕适应维护人*的软件员名单已修改完善高的配置⊕批准交付低用户的配置

开发项目表

严重性评价错误分析优先度评价维护过程配置复审问题分析区分类型纠错项目表维护的副作用

修改编码的副作用

修改数据的副作用

修改文档的副作用

软件维护的管理

维护的机构与人员

维护时期的配置管理

配置管理数据库

版本控制

变动控制维护管理文档

维护日志

维护申请摘要报告和维护趋势图

维护费用的估算

软件再工程

正向工程信息库分析文档重构逆向工程代码重构数据重构逆向工程重构代码提取抽象求精简化“脏的”源代码干净的源代码初始的设计说明最终的设计说明处理界面数据库计划时期的工作流程开始问题定义可行性研究可行否项目实施计划终止项目的建议停止问题定义目的弄清需要解决的问题项目所需的资源和经费任务编写“系统目标与范围的说明”《系统目标与范围的说明》

示例系统目标和范围说明书2001年1月1.项目:教材销售系统2.问题:人工发售教材手续繁琐,且易出错。3.项目目标:建立一个高效率、无差错的微机教材销售系统。4.项目范围:利用现有微型计算机,软件开发费用不超过5000元。5.初步想法:建议在系统中增加对缺书的统计与采购功能。6.可行性研究:建议进行大约10天的可行性研究,研究费用不超过1000元。可行性研究目的研究项目是否可能实现和值得进行回答Whytodo?研究的内容经济可行性技术可行性运行可行性法律可行性可行性研究研究的步骤细化和修改“系统目标和范围”,得出新系统的逻辑模型弄清当前系统—系统流程图导出新系统逻辑模型—数据流图导出新系统的解决方案提出推荐的方案本项目的开发价值推荐这个方案的理由系统流程图描述系统物理模型包含人员、硬件、软件等子系统符号借用程序流程图符号举例见p268图12.5成本—效益分析系统成本开发成本运行维护成本系统效益经济效益社会效益可行性论证报告系统概述简述当前系统及其问题新系统功能及新旧系统的比较可行性分析经济、技术、法律上的可行性建立新系统的主客观条件分析结论意见YesorNo软件风险分析风险识别项目风险技术风险商业风险风险预测风险发生的可能性风险发生后的后果风险的驾驭和监控软件计划项目实施计划质量保证计划软件测试计划文档编制计划用户培训计划综合支持计划软件分发计划项目实施计划

系统概述包括项目目标,主要功能,系统特点,以及关于开发工作的安排系统资源包括开发和运行该软件系统所需要的各种资源,如硬件、软件、人员和组织机构等费用预算分阶段的人员费用、机时费用及其它费用进度安排各阶段起止时间、完成文档及验收方式要交付的产品清单第十三章软件工程管理管理的目的与内容软件估算模型软件成本估计人员的分配与组织项目进度安排软件知识产权保护管理的目的与内容目的按预定的时间和费用,完成软件的计划、开发和维护内容费用管理估算软件的开发费用管理开发费用的有效使用质量管理(包括配置管理)项目的其它管理项目进度安排人员的分配与组织软件估算模型静态单变量资源模型Putnam资源模型COCOMO模型静态单变量资源模型资源=c1x(估计的软件特征)c2资源开发工作量(E)、开发时间(T)或开发人数(P)估计的软件特征源程序长度(L)或软件工作量(E)c1,c2依赖于开发环境和软件应用领域的常数Putnam资源模型L=cK1/3T4/3或K=L3/(c3T4)L(行):源程序长度T(年):开发时间K(人-年):全生存期工作量c:与开发环境有关的常数COCOMO模型COnstructiveCOstMOdel以静态单变量模型为基础将软件分类:组织半独立嵌入增加工作量调节因子不同类型软件的

COCOMO模型

软件类别模型方程适用范围组织型E=3.2×L1.05T=2.5×E0.38高级语言应用程序,如科学计算,数据处理企业管理程序等半独立型E=3.0×L1.12T=2.5×E0.35大多数实用程序,如编辑程序、连接程序编辑程序等嵌入型E=2.8×L1.20T=2.5×E0.32与硬件关系密切的系统程序,如操作系统数据库管理系统,实时处理与控制程序等调节因子和它的值范围

属性调节因子调节值范围例13.1中使用的值产品属性要求的可靠性等级数据库规模产品复杂度0.75-1.400.94-1.160.70-1.651.000.941.30计算机属性对程序执行时间的约束对程序占用存储容量的约束开发环境的变动开发环境的响应时间1.00-1.661.0

-1.560.87-1.300.87-1.151.111.061.001.00人员属性分析员水平程序员水平对应用领域的熟悉程度对开发环境的熟悉程度对所用语言的熟悉程度1.46-0.711.42-0.701.29-0.821.21-0.901.14-0.950.860.861.001.101.00项目属性开发方法的现代化软件工具的数质量完成时间的限制1.24-0.821.24-0.831.23-1.100.911.101.00软件成本估计自顶向下成本估计由底向上成本估计算法模型估计自顶向下成本估计首先估算总成本然后在项目内部进行成本分配特尔斐Delphi法多个专家各自填表综合专家意见,摘要通知大家开始新一轮估计多次反复,直到专家意见接近由底向上成本估算先将开发任务分解为许多子任务子任务分成子子任务估计各个任务单元的成本汇合成项目总成本算法模型估计算法模型就是资源模型由历史数据导出选择适用的模型模型估计法与自顶向下估计或由底向上估计结合使用人员的分配与组织Rayleigh-Norden曲线两条重要定律人员组织Rayleigh-Norden曲线①②③td

t人力①浪费的人力②不足的人力③过晚的人力两条重要的定律人员-时间权衡定律Brooks定律向一个已经延晚的项目追加开发人员,可能使它完成得更晚E=常数/(T或td)4

人员组织层次型组织结构软件经理项目经理开发小组民主开发小组无我程序设计主程序员小组一元化领导主程序员分配工作主程序员决定重大问题项目进度安排计划评审技术建立PERT图找出关键路径标出最迟开始时间PERT图的使用Gannt图PERT图例子测试数据2编码4产品测试4测试软件6测试计划2起点分析终点文档2设计4关键路径编码4产品测试4测试软件6测试数据2测试计划2起点终点文档2设计4分析3(0,0)(0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论