文档库 最新最全的文档下载
当前位置:文档库 › 软件工程期末重点知识总结

软件工程期末重点知识总结

软件工程期末重点知识总结
软件工程期末重点知识总结

第一章软件工程学概述

1.1软件危机

1.1.1软件危机的介绍

1.软件危机定义:软件危机是指在软件的开发和维护过程中,所遇到的一系列严重问题。

2.软件危机主要有以下一些典型表现(也是软件工程面临的问题):

(1)对软件开发成本和进度的估计常常很不准确。

(2)用户对“已经完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本所占的比例逐年上升。

(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

1.1.3消除软件危机的途径

1.软件是程序、数据及相关文档的完整集合。

其中,程序是能够完成预定功能和性能的可执行的指令序列;

数据是使程序能够适当地处理信息的数据结构;

文档是开发、使用和维护程序所需要的图文资料。

2.总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

软件工程正是从管理和技术两方面研究如何更好的开发和维护计算机软件的一门新学科。

1.2软件工程

1.2.1软件工程的介绍

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

采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和

当前能够得到的最好的技术方法结合起来,以经济的开发出高质量的软件并有效地维护它,这就是软件工程。

1.2.2软件工程的基本原理(简答)

七条原理:他认为这7条原理是确保软件产品质量和开发效率的原理的最小集合。

这7条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理,因此,它们是缺一不可的最小集合。

软件工程的七条基本原理:

(1)用分阶段的生命周期计划严格管理。

(2)坚持进行阶段评审。

(3)实行严格的产品控制。

(4)采用现代程序设计技术。

(5)结果应能清楚地审查。

(6)开发小组的成员应该少而精。

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

1.2.3软件工程方法学

1.软件工程包括技术和管理两方面的内容,是技术和管理紧密结合所形成的工程

学科。

所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。

2.软件工程方法学包含3个要素:方法、工具和过程。

其中,方法是完成软件开发的各项任务的技术方法,回答“怎么做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;

过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

1.3软件生命周期

1.概括地说,软件生命周期由软件定义、软件开发和运行维护(也称软件维护)3个时期组成,

每个时期又进一步划分成若干个阶段。

2.软件定义时期的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;

导出实现工程目标应该采用的策略及系统必须完成的功能:估计完成该项工程需要的资源和成本,并且制定工程进度表。

软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。

3.开发时期具体设计和实现在前一时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。

其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。

4.维护时期的主要任务是使软件持久的满足用户的需求。具体地说,当软件在使用过程中发现错误时应该加以改正;

当环境改变时,应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。

通常对维护时期不在进一步的划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。

5.软件生命周期每个阶段的基本任务(8个阶段)

(1)问题定义(2)可行性研究(3)需求分析(4)总体设计

(5)详细设计(6)编码和单元测试(7)综合测试(8)软件维护

1.4软件过程

1.4.1瀑布模型

特点:(1)阶段间具有顺序性和依赖性

(2)推迟实现的观点(3)质量保证的观点

优点:

(1)可强迫开发人员采用规范的方法

(2)严格的规定了每个阶段必须提交的文档

(3)要求每个阶段的所有产品都必须经过质量保证小组的仔细验证

缺点:

(1)无法解决软件需求不明确或不准确的问题

(2)可能导致最终开发的产品不能真正满足用户的需要

(3)瀑布模型比较适合开发需求明确的软件

1.4.2快速原型模型(过渡产品)

快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

原型:是快速实现和运行的早期版本,反映最终系统部分重要特性。

优点:

(1)通常能反映用户真实需求;

(2)软件产品的开发基本上是线性顺序进行的。

1.4.4螺旋模型(改进了原型模型,在每个阶段都加入风险分析)

螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。

理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

螺旋模型主要适用于内部开发的大规模软件项目。

1.4.5喷泉模型(P22)

第二章可行性研究

2.1可行性研究的任务

1.可行性研究的目的不是解决问题,而是确定问题是否值得去解决。

2.可行性研究的基本内容

(1)技术可行性(2)经济可行性(3)操作可行性

2.2可行性研究过程

典型的可行性研究过程有下述一些步骤:

(1)复查系统规模和目标(2)研究目前正在使用的系统

(3)导出新系统的高层逻辑模型(4)进一步定义问题

(5)导出和评价供选择的解法(6)推荐行动方针

(7)草拟开发计划(8)书写文档提交审查

2.4数据流图

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的交换。

4个元素图形表示(P41)

2.5数据字典(理解)

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

任何字典最主要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人

提供关于数据的描述信息。

数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,然而没有数据流图,

数据字典也难以发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,

才能共同构成系统的规格说明书。

第三章需求分析

3.1需求分析的任务

3.1.1确定系统的综合要求

通常对软件系统有下述几方面的综合要求

(1)功能需求(2)性能需求

(3)可靠性和可用性需求(4)出错处理需求

(5)接口需求(6)约束

(7)逆向需求(8)将来可能提出的要求

3.3.2软件规格说明书的作用?(自己查)

(1)软件设计和实现的基础

(2)软件开发项目的规划、软件价格的估算等

(3)测试和用户验收软件系统的重要依据

(4)为软件维护提供重要的信息

例.下列叙述中,不属于软件需求规格说明书的作用的是__D____。

A. 便于用户、开发人员进行理解和交流

B. 反映出用户问题的结构,可以作为软件开发工作的基础和依据

C. 作为确认测试和验收的依据

D. 便于开发人员进行需求分析任何

3.8验证软件需求

3.8.1从哪些方面验证软件需求的正确性

1.一般说来,应该从下述4个方面进行验证。

(1)一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。(2)完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。

(3)现实性:指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。

(4)有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。

第五章总体设计

5.1设计工程

1.总体设计过程通常由两个主要阶段组成:

(1)系统设计阶段,确定系统的具体实现方案(2)结构设计阶段:确定软件结构

2.典型的总体设计包括下属9个步骤:

(1)设想供选择的方案(2)选取合理的方案

(3)推荐最佳方案(4)功能分解

(5)设计软件结构(6)设计数据库

(7)制定测试计划(8)书写文档。

(应该完成的文档通常有下述几种:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结构) (9)审查和复查

5.2设计原理

5.2.1模块化(P94)

1.模块:是由边界元素限定的相邻程序元素的序列,而且有一个总体标示符代表它。

面向对象方法学中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。

2.模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,

可以完成指定的功能满足用户的需求。

5.2.4信息隐藏(隐蔽)和局部化

信息隐藏(隐蔽):在设计和确定模块时,是的一个模块内包含的信息(过程和数据),

不允许其他不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能

而必须交换的信息。

局部化:将一些关系密切的软件元素物理的放得彼此靠近。

5.2.5模块独立

1.衡量模块独立性的两个准则:(1)耦合性(2)内聚性

2.耦合定义:耦合是对一个软件结构内不同模块之间互连程度的度量。

耦合强弱取决于模块间接口的反正程度,进入或访问一个模块的点,以及通过接口的数据。

3.耦合分类:

(1)无直接耦合:两个模块没有直接关系,模块独立性最强。

(2)数据耦合:一个模块访问另一个模块时,仅仅通过数据参数交换输入、输出信息。

(数据耦合是低耦合)

(3)控制耦合:模块之间传递的是控制信息(尽管有时这种控制信息以数据的形式出现),如开关、

标志、名字等,控制被调用模块的内部逻辑。

(4)特征耦合:两个模块通过传递数据结构加以联系,或都与一个数据结构有关系,则称这两个模块间存在特征耦合。

可能出现的情况:当把整个数据结构作为参数传递时,被调用的模块虽然只需要使用其中的一部分数据元素,

但实际可以使用的数据多于它真正需要的数据,这将导致对数据访问失去控制。(5)公共环境耦合:一组模块引用一个公用数据区(也称全局数据区,公共数据环境)

公共数据区指:全局数据结构、共享通讯区、内存公共覆盖区等。

(6)内容耦合:(是最不好的耦合形式)有下列情况之一的。

A.一个模块直接访问另一个模块的内部信息。

B.一个模块不通过正常入口转换到另一个模块内部。

C.两个模块有一部分代码重叠。

D.一个模块有多个入口模块。

(注:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。)

4.内聚定义:又称块内联系。指一个模块内部各个元素彼此结合的紧密程度的度量。

若一个模块内各元素联系的越紧密,则它的内聚性就越高。设计目标:高内聚。

5.内聚有哪些?(P99)

7种内聚及评分:功能内聚(10分)、顺序内聚(9分)、通信内聚(7分)、

过程内聚(5分)、时间内聚(3分)、逻辑内聚(1分)、偶然内聚(0分)

5.3启发规则(P100)

改进原则:高内聚、低耦合

启发性规则以下几条:

(1)改进软件结构,提高模块独立性

(2)模块规模应该适中(重点)

(3)深度、宽度、扇出和扇入都应适当(计算题)

(4)模块的作用域应该在控制域之内

(5)力争降低模块接口的复杂程度

(6)设计单入口单出口的模块

(7)模块功能应该可以预测

5.4描述软件结构的图形工具 5.4.2结构图(P103)

主要成分说明:

(1)一个方框代表一个模块,框内注明模块的名字或者主要功能。

(2)方框之间的箭头(或直线)表示模块的调用关系,表示前一模块对后一模块的调用。

(3)调用直线边的小箭头,表示调用时从一个模块传给另一个模块的数据,也指出了传送方向。

5.5面向数据流的设计方法(P104)

数据流可分为两种类型:(1)变换型数据流(2)事务性数据流

第六章详细设计

6.1结构程序设计

1.什么是结构程序设计?

经典定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,

而且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

比较全面的定义:结构程序设计是尽可能少用GOTO语句的程序设计方法,最好仅仅在检测出错误时才使用

GOTO语句,而且一个总是使用前向的GOTO语句。

6.2人机界面设计(理解P119-P124)

6.3过程设计的工具(出大题)(结合课件)

1.要求:会画程序流程图、盒图、PAD图等图形工具。

2.表格工具

(1)判定表:能够清晰地表示复杂的条件组合和应做的动作之间的对应关系。(2)判定树:是判定表的变种,它也能够清晰地表示复杂的条件组合和应做的动作之间的对应关系。

3.语言工具

过程设计语言(PDL):也称伪码,是一种介于自然语言和形式化语言之间的语言,

用于描述功能模块的算法设计和处理细节的语言。

特点:易编写,易理解,容易转化成源程序。

6.4面向数据结构的设计方法

Jackson方法和Warnier方法。

6.4.1Jackson图(会画)(P133例题)

逻辑数据结构:顺序结构、选择结构、重复结构

Jackson图的优点:(1)形象直观可读性好(2)既能表示数据结构也能表示程序结构

6.5程序复杂程度的定量度量

1.计算环形复杂度的3种方法

(1)数图上的区域个数(2)等于判定结点数+1(最优)(3)边数-结点数+2 2.环形复杂度的用途(P138)

第七章实现

7.1编码/7.1.2编码风格(理解),重点看(P148/5.效果)

7.2软件测试基础

7.2.1软件测试的目标

Myers给出的软件测试的目的

(1)测试是为了发现程序中的错误而执行程序的过程。

(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。

(3)成功的测试是发现了至今为止尚未发现的错误的测试

总之,测试的目的是以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷;

测试附带的收获是它能证明软件的功能和性能与需求说明相符合。

说明:测试不能表明软件中不存在错误,它只能说明软件中存在错误。

7.2.3测试方法

软件测试方法一般分为:静态测试盒动态测试。

静态测试:是指被测程序不在机器上运行,采用人工测试和计算机辅助静态分析的手段对程序进行检测。

动态测试:是指通过运行程序发现错误,又分白盒测试和黑盒测试。

(1)已知产品应该具有的功能,可以通过“黑盒测试”来检验每个功能是否符合设计要求。

(2)已知产品的内在工作过程,可以通过“白盒测试”来检验每种内部操作是否按要求的规定正常进行。

7.3单元测试

7.3.1测试重点

单元测试方法有哪些?(5个)

(1)模块接口测试(2)局部数据结构测试

(3)路径测试(重要的执行通路)(4)出错处理测试(5)边界测试7.3.2代码审查(属于静态测试)(P154)

7.4集成测试

7.4.4回归测试

回归测试定义:指集成测试中,重新执行已经做过测试的某个子集,

以保证上述这些变化没有带来非预期的副作用。

先采取自顶向下的方式测试被修改的模块及其子模块;然后将这一部分视为子系统,再自低向上测试。

7.5确认测试

1.确认测试的依据?

需求分析阶段产生的软件需求规格说明书,准确的描述了用户对软件的合理期望,

因此是软件有效性的标准,也是进行确认测试的基础。

7.5.3 Alpha和Beta测试(适应:为多个用户开发的软件)

Alpha测试:由用户在开发环境下进行的测试。

Beta测试:由最终用户在实际使用环境下进行的测试,这些用户定期返回有关错误信息给开发者。

注意:只有当Alpha测试达到一定的可靠程度时,才开始Beta测试。

7.6白盒测试技术

所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。

通常又把测试数据和预期的输出结果称为测试用例。

7.6.1逻辑覆盖

逻辑覆盖有几种(出题)

逻辑覆盖是以程序内部的逻辑结构为基础设计测试用例的技术。

包括:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、

点覆盖、边覆盖、路径覆盖

7.6.2控制结构测试

1.基本路径测试(P166例题)

以环形复杂度为基础,导出基本可执行路径集合,设计测试用例的方法。测试用例要保证程序的可执行语句执行一次。

使用基本路径测试技术设计测试用例的步骤:

(1)根据过程设计结果画出相应的流图。

(2)计算流图的环形复杂度。

(3)确定线性独立路径的基本集合。

(4)设计可强制执行基本集合中每条路径的测试用例。(包括路径1-6的测试用例)

7.7黑盒测试技术

7.7.1等价划分(P172)/7.7.2边界值分析(P175)

7.9软件可靠性

软件可靠性的定义:

程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。

随着运行时间的增加,运行时出现程序故障的概率也将增加,即可靠性随着给定的时间间隔的加大而减少。

第八章维护

软件维护需要的工作量很大,平均来说,大型软件的维护成本高达开发成本的四倍左右。

8.1软件维护的定义

软件维护的定义:就是在软件已经交付使用之后,为了改正错误或者满足新的需求而修改软件的过程。

分为4类:改正性维护、适应性维护、完善性维护、预防性维护。

各种维护类型及维护工作量的比例:

完善性维护(50%-66%)、改正性维护(17%-21%)、

适应性维护(18%-25%)、其他维护活动(4%左右)

8.4软件的可维护性

8.4.1决定软件可维护性的因素

决定软件可维护性的因素:(5个)

(1)可理解性(2)可测试性(3)可修改性(4)可移植性(5)可重用性

8.4.2文档(包括系统文档和用户文档)

文档作用:文档是影响软件可维护性的决定因素。

用户文档:主要描述系统功能和使用方法,并不关心这些功能是怎样实现的。系统文档:描述系统设计、实现和测试等各种方面的内容。

总体来说,软件文档应该满足下述要求:

(1)必须描述如何使用这个系统,没有这种描述时即使是最简单的系统也无法使用。

(2)必须描述怎样安装和管理这个系统。

(3)必须描述系统需求和设计。

(4)必须描述系统的实现和测试,以便使系统成为可维护的。

第九章面向对象方法学引论

9.2面向对象的概念

9.2.2其他概念

7.继承(P213)

单继承:一个类只允许有一个父类,即类等级为树形结构。

多继承:一个类允许有多个父类。

9.3面向对象建模

用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是:

描述系统数据结构的对象模型、描述系统控制结构的动态模型、描述系统功能的功能模型。

9.4对象模型

9.4.1类图的基本符号(P217)类图描述类及类与类之间的静态关系。

9.6功能模型

功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,

因此更直接的反映了用户对目标系统的需求。

使用“用例图”描述(P224)

9.3种模型之间的关系

3种模型分别是:对象模型、功能模型、动态模型

3种模型之间的关系:

(1)对象模型描述了动态模型、功能模型所操作的数据结构。

对象模型中的操作对应于动态模型中事件和功能中的函数。

(2)动态模型描述了实现的控制结构,告诉我们哪些结构是依赖于对象值,哪些引起对象的变化,并激活了函数。

(3)功能模型由数据流图和用例图组成,描述了对象模型中操作的含义、

动态模型中动作的意义以及对象模型中的约束的意义。

第十一章面向对象设计

11.2启发规则

6个启发规则:

(1)设计结果应该清晰易懂。(2)一般-特殊结构的深度应适当。

(3)设计简单的类。(4)使用简单的协议。

(5)使用简单的服务。(6)把设计变动减至最小。

11.3软件重用

11.3.1概述

1.重用的定义:

重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。2.软件成分的重用级别

软件成分的重用可以进一步划分成3个级别,级别由低到高分别是:

(1)代码重用(2)设计结果重用(3)分析结果重用

第十二章面向对象实现

12.2程序设计风格

12.2.1提高可重用性

提高可重用性的主要规则(7条):

(1)提高方法的内聚(2)减小方法的规模

(3)保持方法的一致性(4)把策略与实现分开

(5)全面覆盖(6)尽量不使用全局信息

(7)利用继承机制

第十三章软件项目管理

13.3进度计划

13.3.2 Gantt图(Gantt图的优缺点)

优点:直观简明、容易掌握、容易绘制。

缺点:(1)不能显式地描绘各项作业彼此间的依赖关系。

(2)进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象。(3)计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。

13.3.2工程网络(工程网络的优缺点)(P315)

工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及

每项作业的开始时间和结束时间,此外,它还显式的描绘了各个作业彼此间的依赖关系。

因此,工程网络是系统分析和系统设计的强有力的工具。

13.4人员组织

人员组织的3种方式:

民主程序员组、主程序员组、现代程序员组

13.5质量保证

13.5.1软件质量

1.软件质量的定义:软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。

更具体的说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准

以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。

上述定义强调了下述的3个要点:

(1)软件需求是度量软件质量的基础,与需求不一致就是质量不高。

(2)指定的开发标准定义了一组指导软件开发的准则,如果没有遵守这些准则,肯定会导致软件质量不高。

(标准有:国家标准、国际标准、行业标准、企业标准)

(3)通常,有一组没有显式描述的隐含需求(例如,软件应该是容易维护的)。如果软件满足明确描述的需求,当却不满足隐含的需求,那么软件的质量仍然是值得怀疑的。

2.软件质量因素的定义(P325表)

13.5.2软件质量保证措施

软件质量保证措施主要有:

(1)基于非执行的测试(也称为复审或评审)

(2)基于执行的测试(即软件测试)

(3)程序正确性证明

1.技术复审的重要性(P326)

13.6软件配置管理

13.6.1软件配置

1.什么是软件配置?

简称SCM,是在软件生命周期内管理“变更”的一组活动。

这组活动使得因为“变更”而引起的混乱减到最小,最有效地提高生产率。

2.软件配置项:

软件过程的输出信息,包括3类:

(1)计算机程序(源代码和可执行程序)

(2)描述计算机程序的文档(供技术人员或用户使用)

(3)数据(程序内包含的或在程序外的)

3.基线(P329)

13.7能力成熟度模型(CMM)

能力成熟度的5个等级从低到高依次是:

初始级(又称为1级)

可重复级(又称为2级)

已定义级(又称为3级)

已管理级(又称为4级)

优化级(又称为5级)

软件工程重点整理

软件工程重点 (吐血整理——林新发) 红色的是重点中的重点 前面数字是课本页码 第一章概论 1 什么是计算机软件 计算机软件指计算机系统中的程序及其文档 3软件的特点 (1)软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算 (2)软件是被开发的或被设计的,它没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大 (3)软件的使用没有硬件那样的机械磨损和老化问题 4软件的分类 (1)系统软件(如操作系统、编译程序等)、 (2)支持软件(如数据库管理系统、网络软件、软件开发环境等)、 (3)应用软件(如实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件等) 6软件工程定义 软件工程是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法制作软件的工程 7生存周期 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期 软件生存周期大体可分为如下几个活动:计算机系统工程、需求分析、设计、编码、测试、运行和维护 12能力成熟度模型CMM(了解一下) 初始级、可重复级、已定义级、已管理级、优化级 18瀑布模型(重) 系统工程、需求分析与规约、设计与规约、编码与单元测试、集成测试系统测试、运行与维护 第二章系统工程 41系统工程的任务 (1)识别用户的要求,确定待开发软件的总体要求和范围,

(2)系统建模和模拟 (3)进行成本估算,做出进度安排 (4)进行可行性分析,即从经济、技术、法律等方面分析待开发的软件是否有可行的解决方案,并在若干个可行的解决方案中作出选择。 (5)生成系统规格说明书 42可行性分析 (1)经济可行性(成本、效益、货币的时间价值、投资回收期、纯收入) (2)技术可行性(风险分析、资源分析、技术分析) (3)法律可行性 第三章需求工程 48软件需求 指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。 包括:功能需求、性能需求、用户或人的需求、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密要求、可靠性需求、软件成本消耗与开发进度需求、其他非功能需求 50需求获取方法与策略(重) 建立顺畅的通信途径、访谈与调查、观察用户操作流程、组成联合小组、用况 51 图3.2 53 创建用况模型的主要步骤 (1)确定谁会直接使用该系统,即参与者(Actor) (2)选取其中一个参与者 (3)定义该参与者希望系统做什么,参与者希望系统作的每件事将成为一个用况 (4)对每件事来说,何时参与者会使用系统,通常会发生什么,这就是用况的基本过程 (5)描述该用况的基本过程 54需求分析原则(重) 1.必须能够表示和理解问题的信息域 2.必须能够定义软件将完成的功能 3.必须能够表示软件的行为(作为外部事件的结果) 4.必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节

软件工程课程设计心得总结

软件工程课程设计个人总结 学期就快要结束了,到了最后一周居然还有软件工程课程设计,还要考试真的有点忙啊,不管怎样还是好好干吧,把对工程的理论研究、学习成果用于实践也是一种检验学习成果和提升工程能力的有效手段嘛。 工作内容安排 软件工程课程设计的第一天拿到题目,听取老师对于课程设计的要求、要完成的工作、预期要达到的效果和注意事项。然后分组、讨论和确定选题。这真正的课程设计才算开始了,经过组长,组员的反复研究、论证后一致决定选择:实习题目4:开发一个基于Web的BBS系统,包含一般BBS所具有的功能,如用户注册、用户信息管理、发贴功能、贴子管理、主题词查询、用户信息修改和查询等。 这个题目对于现代化的网络交流来说发展的成熟而且符合当代互联网大众的网络需求,符合现代网络对信息分享讨论的爱好,我们一致预测在今后很长的一段时间内也将会是非常流行的一种交流介质。 确定选题后我们开始软件开发的第一步,需求分析,详细设计等内容,分块分工完成模块,我分到的主要部分就是分析论坛里面的帖子内容,用户的爱好,然后解决用户的索引需求,把用户的索引需求智能的、友好的呈现给用户,把这部分的代码编写,测试,把用户界面做好就是我接下来几天的工作内容。 俗话说:磨刀不误砍柴工,要想把我的这部分内容做好,做得完美,我的好好的分析一下,对全组对整个系统的需求分析的基础上又认真分析了本部分的内容和本部分要实现的功能,对本部分实现的主要思想理清,认真设计界面,还有对队员们的模块能有效的结合起来,让他们的模块也能有效的供我使用,做好我的接口也方便其他模块与此的衔接。 问题与解决 在本次课程设计中遇到了好多前所未有的问题,第一次接触HTML网页开发,第一次邂逅JSP web应用程序开发,第一次有了原来开发应用程序是需要数据库的,对于这些都是第一次接触,需要了解HTML的基本语法,需要学习JSP web 应用程序web app的开发方法,需要实践配置数据库TOMCAT、SQL sever,居然有这么多的东西需要从头来,对于这些方面我就像一张崭新的白纸,怎么能在短短的四五天时间内将这张白纸绘成一幅栩栩如生的画卷呢,这是我们面对的亟待解决的问题。 为了解决这一系列的问题,我们没有找借口,我们没有懒惰,我们更没有放弃,而是迎难而上,到图书馆“大采购”求资料,找到想要的,真想把图书馆搬到课程设计实验室。接下来就是根据我们的需求分析,概要设计,详细设计等内容分模块编写网页源代码,修复bug,测试代码,连接数据库这样我们的全新的基于web的BBS论坛就成功上线了。

软件工程复习资料

软件概念:与计算机系统操作有关的程序、数据以及相关文档的完整集合 软件特点:逻辑实体、智力产品,制造即拷贝2无磨损和老化,不遵循“浴盆曲 线”,但存在退化问题3尚未摆脱手工方式,软件移植的需要,复杂(问题复杂性/ 程序结构复杂性),软件开发的性质如成本、进度、质量等难以估计控制,维护困难,可复用性软件分类:按功能:系统软件/支撑软件/应用软件2按工作方式:实时处理/分时/交互/批处理3按服务对象:项目 / 产品(定制 / 通用)4按失效影响:关键/ 非关键5规模:微型、小型、中型、大型、甚大型、极大型 软件危机的表现:软件开发成本和进度失控,维护代价高2用户不满意3软件 质量不可靠4软件不可维护 5无文档资料6 计算机系统中软件成本比重加大7软件开发生产率提高不能满足要求软件危机的原因软件的规模和复杂性2人类智力的局限性3协同工作的困难性4缺乏方法学和工具5用户描述不精确、二义、遗漏,双方理解有偏差缓解软件危机的途径组织管理、协同配合的工程2软件工程的理论模型、技术方法3软件工具 软件工程的三要素1过程:管理部分2方法:技术手段3工具:自动或半自 动地支持软件的开发和管理三要素的关系:相互关联与支持 软件生命周期:可行性研究-需求分析-概要设计-详细设计-实现-集成测试-确认 测试-使用与维护-退役 软件开发和测试活动之间的关系软件 开发和软件测试都是软件生命周期中的重要组成部分,软件测试是保证软件开发产物 质量的重要手段。测试是贯穿于整个开发流程了,而不是在编码完成才开始。 瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工 作,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。最终得到软件产品优点是使用时间最长、应用面比较广泛的开发模型2是其他一些开发模型的基础3当前一阶段完成后,只需要去关注后续阶段缺点不能适应用户需求的变化2到最后阶段才能得到可运行的软件版本适用场合:对于规模较小,软件需求较为稳定的项目,采用模型能够显著提高软件开发的质量和效率 演化模型(原型模型)演化模型是一种全局的软件(或产品) 生存周期模型。属于 迭代开发方法。该模型可以表示为:第一次迭代(需求->设计->实现->测试->集成)->反馈->第二次迭代(需求->设计->实现->测试->集成)->反馈->……优点:1支持需求的动态变化2有助于获取用户需求,便于用户对需求的理解3尽早发现软件中的错误缺点1需要为系统的每个新版本交付文档,不划算2新需求的不断增加,使系统结构退化,变更成本上升3不支持风险分析 螺旋模型1将瀑布模型与原型模型进行有机结合2增加风险分析步骤优点1支持 需求的动态变化2有助于获取用户需求,便于用户对需求的理解3尽早发现软件中的错误4支持风险分析,可降低或者尽早消除软件开发风险5适合于需求动态变化、开发风险较大的系统缺点建设周期长适用场合在需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。特别适合于大型复杂的系统 喷泉模型:软件复用与生命周期中多项开发活动集成,主要支持面向对象的开发 方法优点1软件系统可维护性较好2各阶段相互重叠,表明了面向对象开发方法各阶段间的交叉和无缝过渡3整个模型是一个迭代的过程,包括一个阶段内部的迭代和跨阶段的迭代4模型具有增量开发特性,即能做到“分析一点、设计一点、实现一点,测试一点”,使相关功能随之加入到演化的系统中5模型由对象驱动,对象是各阶段活动的主体,也是项目管理的基本内容6该模型很自然地支持软部件的重用缺点由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。 OO 为什么好oo 解决问题的思路是从现实世界中的客观对象入手,运用人类的 自然思维方式来构造软件系统,而传统的结构化方法从功能入手和信息工程化方法从信息入手。在面向对象方法中,把一切都看成是对象。OO 方法用类和对象作为系统的基本构成单位。对象对应问题域中的事物,其属性与操作刻画了事物的静态特征和动态特征,它们之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系面向对象方法的特点(1)从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域中的事物为中心来思考问题、认识问题,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌(对象) (2)用对象的属性表示事物的状态特征;用对象的操作表示事物的动态特征(属性与操作)(3)对象的属性与操作结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节(封装)(4)对事物进行分类。把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例(分类)(5)复杂的对象可以用简单的对象作为其构成部分(聚集:一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称较复杂的对象为聚集,称较简单的对象为成分,称这种关系为聚集)(6)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与操作,从而简化系统的构造过程及其文档,有利于复用(继承:特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承)(7) 类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可见的(类的封闭性)(8) 对象之间通过消息进行通讯,以实现对象之间的动态联系(消息)(9) 通过关联表达类之间的静态关系(关联) 自顶向下,逐步求精:从顶层开始逐层向下分解,直至系统的所有模块都小 到易于掌握为止 抽象从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征的做法叫抽象。 过程抽象:将完成一个特定功能的动作序列抽象为一个函数名和参数表(模块)例: 比较字符串: int Compare (CString, CString)。数据抽象:将诸多数据对象的定义(描述)抽象为一个数据类型名,以后可通过该数据类型名来定义多个具有相同性质的数据对象例:Eg: 1, 2, 3,—>Integer ;软件工程书;人工智能书—>书类 封装把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部 细节。只是向外部提供接口,降低了对象间的耦合度使对象能够集中完整地描述并对应一个具体事物。意义:体现了独立性,使对象外部不能随意存取对象的内部数据,使其所含的信息对那些不需要这些信息的模块不可访问。对象的内部的修改对外部的影响很小,减少了修改引起的“波动效应”。公开静态的、不变的操作,而把动态的、易变的信息隐藏起来。 模块化将一个软件划分为一组具有相对独立功能的部件,每个部件称为一个模 块;当把所有的模块组装在一起时,便可获得满足用户需求的软件系统。为什么要进行模块化:模块化体现了“分而治之”的问题分析和解决方法。模块化的目的①进行功能分解,把复杂的大的功能划分成简单的小的子功能,尽量降低每个模块的成本。②尽量使每个模块间的接口不能太多,太多会使接口成本增加。兼顾二者可取得最佳的划分状态,确保软件总成本最低模块设计原则1信息隐藏2高内聚度(强)3低耦合度(松)什么是信息隐藏(1)模块应该设计得使其所含的信息(过程和数据)对那些不需要这些信息的模块不可访问(2)模块之间仅仅交换那些为完成系统功能所必须交换的信息信息隐藏的优点(1)支持模块的并行开发(设计和编码)(2)模块的独立性更好(3)便于系统功能的扩充(4)便于测试和维护,减少修改影响向外传播的范围模块化、信息隐藏,局部化是什么关系局部化与信息隐藏是一对密切相关的概念。局部化就是指将一些使用上密切相关的元素尽可能放在一起。对一个模块来说,局部化是期望模块所使用的数据尽可能是在模块内部定义的。因此,局部化意味着减少模块之间的联系,有助于实现模块之间的信息隐藏。在软件测试和维护期间经常需要修改一些模块的内容。信息隐藏和局部化降低了模块之间的联系,使得在修改一个模块时对其他模块的影响降到最低。“隐藏”的意思是,有效的模块化通过定义一组相互独立的模块来

天津理工大学-软件工程总结(红字是考点)分析解析

填空10个,选择10个,名词解释5个,简答题2个,画图题2个 第一章 一、FAQs about software engineering软件工程中常见的问题 1、software:Computer programs and associated documentation 软件是计算机程序和所有使程序正确运行所需要的相关文档和配置信息 Software products软件产品分为:Generic通用、Bespoke (custom)定制 2、Software engineering is an engineering discipline that is concerned with all aspects of software production.软件工程是一门工程学科,涉及软件生产的各个方面 Software engineers should adopt a systematic and organised approach 软件工程人员运用的是系统的、有组织的工作方法。 3、difference between software engineering and computer science:系统工程和计算机科学的区别:Software engineering is an engineering discipline that is concerned with all aspects of software production.计算机科学侧重于理论和基础,而软件工程侧重于软件开发和交付的实际活动。 4、the difference between software engineering and system engineering: 软件工程和系统工程的区别:System engineering is concerned with all aspects of computer-based systems development including hardware, software and process engineering. Software engineering is part of this process系统工程侧重基于计算机系统开发的所有方面,包括硬件、软件和处理工程。软件工程只是它的一部分。 5、software process :A set of activities whose goal is the development or evolution of software. 软件工程是以软件开发和进化为目的的一系列活动 Generic activities in all software processes:软件过程的基本活动 a)Specification 软件描述 b)Development 软件开发 c)Validation软件有效性验证 d)Evolution 软件进化 6、software process model:软件过程模型 A simplified representation of a software process, presented from a specific perspective. 从特定角度提出的软件过程的简化表示形式 Examples of process perspectives are ?Workflow perspective 工作流模型 ?Data-flow perspective 数据流或活动模型 ?Role/action perspective角色/动作模型 Generic process models 通用过程模型 ?Waterfall瀑布型开发方法 ?Iterative development迭代式开发方法 ?Component-based software engineering(CBSE)基于组件的软件工程 7、the costs of software engineering软件工程的成本 Roughly 60% of costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs. 软件开发成本约占60%,测试成本占40%。 对于定制软件而言,进化成本常常高于开发成本。 8、software engineering methods软件工程方法: Structured approaches to software development which include system models, notations, rules, design advice and process guidance.软件开发的结构化研究方法,包括:系统模型、标记

