软件工程 复习笔记

期末复习软件工程的笔记

复习针对的是太原理工大学计算机科学与技术的软件工程考试

复习时候要注意数据流图和程序结构图的画法

PAD图,NS图很可能会要求会设计

面向对象程序涉及的知识也有不小的比重,要求画状态图,活动图

目录

概述

软件的定义,特点和分类

软件的定义

软件的特点

软件的分类

软件危机的定义和表现形式

软件危机

表现形式

软件危机的产生原因及解决途径

产生软件危机的原因

软件工程

概念

软件工程的研究内容和基本原理

内容

软件工程的基本原理

软件过程和软件的生存周期

软件过程

软件生存周期

主要原则

计划时期

开发时期

软件开发模型

瀑布模型

优点

存在的问题

快速原型模型

优点

存在的问题

增量模型

优点

存在的问题

螺旋模型

存在的问题

喷泉模型

可行性研究

成本——效益分析

有形的效益分析

软件需求分析

需求分析的任务

具体任务

需求分析的步骤

需求获取的常用方法

软件总体设计

软件体系结构设计准则

软件模块设计准则

软件设计的概念和原理

模块和模块化

抽象

信息隐蔽和局部化

模块独立性及其量度

耦合

内聚

软件详细设计

结构化程序设计

详细设计工具

人机界面设计

人机界面设计问题

人机界面设计原则

软件编码

程序设计语言的选择

第四代语言有哪些主要特征,为什么受到广大用户欢迎?

软件维护

定义

分类

软件维护的特点

维护的过程

软件可维护性的定义

7个特性来衡量程序的可维护性:

提高软件可维护性的方法

软件维护的副作用

面向对象方法学

面向对象方法学的优点和不足

主要优点

不足

典型的面向对象开发方法

Booch方法

Coad/Yourdon方法

1.面向过程分析(OOA)

2.面向对象设计(OOD)

OMT/Rumbaugh方法

OOSE方法/Jacobson方法

Wirfs-Brock方法

面向对象的分析

四种形式模型

用例模型

对象模型

动态模型

物理模型

4个模型之间的关系


概述

软件的定义,特点和分类

软件的定义

什么是软件?软件和程序的区别是什么?

软件不是程序,而是程序,数据以及开发,使用和维护所需要的所有文档的整体集合。

软件的定义是:计算机程序,方法,规则,相关的文档资料以及在计算机上运行程序时所必须的数据。

软件不是程序,程序是软件的一部分。程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。没有相关文档,只有程序是不能称为软件产品的。

软件的特点

1.软件是一种逻辑产品,而不是物理实体,具有抽象性

2.软件产品的生产主要是开发研制,没有明显的制造过程

3.软件产品在使用过程中,不存在磨损,消耗,老化等问题。但软件在运行时,为了适应软件硬件,环境以及需求的变化而进行修改完善时,会引入一些新的错误,从而使软件退化,在修改的成本变得让人们难以接受时,软件就被抛弃,生存期停止

4.软件产品的开发主要是脑力劳动,还未完全拜托手工开发的方式

5.软件产品的成本相当昂贵

6.软件对硬件和环境有不同程度的依赖性

7.软件是复杂的

软件的分类

1.服务类软件

2.维护类软件

3.操作管理软件

软件危机的定义和表现形式

软件危机

软件危机是指在计算机软件的开发和维护中遇到的一系列严重问题。

软件危机主要包含了两方面的问题:

一是如何开发软件满足软件日益增长的需求

二是如何维护数量不断增长的已有软件

表现形式

1.对软件开发成本和研制进度的估计常常很不精确

2.“已完成”的软件不能满足用户的要求

3.软件产品质量差,可靠性得不到保证

4.软件产品的可维护性得不到保证

5.软件成本在计算机系统总成本中所占的比例逐年上升

6.软件开发的速度远远赶不上计算机应用速度普及深入的趋势

软件危机的产生原因及解决途径

产生软件危机的原因

1.软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂

2.软件开发的管理困难

3.软件开发的费用不断增加,维护费用急剧上升

4.软件开发技术落后

5.生产方式落后

6.开发工具落后

软件工程

概念

软件工程是指导计算机软件开发和维护的一门工程学科。

软件工厂采用工程的概念,原理,技术来开发和维护软件。

软件工程的研究内容和基本原理

内容

软件工程的研究内容是软件开发技术和软件开发过程管理

软件工程的基本原理

1.用分阶段的生存周期计划严格管理

2.坚持进行阶段评审

3.实行严格的产品控制

4.采用现代程序开发技术

5.结果应该清楚地审查

6.开发小组人员应该少而精

7.承认不断改进软件工程实践的必要性

软件过程和软件的生存周期

软件过程

把输入转换为输出的一组彼此相关的资源和活动

软件生存周期

