前言:软件工程老师大面积撒网.
软件工程是整个软件开发的基石,是保障用户机器免于恶意代码损害的屏障。 程序员不需要了解软件工程是如何被用在工作上的,但是,了解 <软件工程> 有助于我们更好的开(通)发(过)软件(考试)。
把下面的这些干乔乔记下.
数据流头
分值分布:
选择 20分
判断 10分
简答 30分
综合应用 40分 感觉这个综合应用有点吃不消..
目录
第一章
一.软件危机
1.软件危机主要有一下一些典型表现: (可能考:选择或者简答)
(1)对软件开发成本和进度的估计常常不准确
(2)用户对'已完成的'软件系统不满意的现象经常发生'
(3)软件产品的质量往往靠不住
(4)软件常常不可维护
(5)软件通常没有合适的文档资料.
(6)软件成本在计算机系统总成本中占比逐年上升
(7)软件开发生产率速度,跟不上计算机应用的普及.
2.消除软件危机的途径 可能和软件危机的表现,一起考,简答,填空
(1)为了解决软件危机,既要有技术措施(方法和工具),也要有必要的组织管理措施
3,软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价 (填空吧)
4.软件工程是指导计算机软件开发和维护的一门工程学科 (填空)
5.软件工程的本质特性: (感觉考简答几率不大,在网上做试卷主要这块 以选择题,判断形式考察辨析.)
(1)软件工程关注于大型程序的构造
(2)软进工程的中心课题是控制复杂性
(3)软件经常变化
(4) 开发软件的效率非常重要
(5)和谐的合作是开发软件的关键
(6)软件必须有效的支持它的用户
(7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品.
6.软件工程的基本原理: (简答, 感觉概率挺大)
(1)用分阶段的生命周期计划严格管理
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)结果应能清楚的审查
(6)开发小组人员应少而精
(7)承认不断改进软件工程实践的必要性
7.通常把在软件生命周期全过程中使用的一整套技术方法的集合成为方法学也叫做泛型 (填空,选择)
8.软件工程方法学包含3个要素:方法,工具,过程 (填空,选择)
9.软件生命周期有由软件定义,软件开发,运行维护3个时期组成. (填空,选择)
10.软件生命周期: (简答)
(1)问题定义
(2)可行性研究
(3)需求分析
(4)总体设计
(5)详细设计
(6)编码和单元测试
(7)综合测试
11.模型 (简答,对比模型之间的区别,填空判断)
(1)瀑布模型:
<1>必需等前一阶段的工作完成后,才能开始下一阶段的工作 (ps:这个模型它是一种递进关系的)
<2> 前一阶段的输出文档就是后一阶段的输入文档
优点:可强迫开发人员采用规范的方法,严格的规定每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细检验。
缺点: 不灵活
(2)快速原型模型
<1>快速建立一个能反映用户主要需求的原型系统,让用户试用,然后提出修改意见,再根据修改意见进行修改。
优点:短时间内可以向用户提交已完成功能的产品。
(3)喷泉模型
喷泉模型是一个面向对象的模型。 (判断,填空)
第二章
1.一般来说,至少应从以下4个方面来研究每种解法的可行性。 (填空选择)
(1)技术可行性 使用现有的技术能实现这个系统吗?(能做出来吗?)
(2)经济可行性 这个系统的经济效益如何?(赚钱不?)
(3)操作可行性 系统的操作方式是否便于用户使用(用户使用简单吗?)
(4)管理可行性
2.可行性研究过程 (感觉不考,who knows)
(1)复查系统规模和目标
(2)研究目前正在使用的系统
(3)导出新系统的高层逻辑模型
(4)进一步定义问题
(5)导出和评价供选择的解法
(6)推荐行动方针
(7)草拟开发计划
(8)书写文档提交审查
3.数据流图(DFD) (必考画图题,应用题) P41,P44
下图是一个飞机机票预订系统的数据流图,它反映的功能是:旅行社把预订机票的旅客信息 (姓名、年龄、单位、身份证号码、旅行时间、目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应交的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。
4.数据字典 (必考,应用题)
每张卡片上主要应该包含下述信息:
名字,别名,描述,定义,位置
数据描述规则参照P48
例题:
描述XX学院电话数据字典
·XX学院的电话可以拨打内部电话和外部电话,内部电话直接拨打首位不为9的6位号码,外部电话需先拨9,然后拨打7位的本地号码,(首部不为0)或本地手机电话(11位,首位为1)
定义:·XX学院的电话可以拨打的号码=内部电话+外部电话
内部电话=1{0..8}1+5{0..9}5 注:电话由6位数字组成
外部电话=“[9+1000000..9999999,1+0000000000..9999999999]” 注:外部电话由市话和手机组成
第三章 需求分析
1.确定对系统的综合要求。 (简答)
(1)功能需求
(2)性能需求
(3)可靠性和可用性需求
(4)出错处理需求
(5)接口需求
(6)约束
(7)逆向需求
(8)将来可能提出的要求
2.结构化分析方法就是面向数据流,自顶向下逐步求精进行需求分析的方法。 (填空)
3.软件需求规格说明
通过需求分析出了建立分析模型之外,还要写出软件需求规格说明书,
4.状态转换图 (选择 参照P67 图3.4)
5.层次方框图: (判断)
层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。
每个矩形框中的都是名词
层次方框图的连线表示:组成关系
6.层次图:
每个矩形框中的都是动词
层次图中的一个矩形框代表一个模块
方框间的连线表示调用关系
7.从哪些方面验证软件需求的正确性: (选择可能性大,选择,简答吧)
(1)一致性 :每条需求不可以自相矛盾
(2)完整性 :需求应该完整且尽可能的详细
(3)现实性 :需求是要可以实现的,像这样的需求就是不现实:(厕所冲出一条鲨鱼、、、⊙﹏⊙b汗)
(4)有效性 :必须证明需求是正确有效的,确实能解决用户面对的问题的
8.验证需求的一致性 (判断)
当需求分析的结果是用自然语言书写,除了考人工技术审查验证软件系统规格说明书的正确性外,目前还没有其他更好的'测试'方法.
意思就是:用自然语言书写的需求分析,目前是靠 人工技术来审查检验的
第四章 形式化说明技术
1.应用形式化方法的准则: (简答)
(1)应该选用适当的表示方法
(2)应该形式化,但不要过分形式化
(3)应该估算成本
(4)应该有形式化方法顾问
(5)不应该放弃传统的开发方法 (ps:因为跟着大方向走,不会犯大错)
(6)应该建立详细的文档
(7)不应该放弃质量标准
(8)不应该盲目依赖形式化方法
2.有穷状态机 (判断选择填空)
利用有穷状态机可以准确的描述一个系统,因此它是表达规格说明的一种形式化方法.
一个有穷状态机包括下述5个部分:状态机J,输入集K,转换函数T,初始态S,终态集F
第五章 总体设计
1.设计过程 (填空 )
总体设计过程通常由两个主要阶段组成:
系统设计阶段:确定系统的具体实现方案
结构设计阶段:确定软件结构
2.总体设计过程包括以下9个步骤: (简答)
(1)设想供选择的方案
(2)选取合适的方案
(3)推荐最佳方案
(4)功能分解
(5)设计软件结构
(6)设计数据库
(7)制定测试计划
(8)书写文档
(9)审查和复审
(考 抽象与逐步求精的联系和区别 简答)
3.抽象:抽象就是抽出事物的本质特性而暂时不考虑它们的细节,仅仅概念性的描述功能,并不提供功能的内部工作情况.
4.逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑,求精实际上是细化的过程,求精要求设计者细化原始陈述,随着每个后需细化的完成而提供越来越多的细节.
联系:抽象和求精是一对互补的概念,抽象使得设计者能够说明过程和数据,同时忽略细节,求精则是帮助设计者在设计过程中逐步揭示出底层细节,
5.模块独立
模块的独立程度可以由两个定性标准度量: 内聚和耦合 (填空)
(1)耦合:度量不同模块之间的互连程度
面对耦合,应采取的设计原则:
尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,不要用内容耦合
(2)内聚:一个模块内部各个元素彼此结合的紧密程度.
设计原则:
设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度并且降低模块之间的耦合程度,从而获得较高的模块独立性.
6.启发规则: (简答,应用吧)
(1)改进软件结构提高模块独立性
(2)模块规模应该适中
(3)深度,宽度,扇出,扇入都应适当
(4)模块的作用域应该在控制域内
(5)力争减低模块接口的复杂度
(6)设计单入口单出口的模块
(7)模块功能应该可以预测
7.启发规则中的扇入,扇出特别强调下
(1)扇出:一个模块直接控制的模块数目.
扇出不宜过大也不易过小.经验证明:好的典型系统的平均扇出通常是 3或4
(2)扇入:表明有多少个上级模块直接调用它.
扇入越大则共享该模块的上级模块就越多,这是好处,但不能违背模块独立原理单纯追求高扇入.(判断)
观察大量的软件后发现:设计得很好的软件结构通常顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块中去(底层模块有高扇入)
8.层次图:和层次方框图在第三章记录了
第六章 详细设计
1.什么是结构程序设计呢? (简答 感觉几率好大)
如果一个程序的代码块仅仅通过顺序,循环,选择 3种基本控制结构进行连接,并且每个代码块都有一个入口和一个出口,则称这个程序是结构化的
2.人机界面设计 (填空,选择)
在设计人机界面的过程中,几乎总会遇到下面4个问题:系统响应时间,用户帮助设施,处做信息处理,命令交互
3.过程设计的工具 (填空选择)
描述程序处理的工具称为过程设计的工具,它们可以分为图形,表格,语言3类
4.PAD图:
它使用二维树结构的图来表示程序的控制流,将这种图翻译成代码比较容易.
PAD图是面向高级程序设计语言的
5.判定表:
使用场景:当算法中包含多重嵌套的条件选择时(复杂条件时)
6.判定树;
使用场景::当算法中包含多重嵌套的条件选择时(复杂条件时)
一看即可看出其含义.比判定表更直观,但不如判定表简洁,一个数字可能要重复好多遍.
7.JackSon图
面向数据结构
既能表示数据结构也可以表示程序结构
8.程序复杂程度的定量度量. (综合体 考试会给你 伪代码或者程序流程图或者其他图,然后让你转化为流图,再数数就行了)
数封闭的圈然后+1 结果就是复杂度.
例子:
有4个封闭的 然后加1 复杂度为:5
第七章 实现
1.通常把编码和测试统称为实现 (填空)
2.软件测试在软件生命周期中横跨两个阶段. (填空判断)
3.软件测试的工作量往往占软件开发总工作量的40%以上 (判断)
4.软件测试的目的:找错 (判断,选择)
5.测试任何产品都有2个测试方法:白盒测试法和黑盒测试法
6.测试步骤:
(1)模块测试
(2)子系统测试
(3)系统测试
(4)验收测试
(5)平行运行
7.测试阶段的信息流 (画图 P153)
8.出错处理通路
(1)对错误的描述是难以理解的
(2)记下的错误与实际遇到的错误不同
(3)在对错误进行处理之前,错误条件已经引起系统干预
(4)对错误的处理不正确
(5)描述错误的信息不足以帮助确定造成错误的位置
9.自顶向下集成和自底向上集成 P157-158
10.确认测试也称为验收测试,它的目标是验证软件的有效性 (填空)
11.Alpha和Beta测试
(1)Alpha:由用户在开发者的场所进行,并且在开发者对用户的''指导''下进行过测试,开发者负责记录发现的错误和使用中遇到的问题.Alpha是在受控的环境进行的.
(2)Beta:由软件的最终用户们在一个或多个客户场所进行,用户将遇到的一切问题,定期发给开发者,然后开发者对产品进行必要的修改.Beta是在不受控的环境
12.白盒测试.
(1)逻辑覆盖 (给一个流程图写出 XX覆盖走的路径)
<1>语句覆盖 :所有语句执行一次
<2>判定覆盖 :所有语句,所有分支都至少执行一次
<3>条件覆盖 :每个条件都要取到各种可能的结果
13基本路径测试 (根据流图和复杂度画独立路径,复杂度几就有几条独立路径) P166-167
,
复杂度为6,则就有6个独立路径
14黑盒测试
等价划分,边界值分析,错误推测都属于黑盒测试. (选择,填空)
等价划分:将程序的输入域划分为若干个数据类,据此导出测试用例,
15.调试,作为成功测试的后果出现,调试是在测试发现错误之后排除错误的过程 (判断)
16调试的途径:蛮干法,回溯法,原因排除法 (填空,选择)
第八章 维护
1.软件维护有几种? 根据情况选择对应的维护.综合题
改正性维护就是修改原有的缺陷
适应性维护就是使软件适应新的软硬件环境
完善性维护:满足某类需求
预防性维护就是把今天的技术用在昨天的软件上,以期软件在明天还能使用
2.软件再工程
第九章 面向对象方法学引论
1.面向对象方法学的特点:好维护
2.类:对具有相同数据和相同操作的一组相似对象的定义. (抽象的)
3.实例:由某个特定的类所描述的一个具体的对象 (具体的)
4.消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明.
由3部分组成L 接收消息的对象, 消息选择符 ,零个或多个变元
5.方法:对象所能执行的操作,也是类中定义的服务,
第十章 面向对象分析
1.面向对象分析(OOA)的关键是识别出问题域内的类与对象
2.面对对象分析就是抽取和整理用户需求并建立问题域精准的模型的过程.
3.P241 ATM系统的类图.
4.建立动态模型:
第一步:编写典型交互行为的脚本
第二步从脚本中提取出事件
第三步:排列事件发生的次序
第十一章 面向对象设计
1.面向对象的设计准则:
(1)模块化
(2)抽象
(3)信息隐藏
(4)弱耦合
(5)强内聚
(6)可重用
2.启发规则:
(1)设计结果应清晰易懂
(2)一般-特殊结构的深度应适当
(3)设计简单的类
(4)使用简单的协议
(5)使用简单的服务
(6)把设计变动减至最少
第十二章 面向对象实现
1.面向对象语言的优点:
(1)一致的表示方法
(2)可重用性
(3)可维护性
2.提高可重用性
(1)提高方法的内聚
(2)减少方法的规模
(3)保持方法的一致性
(4)把策略和现实分开
(5)去全面覆盖
(6)尽量不使用去全局信息
(7)利用继承机制
3.测试策略:从单元测试开始,逐步进入集成测试,最后进行确认测试和系统测试
第十三章 软件项目管理
1.所谓管理就是通过计划, 组织, 控制 等一系列活动,合理的配置和使用各种资源,以达到既定的目标
2.软件项目管理先于任何技术活动之前开始,并且贯穿整个生命周期之中.
3.代码行技术: (考计算)
L=(a的平均值+b的平均值+4*m的平均值)/6 单位:LOC 或者 KLOC
4.工作量估算:
E=5.2*(KLOC)^0.91 单位:人月 (Walston_Felix模型)
5.估算开发时间: .
T=2.5*E^0.35 (Walston_Felix模型)
最后要会画 数据流程图,流图,数据流图,