软件工程知识点总结

软件工程(简要知识点) 一、. 软件过程五个模型对比(瀑布模型、快速原型、增量、螺旋、喷泉模型) 二、可行性研究: 1、任务:用最小的代价在尽可能短的时间内确定问题是否能够解决。 2、四个方面:技术、经济、操作可行性、法律 3、数据流图四种成分:1、源点/终点2、处理3、数据存储 4、数据流 三、需求分析: 1、任务:确定系统必须完成哪些工作,对目标系统提出完整、清晰、具体的要求。 2、结构化方法就是面向数据流自顶向下逐步求精进行需求分析的方法。 3、实体联系图:1、数据对象2、属性3、联系(1:1、1:N、M:N) 四、总体设计: 1.任务:回答“概括的说,系统应该如何实现”,用比较抽象概括的方式确定系统如何完成预定的任务,也就是说应该确定系统的物理配置方案,并且进而确定组成系统的每个程序结构。 2.系统设计阶段(确定系统具体实施方案)、结构设计阶段(确定软件结构) 3.模块独立:内聚和耦合 4. 耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统

5. 内聚(Cohesion): 一个模块内各元素结合的紧密程度 6.面向数据流的设计方法:变换流和事务流 五、详细设计: 1.任务:确定应该怎样具体的实现所要求的系统,也就是说经过这个阶段的设计工作应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 2.过程设计的工具(程序流程图、盒图、PAD图、判定表、判定树) 七、测试: 1、单元测试:又称模块测试。每个程序模块完成一个相对独立的子功能,所以可以对该模块进行单独的测试。由于每个模块都有清晰定义的功能,所以通常比较容易设计相应的测试方案,以检验每个模块的正确性。 2、集成测试: 在单元测试完成后,要考虑将模块集成为系统的过程中可能出现的问题,例如,模块之间的通信和协调问题,所以在单元测试结束之后还要进行集成测试。这个步骤着重测试模块间的接口,子功能的组合是否达到了预期要求的功能,全程数据结构是否有问题等。 3、白盒测试技术(逻辑覆盖、基本路经测试)