软件生存周期是借用工程中产品生存周期的概念得来的,是指某一软件项目从被提出并着手实现开始,直到该软件报废或停止使用为止经历的实践。

软件的生存周期一般分为软件计划,软件开发和软件运行3个时期

主要原则

各阶段的任务彼此间尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。

计划时期

1.问题定义

2.可行性研究

开发时期

1.需求分析

2.概要设计

3.详细设计

4.编码

5.测试

什么是软件工程,如何用软件工程消除软件危机?

1.软件工程是指导计算机如那件开发和维护的一门学科

2.首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念,要使用好的开发技术和方法,并不断探索更好的技术和方法,要有良好的组织,各类人员要相互配合,共同完成任务,充分认识软件开发不是某种个体劳动的神秘技巧,应该开发和使用好的软件工具,从而提高软件生产率。

软件开发模型

瀑布模型

软件开发的瀑布模型也称为生存周期模型或线性顺序模型

优点

能清晰直观地表达软件开发全过程,明确规定要完成的主要活动和任务,用来作为软件项目工作的基础。

存在的问题

只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。

缺乏灵活性,无法解决软件需求不明确或不准确的问题。

快速原型模型

首先快速建立一个能反映用户主要需求的原型系统,让用户能在计算机上试用它,通过实践让用户了解目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进。用户会提出许多改进建议,开发人员按照用户的意见快速地修改原型系统。这样反复这样反复改进,最终建立完全符合用户需求的新系统。

优点

通过实践让用户了解了未来目标系统的概貌,以便判断哪些功能是最符合需要的,哪些方面需要改进,最终建立完全符合用户需求的新系统。

存在的问题

在实际中开发原型系统的语言效率有时会很低,所选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。

增量模型

也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物。

优点

有较大的灵活性。能够在较短时间内向用户提交一些有用的工作产品。开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。

整个系统是由一个个构建集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。

存在的问题

这种方法表明不同的构建将并行构建,有可能加快工程,但是这这种方法会冒所有组件集成不到一起的风险,因此需要密切地监控整个开发工程,否则将事与愿违。

螺旋模型

是一种风险驱动模型

是一种迭代模型,把开发分成几个螺旋周期,每迭代一次,螺旋线就前进一周

存在的问题

该模型需要有相当丰富的风险评估经验和这方面的专门技术,这使得该模型的应用受到了一定限制。

喷泉模型

是一种比较典型的面向对象软件开发模型,以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。

可行性研究

可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否值得去解决。

不是解决用户提出的问题,而是确定这个问题是否值得去解决。

可行性研究实际上就是一次大大简化了的系统分析和系统设计过程。

从经济,技术,操作和法律4个方面来研究每种解法的可行性。

在软件开发早期阶段为什么要进行可行性研究?可行性研究的任务是什么?

1.避免或者减轻项目开发后期可能出现的困境

2.主要任务是,首先进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,分析几种可能解法的利弊,从而判定原型系统的目标和规模是否现实,系统完成后带来的效益是否大到值得投资开发这个系统的程度。

成本——效益分析

系统成本包括开发成本和运行维护成本

系统效益包括有形的经济效益和无形的社会效益

有形的效益分析

货币的时间价值

投资回收期

纯收入

软件需求分析

需求分析的任务

需求分析的任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些任务,也就是对目标系统提出完整,准确,清晰而且具体的需求。

首先,把用户提出来的问题和要求归纳整理,分析和综合,弄清用户想要做什么,应该做什么,把这些作为要求和条件予以明确,这一步称为“用户意图分析”。

在完全弄清用户对系统的确切需求的基础上,用“软件需求规格说明书“在此基础上建立分析模型,从逻辑上完整,严密地描述出要开发的系统,并保证能满足上述要求和条件。这一步称为”规范化“。

具体任务

1.确定对系统的综合需求(功能,性能,环境,接口)

2.分析系统的数据需求

3.建立软件的逻辑模型

4.编写软件需求规格说明书

5.需求分析评审

需求分析的步骤

1.需求获取:调查研究

2.需求提炼:分析建模

3.需求描述,编写SRS

4.需求验证

需求获取的常用方法

1.客户访谈

2.建立联合分析小组

3.问题分析和确认

什么是结构化分析方法?该方法使用什么描述工具?

1.结构化分析方法是一种从问题空间到某种表示的映射方法,软件功能由数据流图表示,是结构化分析方法中最重要,被普遍采用的方法,它由数据流图和数据字典构成系统的逻辑模型。

2.数据流图,数据字典,结构化语言,判定表,判定树

什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?

1.数据流图是SA方法中用于表示系统逻辑模型的一种工具

2.它描述了系统由哪几部分组成,各部分之间的联系等,以直观的图形清晰地描述了系统数据的流动和处理过程

3.基本符号:

