软件工程导论资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

•软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究
软件工程过程包括:开发过程、运作过程、维护过程、管理过程、支持过程、获取过程、供应过程、剪裁过程等
CMM(Capability Maturity Model)即能力成熟度模型,是美国卡内基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。

•典型的软件过程模型有:
–瀑布模型(waterfall model)
–演化模型(evolutionary model)
–增量模型(incremental model)
–原型模型(prototyping model)
–螺旋模型(spiral model)
–喷泉模型(water fountain model)
–基于构件的开发模型(component-based development model)
–形式方法模型(formal methods model)
•是瀑布模型和演化模型的结合,并增加了风险分析
•螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:
–制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件
–风险分析:评价所选的方案,识别风险,消除风险
–工程实施:实施软件开发,验证工作产品
–客户评估:评价开发工作,提出修正建议
•喷泉模型是一种支持面向对象开发的模型
•体现迭代和无间隙特征
–迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统
–无间隙:开发活动之间不存在明显的边界
•所谓基于计算机的系统是指:通过处理信息来完成某些预定义目标而组织在一起的元素的集合
•组成基于计算机系统的元素主要有:软件、硬件、人员、数据库、文档和规程•本书将软件需求工程细分为:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理六个阶段。

•常用的分析方法:
–面向数据流的结构化分析方法(SA)
–面向数据结构的分析方法
–面向对象的分析方法(OOA)
•需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动
•需求跟踪有两种方式,正向跟踪与逆向跟踪
–正向跟踪:以用户需求为切入点,检查《需求规约》中的每个需求是否都能
在后继工作产品中找到对应点
–逆向跟踪:检查设计文档、代码、测试用况等工作产品是否都能在《需求规约》中找到出处
•软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计
•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计
软件设计的原则:
抽象化与逐步求精;
•软件设计中主要抽象手段有:过程抽象和数据抽象
模块化;
信息隐藏;
功能独立;
•功能独立性可以由两项指标来衡量:内聚度与耦合度
软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系
•常见的软件体系结构
–单主机结构
–C/S(Client/Server)结构
–B/S(Browser/Server)结构
常用体系结构风格:
数据为中心的体系结构
数据流风格的体系结构
调用和返回风格的体系结构
面向对象风格的体系结构
层次式风格的体系结构
在这里要了解几个概念:
–程序结构的深度:程序结构的层次数称为结构的深度。

结构的深度在一定意义上反映了程序结构的规模和复杂程度。

–程序结构的宽度:层次结构中同一层模块的最大模块个数称为结构的宽度。

–模块的扇入和扇出:扇出表示一个模块直接调用(或控制)的其它模块数目。

扇入则定义为调用(或控制)一个给定模块的模块个数。

多扇出意味着需要
控制和协调许多下属模块。

而多扇入的模块通常是公用模块。

部件级设计阶段,主要完成如下工作:
(1)为每个部件确定采用的算法,选择某种适当的工具表达算法的过程,编写部
件的详细过程性描述;
(2)确定每一部件内部使用的数据结构;
(3)在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复
审形成正式文档,作为下一阶段(编码阶段)的工作依据。

图形表示法:
•程序流程图
•N-S图
•PAD
设计评审:
•软件设计的最终目标是要取得最佳方案
•“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案
设计评审的内容:
1. 可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。

2.接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。

部件是否满足高内聚和低耦合的要求。

部件作用范围是否在其控制范围之内。

3.风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。

4.实用性:即确认该软件设计对于需求的解决方案是否实用。

5.技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。

6.可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。

7.质量:即确认该软件设计是否表现出良好的质量特征。

8.各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。

9.限制:评估对该软件的限制是否现实,是否与需求一致。

10.其它具体问题:对于文档、可测试性、设计过程等等进行评估。