软件工程学习心得作业

软件工程作业

软件工程心得体会 通过这半学期我对软件工程的学习,老师在课堂上从软件工程的基础到用户的需求分析,最后到黑盒白盒测试通过自身做过的一些案例,生动形象的讲解了软件工程这门本身枯燥乏味的课程,这不仅增强了学生学习的积极性,也通过让我们自己去做一些需求分析,我们从中学到了许多知识。 老师不仅仅在课堂上对我们悉心的知道,在课外还让我们多看一些有关软件工程方面最前沿的理论,通过这段时间我读了《软件工程——实践者的研究方法》、《件工程案例》这两本书,通过自己的读书学习,我有以下心得体会。 众所周知软件对于一个公司,一个企业乃至一个国家都是十分重要的,因此一个软件的维护也十分重要,下面我就讲一些关于软件维护的知识。 维护阶段是软件生存期中时间最长的一个阶段,也是花费的精力和费用最多的一个阶段。由于操作系统软件和基础软件版本升级或应用管理系统软件的不断开发、完善,需要对软件进行维护。但当运行环境改变或者系统功能、性能需求发生变化,使原软件不能通过维护的手段满足用户需求时,则需要进行软件更新。 1.软件维护的类型: 软件的开发过程对软件的维护有较大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工这是一种结构化的维护。非结构化维护活动只能从阅读、理解和分析源程序开始,这样做难以弄清系统功能、软件结构、数据结构等问题,常常造成误解。同时由于没有测试文档,也不可能进行回归测试很难保证程序的正确性。这种软件维护