→,箭头,表述数据流

⚪ ,圆或椭圆,表示变换数据的处理

⬜,方框,表述数据的三原点或终点

=,双杠,表示数据存储

画数据流图的步骤是什么?应该注意什么事项?

第一步,先找外部实体,找到了外部实体,则系统与外部世界的界面就得以确定,系统的源点和终点也就找到了

第二步,找出外部实体的输入和输出数据流

第三步,在图的边上画出外部实体

第四步,从外部实体的输出流出发,按照系统的逻辑需要,逐步画出一系列变换数据的加工,直到找到外部实体的输入流,形成数据流的封闭

第五步,按照上述原则进行检查和修改

注意事项:

画数据流时,只考虑数据流的静态关系,不考虑其动态关系,也不考虑出错处理问题

画数据流时,只考虑常规状态,不考虑异常状态,这两点一般留在设计阶段

画数据流图不是画程序流程图,二者有本质区别,数据流图只描述“做什么”,不描述“怎么做”和做的顺序,而程序流程图表示对数据进行加工的控制和细节

不能期望数据流图一次画成,而是要经过各项反复才能完成

描述复杂系统的数据流图通常很大,对于画在几张纸上的图很难阅读和理解,一个比较好的方法。一个比较好的方法是分层的描述这个系统,在分层细画时,要保持信息的连续性,父图和子图要平衡,每次只细化一个加工

什么是数据字典?其作用是什么?有哪些条目

1.数据字典是对数据流图中所包含元素的定义集合

2.数据字典的作用是在软件分析和设计过程中,给人提供数据描述,即对数据存储和加工等名字进行定义

3.数据流,数据流分量(数据基本项),数据存储(文件)和加工(处理)

软件总体设计

又称为概要设计或初步设计

软件总体设计的任务是软件体系结构设计和软件模块设计

软件体系结构设计准则

良好的体系结构应是普通适用的

体系结构在一定时间内保持稳定

良好的体系结构意味着普通,高效和稳定

软件模块设计准则

1.降低模块之间的耦合性,提高模块的内聚性

2.模块结构的深度,宽度,扇入,扇出应适当

3.模块的作用范围范围应该在控制范围内

4.模块的接口设计要简单,以降低复杂程度和冗余度

5.设计功能可预测并能得到验证的模块

6.适当划分模块规模,以保证其独立性

软件设计的概念和原理

模块和模块化

抽象

信息隐蔽和局部化

模块独立性及其量度

耦合

无直接耦合

数据耦合

符号耦合

控制耦合

公共环境耦合

内容耦合

内聚

偶然内聚

逻辑内聚

时间内聚

通信内聚

顺序内聚

功能内聚

模块的耦合性和软件的可移植性有什么关系

模块的耦合性越低,软件的可移植性越高

模块的耦合性是指模块之间相互独立的度量,耦合强弱取决于接口的复杂程度,在软件的设计中尽可能设计弱的耦合的系统,这样的程序容易测试,修改和维护,也便于移植在其他计算机上

软件详细设计

详细设计的根本目的就是确定应该怎样具体实现所要求的系统

具体的就是为软件结构图中每一个模块确定采用的算法和块内数据结构

结构化程序设计

结构有顺序,条件和重复三种

结构化程序设计采用自顶向下,逐步求精的设计方法和单入口单出口的控制结构

详细设计工具

程序流程图

盒图

问题分析图

过程设计语言(PDL)

人机界面设计

人机界面设计问题

在进行人机界面设计时,几乎都遇到4个问题:

系统响应时间,用户帮助设施,出错信息交互,命令交互

人机界面设计原则

1.让用户驾驭软件,而不是软件驾驭用户

2.尽可能减少用户的记忆负担

3.保持界面的一致性

软件编码

程序设计语言的选择

1.待开发软件的应用领域

2.用户的需求

3.软件的运行环境

4.软件开发人员的知识

5.软件的可移植性要求

第四代语言有哪些主要特征,为什么受到广大用户欢迎?

4GL的概念最早提出是在20世纪70年代末。

主要特征是:友好的用户界面,非过程性,程序员只需要告诉计算机”做什么“,而不必描述”怎么做“

由于易学易用受到广大用户欢迎。

软件测试

软件测试就是为了发现错误而执行程序的过程

软件测试方法及分类

一般把被测程序在机器上运行称为“动态测试”,不在机器上运行称为“静态分析”

黑盒测试和白盒测试

黑盒测试,也成为功能测试或数据驱动测试,只在软件接口处进行测试

白盒测试,也成为逻辑测试或逻辑驱动测试

白盒技术

由于白盒测试是以程序的结构为依据,所以被测对象基本上都是源程序,以程序的内部逻辑结构为基础设计测试用例

逻辑覆盖

1.语句覆盖

2.判定覆盖

3.条件覆盖