•评审分正式评审和非正式评审两种
•正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩形式
•非正式评审多少有些同行切磋的性质,不拘泥于时间和形式
结构化分析的模型
•数据字典是模型的核心,它包含了软件使用和产生的所有数据的描述
•数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流,数据流图中的数据流、文件、数据项、加工在数据字典中描述,反映加工逻辑的加工规约用“小说明”描述
•实体—关系图:用于数据建模,描述数据字典中数据之间的关系,数据对象的属性用“数据对象描述”描述
•状态转换图:用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下系统的状态迁移,控制规约用来描述软件控制方面的附加信息
分层数据流图示例——
资格和水平考试的考务处理系统
•简化的资格和水平考试的考务处理系统
•分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试
•考试的合格标准将根据每年的考试成绩由考试中心确定
•考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中
资格和水平考试的考务处理系统
—功能需求
1.对考生送来的报名单进行检查
2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者
4.制作考生通知单送给考生
5.进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表
资格和水平考试的考务处理系统
—部分数据流的组成
•报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址
•正式报名单=准考证号+报名单
•准考证=地区+序号+姓名+准考证号+考试级别+考场
•考生名单={准考证号+考试级别}
•考生名册=正式报名单
•统计分析表=分类统计表+难度分析表
•考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志考务处理系统顶层图
分层数据流图的审查:
•检查图中是否存在错误或不合理(不理想)的部分
–一致性:分层DFD中不存在矛盾和冲突
–完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素分层数据流图的一致性
•父图与子图平衡
–任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致
•数据守恒
–一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生
–多余的数据流:加工未使用其输入数据流中的某些数据项(不一定是错误,但可能隐含潜在的错误)
•局部文件
•一个加工的输出数据流不能与该加工的输入数据流同名
分层数据流图的完整性
•每个加工至少有一个输入数据流和一个输出数据流
•在整套分层数据流图中,每个文件应至少有一个加工读该文件,有另一个加工写该文件
•分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致
•分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约
结构化设计
•结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图映射成软件体系结构的设计方法
•强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则
•分为概要设计和详细设计两大步骤
–概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关
系,并用模块及其对模块的调用来构建软件的体系结构
–详细设计是对模块实现细节的设计,采用结构化程序设计(Structured Programming,简称SP)方法
•SA、SD和SP构成完整的结构化方法体系
启发式设计策略
按照模块化设计原则,相应的启发式设计策略如下:
•改造程序结构图,降低耦合度,提高内聚度
•避免高扇出,并随着深度的增加,力求高扇入
–避免如图a那样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”

•模块的影响范围应限制在该模块的控制范围内,
•降低模块接口的复杂程度和冗余程度,提高一致性
•模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相
一致,即不传递与模块功能无关的数据
•模块的功能应是可预测的,避免对模块施加过多的限制
•模块功能可预测是指该模块对相同的输入能产生相同的输出
•限制一个模块只处理单一的功能,那么,这个模块体现出高内聚•尽可能设计单入口和单出口的模块
•单入口和单出口的模块能有效地避免内容耦合

•结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)•根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的映射分别称为变换分析和事务分析
•信息流可分为两类:
•变换流(transform)
•事务流(transaction)
结构图改进技巧
1.减少模块间的耦合度
可以通过将功能简单的模块合并到与其关系密切的模块中,或调整模块的位置,来减少模块间的参数传递,或避免参数长距离传输,以降低耦合度。

2.消除重复功能
如果二个模块中存在某一相同的功能,应将这个功能从二个模块中分离出来,作为一个独立的模块被二者调用。

3.消除“管道”模块
“管道”模块通常是应该删除的,除非删除后上层模块的扇出太大。

4.模块的大小适中
如果一个模块太大,要考虑将它分成二个模块;如果一个模块太小,可考虑将它合并在与它功能密切相关的模块中。

通常一个模块的大小,以其实现代码可书写在1~2页纸(约50~100行)为宜。

面向对象的基本概念
对象(object)
对象是指一组属性以及这组属性上的专用操作的封装体
属性(attribute)通常是一些数据,有时它也可以是另一个对象。

每个对象都有它自己的属性值,表示该对象的状态。

对象中的属性只能通过该对象所提供的操作来存取或修改操作(operation)(也称方法或服务)规定了对象的行为,表示对象所能提供的服务封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。

封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开
一个对象通常可由对象名、属性和操作三部分组成
继承(inheritance)
继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。

父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法
多态性(polymorphism)
多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。

例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。

也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果
动态绑定(dynamic binding)
动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来
传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行动态绑定是一种在运行时确定被执行代码的技术
设计模式(design patterns)
在许多面向对象系统中,存在一些类和对象的重复出现的模式。

这些模式求解特定的设计问题,使面向对象设计更灵活,并最终可复用。

这些模式帮助设计者复用以前成功的设计,设计者可以把这些模式应用到新的设计中
一个设计模式通常可用4个基本要素来描述:
1)模式名称
用于描述模式的助忆符。