方法仅在软件工程时代之前采用。在进行结构化维护活动时,需从评价需求说明开始,弄清楚软件功能、性能上的改变;对设计说明文档进行评价,并进行修改和复查;根据设计的修改,进行程序的变动;根据测试文档中的测试用例进行回归测试;最后,把修改后的软件再次交付使用。这对于减少精力、减少花费和提高软件维护效率有很大的作用。 2.软件维护的困难: 软件维护的困难主要是由于软件需求分析和开发方法的缺陷造成的。软件生存周期中的开发阶段没有严格而科学的管理和规划,就会引起软件运行时的维护困难。这种困难表现在如下几个方面。 (1)读懂别人的程序是困难的。 (2)文档的不一致性。这种不一致性表现在各种文档之间的不一致以及文档与程序之的不一致。 (3)软件开发和软件维护在人员和时间上存在差异。 (4)软件维护不是一项吸引人的工作。 3. 软件维护的费用: 软件维护的费用在总费用中的比重是不断增加的,它在1970 年占35%~40%,1980 年上升到40%~60%,1990 年上升到70%~80%。软件维护费用不断上升,这只是软件维护有形的代价,另外还有无形的代价,即要占用更多的资源。由于大量软件的维护活动要使用较多的硬件、软件和软件人员等资源,这样一来,投入新的软件开发的资源就因不足而受到影响。由于维护时的改动,在软件中引入了潜在的故障,从而降低了软件的质量。 4.软件维护的分类

