2021现代软件工程考试复习
2021现代软件工程考试复习指南
根据课件中的以下基本内容,适当的扩展阅读一些材料来复习。
第一章:软件工程概述
1. 理解什么是软件工程,软件工程包含那些领域,以及为何要搞软件工程?
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:
软件需求分析、软件设计、软件构建、软件测试和软件维护。
需求复杂,软件要满足不同类型用户的多种需求,并且能长时间提供服务
系统太复杂。工程是必要的,因为这些系统可能包含数百万行代码。
人们的生命,财产依赖于软件。几百万美元,人命,生意都取决于它。
2. 理解软件的特性
复杂性:软件可以说是人类创造的最复杂的系统类型。
不可见性:软件工程师能直接看见源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时运行,工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的。
易变性:软件看上去很容易修改,修改软件比修改硬件容易多了。
服从性:软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求(例如银行利率的变化)。
非连续性
新特性:
有许多不同的程序设计语言;
软件工具和软件开发平台;
存在许多不同的软件开发流程;
软件团队中存在许多不同的角色;
软件通常既可以存储在磁带上,也可以存储在CD/DVD上;
AI 可以写程序, GitHub 社区。
第二章:个人技术
1.掌握基本的单元测试技术,能够根据给定的程序写出相应的测试案例
单元测试应该在最基本的功能/参数上验证程序的正确性。
单元测试应该产生可重复、一致的结果。
单元测试应该覆盖所有代码路径。
2.了解什么是回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
第三章:个人软件流程
1.PSP2.1里的各项指标的含义
2.PSP优缺点
优点:
不局限某一种软件技术(如编程语言),而是着眼于开发流程,便于比较。
不依赖于考试,而主要依赖于工程师自己收集数据,然后分析,提高。
缺点:
在小型的创业团队,很难找到高质量的需求分析文档
导致后续的活动非常随机,开发活动可能随时变化
依赖于数据
要求开发人员手动记录所有活动,如何处理丢失数据或者不准确?
记录 “工作大小”
代码行数是唯一的衡量?
重用代码,用别人的类库 vs。 自己从头写
开发者删除了2000行有问题的代码,他的绩效如何?
衡量最终的结果么?
目前衡量了工程师如何有效地实现了软件需求
但是没有衡量用户是否对产品满意。
3.理解软件工程师的四个误区
①分析麻痹——没有做到实践紧跟分析。篮球场上,有100%的把握再出手
②依赖链条过长——没有分清主次,一直在解决不重要或者非工作的琐事。
③过早优化——没有着眼当前,思考离自己最近的问题。
④过早泛化——没有从简单的项目开始,好高骛远。
第四章:两人合作
1.了解代码复审的三种形式
2.掌握“代码复审核查表”的“概要部分”
1) 代码符合需求和规格说明么?
2) 代码设计是否考虑周全?
3) 代码可读性如何?
4) 代码容易维护么?
5) 代码的每一行都执行并检查过了吗?
3.理解好的复审者的“更高要求”
“这么修改之后,有没有别的功能会受影响?”
“项目中还有别的地方需要类似的修改么?”
“有没有留下足够的说明,让将来维护代码时不会出现问题?对于这样的修改,有没有别的成员需要告知?”
“导致问题的根本原因是什么?我们以后如何能自动避免这样的情况再次出现?”
4.理解结对编程,其优缺点,以及合适和不合适的场景
优点:
①提高设计质量
更好的设计,避免愚蠢的bug
②降低成本
分享知识,更少的debug 时间
③提高解决问题的信心
结对经常能解决“不可能的任务”
第五章:团体软件流程
1.了解瀑布模型及其变体的优缺点
优点:
反映了软件开发连贯的步骤
每一步的结果都是可验证的
减少风险
给团队提供稳定的流程支持
缺点:
- 直到周期结束才会生产软件
适用于:
产品定义非常稳定,正确性重要,每一步都要被验证
使用的技术非常成熟,团队成员对这些技术也非常熟悉
子团队在不同的地理位置,不可能做到频繁的交流
生鱼片模型:解决了各个步骤分离的缺点
瀑布和子项目:分而治之,不可预见的相互依赖关系,集成成本
螺旋模型:
Pros
在每一个版本都要衡量并控制风险
随着投入的增加和产品的运行,产品失败的风险在降低
Cons
需要高水平的管理团队
很难明确定义目标和稳定的里程碑
Good for
- 复杂的项目与许多未知,和知识渊博,熟练的团队
2.了解RUP的大致内涵
RUP 统一流程
第六章:敏捷流程
1.了解敏捷流程产生的背景
有几个原因导致敏捷在互联网时代出现:
最初的软件(20 世纪六七十年代)的顾客都是大型研究机构、军方、美国航空航天局、大型股票交易公司,他们需要通过软件系统来搞科学计算、军方项目、登月项目、股票交易系统等超级复杂的项目。这些项目对功能的要求非常严格,对计算的准确度要求相当高。
20 世纪八九十年代,软件进入桌面软件时代,开发周期明显缩短,各种新的方法开始进入实用阶段。但是软件发布的媒介还是软盘、CD、 DVD,做好一个发布需要较大的经济投入,不能频繁更新版本。
互联网时代,大部分的服务是通过网络服务器端实现,在客户端有各种方便的推送(Push)渠道。一般消费者成为主要用户。网络的传播速度和广度,使得知识的获取变得更加容易,很多软件服务可以由一个小团队来实现。同时,技术更新的速度在加快,用户需求的变化也在加快,开发流程必须跟上这些快速变化的节奏。于是敏捷就产生了。
2.理解敏捷流程和传统做法的区别
3.理解敏捷流程的原则
尽早并持续地交付有价值的软件以满足顾客需求。
敏捷流程欢迎需求的变化, 并利用这种变化来提高用户的竞争优势。
经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。
业务人员和开发人员在项目开发过程中应该每天共同工作。
以有进取心的人为项目核心,充分支持信任他们。
无论团队内外,面对面的交流始终是最有效的沟通方式。
可用的软件是衡量项目进展的主要指标。
敏捷流程应能保持可持续的发展。领导、团队和用户应该能按照目前步调持续合作下去。
只有不断关注技术和设计才能越来越敏捷。
保持简明 - 尽可能简化工作量的技艺 - 极为重要。
只有能自我管理的团队才能创造优秀的架构, 需求和设计。
时时总结如何提高团队效率, 并付诸行动。
4.理解SCRUM的角色以及流程
SCRUM是一种迭代的、增量的项目管理方法,经常出现在敏捷软件开发中。
维护过程的“ScrumMaster”(项目经理)
代表涉众和业务的“产品负责人”
“团队”,一个跨职能的小组,执行实际的分析、设计、实现、测试等。
第一步:
找出完成产品需要做的事情 — Product Backlog。
产品负责人领导大家对于这个 Backlog中的条目进行分析,细化,理清相互关系,估计工作量,等工作。每一项工作的时间估计单位为“天”。
第二步:
决定当前的冲刺(Sprint)需要解决的事情 — Sprint Backlog。 整个产品的实现被划分为几个互相联系的冲刺(Sprint)。产品订单上的任务被进 一步细化了,被分解为以小时为单位(参见 WBS 工作划分的办法)。如果一个任务的估计时间太长(如超过 16 个小时),那么它就应该被进一步分解。
订单上的任务是团队成员根据自己的情况来认领。
团队成员能主导任务的估计和分配,他们的能动性得到较大的发挥。
第三步:
冲刺(Sprint)。
团队按照backlog 任务执行
在冲刺阶段,外部人士不能直接打扰团队成员。一切交流只能通过 Scrum 大师(Scrum Master)来完成。
第四步:
得到软件的一个增量版本,发布给用户。
然后在此基础上又进一步计划增量的新功能和改进。
5.敏捷和计划驱动的适用范围
第七章:软件需求
1.知道需求的分类
①对产品功能性的需求: (略)
②对产品开发过程的需求:要求软件的开发流程必须满足某些约束条件,例如,开发过程必须产生某种类型的文档,必须在某个时间点达到某个状态,必须对源代码施以某种约束(安全性核查、代码版权核查、代码规范和支持文档的核查)。
③非功能性需求:这也叫“服务质量需求”(Quality of Service Requirement),例如,股票交易系统必须在一定时间内返回用户查询结果(它对时间的要求比“科技文献检索”网站 要高),火车票购票系统、大学选课软件必须能支持一定数量的用户同时访问,等等。
④综合需求:有些需求并不是单单一个软件模块就能满足,例如,“购物网站必须在24小时内把货物发送到用户手中”,这个需求牵涉到软件系统、货物派送系统、送货部门、监控系统等不同部门的功能和执行能力。
2.能够知道利益相关者分别有哪些对应的需求
3.了解焦点小组和问卷调查方法的优缺点
①焦点小组:
找到一群目标用户的代表,加上项目的利益相关者来讨论用户想要什么,用户对软件的评价等等。
弱点:
一群人在一起,往往大家会出于讨好其他人的心理来发表意见,避免不一致的意见或冲突。参与讨论的人士表达能力也会有差异,有可能会出现一些善于表达的人士控制讨论议程的倾向。
讨论者对于他们不熟悉的事物(例如全新的市场、颠覆式的创新)不能表达有价值的想法:在汽车出现之前,我们找一帮马车夫来畅想“未来的交通工具”,他们未必会贡献很有价值的想法。
讨论者容易受到主持人有意或无意的影响。 研究者往往从不同意见中挑选最符合自己利益的那些条目,然后对外号称这就是大家的共识。
以上这些特点要求会议的组织者要有很强的组织能力,能让不同角色都充分表达意见,并如实地总结这些意见。这种形式也叫做推进会议(Facilitated Meetings)。
②问卷调查:
定义不明确, 使用含混的形容词
让用户花额外的努力来回答问题
带有引导性的问题
过于开放式的问题
选择过于狭窄的问题
4.能够把功能合理的分在四像限中
第八章:典型用户和场景
1.能够对一个产品选取合理的典型用户并能描述典型场景
第九章:项目管理
1.知道风险的分类
2.能够合理的列出项目的风险
3.能够知道如何合理的处理风险
Risk 1: 任务比我们想象的要困难许多,原来制定的日程太乐观。
Explanation: 软件固有的特性,人员缺乏估算能力和经验,项目日程没有充分讨论。
补救办法: 让团队多做估算练习 (wide-band delphi 等练习),老员工给新员工传授经验;分析类似项目的日程;让团队充分参与项目估算流程。 尽早和项目的利益相关者沟通,尽早提出项目延期的问题。把长期项目规划为短期里程碑,能很快看到项目延期的问题。
Risk2: 需求爆炸,我们要做越来愈多的功能。
Explanation:
随着项目的进展,我们发现在项目初期没有发现的问题必须要解决,从而影响了原定的日程。
Solution:
承认这是软件项目经常出现的事实
确保意外出现的需求不影响当前的里程碑
制定长度合适的里程碑,确保问题能尽快浮现
经常和客户+开发人员交流,确认项目的需求。
Risk3: 人员流失 (或请假)
Explanation:
关键人物离开团队,项目的关键信息丢失,人力资源减少,导致项目困难.
Solution:
在团队持续鼓励合作和分享,所有代码必须在源代码服务器上,源代码的每一次修改都有记录,所有任务必须在项目管理工具中
鼓励结对编程,代码复审,共同拥有代码,经常报告各种进展和问题。
让多人参与关键模块的工作.
短期的里程碑保证某功能在较短时间得到改进,不让功能处于 “半完成” 状态
Risk4: 低质量的规格说明书 spec
Explanation: 当开始具体实现和集成的时候,发现spec 包含了相互冲突的需求,或者说明不完备.
Solution:
让客户或者客户的代表,代理来参加需求分析和spec 复审.
运用场景驱动的方法尽早模拟几个模块集成后能给用户带来什么好处.
尽早用 desig* by contract 的方法来保证模块之间能相互支持
Risk5: 团队效率低下
Explanation:
在长期项目中,团队成员失去了紧迫感,缺乏真实世界的反馈,大部分时间浪费在不紧急的事情上.
解决方案:
短期的里程碑和冲刺阶段 – 人们 (学生)通常等到deadline 临近的时候才开始行动.
Parkinson‘s Law: “Work expands to fil* the time available”
不断发布/收集反馈,让团队感受真实的需求
第十章:软件设计(只参考UML附件和UML相关书籍)
1.根据系统的基本描述,能够画出合适的用例图、类图、活动图和顺序图。
第十一章:软件测试
1.能够理解测试和质量保障的定义
测试——提供输入,测量输出与期望。
- 规划与设计几乎同时进行
- 动作发生在执行之后。
单元测试
黑盒测试
白箱测试
质量保障的定义
质量保证(质量保障)——所有活动,增加对质量的信心
测试是只有一个活动的质量保证(测试只是质量保障的一部分)
质量保证包括所有阶段,包括计划和支持
2.能够知道客观质量和主观质量分别是什么
质量客观的某些方面
- 稳定性/没有错误
- 符合规格要求
质量是主观的某些方面
- 对客户的整体价值/满足客户的需求
- 愉快的终端用户体验,情感价值
- 让客户想要更多
没有bug!=高质量
3.知道白箱测试和黑箱测试的定义
黑箱:
在设计测试的过程中,把软件系统当作一个“黑箱”,无法了解或使用系统的内部结构及知识。一个更准确的说法是“Behaviora* Test Design”,从软件的行为,而不是内部结构出发来设计测试。
白箱:
在设计测试的过程中,设计者可以“看到”软件系统的内部结构,并且使用软件的内部知识来指导测试数据及方法的选择。“白箱”并不是一个精确的说法,因为把箱子涂成白色,同样也看不见箱子里的东西。有人建议用“玻璃箱”来表示。
在实际的测试中,当然是对系统了解得越多越好。
4.掌握三种测试用例设计方法
等价类划分
边界值分析
正交实验设计方法(Pair-wise)
第十二章:软件质量
1.软件工程的质量体现在哪些方面
软件工程的质量体现在
开发过程的可见性
开发过程的风险控制
内部模块的交付质量
开发成本的控制
内部质量指标的完成情况
2.根据燃尽图(或类似的图)能够说明软件过程中出现的问题
3.了解用户代替测试的问题
愿望是良好的,但是在实践中有下面问题:
1) 没有测试,就没有人给第一时间的反馈,特别是各种非主流配置下的非主流使用场景。例如,我们想测试各个模块如何处理闰年的2月 29号(或者闰年的最后一天),我们要等到实际闰年的时候,才能让用户帮我们测试么?
2) 严格的时间标准听起来很好,但是这个时间是某个版本在某个目标用户手上的时间,这些目标 用户都有自己的日常工作要求,不会像测试人员那样去全面和深入测试,更没有任何动力去整天 测试。
如果有专职测试,他们就可以在较短时间内完整测试,给出有信心的 “go/no go" 判断。而不是 要等一帮dogfood 用户* 天的使用。这个规定比较僵化,不能处理一些比较紧急的情况,例如, 需要3 周就上线,但是规定要求必须走两个环,每个环要强制4 周的使用时间。
第十三章:软件发布
1.了解软件发布的那些名词
Alpha: 指集成了主要功能的第一个试用版本。在这个版本中有些小功能并未实现。
Beta: 功能基本完备,稳定性较Alpha版本高,用户可以在实际工作中小范围使用,可以有 Beta1、Beta2、Beta3 ……
ZBB(Zero Bug Build):某天的版本要把在之前(例如48小时前)记录的Bug都解决掉。
RC(Release Candidate):发布候选版本,RC1、RC2……直到RTM为止,版本间隔时间较短。
RTM(Release To Manufacturer):最终发布版本。如果某一个RC版本没有很大的问题, 那么这一RC就会成为最终的版本,通常情况下,软件公司会把最终的版本和相关的文件及其他资料交给另一个团队(Manufacturer)去包装、刻制光盘。在App Store/ Marketplace的年代,我们有相应的RTM(Release To Market)。
RTW(Release To Web):要依赖“Web”来发布我们 的最终版本。如果软件产品是一个网站服务,则一般会交给网站运营团队(Operatio* Team)去管理,这样的发布也可以叫做RTO(Release To Operation),运营团队和 研发团队一起决定什么时候系统上线(Go Live)。把软件提交到各个应用商店则可以 称为 Release To Store。
2.了解从代码完成到软件发布之间的步骤
2021现代软件工程考试复习相关推荐
- 2021现代软件工程考试复习指南
第一章:软件工程概述 理解什么是软件工程,软件工程包含那些领域,以及为何要搞软件工程? 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程. 软件工程包括下列领域: 软件需求 ...
- [渝粤教育] 西南科技大学 高频电子线路 在线考试复习资料2021版
高频电子线路--在线考试复习资料2021版 一.单选题 1.直接调频电路的优点是( ). A.载频稳定度高 B.能够获得较大的线性频偏 答案:看左边查询 2.调频信号,则调频指数(最大相偏)是( ...
- [渝粤教育] 西南科技大学 国际贸易理论与实务 在线考试复习资料2021版(2)
国际贸易理论与实务--在线考试复习资料2021版 一.单选题 1.根据货币数量理论,国内货币供给增加50%将导致( ) A.国内价格水平提高50% B.国内价格水平提高幅度大于50% C.国内 ...
- [渝粤教育] 西南科技大学 计算机网络应用基础 在线考试复习资料2021版(1)
计算机网络应用基础--在线考试复习资料2021版 一.单选题 1. 在数字通信中广泛采用CRC循环冗余码的原因是CRC可以( ). A. 检测出一位差错 B. 检测并纠正一位差错 C. 检测 ...
- [渝粤教育] 西南科技大学 机械专业外语 在线考试复习资料2021版
机械专业外语--在线考试复习资料2021版 一.单选题 1.( )improved the performance and enhanced the capabilities of both peo ...
- [渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版(3)
经济法概论--在线考试复习资料2021版 一.单选题 1.债务人放弃其到期债权,致使债务人无法清偿债权人的债权,债权人可以行使( ). A.解除权 B.撤销权 C.代位权 D.抵消权 答案:看左边查 ...
- [渝粤教育] 西南科技大学 机电一体化技术 在线考试复习资料2021版
机电一体化技术--在线考试复习资料2021版 一.单选题 1.随着计算机图形显示技术的发展,出现了人机对话式自动编程(又称交互式),该技术以( )为其基础. A.图形显示技术 B.数字处理技术 ...
- [渝粤教育] 西南科技大学 现代数字系统设计 在线考试复习资料2021版
现代数字系统设计--在线考试复习资料2021版 一.单选题 1. SOPC的中文意思是( ). A.电子设计自动化 B.硬件描述语言 C.片上可编程系统 D.片上系统 答案:看左边查询 2.XP ...
- [渝粤教育] 西南科技大学 现代数字系统设计 在线考试复习资料2021版(1)
现代数字系统设计--在线考试复习资料2021版 一.单选题 1. SOPC的中文意思是( ). A.电子设计自动化 B.硬件描述语言 C.片上可编程系统 D.片上系统 答案:看左边查询 2.XP ...
最新文章
- ansible 详解
- 【Network Security!】用户组管理与批处理中(:goto)的用法
- Ubuntu安装Sublime Text并输入中文
- HDU5248:序列变换(二分)
- 2017.6.3 完全平方数 思考记录
- 扩展 HashMap
- 读书笔记《了解用户系列六 | 群体用户心理》文/产品100(简书作者)
- centos7.2如何升级到centos7.3最新版本
- C语言以科学计数法的格式打印
- 爬虫入门(五):下载豆瓣电影信息
- freeswitch之G729转码操作配置详解
- 如何免费下载知网论文
- 寒假每日一题题解(1.29)摘花生(DP水题)
- ST表 详解(C语言描述)
- css图片不断放大缩小的动画效果
- 东杰转债上市价格预测
- 从史上最热“五一”黄金周,聊聊中国人在百度地图大数据中“看”到什么
- 《生命不息,折腾不止》 罗永浩著
- 在当当和亚马逊中搜书并输出最低价格
- 题外话之怎么脱离旱鸭子
热门文章
- 实现手机端富文本编辑器---QuillEditors实现
- 使用QuickContactBadge关联联系人
- 【codeforces 746A】Compote
- 电脑上蓝牙设备删不掉,该如何处理?
- react适配PC端和H5页面
- python爬虫 ip代理_Python 爬虫入门(二)—— IP代理使用
- 逻辑函数表达式的形式
- 安卓SDK——语音识别
- 问题解决:严重: Web应用程序注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它
- Mac电脑看图快捷键