设计模式名应具有实际的含义,能反映模式的适用性和意图2)问题
描述何时使用模式,解释设计问题以及应用模式所必须的环境和条件
3)解决方案
描述构成设计方案的各元素、它们之间的关系、各自的职责和协作方式
4)效果(consequences)
UML
判断题
1、UML中一共有九种图:它们是用例图、类图、对象图、顺序图、协作图、状态图、活动图、构件图、部署图
2、用例图是从程序员角度来描述系统的功能
3、类图是描述系统中类的静态结构,对象图是描述系统中类的动态结构
4、活动图和状态图用来描述系统的动态行为
5、协作图的一个用途是表示一个类操作的实现
选择题
6、请在下面选项目中选出两种可以互相转换的图
(a) 顺序图(b)协作图(c) 活动图(d) 状态图
7、下面哪些图可用于BD阶段
(a)用例图(b)构件图(c)类图(d)顺序图
答案:1.正确 2.错误 3.错误 4.正确 5.正确 6. (a)(b)
7.(a)(c)(d)
✧用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。

(《UML参考手册》)
✧用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的
执行
(或称为发起了哪个用例)。

事物名称解释UML表示
参与者(Actor) 在系统外部与系统直接交互的人或事物(如另一个计算
机系统或一些可运行的进程)。

我们需要注意的是:
1.参与者是角色(role)而不是具体的人,它代表了参与者在与系统打交道的过程中所扮演的角色。

所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。

不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。

2.参与者作为外部用户(而不是内部)与系统发生交互作用,是它的主要特征。

3.在后面的顺序图等中出现的“参与者”,与此概念相同,但具体指代的含义,视具体情况而定。

用例(Use Case) 系统外部可见的一个系统功能单元。

系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。

创建新用例,确认候选用例和划分用例范围的优秀法则----“WA VE”测试(见附录)
关系
解释图参与者与
用例之间的关系关联
表示参与者与用例之间的交互,通信途径。

