如何评测软件工程知识技能水平
软件工程知识总结
熟练操作的工具集
Vim
Vim的三种模式
Vim键盘图
Git
git的常用命令
正则表达式
- 测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 - 替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。 - 基于模式匹配从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
需求分析与设计
用例建模
用例模型主要包含以下两个部分:
一、用例图(Use Case Diagram)
确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。
二、用例规约(Use Case Specification)
针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容。
在用例建模的过程中,具体的步聚是:
先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。
用例建模实例
具体内容可以参考我的这篇博客
业务领域建模
领域建模的定义
领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示。领域模型也成为概念模型、领域对象模型和分析对象模型。
领域建模的特点
第一,领域模型是业务概念的可视化描述,是需求分析的产物;
第二,领域模型用于指导程序设计,但领域模型与实现方式无关,领域建模时不应该考虑如何实现;
第三,领域模型需要同项目所有成员(客户、项目经理、开发、测试…)达成共识。
领域建模实例
具体内容可以参考我的这篇博客
设计模式
基本概念
软件设计模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。
软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上,在软件生存期的每一 个阶段都存在着一些被认同的模式。
分类1:创建型模式
定义
创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
包含的设计模式有:
- 简单工厂模式(Simple Factory)
- 工厂方法模式(Factory Method)
- 抽象工厂模式(Abstract Factory)
- 建造者模式(Builder)
- 原型模式(Prototype)
- 单例模式(Singleton)
分类2:结构型模式
定义
结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。
结构型模式可以分为类结构型模式和对象结构型模式:
-
类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。
-
对象结构型模式关心类与对象的组合,通过关联关系使得在一 个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。
包含的设计模式有:
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 装饰模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
- 代理模式(Proxy)
分类3:行为型模式
定义
行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象 之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。
行为型模式分为类行为型模式和对象行为型模式两种:
- 类行为型模式:类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
- 对象行为型模式:对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。
包含的设计模式有:
- 职责链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Observer)
- 详细可参考我的博客
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)
软件工程过程与项目管理
软件生命周期
软件生命周期是指软件从开始研制到最终被废弃所经历的各个阶段。在不同的阶段里,由不同的组织和人员执行不同的任务,需要消耗不同的资源。
生命周期常见的有:瀑布模型、V模型、敏捷开发模型。
阶段:需求分析->软件设计->程序编码->软件测试->运行维护
软件工程各阶段的目标
- User Experience
- Concrete Requirement
- Clear/Unambiguous Specification
- Loosely Coupled、Functional Cohesion、Hierarchy of Abstraction
- Readable Solid Code
- Test Thoroughness
软件工程知识技能水平的测评试题
选择题
(百度文库,2015)1、软件可行性研究一般不考虑( D )
A、是否有足够的人员和相关的技术来支持系统开发
B、是否有足够的工具和相关的技术来支持系统开发
C、待开发软件是否有市场、经济上是否合算
D、待开发的软件是否会有质量问题
解析:
软件可行性分析是通过对项目的市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等方面的研究,从技术、经济、工程等角度对项目进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行科学预测,为项目决策提供公正、可靠、科学的软件咨询意见。
一般,主要从经济、技术、社会环境等方面分析所给出的解决方案是否可行,当解决方案可行并有一定的经济效益和/或社会效益是才开始真正的基于计算机的系统的开发。
因此,就本题而言,AB主要是从技术层面进行分析,C则是从经济层面分析,故选D。
(中国海洋大学考研题,2017)2、软件测试的目的是? ( D )
A、 证明软件的正确性
B、 找出软件系统中存在的所有错误
C、 证明软件系统中存在错误
D、 尽可能多的发现软件系统中的错误
解析:
软件测试的目的主要有以下四点:
软件测试是为了发现错误而执行程序的过程。
测试是为了证明程序有错,而不是证明程序无错。(发现错误不是唯一目的)
一个好的测试用例在于它发现至今未发现的错误。
一个成功的测试是发现了至今未发现的错误的测试。
因此,对照发现,A与第二点相悖,B错在“所有”,C和D区别在于一个是证明存在错误、一个则是发现错误,显然软件测试的最后还是要修改错误让软件更好更完善。 故选D。
(中国海洋大学考研题,2018)3、( A )是用户和设计交换最频繁的方法。
A、原型化方法
B、瀑布模型方法
C、螺旋模型方法
D、构件组装模型
解析:
原型法是指:在投入大量的人力,物力之前,在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止。
可以看到,原型化方法能够很好地应对需求多变的场景,它先做出一个原型,之后按照用户的意见,不断地修改这个原型直至用户满意。
关于这一方法我在之前的博客中介绍过。
而本题中其他的三个选项则属于生命周期法,它们以严密的理论基础、严格的阶段划分、详细的工作步骤、规范的文档要求,以及“自上而下”的开发策略为主要特点。 故此题选A。
(百度文库,2016)4、 软件测试中白盒法是通过分析程序的( B )来设计测试用例的。
A、应用范围
B、内部逻辑
C、功能
D、输入数据
解析:
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试是一种测试用例设计方法,其中,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
因此,我们了解到白盒测试主要是测试人员已经事先了解程序内部的具体实现,之后根据程序的内部逻辑进行测试用例设计的,故选B。
(牛客网,2018)5、在结构化的瀑布模型中,( A ) 定义的标准将成为软件测试中的系统测试阶段的目标。
A、需求分析阶段
B、详细设计阶段
C、概要设计阶段
D、可行性研究阶段
解析:
从定义的角度,系统测试的目标是:通过与系统的需求规格说明进行比较,检查软件是否存在与系统规格说明不符合或与之矛盾的地方,从而验证软件系统的功能和性能等满足规格说明所制定的要求。
因此,本题选A。
(中国海洋大学考研题,2018)6、软件开发模型是对软件开发过程的一种规范描述,用于表示软件开发过程的整体框架和软件开发活动各阶段间的关系。下列模型属于软件开发模型的是( A ):Ⅰ.瀑布模型 Ⅱ.快速原型模型 Ⅲ.增量模型 Ⅳ.螺旋模型
A、Ⅰ、II、Ⅲ和Ⅳ
B、II、Ⅲ
C、Ⅰ、II和Ⅳ
D、II、Ⅲ和Ⅳ
解析:
首先,软件开发模型概念:是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。
常见的软件开发模型包括有以下几种:
1.边做边改模型;2.瀑布模型; 3.快速原型模型; 4.增量模型(演化模型); 5.螺旋模型; 6.喷泉模型; 7.智能模型;8.混合模型等等。
因此,本题中所有的选项都属于软件开发模型,故选择A。
(牛客网,2018)7、数据字典中,一般不包括下列选项中的( D )条目。
A.数据流
B.数据存储
C.加工
D.源点与终点
解析:
从定于出发,数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。
数据字典中有以下条目:
(1)数据项; (2)数据结构; (3)数据流; (4)数据存储; (5)处理逻辑; (6)外部实体
因此,本题中AB首先排除,而C选项则等同于“处理逻辑”,故选D。
名词解释题
(课堂测试)1、观察者模式
一个目标物件管理所有相依于它的观察者物件,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,被用来实现事件处理系统,又被称为“发布——订阅”模式。
(课堂测试)2、模块化
把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(课堂测试)3、持续集成
对软件项目进行持续的自动化的编译打包构建测试发布,来检查软件交付质量。
判断题
(牛客网,2017)1、可行性研究进一步研究问题分析阶段所确定的问题是否有可行的解。( T )
解析:
可行性研究,是运用多种科学手段(包括技术科学、社会学、经济学及系统工程等)对一项建设工程进行技术经济论证的综合科学,其基本任务是通过广泛的调查研究。
题中对可行性研究的作用的描述基本正确。
(百度文库,2017)2、代码审查方法没有计算机测试方法好。( F )
解析:
代码评审也称代码复查,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动;而计算机测试则是通过脚本等方法对程序进行测试。
显然,二者均有其优势和劣势,代码审查灵活性高但是效率低,计算机测试效率高但是始终局限在测试脚本编写人员的思维之内。 因此,不能够对那种方法直接下定论。
(百度文库,2019)3、软件开发人员对用户需求的理解有偏差,这将导致软件产品与用户的需求不一致,是产生软件危机的唯一原因。( F )
解析:
软件开发人员对用户需求的理解有偏差只能说是产生软件危机的原因之一,谈不上是“唯一”原因,故本题错误。
(中国海洋大学考研题,2017)4、只有了解用户、了解任务,才能设计出好的用户界面。 ( T )
解析:
需求分析可以说是软件开发中最重要的一环,不了解用户而设计出来的软件也绝不是用户想要的。
只有充分分析用户的需求和任务,才能够设计出让用户满意的软件,而这样的软件才能够称作是“好”的。
(百度文库,2017)5、白盒测试法是将程序看成一个透明的盒子,不需要了解程序的内部结构和处理过程。( F )
解析:
我们之前已经分析过,白盒测试是一种测试用例设计方法,其中,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。
即与题目所述恰恰相反,白盒测试正是需要提前了解程序的内部结构和处理过程。故本题错误。
简答题
(自编)1、可行性研究包括哪几方面的内容?
-
经济可行性:是否有经济效益,多长时间可以收回成本;
-
技术可行性:现有技术能否实现本系统,现有技术人员能否胜任,开发系统的资源能否满足;
-
运行可行性:系统操作在用户内部是否行得通;
解析:
可行性分析主要从经济、技术、社会环境等方面分析所给出的解决方案是否可行,当解决方案可行并有一定的经济效益和/或社会效益是才开始真正的基于计算机的系统的开发。
因此,答案中只要包括经济、技术等方面,言之有理的都算正确。
(百度文库,2017)2、比较黑盒测试和白盒测试的优缺点
-
黑盒测试
- 优点:适应于阶段测试,从产品功能角度测试,容易入手生成测试数据。
- 缺点:某些代码得不到测试,如果规格说明有误,可能无法发现,不易进行充分性测试。
-
白盒测试
- 优点:可构成测试数据使特定程序部分得到测试, 有一定的充分性度量手段,可生成较多工具支持。
- 缺点:不易生成测试数据,无法对未实现规格说明的部分进行测试,作量大通常只用于单元测试有应用局限。
解析:
黑盒测试侧重于产品功能、不深入了解程序内部结构;
白盒测试则需要了解程序的内部结构和处理过程。
只要围绕以上的特点,言之有理即可。