软件工程课 心得体会

心得体会 通过本学期的学习,独立完成了软件工程方法实践与案例的作业,同时也收获了学习方法和思维方式。由于我是从电气专业调剂到计算机专业,几乎没有基础,所以在刚开始进入学习时感觉非常的困难。但是,李老师每节课都循序渐进的引导教学,让我慢慢理解了软件工程的学习思维,并且坚持学习,逐渐找到了学习软件工程的方法。在整个的学习中,一点一点的学习:上网搜索、问同学和老师、找参考书、查文献,甚至下仓库管理的软件进行使用研究,用了很多方法,也终于对软件工程的整体设计有了深刻概念和理解。 老师给我们分组分配任务,同时又每个人有不同的具体任务,这样既锻炼了我们的合作沟通的能力,同时也强调了独立自主的思考。我们仓库管理小组进行过好几次集体讨论,大家互相讨论,共同学习,也曾出现过意见不统一,通过探讨,共同解决,我觉得这也是学习提升的过程。明确了自己的任务后,就努力去完成,按时完成自己的任务。 在完成作业的同时,学到了很多的数据库知识和软件使用方法。首先接触了visio软件,发现了它画图比较方便,之后老师介绍用rose软件后,发现其功能更加强大。由于rose软件是英文版,所以刚开始用的时候比较吃力,经过搜索使用教程和多次使用练习后,终于可以熟练使用了。 整个设计过程,包括调研设计、需求分析、概要设计、数据库设计、详细设计等。其中,我对UML图印象最为深刻,也是从这个地方开始,我对软件设计有了质的改变,体会和理解了软件设计应该树立的思维方式,对以后的学习和任务有有很大帮助,后期做作业时也没有那么困难了。 在这整个课程学习和完成作业过程中,收获知识,提高能力的同时,我也学到了很多人生习惯,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把这种习惯带到生活中,不畏,勇往直前! 最后感谢李老师对我们耐心的教育和指导,认真细心的给我们批改作业,给予我们这些没有基础的学生耐心指导,谢谢老师!