4.判定条件覆盖

5.条件组合覆盖

循环覆盖
基本路径测试

黑盒技术

等价类划分法

边界值分析法

错误推测法

因果图法

软件维护

软件工程化的目的之一就是提高软件的可维护性,减少软件维护所需要的工作量,从而降低软件系统的总成本

定义

通俗地说,软件维护是指软件系统交付使用以后,为了改正软件运行错误,或者因满足新的需求而加入新功能的修改软件的工程

分类

1.改正性维护

2.适应性维护

3.完善性维护

4.预防性维护

软件维护的特点

1.软件维护是软件生存周期中延续时间最长,工作量最大的一个阶段

2.软件维护不仅工作量大,任务重,而且维护不当的话,还会产生一些意想不到的副作用,甚至引起新的错误。软件维护活动直接影响软件产品的质量和使用寿命

3.软件维护实际上是一个修改和简化了的软件开发活动,软件开发的所有环节几乎都在维护活动中涉及

维护的过程

软件维护活动首先建立一个维护组织,然后建立维护活动的登记,申请制度以及对维护方案的审批制度,规定复审的评价标准

软件可维护性的定义

软件可维护性是指纠正软件系统出现的错误和缺陷,以及满足新的要求进行修改,扩充和压缩的容易程度

7个特性来衡量程序的可维护性:


可理解性

可测试性

可修改性

可靠性

可移植性

可使用性

效率

提高软件可维护性的方法

1.建立明确的软件质量目标和优先级

2.使用提高软件质量的技术和工具

3.使用便于维护的程序设计语言

4.采取明确,有效的质量保证审查措施

软件维护的副作用

1.修改代码的副作用

2.修改数据的副作用

3.修改文档的副作用

面向对象方法学

面向对象是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。

面向对象方法学的优点和不足

主要优点

1.与人类习惯的思维方式一致

2.软件稳定性好

3.可重用性好

4.较易开发大型软件产品

5.可维护性好,易于测试

不足

1.相对面向过程而言比较麻烦,需要更多的代码

2.占用时间比较多,程序效率比较低,比如多态等特性会降低性能

3.创建对象实例的过程往往是非常耗时的工作

4.面向对象的4大特征在一定程度上避免了不合理的操作,但也增大了测试的难度

典型的面向对象开发方法

Booch方法

Booch最先描述了面向对象软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解方法。

Booch方法把系统的开发工作分为了”微观过程“和”宏观过程“两个部分。

Booch方法的设计部分可分为逻辑设计和物理设计。

Coad/Yourdon方法

是一种逐步进阶的面向对象建模方法

又两个过程

1.面向过程分析(OOA)
2.面向对象设计(OOD)

OMT/Rumbaugh方法

覆盖了分析,设计,实现3个阶段

代表系统静态结构的对象模型,反映系统时间顺序操作的动态模型和对象内部状态关系的功能模型。

OOSE方法/Jacobson方法

一种用例驱动的面向对象开发方法

Wirfs-Brock方法

面向对象方法的要点包括哪些内容?

OO=Objects+Classes+Inheritance+Communication with messages

什么是基于对象?什么是面向对象?

若仅使用对象和消息,则该方法称为基于对象方法,而不是面向对象的方法,若进一步把所有对象划分为类,则称该方法为基于类的方法,只有同时使用类,对象,继承和消息的方法,才是真正的面向对象的方法。

面向对象的分析

四种形式模型

用类和对象表示的对象模型,由用例和场景表示的用例模型,由状态图机和交互图表示的动态行为模型,由构件图和部署图表示的物理实现模型。

用例模型

用例模型往往是从用户需求的角度来描述系统,指明系统应该“做什么”,直接反映用户对目标系统的需求,描述数据在系统中的变换过程及系统的功能。

对象模型

面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型是面向对象方法最基础,最核心,也是最重要的模型。

动态模型

一旦建立起对象模型之后,就需要考察对象的动态行为。

物理模型

物理实现模型关注的是系统实现过程的建模。

4个模型之间的关系

在面向对象方法学中,面向对象建模技术所建立的4中模型,分别从4个不同侧面描述所要开发的系统,这4种模型相互补充,相互配合,使人们对系统的认识更加全面:由对象模型中用类,对象,接口等定义做事情的实体,这些实体是软件的基本组成单元。用例模型指明系统应该“做什么”,用例模型从用户的角度描述系统功能,动态模型规定在什么时候做什么事情,当问题涉及交互作用和时序时,动态模型尤为重要。物理实现模型通过构件图和部署图描述系统实现和分析涉及中的对应关系。

关系:

1.针对每个类建立的动态模型,描述类实例的生存周期或运行周期

2.用例图中的参与者可能是对象模型中的对象

3.物理实现模型中的构建通常对应对象模型中的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烨鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值