(关联有时候也用带箭头的实线来表示,这
样的表示能够显示地表明发起用例的是参
实例3. 航空售票的用例图
✧参与者(actor):clerk,监督员,信用卡服务商,信息亭
✧用例(use case):Buy tickets,Buy Subscription,Make charges,Survey sales
✧参与者Clerk参与(或称发起)Buy tickets和Buy Subscription 两个用例(关联关系)。


两个用例的事件流都包含Make
charges用例(包含关系)。

✧系统由:Buy tickets,Buy Subscription,Make charges,Survey sales组成。

✧该系统主要包含:Buy tickets,Buy Subscription,Make charges,Survey sales这
几个功能。

✧该系统主要面向的用户(参与者):clerk,监督员,信用卡服务商,信息亭。

系统
1.右图中的参与者有?
(a) 1 (b) 2
(c) 3 (d) 4
2.右图中的用例有?
(a) 1 (b) 2
(c) 3 (d) 4
3.2和3之间是什么关系?5和6呢?
(a) 扩展,包含(b) 包含,扩展
4.5缺少了3仍然是个完整的用例?
(a) 是的(b) 不是
5.4能够参与2吗?1能够参与5吗?
(a) 可以,不可以(b) 不可以,可以
※右图描述了菜单(Menu)、菜单项(MenuItem)、抽象命令类(Command)和具体命令类(OpenCommand,PasteCommand)之间的关系,完成1-4题
(1)哪两个类之间存在组合关系
① Menu 、MenuItem ② MenuItem 、Command
③ Command 、OpenCommand ④ Command 、PasteCommand
(2)OpenCommand 和PasteCommand 是什么关系
① 组合 ② 泛化 ③ 聚合 ④
没关系
(3)编辑菜单(EditMenu)是一种菜单,下面哪个图较好的描述了二者之间的关系
下面哪份代码(C++)最接近于图中对MenuItem 的描述

右图描述了图形接口(Graphics)、线段(Segment)、矩形(Rectangle)、点(Point)
和三维点(Point3D)之间的关系,
完成5-7题
② ③


class MenuItem { private:
virtual void Click() =0; public:

class MenuItem { public:
virtual void Click() = 0; private:

class MenuItem { private:
virtual void Click() = 0; void undo(); public:

class menuitem { public:
virtual void Click() = 0; private:

(5)下面哪个关系没有在图中出现
①关联 ②泛化 ③实现 ④依赖
(6)下面对图中①②③④四处的多重性的描述哪个不正确 ① 0...* ②1 ③0...* ④1
(7)下面哪份代码(Java)最接近于图中对Segment 的描述
✧ 顺序图用来表示用例中的行为顺序。

当执行一个用例行为时,顺序图中的每
条消息对应了一个类操作或状态机中引起转换的事件。

✧ 顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生
的。

顺序图属于动态建模。

✧ 顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接
收的。

表示了对象之间传送消息的时间顺序。

✧ 浏览顺序图的方法是:从上到下查看对象间交换的消息。

public class Segment implements Graphics {
privatc void Draw(); public Point ptStart; public Point ptEnd;

public class Segment extends Graphics {
public void Draw(); private Point ptStart; private Point ptEnd;

public class Segment implements Graphics {
private Point ptStart; private Point ptEnd; public void Draw();

public class segment implements graphics {
public void Draw(); private Point ptStart; private Point ptEnd;

事物名称解释

参与者与系统、子系统或类发生交互作用的外部用户(参见用例图定义)。

对象顺序图的横轴上是与序列有关的对象。

对象的表示方法是:矩形框中写有对象或类名,且名字下面有下划线。

生命线坐标轴纵向的虚线表示对象在序列中的执行情况(即发送和接收的消息,对象的活动)这条虚线称为对象的“生命线”。

消息符号消息用从一个对象的生命线到另一个对象生命线的箭头表示。

箭头以时间顺序在图中从上到下排列。

状态图
(2)网上银行登陆系统
登陆要求提交个人社会保险号(SSN)和密码(PIN)经验证有效后登陆成功。

登陆过程包括以下状态:
※初态(Initial state)
※获取社会保险号状态(Getting SSN)
※获取密码状态(Getting PIN)
※验证状态(V alidating)
※拒绝状态(Rejecting)
※终态(Final state)
分析下面的状态图,回答问题
(1) 以下那些图形元素是对状态的描述?
(a) 超时(b) 到达(c) 在第一层
(2) 空闲状态超时后转移到____状态
(a) 向第一层下降(b) 上升状态(c) 终态
习题答案
(1) (c)
(2) (a)
活动图概要
※描述系统的动态行为。



※包含活动状态(ActionState),活动状态是指业务用例的一个执行步骤或一个操作,不是普通对象的状态。

※活动图适合描述在没有外部事件触发的情况下的系统内部的逻辑执行过程;否则,状态图更容易描述。

※类似于传统意义上的流程图。

※活动图主要用于:
业务建模时,用于详述业务用例,描述一项业务的执行过程;
设计时,描述操作的流程。

7.5 活动图练习
1. 请选择下面所列的活动图的事物中,表示信号的是( ),表示对象流的是( )。

2. 关于右面的活动图,下面的说法中不正确的是( )。

A aPrinter:Printer是信号。

B 操作开始从“删除报文框”活动开始。

C 在“创建PS文件”和”删除报文框”活动中
发送“print(file)”信号。

D 信号发送的方向是从左到右。

习题答案
1 C,B
2 C
构件图
1. 构件图用于那种建模阶段?
A.动态建模
B.静态建模
2. 一个构件只能对特定的另一个构件提供特定的一种服务。

这种说法正确吗?
A.正确
B.错误
3. 构件图用于描述系统中各物理部件之间的服务的依赖提供关系。

这种说法正确吗?
A.正确
B.错误
4. 构件图中实线箭头表示服务的依赖,虚线箭头表示服务的提供。

这种说法正确吗?
A.正确
B.错误
习题答案:1.B 2.B 3.A 4.B
测试
Verification:Are we building the product right?
是否正确地构造了软件?即是否正确地做事,验证开发过程是否遵守已定义好的内容。

验证产品满足规格设计说明书的一致性
Validation:Are we building the right product? 是否构造了正是用户所需要的软件?即是否正在做正确的事。

验证产品所实现的功能是否满足用户的需求
⏹通过软件评审,可以更早地发现需求工程、软件设计等各个方面的问题,大大减少
大量的后期返工,将质量成本从昂贵的后期返工转化为前期的缺陷发现。

⏹评审是对软件元素或者项目状态的一种评估手段,以确定其是否与计划的结果保持
一致,并使其得到改进。

检验工作产品是否正确地满足了以往工作产品中建立的规范。

白盒测试方法
⏹ 逻辑覆盖:以程序的内部逻辑结构为基础,分为语句覆盖、判定覆盖、判定-条件覆盖、条件组合覆盖等
⏹ 基本路径测试:在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。

渐增式测试模式与非渐增式测试模式
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。

方法 目标/特性 单元测试
系统测试
验收测试
性能测试
强壮性测试
功能测试
白盒测试 黑盒测试
测试阶段或层次
适用性测
可靠性测试 集成测试
安全性测试。

相关文档
最新文档