软件工程知识点汇总

软件工程知识点汇总 1 软件工程、软件工程方法学:三要素 1.1 软件工程:○1应用系统化的、规范化的、可度量的方法来开发、运行和维护软件,即将工 程应用到软件;○2对○1的各种方法的研究 1.2 软件工程是一门研究用工程化方法构建和维护有效的实用的和高质量的软件的学科 1.3 软件工程三要素是:方法、工具、过程 软件工程的方法:是指完成软件开发各项任务的技术方法 软件工具:是指为软件工程方法的运用提供自动半自动的软件支撑环境 软件工程过程:是指将软件工程方法和工具综合起来以达到合理、及时地进行计算机软件开发这一目的 2 软件工程的原则包括:模块化原则、信息隐蔽原则、抽象化原则、模块独立原则(内聚、耦合)、 依赖倒转原则、开闭原则等 2.1 模块化原则:指解决一个复杂问题时自顶向下逐层把软件系统划分为若干模块的过程。模 块是程序中相对独立的成分,一个独立的编程单位,应有良好的编程接口,模块的大小要 适中,模块过大会使模块内部的复杂性增加不利于模块的理解和修改,模块过小会导致整 个系统表示过于复杂,不利于控制系统的复杂性。 2.2 信息隐蔽原则:采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。 2.3 抽象化原则:抽取事物最基本的特性和行为,忽略非本质细节,采用分层次抽象,自顶向 下,逐层细化的办法控制软件开发过程的复杂性。 2.4 模块独立原则:是指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少 且接口简单。要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块间由松 散的偶合关系,模块内部有较强的内聚性,这有助于控制系统的复杂性。(即:高内聚低 耦合) 2.5 依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。 2.6 开闭原则:软件实体应该是可扩展的,但是不可以修改。即对于扩展是开放的,对于更改 是封闭的。 3 软件开发模型:瀑布模型;快速原型;喷泉模型;各种模型的工作原理、阶段、每阶段任务、 特点、示意图; 软件开发模型(也称为软件过程模型):是从软件项目需求定义开始直至软件经使用后废弃为止,跨 越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架 3.1 瀑布模型(又称线性模型): 3.1.1工作原理:规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。 前一阶段的工作成果是后一阶段工作开始的基础.所以,每个阶段都必须交出合格的文档,必须对前阶段的工作进行评审,前一阶段的工作完成后才可以开始后一阶段的工作 3.1.2 阶段: 计划时期:问题定义、可行性研究 开发时期:需求分析、设计、编码、测试 运行时期:运行和维护 3.1.3 各阶段任务: 1.需求分析和定义 在软件项目进行过程中,需求分析是从软件定义到软件开发的关键步骤,是今后软件,开发的基本依据,同时也是用户对软件产品进行验收的基本依据。需求分析和定义是以用

软件工程基础知识点总结

软件工程基础部分知识点总结 知识点一软件工程的基本概念 1、软件定义:是计算机系统中与硬件相互依存的另一部分,是包括程序、数据以及相关文档的完整集合。 1)程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。 2)数据是使程序能够正常操作信息的数据结构。 3)文档是与程序开发、维护和使用有关的图文资料。 国标(GB)计算机软件的定义:与计算机系统的操作相关的计算机程序、规程、规则以及可能有的文件、文档及数据。 2、软件特点: 1)软件是一种逻辑实体,而不是物理实体,具有抽象性,是计算机的无形部分; 2)软件的生产与硬件不同,它没有明显的制作过程; 3)软件在运行、使用期间不存在磨损、老化问题; 4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题; 5)软件复杂性高,成本昂贵; 6)软件开发涉及诸多的社会因素 3、软件的分类: 按照功能可以分为:应用软件、系统软件、支撑软件(或工具软件)

