软件工程Word格式.docx
《软件工程Word格式.docx》由会员分享,可在线阅读,更多相关《软件工程Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
![软件工程Word格式.docx](https://file1.bdocx.com/fileroot1/2023-2/1/38317d36-84ed-4201-8ff2-035a401f81b2/38317d36-84ed-4201-8ff2-035a401f81b21.gif)
可行性研究的任务
1.可行性研究的五个方案:
技术可行性,经济可行性,操作可行性,法律可行性,社会效益
2.可行性研究过程:
1.复查系统规模与目标、2.研究目前的系统、3.导出新系统的高层逻辑模型、4.进一步定义问题、5.导出和评价供选择的解法、6.推荐行动方针、7.草拟开发计划、8.书写文档提交审查
3.系统流程图:
用来描述物理系统的工具。
4.系统流程图表达:
是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。
即:
系统流程图≠程序流程图。
5.系统流程图的基本思想:
用图形符号以黑盒子形式描绘组成系统的每个部件
6.系统流程图元素:
处理,输入输出,连接,换页连接,数据流。
7.数据流图:
用来描述逻辑系统的工具。
数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换,即数据流图描绘数据在软件中流动和被处理的逻辑过程。
8.数据流图四种基本符号:
数据加工/处理/变换,数据源点或终点(外部实体),数据存储,数据流。
9.数据字典的组成:
数据流,数据流分量(数据元素),数据存储,处理。
10.数据元素:
顺序,选择,重复,可选。
第三章:
需求分析
1.需求分析:
软件定义时期的最后一个阶段,
2.需求分析的基本任务:
不是确定系统怎样完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
3.软件需求的组成:
业务需求,用户需求,系统需求。
4.需求分析方法:
面向数据流的结构化分析方法(SA),面向对象的分析方法(OOA)等
5.逻辑模型:
数据流图(DFD),数据字典(DD),实体-关系图(ERD),状态转换图(STD)
6.物理模型:
系统流程图,
7.需求分析的基本思想:
“自顶向下,逐步求精”,抽象和分解
8.需求分析;
功能模型—数据流图,数据模型—实体-关系图,行为模型—状态转换图
9.实体-关系图(ERD):
描述数据对象及数据对象之间的关系
10.数据流图(DFD):
描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能(子功能)
11.状态转换图(STD):
描述系统对外部事件如何响应,如何动作
模型的核心是数据字典
12.实体-联系图(ER)组成:
:
数据对象(实体)、数据对象的属性及数据对象彼此间相互连接的关系。
联系:
一对一联系,一对多联系,多对多联系。
通常用矩形框代表实体;
用连接相关实体的菱形框表示关系;
用椭圆形或圆角矩形表示实体(或关系)的属性;
并用直线把实体(或关系)与其属性连接起来。
13.数据规范化目的是:
1.消除数据冗余,即消除表格中数据的重复;
2.消除多义性,使关系中的属性含义清楚、单一;
3.使关系的“概念”单一化,让每个数据项只是一个简单的数或字符串,而不是一个组项或重复组;
4.方便操作。
使数据的插入、删除与修改操作可行并方便;
5.使关系模式更灵活,易于实现接近自然语言的查询方式。
14.状态转换图(简称为状态图):
通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。
此外,状态图还指明了作为特定事件的结果,系统将做哪些动作(例如,处理数据)。
15.状态:
初态:
一个,终态:
0或多个,中间状态
16.验证软件需求:
一致性,完整性,现实性,有效性。
第五章:
总体设计
1.总体设计(概要设计):
将软件需求转化为数据结构和软件的系统结构
2.数据库设计包括三个步骤:
模式设计,子模式设计,存储模式设计。
3.软件设计原理:
模块化,抽象,逐步求精,信息隐藏与信息局部化,模块独立
4.模块:
是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。
C、C++和Java语言中的{...}对过程、函数、子程序和宏等面向对象方法学中的对象是模块,对象内的方法也是模块
模块化是好的软件设计的一个基本准则
5.模块独立的含义:
模块完成独立的功能,符合信息隐藏和信息局部化原则,模块间关连和依赖程度尽量小。
6.独立性的度量:
耦合、内聚。
7.耦合是对一个软件结构内不同模块之间互连程度的度量。
8.耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点以及通过接口的数据
9.模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
耦合性越高,模块独立性越弱
10.耦合强度依赖的因素:
一模块对另一模块的引用
一模块向另一模块传递的数据量
一模块施加到另一模块的控制的数量
模块间接口的复杂程度
11.耦合性由强到弱排列为:
内容耦合,公共耦合,特征耦合,控制耦合,数据耦合。
12.原则:
尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。
13.内聚(Cohesion):
标志一个模块内各元素彼此结合的紧密程度。
14.内聚有七种,由弱到强分别为:
偶然内聚-逻辑内聚-时间内聚-过程内聚-通信内聚-顺序内聚-功能内聚。
15.深度=分层的层数。
过大表示分工过细。
16.宽度=同一层上模块数的最大值。
过大表示系统复杂度大。
17.扇出=一个模块直接调用/控制的模块数。
18.扇入=直接调用该模块的模块数。
19控制域:
这个模块本身以及所有直接或间接从属于它的模块的集合。
20.作用域:
受该模块中的一个判定所影响的所有模块的集合。
面向数据流的设计方法:
变换流,事务流。
第六章:
详细设计
1.详细设计:
描述系统的每个程序,包括每个模块和子程序名称、标识符、层次结构系
2.对程序的功能、性能、输入、输出、算法、流程、接口等进行描述
3.程序控制结构:
顺序、选择,循环,(多分支,DOWhile,DOUntil)五种基本控制结构。
4.程序流程图又称为程序框图:
是对一个模块的内部执行过程用图形来描述。
5.盒图:
只能从上边进入,从下边走出,没有其他的入口和出口,
6.盒图的基本符号:
顺序,选择型(If-then-else),多分支选择型(CASE型),DO-WHILE循环(先测试循环),DO-UNTIL循环(后测试循环).调用子程序.
7.PAD图:
PAD图中竖线的总条数就是程序中的层次数
8.PAD图基本符号:
顺序,选择,循环,Case分支,语句标号,定义.
9.判定表:
左上部列出所有的条件,左下部是所有可能的操作,右上部是各种条件的组合矩阵,右下部是每种条件组合对应的动作
第七章:
软件实现
1.实现:
编码和测试
2编码:
把软件设计结果翻译成用某种程序设计语言书写的程序
3.程序设计语言:
机器语言,汇编语言,高级语言
4.程序内部的文档包括:
恰当的标识符,适当的注释,程序的视觉组织。
5.符号名即标识符;
包括模块名、变量名、常量名、标号名、子程序名、数据区名以及缓冲区名等。
6.程序的注释:
程序员与日后的程序读者之间通信的重要手段
7.注释分为序言性注释和功能性注释.
8.软件测试是保证软件质量的关键步骤,是对软件规格说明、设计和编码的最后复审,
其工件量约占总工作量40%以上(对于人命关天的情况,测试相当于其它部分总成本的3-5倍)。
8.软件测试方法:
静态测试方法,,动态测试方法
9.静态测试方法:
人工测试方法,计算机辅助静态分析方法
10.动态测试方法:
白盒测试方法,黑盒测试方法.
11.黑盒测试法又称功能测试:
把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程
12.白盒测试法又称为结构测试:
把程序看成装在一个透明的白盒子,测试者完全知道程序的结构和处理算法
13.软件测试步骤:
1.模块测试又称(单元测试),2.子系统测试,3.系统测试称为集成测试,4.验收测试也称为确认测试,5.平行运行
14.单元测试主要使用白盒测试技术。
15.单元测试重点:
模块接口,局部数据结构,重要的执行通路,出错处理通路,边界条件。
16.集成测试方法:
非渐增式测试方法,渐增式测试方法
17.渐增式测试策略:
可使用深度优先的策略,或宽度优先的策略
18.回归测试:
是指重新执行已经做过的测试的某个子集,以保证修改变化没有带来非预期的副作用。
19.白盒测试技术:
逻辑覆盖
20.逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。
21.逻辑覆盖:
语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,
21.路径覆盖,点覆盖=语句覆盖,边覆盖=判定覆盖,路径覆盖与条件组合覆盖。
22.语句覆盖:
每条语句至少执行一次
23.判定覆盖:
每一判定的每个分支至少执行一次
24.条件覆盖:
每一判定中的每个条件,分别按“真”、“假”至少各执行一次
25.判定-条件覆盖:
同时满足判定覆盖和条件覆盖的要求
26.条件组合覆盖:
求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次。
27.路径覆盖:
每条可能的路径都至少执行一次,若图中有环,则每个环至少经过一次
28.黑盒测试着重测试软件功能。
29.黑盒测试技术:
等价类划分,边界值分析法,错误推测法
30.等价类:
有效等价类和无效等价类
31.边界值分析法,应该选取刚好等于、稍小于和稍大于等价类边界值的数据作为测试数据
32.调试途径—调试策略:
蛮干法,回溯法,原因排除法--
33.原因排除法-包括:
对分查找法、归纳法、演绎法
34.软件可靠性:
可靠性,可用性,正确性
35.可靠性和可用性的区别是:
可靠性是在0到t时间间隔内,系统没有失效的概率。
而可用性是在t时刻,系统正常运行的概率。
第九章:
软件维护
1.软件维护的定义:
在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
2.软件维护的原因:
在运行中发现软件错误和设计缺陷,这些错误和缺陷在测试阶段未
能发现。
3.软件维护的类型:
改正性维护,适应性维护,完善性维护,预防性维护
4.软件维护的内容:
程序维护,数据维护,硬件维护
5.软件维护的特点:
结构化维护与非结构化,维护的代价分(有形代价和无形代价),维护的问题。
6.软件维护过程:
建立维护组织,维护报告,维护的事件流,保存维护记录,评价维护活动,
7.软件的可维护性:
1.决定软件可维护性的因素(可理解性,可测试性,可修改性,可移植性,可重用性)2.文档——影响可维护性的决定因素,比代码更重要。
3.复审
2、某银行计算机储蓄系统的工作流程大致如下:
储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人的姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存款单给储户;
如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
请用数据流图描绘本系统的功能。
并画出系统的E-R图。
DFD图:
ER图:
3、试用N-S图和PAD表示下面程序流程图,并计算它们的McCabe复杂性度量.(基本路径测试法的环复杂度)。
(10%)
*篇二:
软件工程主要内容
第一章软件工程学概述
1.软件危机
(1)软件危机的介绍
1)软件危机:
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2)软件危机的两个主要问题:
如何开发软件,以满足对软件日益增长的需求;
如何维护数量不断膨胀的已有软件。
3)软件危机的典型表现:
(1)对软件开发成本和进度的估计常常很不准确。
(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋
势。
(2)产生软件危机的原因
软件本身特点:
1)缺乏可见性,在运行之前往往难以衡量,质量也难以评价
2)不会因为长期使用而用坏,软件维护通常意味着修正或修改原来的设计,较
难维护。
3)规模庞大,需分工合作,如何保证每个人的工作合在一起是极端复杂的问题。
软件开发与维护的方法不正确
产生软件危机的原因可归结为两个重要的方面:
软件生产本身存在的复杂性;
软件开发所使用的方法和技术。
软件生命周期:
一个软件从定义、开发、使用和维护直到最早被废弃。
软件产品必须由一个完整的配置组成(程序、文档、数据)
(3)消除软件危机的途径
1)正确认识计算机软件
2)认识到软件开发是一个协同配合、共同完成的工程项目并吸取经验。
3)推广使用已总结的开发软件成功的技术和方法
4)开发使用更好的软件工具
2.软件工程
(1)软件工程的介绍
软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原
理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和
当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的
软件并有效地维护它,这就是软件工程。
本质特性:
1)软件工程关注于大型程序的构造
2)软件工程的中心课题是控制复杂性
3)软件经常变化
4)开发软件的效率非常重要
5)和谐地合作是开发软件的关键
6)软件必须有效地支持它的用户
7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的
人创造产品。
(2)软件工程的基本原理
1)用分阶段的生命周期计划严格管理
2)坚持进行阶段评审
3)实行严格的产品控制
4)采用现代程序设计技术
5)结果应能清楚地审查
6)开发小组的人员应该少而精
7)承认不断改进软件工程实践的必要性
(3)软件工程方法学
在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。
软件工程方法学,三要素:
方法、工具和过程。
1)传统方法学
2)面向对象方法学
3.软件生命周期:
定义、开发、维护
(1)问题定义
(2)可行性研究
(3)需求分析
(4)总体设计
(5)详细设计
(6)编码和单元测试
(7)综合测试
(8)软件维护
4.软件过程:
为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任
务的工作步骤。
通常使用生命周期模型简洁的描述软件过程。
(1)瀑布模型
1)各个阶段的顺序性和依赖性;
2)划分逻辑设计与物理设计,尽可能推迟程序的物理实现;
3)每个阶段必须完成规定的文档,对其中问题通过复审及早发现,及早解决。
(2)快速还原模型
(3)增量模型
(1)从部分需求出发,先建立一个不完全的系统,通过测试运行该系统取
得经验和信息反馈,加深对软件需求的理解,进一步使系统扩充和完善。
如此反复,直至软件人员和用户对所设计完成的软件系统满意为止。
(2)在渐增型开发下的软件是随软件开发的过程而逐渐形成的。
(3)渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完善系统。
多数研究性质的试验软件,一般采用此方法。
(4)螺旋模型
(5)
(6)
(7)
(8)喷泉模型Rational统一过程敏捷过程与极限编程微软过程
第二章可行性研究
可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
问题定义的任务:
将用户提出的要求具体化、定量化;
确定研制系统的范围,明确研制的边界。
问题定义阶段的工作:
1)通过调查研究,了解系统需求;
2)确定系统的功能需求、性能需求、可靠性需求、安全及保密性、资源、开发费用及开发进度等的需求;
3)问题定义阶段的产品--系统目标与范围说明书。
1.可行性研究的任务
(1)技术可行性
(2)经济可行性
(3)操作可行性
2.可行性研究的过程
(1)复查系统规模和目标
(2)研究目前正在使用的系统
(3)导出新系统的高层逻辑模型
(4)进一步定义问题
(5)导出和评价供选择的解法
(6)推荐行动方针
(7)草拟开发计划
(8)书写文档提交审查
3.系统流程图
系统流程图是描述物理系统的传统工具。
它的基本思想是用图形符号以黑盒子形式描绘系统里的每个部件(程序、文件、数据库、表格、人工过程等)。
系统流程图表达的是部件的信息流程,而不表示对信息进行加工处理的控制过程。
4.数据流图
DFD是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
与程序流程图不同,DFD不表示程序的控制结构,只描述数据的流动
DFD分成多层(子图、父图概念)表示,从而逐步展开数据流和功能的细节。
绘制数据流图步骤
(1)确定所开发的系统的外部项(外部实体),即系统的数据来源和去处。
(2)确定整个系统的输出数据流和输入数据流,把系统作为一个加工环节,画出关联图。
(3)确定系统的主要信息处理功能,按此将整个系统分解成几个加工环节(子系统)确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。
(4)根据自顶向下,逐层分解的原则,对上层图中全部或部分加工环节进行分解。
(5)重复步骤(4),直到逐层分解结束。
(6)对图进行检查和合理布局,主要检查分解是否恰当、彻底,DFD中各层是否有
遗漏、重复、冲突之处,各层DFD及同层DFD之间关系是否争取及命名、编号
是否确切、合理等,对错误与不当之处进行修改。
(7)和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见。
注意事项:
(1)不要把控制流作为数据流
(2)不要标出激发条件
(3)数据流必须要么从某个加工流出、要么流入某个加工,而不能直接从外部项流
向数据存储等等。
5.数据字典(对数据的定义)
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
(1)数据字典的内容
数据流、数据流分量(数据元素)、数据存储、处理
数据字典要对数据流图中出现的所有名字(数据流,加工,文件)进行定义。
数据字典的条目由三大类组成,分别是:
数据流条目、数据项条目、文件条目、加工条目(小说明)。
(2)定义数据的方法
+:
和,连接两个分量
=:
等价于
[]:
或,用|隔开分量
{}:
重复花括号内的分量0{字母或数字}7表示8位字符串
():
可选,即可有可无
(3)数据字典的用途
(4)数据字典的实现
6.成本/效益分析
(1)成本估计
1)代码行技术
2)任务分解技术
3)自动估计成本技术
(2)成本/效益分析方法
1)货币时间价值
F=P(1+i)n次方
2)投资回收期
3)纯收入
4)投资回收率
*篇三:
浅谈软件工程及其学习
课程论文
题目学院专业班级姓名指导教师
浅谈软件工程及其学习计算机科学与技术
软件工程软件zy1102
饶文碧
2012年07月04日
浅谈软件工程及其学习
摘要:
软件工程是计算机学科中一个年轻并且充满活力的研究领域。
60年代末期以来人们为克服软件危机在这一领域做了大量工作,逐渐形成了系统的软件开发理论、技术和方法,它们在软件开发实践中发挥了重要作用。
今天,现代科学技术将人类带入了信息社会,计算机软件扮演着十分重要的角色,软件工程已成为信息社会高技术竞争的关键领域之一,而软件工程已成为高等学校计算机教育计划中的一门核心课程。
关键词:
软件工程专业内涵课程体系专业学习发展前景与挑战一、软件工程
软件工程(SoftwareEngineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
本专业培养以计算机应用软件开发为基本技能,具有较扎实的专业基础理论和较强的实践动手能力,受到程序员的系统训练,熟悉岗位要求,掌握岗位技能,懂理论、会操作的,适应社会信息化需求,适应市场经济的德、智、体、美全面发展的计算机软件开发与维护方面的高级专业技术人才。
软件在当今的信息社会中占有重要的地位,软件产业是信息社会的支柱产业之一。
随着软件应用日益广泛、软件规模日益扩大,人们开发、使用、维护软件不得不采用工程的方法,以求经济有效地解决软件问题。
借助于计算机科学技术、数学、管理科学与工程诸多学科,今天的软件工程己由最