软件工程.docx
- 文档编号:29816429
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:12
- 大小:679.56KB
软件工程.docx
《软件工程.docx》由会员分享,可在线阅读,更多相关《软件工程.docx(12页珍藏版)》请在冰豆网上搜索。
软件工程
内蒙古民族大学
软件工程课堂笔记
复习指导
徐睿昀
2014/4/27
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序是按事先设计的功能和性能要求执行的指令序列。
数据是使程序能正常操纵信息的数据结构。
文档是与程序开发,维护和使用有关的图文材料。
需求将已经过分析的需求清晰、全面、系统、准确地描述成为正式的文档,这一步定义需求的工作就是编写需求规格说明。
功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。
功能模型用数据流图来描述。
软件危机暴发于上个世纪六十年代末。
主要表现为:
软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。
软件开发周期长、成本高、质量差、维护困难。
具体来说,软件危机主要有以下一些典型表现:
1对软件开发成本和进度的估计常常很不准确。
2用户对“已完成的”软件系统不满意的现象经常发生。
3软件产品的质量往往靠不住。
4软件常常是不可维护的。
5软件通常没有适当的文档资料。
6软件成本在计算机系统总成本中所占的比例逐年上升。
7软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。
除了软件本身的特点,软件危机发生的主要原因有:
1缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。
2软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。
3软件开发过程不规范。
如,没有真正了解用户的需求就开始编程序。
4随着软件规模的增大,其复杂性往往会呈指数级升高。
需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。
5缺少有效的软件评测手段,提交用户的软件质量不能完全保证。
如何摆脱软件危机?
1彻底消除“软件就是程序”的错误观念。
2充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
3推广和使用在实践中总结出来的开发软件的成功技术、方法和工具。
4按工程化的原则和方法组织软件开发工作。
软件需求分析阶段的任务可以把软件需求分析阶段的工作分为4个步骤,即获取需求、分析需求、定义需求和验证需求,如图所示。
需求获取通过启发、引导从客户(或用户)那里得到的原始需求是他们的业务要求(needs),简称为N。
这是分析之前获取的需求,其中可能存在一些实际问题,这些问题只有通过分析才能得到解决,直接把获取的需求作为软件设计阶段的依据将会导致严重的后果。
需求分析
(1)完整性:
每项获取的需求都应给出清楚的描述,使得软件开发工作能够取得设计和实现该功能所需要的全部必要信息。
(2)正确性:
获取的每项需求必须是准确无误的,并且需求描述无歧义性。
(3)合理性:
各项需求之间、软件需求与系统需求之间应是协调一致的,不应存在矛盾和冲突。
(4)可行性:
包括技术可行性、经济可行性、社会可行性。
(5)充分性:
获取的需求是否全面、周到。
软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件生命周期软件也有一个孕育、诞生、成长、成熟和衰亡的生存过程,我们称这个过程为软件生命周期或软件生存期。
软件生存期由软件定义、软件开发和运行维护3个时期组成,每个时期又可划分为若干个阶段。
软件生存期模型也称为软件过程模型,是从软件项目需求定义直至软件运行维护为止,跨越整个生存周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
模块一个软件系统通常由很多模块组成,结构化程序设计中的函数和子程序都可称为模块,它是程序语句按逻辑关系建立起来的组合体。
一般通过功能划分过程来完成软件结构设计。
功能划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每一部分用一个或几个软件模块加以解决,整个问题就解决了。
1继承特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。
继承意味着自动地拥有,或曰隐含地复制子类从父类中继承属性和操作,根据需要添加自己的属性和操作。
继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一。
消息对象通过它对外提供的操作在系统中发挥作用。
当系统中的其他对象或其他系统成分(在不要求完全对象化的语言中,允许有不属于任何对象的成分,例如C++程序中的main函数),请求这个对象执行某个操作时,该对象就响应这个请求,完成该操作。
2关联类之间的静态联系称作关联。
在实例化后,由类产生对象,由关联产生连接对象的链。
链是关联的实例。
关联的表示符号也称作实例连接3聚合(aggregation)是关联的一种特殊形式,表示整体类和部分类之间的“整体-部分”关系。
聚集(aggregate)是聚合关系中作为“整体”的类,而把作为“部分”的类称为成分或部分。
4依赖规约了两个或多个模型元素(或两个模型元素集合)之间的一种语义关系,对目标元素的改变可能需要改变该依赖中的源元素。
聚合一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称较复杂的对象为聚集,称较简单的对象为成分,称这种关系为聚合。
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
一个对象由一组属性和对这组属性进行操作的一组操作构成。
状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式,状态规定了系统对事件的响应方式。
事件是在某个特定时刻发生的事情,它是对引起系统做动作或从一个状态转换到另一个状态的外部事件的抽象。
数据字典以词条方式定义在数据模型、功能模型和行为模型中出现的数据对象及控制信息的特性,给出它们的准确定义,包括数据流、加工、数据文件、数据元素,以及数据源点、数据汇点等。
黑盒测试是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
黑盒测试方法主要是为了发现:
是否有不正确或遗漏了的功能?
输入能否正确地接收?
能否输出正确的结果?
是否有数据结构错误或外部信息(例如数据文件)访问错误?
性能上是否能够满足要求?
是否有初始化或终止性错误?
所以,用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,检查程序是否都能产生正确的输出。
白盒测试是对软件的过程性细节做细致的检查。
这一方法是把测试对象看做一个打开的盒子或透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
因此,白盒测试又称为结构测试或逻辑驱动测试。
白盒测试主要是对程序模块进行检查:
对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。
面向对象的基本原则
(1)抽象从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征的做法叫抽象。
在面向对象方法中,对象是对现实世界中的事物的抽象,类是对对象的抽象,一般类是对特殊类的抽象。
这种抽象是根据开发的需要进行的。
在面向对象的不同开发阶段需要进行不同程度的抽象。
(2)分类把具有共同性质的事物划分为一类,得出一个抽象的概念。
分类帮助我们组织我们所生活的复杂世界。
我们可以对在一个特殊分类中的对象做一些假设。
如果一个对象是分类(类)的一个实例,它将符合该分类的总体模式。
分类:
对象->类->一般类
(3)封装:
把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。
只是向外部提供接口,降低了对象间的耦合度。
由封装机制保证:
数据不能被对象的使用者直接访问。
只允许通过由对象提供的方法或代码访问数据。
(4)消息通信对象之间只能通过消息进行通讯。
消息必须直接发给特定的对象。
消息中包含所请求服务的必要信息,且遵守所规定的通信规格说明。
一条消息应包括:
消息名、入口参数和返回参数。
一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。
(5)多态性
无多态性的泛化.类可以由层次继承结构所组织。
在该结构中,子类将从位于层次结构高层的父类中继承属性、操作和关系。
抽象的父类是指仅用来定义子类的超类。
这样,抽象类就没有直接的实例。
有多态的泛化.可以使用层次继承结构组织类,子类可以继承位于层次结构的高层的父类的属性、操作和关系。
然而,子类可以定义它自己的操作来代替其任何超类的同名操作。
多态是指同一个命名可具有不同的语义。
OO方法中,常指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
用途:
把具有共同基类的对象组成一组,并对它们进行一致的处理。
(8)复杂性控制
类(及其对象)之间的四种关系分类关系、继承——泛化(一般-特殊)构成关系——聚合(整体-部分)静态联系——关联使用关系——依赖这些关系形成了类图的关系层*
泛化是较特殊的类和较一般的类之间的直接关系(继承关系),其中较一般的类具有较特殊的类的共同性质,较特殊的类继承较一般的类的性质,且还具有自己的性质,较特殊的类的对象是较一般的类的对象的子集。
关联对象之间的静态联系是指,最终可通过对象属性来表示的一个对象对另一个对象的联系。
对象之间的动态联系是指,对象之间在行为(如操作调用)上的依赖关系。
用关联*(association)表示类之间的静态联系。
用链*(link)表示类对象之间的静态联系。
如果类的对象之间通过属性有连接关系,那么这些类之间的语义关系就是关联。
3聚合(aggregation)是关联的一种特殊形式,表示整体类和部分类之间的“整体-部分”关系。
聚集(aggregate)是聚合关系中作为“整体”的类,而把作为“部分”的类称为成分或部分。
4依赖规约了两个或多个模型元素(或两个模型元素集合)之间的一种语义关系,对目标元素的改变可能需要改变该依赖中的源元素。
银行储蓄系统的业务流程:
储户填写的存款单或取款单由业务员键入系统;如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率、密码(可选)等信息,并印出存单给储户;如果是取款而且开户时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
要求画出分层的数据流图,并细化到2层数据流图。
(1)识别外部实体及输入输出数据流。
外部实体:
储户、业务员。
输入数据:
如果需要储户输入密码,储户才直接与系统进行交互。
储户填写的存款或取款信息通过业务员键入系统,可以将存款及取款信息抽象为事务。
输出数据:
存款单,利息清单。
(2)画出环境图(顶层数据流图)
(3)画出一层数据流图
(4)画出二层数据流图对一层图中的“处理存款”及“处理取款”进行进一步分解,得到二层数据流图,即处理存款的数据流图和处理取款的数据流图。
处理存款的数据流图
(4)画出二层数据流图
处理取款的数据流图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程