一个软件工程师的软件工程知识技能水平高低主要体现在哪些方面?
1. 是否掌握了程序员的基本功:键盘输入速度,快捷键,编译和调试工具等,熟练掌握常用的工具集—VSCode/Vim、正则表达式等。
2. 严格规范的代码风格,合理使用空格、空行、缩进、注释,代码逻辑清晰,没有冗余和重复,遵从架构与设计原则,熟练使用各种编程库和API,编写出简洁、规范、可读性强、健壮安全的代码。
3. 熟悉解决问题的流程:分析问题、形成方案、探索尝试解决问题、单元测试、重构程序以满足不断变化的需求。
4. 在理解业务的基础上进行需求分析,准确地表达出用户的需求,开发出高质量的软件。
5. 编写的代码结构清晰,具有良好的可靠性、鲁棒性、可移植性和可重用性,满足高内聚低耦合的要求,并掌握一些优秀的设计模式。
6. 能按时完成开发工作,在编码完成后,对可运行的结果对照需求分析文档进行严密的测试。如果测试发现问题,需要修复,最终测试完成后,形成测试报告。
7. 软件正式运行使用后需继续维护,修复错误和增加功能,交付时需要提供使用说明文档。
针对以上内容提供一份软件工程知识技能水平的测评试题:
一、选择题:
1. 下列模块独立性最强的是( )
A、非直接耦合 B、数据耦合 C、公共耦合 D、内容耦合
参考答案:A
解析:
我们用耦合和内聚来评价模块的独立性,理想的情况是高内聚低耦合。耦合越松散越好,各耦合从好到坏排序为:非直接耦合(模块之间独立)>数据耦合(希望设计出来的耦合)>控制耦合>公共环境耦合>内容耦合(相当紧密的一种耦合,尽量不要出现)。我们的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。
内聚是指模块内各元素彼此结合的紧密程度(耦合是模块之间)。内聚度越高越好,各内聚从好到坏排序为:功能内聚(理想的内聚程度)>顺序内聚>通信内聚>过程内聚>时间内聚>逻辑内聚>偶然内聚。
2.
解析:深度为4,宽度为3。A的扇出为3,t的扇入为2。扇入:该模块被上级模块调用的次数,扇入大,说明该模块的复用性好。扇出是一个模块调用其他模块的数目,如果扇出过大,说明该模块的业务逻辑复杂,一般增加调用层数来降低扇出,一般设计高扇入合理扇出(3到4)的模块。
3. 小汽车类与红旗轿车类的关系是( )
A、泛化关系 B、聚合关系 C、关联关系 D、实现关系
参考答案:A
解析:
UML中的图(9种图):
用例图:用例图描述外部执行者(actor)与系统的交互,表达系统功能,即系统提供的服务。主要元素:用例(表示系统某一个完整的功能)和执行者。
类图:类图是面向对象建模最常用的图,描述类与类间的静态关系。类名+属性+操作。公有(+),私有(-),保护(#)。边界类,控制类,实体类,接口类(不包含属性,只包含方法的声明,不包含方法的实现)。
对象图:对象图表示一组对象之间的联系,对象图是类图的实例。
UML中类之间的的关系:
依赖关系:依赖关系是一种使用关系。
关联关系(Association):指类之间有某种联系。
聚合关系(Aggregation):是整体与部分的较弱关系。
组合关系(Composition):是整体与部分的较强关系,即部分是完全依赖于整体的,整体消失的话部分也会消失。
泛化(继承)关系:一般与特殊的关系,例如“交通工具”和“汽车”,“船”。
实现关系:是一种特殊的泛化关系,从接口的继承。
4. 下列哪个阶段不属于软件生存周期的三大阶段( )。
A、计划阶段 B、开发阶段
C、编码阶段 D、维护阶段
参考答案:C
解析:软件生存周期的三大阶段包括:计划阶段、开发阶段、维护阶段。编码只是开发阶段的一部分,开发阶段还包括单元测试等。
5. 确认测试主要涉及的文档是( )
A、需求规格说明书 B、概要设计说明书 C、详细设计说明书 D、源程序
参考答案:A
解析:用户提的需求形成一个需求规格说明书,需求规格说明书上明确指出了我们的软件需要实现哪些功能,可以对照进行功能测试。需求规格说明书是整个软件生存周期中最重要的一份文档。
二、判断题:
1. 模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。(√)
2. 按照瀑布模型开发软件的一条指导思想是清楚地区分逻辑设计与物理设计,以便尽早开始程序的物理实现。(×)
解析:瀑布模型的一个非常重要的观点就是推迟实现,尽量让编码靠后,瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实,做充分了再开始编码。
3. 模块内的高内聚往往意味着模块间的松耦合。(√)
4. 面向对象的真正威力是封装,而非继承。(√)
5. 在需求分析阶段,对外部进行用例建模,产出为用例图;对内部进行领域建模,产出为设计类图。(×)
解析:领域建模的产出为业务类图,不是设计类图。此时仍处于业务的分析阶段,还没有进入到软件系统的设计阶段。
什么是领域建模?业务领域建模是开发团队用于获取相关领域知识的过程。(来自ppt)(why?软件工程师工作在不同的领域,需要开发不同领域的软件,因此需要相关领域的知识。)
领域建模的四个步骤:收集领域信息,头脑风暴,分类,使用UML类图进行可视化。
三、名词解释题:(来自教学PPT)
1. 重构 Refactoring
答:重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
2. 观察者模式 Observer Pattern
答:观察者模式又称为发布/订阅模式,它是软件设计模式中的一种。观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新。
3. 发布订阅的架构风格 Publish-Subscribe
答:在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者存在。
4. 设计模式 Design Pattern
答:软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
23种设计模式,大多数基于多态。包括:外观模式、适配器模式、模板方法模式、策略模式、桥接模式、观察者模式、简单工厂模式、抽象工厂模式等。
5. 对象组合 object composition
答:对象组合要求被组合的对象具有良好的接口,并且通过从其他对象得到的引用在运行时运态定义。所以可以将对象组合到其他对象中,以构建更加复杂的功能。由于对象的内部细节对其他对象不可见,它们看上去为“黑箱”,这种类型的复用称为黑箱复用。使用对象组合来替代继承,优先使用组合而不是继承,它的耦合程度更低,内聚程度更高。
四、简答题:
1. 简述软件模块设计原则?(来自教学PPT)
答:模块设计的6个原则为:模块化、接口、信息隐藏、增量开发、抽象、通用性。
2. 什么是统一过程?(来自教学PPT)
答:统一过程是用例驱动,以架构为中心,增量且迭代的过程。(不断有新版本的发布)
3. 什么是单元测试,集成测试,白盒测试,黑盒测试?(来自教学PPT)
答:单元测试:是指对软件中的最小可测试单元进行检查和验证。(局部)
集成测试:是将经过单元测试的模块组装起来进行测试。(全局)
黑盒测试:如果知道产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用。(内部不可见,又称功能测试)
白盒测试:如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。(内部细节可见,又称结构测试)
4. 常见的软件开发过程模型(软件生存周期模型)有哪些?
解析:瀑布模型,快速原型模型(用于需求不确定的软件开发),增量模型,螺旋模型(加入了风险分析,对大型的软件项目开发有较好的风险控制),喷泉模型(面向对象),统一过程(Rational公司的,用的较多),微软公司软件开发过程。。。