1)应用软件是为解决特定领域的应用而开发的软件。 2)系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。 3)支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具软件。 4、软件危机:是指在软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要体现在以下几个方面: ①软件开发的实际成本和进度估计不准确 ②开发出来的软件常常不能使用户满意 ③软件产品的质量不高,存在漏洞,需要经常打补丁 ④大量已有的软件难以维护 ⑤软件缺少有关的文档资料 ⑥开发和维护成本不断提高,直接威胁计算机应用的扩大 ⑦软件生产技术进步缓慢,跟不上硬件的发展和人们需求增长 5、软件工程:此概念的出现源自软件危机。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来开发与维护软件的学科。 1)研究软件工程的主要目的就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统(高质量是指错误率低、好用、易用、可移植、易维护等)。 2)软件工程的三个要素:方法、工具和过程。 ①方法:完成软件工程项目的技术手段;

软件实践课程学习的心得体会

三一文库(https://www.wendangku.net/doc/461865310.html,)/总结报告/学习体会软件实践课程学习的心得体会 经过潘老师讲授软件工程实践后,感觉对软件工程这门学科有了深一层的认识。软件工程是一门重视实际操作的科学。对于软件产品,无非是产品定义、设计代码、调试维护几个步骤,看似简单,可是实际操作却复杂困难,它不比其它行业产品可预见可触及,所以学好软件工程能为以后从事软件开发行业打好基础。 在软件实践这门课中,讲到了有效利用现有资源进行软件编程的方法。提到软件开发也可以像练习书法一样,采用临贴的方式,借鉴他人的优秀代码资源。临摹优秀软件是学习软件开发的一个重要方法。正如一首诗中说的:“熟读唐诗三百首,不会写来也会吟”。软件开发也是一个道理。为了真正地掌握软件开发的技巧,“临贴”是个不错的起步方法。 以前总是觉得,既然编写一个程序,就应该完全靠自己,那样写出来才有成就感,才算是自己的程序,可是这门课程教会我原来适当地借鉴别人的东西,也不算抄,相反,还可以提高效率,节省时间。这可真是与以往的观点不一样了。具体如下: “软件编程,拿来主义的作用很大: 1、源代码交换方便。

2、可行的例程序用处大。 3、借鉴现成少走弯路。” 不过借鉴别人的东西可是有说法的,可不是盲目地抄袭,下 面是一些提到的途径: 1、既有系统:借鸡下蛋,买来就用; 2、书本例子:简单修改、直接使用; 3、联机或联网帮助:帮助文档、官方支持; 4、开放软件源代码:linuxapacheeclipse… 5、互联网资源:论坛、搜索引擎、新闻组 借鉴过来后,还要多方面综合考虑,比如说代码的具体作用,完整性,还要考虑每个借鉴过来的东西的好坏。这些都要多方面考虑,可不能因为前面说软件编程可以借鉴别人的,就盲目地抄袭。到时候代码弄一堆凑在一块儿,谁也不知道它们会不会好好工作。弄不好乱了程序计划是小,公司的损失可不是哪个人都能承受得起的。 课程还提到,应该用一个小项目先从头到尾地练完,这样,有个整体性的了解,可以增加不少开发经验。看来,不学习此门课程,还不能深入地解读软件工程的奥义。这门课程为我们深入地了解软件工程这个庞大的前沿学科起到了推动性的作用。以上是我就此门课中提到的众多方法的一小段做的一些浅谈,更多的知识还在于我们自己去学习体会。

软件工程期末复习知识点整理

复习整理 、绪论 1. 软件的定义 软件是能够完成预定功能和性能的可执行的计算机程序,包括使程序正常执行所需要的数据,以及有关描述程序操作和使用的文档。(软件=程序+文档) 2.软件工程的定义 是指导计算机软件开发和维护的一门工程学科;采用工程化的原理与方法对软件进行计划、开发和维护;把证明正 确的管理技术和最好技术综合运用到软件开发中;研究经济地开发岀高质量的软件方法和技术;研究有效维护软件 的方法和技术。 3.软件危机的概念,及出现的原因 软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。 产生原因: ⑴软件规模越来越大,结构越来越复杂 ⑵软件开发管理困难而复杂。 ⑶软件开发费用不断增加。 ⑷软件开发技术落后。 ⑸生产方式落后,仍采用手工方式。 ⑹开发工具落后,生产率提高缓慢。 4.三种编程范型的特点 (1)过程式编程范型:把程序理解为一组被动的数据和一组能动的过程所构成;程序=数据结构 +算法;着眼于程序的过程和基本控制结构,粒度最小 (2)面向对象编程范型:数据及其操作被封装在对象中;程序=对象+消息;着眼于程序中的对 象,粒度比较大 (3)基于构件技术的编程范型:构件是通用的、可复用的对象类;程序=构件+架构;眼于适合 整个领域的类对象,粒度最大 二、软件生存周期与软件过程 1、软件生存周期的定义,把生存周期划分为若干阶段的目的是什么,有哪几个主要活动 定义:一个软件从开始立项起,到废弃不用止,统称为软件的生存周期 目的:软件生存周期划分为计划、开发和运行3个时期;把整个生存周期划分为较小的阶段, 给每个阶段赋予确定而有限的任务,就能够化简每一步的工作内容,使因为软件规模而增长而大大增加了软件复杂性变得较易控制和管理。 主要活动:需求分析、软件分析、软件设计、编码、软件测试、运行维护( P19) 2、软件生命周期划分为哪几个阶段 软件生命周期分为三个时期八个阶段: 软件定义:问题定义、可行性研究; 软件开发:需求分析、概要设计、详细设计、编码、测试; 软件运行:软件维护

软件工程-期末总结

软件工程期末总结 课程:xxxxx 姓名:xxxxx 学号:xxxxxx 班级:xxxxxx

目录 1.软件工程学概述 (1) 1.1软件危机 (1) 1.2软件工程 (1) 1.3软件生命周期 (2) 1.4软件过程 (2) 2.可行性研究: (2) 2.1可行性研究的任务 (2) 2.2可行性研究的过程 (3) 2.3数据流图 (3) 3.需求分析 (3) 4.形式化说明技术 (4) 5.模块设计 (4) 1.耦合: (4) 2.内聚 (4) 6.详细设计 (5) 6.1结构程序设计 (5) 6.2人机界面设计 (5) 7.软件测试 (5) 7.1软件测试的目标 (5) 7.2软件侧试准则 (6) 7.3测试方法 (6) 8.软件可靠性 (7) 8.1软件质量 (7)

1.软件工程学概述 1.1软件危机 1.1.1 软件危机的介绍:是指在计算机软件的开发和维护过程中所遇到的一系列严重 问题。具体地说,软件危机主要有以下一些典型表现:1.对软件开发成本和进 度的估计常常很不准确。2.用户对“已完成的”软件系统不满意的现象经常发 生。3.软件产品的质量往往靠不住。4.软件常常是不可维护的。5.软件通常没 有适当的文档资料。6.软件成本在计算机系统总成本中所占的比例逐年上升。 7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 1.1.2产生软件危机的原因:在软件开发和维护的过程中存在这么多严重问题,一方面 与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软 件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。 1.1.3消除软件危机的途径:1、认识到软件是程序、数据及相关文档的完整集合。 2. 认识到软件是一种组织良好、管理严密、各类人员协同配合、共同完成的工程 项目;3、推广使用在实践中总结出来的开发软件的成功的技术和方法,探索 更好更有效的技术和方法;4、开发和使用更好的软件工具。。总之,为了解决 软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软 件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一 门新兴学科。 1.2软件工程 1.2.1软件工程的介绍:软件工程是指导计算机软件开发和维护的一门工程学科。定 义:采用工程的概念、原理和方法来开发与维护软件,把经过时间考验而证明 正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出 高质量的软件并有效地维护它。 1.2.2软件工程的基本原理:1、用分阶段的生命周期计划严格管理2、坚持进行阶段 评审3、实行严格的产品控制4、采用现代程序设计技术5、结果应能清楚地审 查6、开发小组的人员应该少而精7、承认不断改进软件工程实践的必要性 1.2.3 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集 合称为方法学,也称为范型。软件工程方法学包含3个要素方法、工具和过程。 目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学

软件工程复习考点小结

《软件工程》考点小结 1、软件工程的定义及软件工程的研究内容? 软件工程研究的内容包括软件开发方法、软件开发模型、软件支持过程和软件管理过程。 软件工程是研究软件开发和软件管理的一门工程学科。2、软件工程五个面向实施理论? “五个面向理论”是指“面向流程分析、面向数据设计、面向对象实现、面向功能测试、面向过程管理”,它是在综合“四种开发方法”各自的优点之后提出的软件工程实施理论,是对前者的继承与发展。 3、什么是“软件生命周期模型”,常用的软件生命周期模型有哪些?软件生命周期由哪5个阶段构成? 软件生命周期模型是指在整个软件生命周期中,软件开发过程应遵循的开发路线图。或者说,软件生命周期模型是软件开发全部过程、活动和任务的结构框架。 瀑布模型、增量模型、迭代模型、原型模型、XP等模型分析、设计、编码、测试、维护 4、简述瀑布模型与迭代模型之间的关系? 在宏观上,迭代模型是动态模型,瀑布模型是静态模型。在微观上,迭代模型与瀑布模型都是动态模型。在迭代和瀑布模型中,你中有我、我中有你。 瀑布模型与迭代模型之间的关系,反映了人们对客观事物的认识论:要认识与掌握某一客观事物,必须经历由宏观到微观的多次反复的过程。只有从宏观上反复迭代几次,才能看清全貌,掌握事物的宏观发展规律。只有从微观上反复迭代几次,才能吃透每个细节,掌握事物的微观发展规律。 5、何谓软件的“功能模型”? 功能模型是描述系统能做什么,即对系统的功能、性能、接口和界面进行定义。 6、“容错技术”的定义? 容错就是当由于种种原因在系统中出现了数据、文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行的一种技术。 7、何谓软件的“快速原型法”? 快速原型法就是在系统开发之初,尽快给用户构造一个新系统的模型(原型),反复演示原型并征求用户意见,开发人员根据用户意见不断修改完善原型,直到基本满足用户的要求再进而实现系统,这种软件开发方法就是快速原型法。 8、.业界存在哪三种需求分析方法?你认为哪一种方案更好? 业界存在三种需求分析方法:面向功能分析、面向对象分析、面向数据分析。 以上这三种方法,各自适用于不同的目标系统。目前时尚的方法是面向对象,包括面向主体和面向方法。总的来说,对于系统软件和应用软件来说,面向功能需求分析的方法简单明了,而面向对象的需求分析方法则复杂抽象。对于以关系数据库为平台的信息系统软件来说,面向数据需求分析方法的特点是抓住了本质。但是,这三种分析方法都离不开面向流程分析这根总线:功能、对象、数据都是在流程中产生的,又都是为流程服务的。 9、需求分析的目的是什么,输入及输出是?需求分析的难点在哪里? 软件需求分析,其目的是用于说明软件产品或软件项目需要满足的条件和限制。在软件工程项目中首先要获取用户的需求,通过对软件需要的提取、分析、文档化及验证,为进一步的设计和实现提供依据。 输入是软件《合同》或软件《立项建议书》,以及对用户现场的调研、分析和确认,输出是《用户需求报告》/《需求分析规格说明书》 需求分析的难点是:在系统的功能、性能和接口方面,开发者与客户达成完全一致的需求,让客户最终签字确认,并保证在项目验收前,需求相对稳定不变。万一需求有一点变化,双方必须履行“需求变更管理程序”,而变更管理程序在签订合同时已经做了规定。要知道,合同是具有法律效力的。 10、试说出黑盒测试和白盒测试的区别和联系。? 黑盒测试又称功能测试。在这里,盒子指的是被测试的软件,“黑盒”就是只知道被测试软件的外部情况,主要是界面和接口,被测试软件的内部逻辑结构和数据结构,对测试人员来说是不可见的,主要关注被测试软件的功能实现。 白盒测试就是对程序执行路径的测试,又叫做玻璃盒测试(Glass Box Testing)、透明盒测试(Clear B ox Testing)、结构化测试(Structured Testing)、开放盒测试(Open B ox Testing)、基于代码的测试(C ode-Based Testing)等。 黑盒测试和白盒测试的联系是:一般宏观上用黑盒测试,微观上用白盒测试,系统集成人员用黑盒测试方法对系统进行测试,构件开发人员用白盒测试方法对构件进行测试,这是常用的测试方法。 11、为什么说需求分析是面向流程的? 系统的功能、性能、接口、界面都是在流程中动态实时的反映出来。在所有的流程(物流、人流、资金流、信息流、单据流、报表流、数据流)中,数据流最重要,也最具有代表性。因为在计算机网络系统内,一切流程都表现为数据流,或者说是数据流在不同方向的投影。而流程是动态的、实时的。所以说,需求分析是面向流程的。 12、简述实用软件测试的流程?

软件工程知识点总结

软件工程知识点总结 软件工程专业是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。接下来是为大家收集的软件工程知识点总结,以供大家学习! 知识点一软件工程的基本概念 1、软件定义:是计算机系统中与硬件相互依存的另一部分,是包括程序、数据以及相关文档的完整集合。 1)程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。 2)数据是使程序能够正常操作信息的数据结构。 3)文档是与程序开发、维护和使用有关的图文资料。 国标(GB)计算机软件的定义:与计算机系统的操作相关的计算机程序、规程、规则以及可能有的文件、文档及数据。 2、软件特点: 1)软件是一种逻辑实体,而不是物理实体,具有抽象性,是计算机的无形部分; 2)软件的生产与硬件不同,它没有明显的制作过程; 3)软件在运行、使用期间不存在磨损、老化问题; 4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题; 5)软件复杂性高,成本昂贵; 6)软件开发涉及诸多的社会因素

3、软件的分类: 按照功能可以分为:应用软件、系统软件、支撑软件(或工具软件) 1)应用软件是为解决特定领域的应用而开发的软件。 2)系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。 3)支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具软件。 4、软件危机:是指在软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要体现在以下几个方面: ①软件开发的实际成本和进度估计不准确 ②开发出来的软件常常不能使用户满意 ③软件产品的质量不高,存在漏洞,需要经常打补丁 ④大量已有的软件难以维护 ⑤软件缺少有关的文档资料 ⑥开发和维护成本不断提高,直接威胁计算机应用的扩大 ⑦软件生产技术进步缓慢,跟不上硬件的发展和人们需求增长 5、软件工程:此概念的出现源自软件危机。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来开发与维护软件的学科。

相关文档
相关文档 最新文档