如何评测软件工程知识技能水平?
由于本科是计算机科学与技术专业,已经上过软件过程这门课,而且学习了计算机专业的相关专业知识,再加上经过这学期高级软件过程这门课的学习,对于一个软件过程专业的研究生需要掌握的软件工程知识技能有了一些见解,下面我就说一下我们当前需要掌握的相关知识技能。
(1)面向对象程序设计(OOP)的能力,并会通过具体的编程语言(建议Java和C++二选一)实现。如果要入门推荐慕课网找一门网课,如果想深入推荐劝退系列教科书《C++编程思想》。也可以学习北京理工大学 @金旭亮老师的《面向对象软件开发实践之基本技能训练》和《面向对象软件开发实践之专业技能训练》。不过真的有难度。Java的话可以考虑浙江大学 @翁恺老师的《程序设计入门—Java语言》与《Java语言程序设计进阶》。当然,顺带掌握语言相对应的 IDE,如 Visual Studio 或者 Eclipse。
(2)基本的数据结构与算法。可以看网易云课堂上浙江大学 陈越 老师 和 何钦铭 老师的《数据结构》。也可以看 学堂在线 上清华大学邓俊辉老师的《数据结构》。
(3)数据库,至少掌握SQL以及一个主流的DBMS(MySQL,SQL Server,Oracle等)的使用,具体种类取决于你打算主要发展的技术路线,如你选择C#,那么可以考虑SQL Server。如果需要更进一步的提高,如如何设计较好的数据库,可以学习王珊《数据库系统概论(第5版)》中关于数据库设计规范(主要是范式)方面的章节,这本书也是我本科的数据库上课教材。当然需要大量的范例做补充。可以多看看 http://toutiao.io 或者 博客园 上的文章。
(4)设计模式。学了这个你才能很大程度上加深对于OOP的理解。可以从《Head First设计模式》或者中南大学刘伟老师的几本设计模式书入门。
(5)软件工程。推荐 邹欣老师的《构建之法(第2版)》。也可以关注他的微博。还可以看 爱课程 上清华大学软件学院 刘强 老师的《软件工程》课程。
(6)软件测试技术。基本概念可以看同济大学软件学院 朱少民老师的《软件测试方法和技术(第3版)》,他在网易云课堂也有相应的课程。也可以上 Coursera 学习南京大学软件学院 陈振宇 老师的课程《软件测试》,不过有难度。现在也有不少公司开始注重单元测试,各种单元测试框架(如xUnit)学习起来都很简单,难点在于用例的设计,而用例的设计是建立在各种软件测试方法(等价类、边界值、判定表等)基础之上的。
(7)一些软件工程方面的辅助工具,如版本管理工具 Git (经常和 GitHub 一起出现),推荐廖雪峰的教程,如果英语水平好也可以看这个:http://campus.codeschool.com/courses/mastering-github,JIRA 等缺陷追踪系统等。
(8)最好掌握 UML。可以学习 Coursera 上北京大学的《面向对象技术高级课程》,非常好。
(9)最好掌握一门Web编程语言(http://ASP.NET/PHP),JavaScript和一个前端框架。这个资料就很多了。也可以看 金旭亮 老师的课。
(10)Linux系统的了解,以及linux的基本命令,推荐《鸟叔的linux私房菜》这本书,之前在网上看了电子档的,觉着不错,又买了一本,前两天刚到,最近忙着考试,还没来得及看。
当然作为一名合格的软件工程专业学生,要掌握的东西还有很多,比如良好的编码规范等等,这些需要在实际的项目开发过程中锻炼形成。
下面是收集的一份关于软件工程知识技能水平的测评试题。
题目来源集合课堂ppt与网上软件工程测试题以及查阅软件工程这本书籍综合而成:
一、选择题
1.软件生存周期模型有多钟,下列选项中,(C)不是软件生存周期模型。
A.螺旋模型
B.增量模型
C.功能模型
D.瀑布模型
解析:软件生存周期模型包括瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型。其中没有功能模型。
考查的知识技能、出题的目的意图是让学生掌握常见的软件工程生存周期模型,并加以了解。
2.软件开发和维护过程中出现的一系列严重问题称为(D)。
A.软件工程
B.软件开发
C.软件开发
D.软件危机
解析:软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
考查的知识技能、出题的目的意图:学生了解软件危机的概念,了解到软件危机几乎是所有软件共有的问题。
3.为了提高模块的独立性,模块内部最好是(C)
A.逻辑内聚
B.时间内聚
C.功能内聚
D.通信内聚
解析:逻辑内聚:这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 。
时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
功能内聚:模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。
通信内聚:指模块内所有处理元素都在同一个数据结构上操作或所有处理功能都通过公用数据而发生关联(有时称之为信息内聚)。即指模块内各个组成部分都使用相同的数据结构或产生相同的数据结构。
考查的知识技能、出题的目的意图:考察学生对耦合内聚的了解,何时耦合,何时内聚,需要了解到高内聚低耦合,内聚关注模块内部的元素结合程度,耦合关注模块之间的依赖程度。
4.程序的三种基本控制结构是( B)
A.过程,子过程,和分程序
B.顺序,选择和循环(重复)
C.递归,堆栈和队列
D.调用,返回和转移
解析:程序的三种基本控制结构是顺序,选择和循环。
考查的知识技能、出题的目的意图:学生对程序的基本结构有所了解。
5.通过(B )可以完成数据流图的细化。
A.结构分析
B.功能分解
C.数据分析
D.系统分解
解析:分解功能可以对已有模型进行特征拆解,并可以直接调用分解出来的步骤加以重复利用。所以对数据流图有细化作用。
考查的知识技能、出题的目的意图:考察功能分解的作用,并且让学生在数据流图细化过程中掌握功能分解的使用。
二、名词解释
- 模块的耦合(性): 对一个软件结构内不同模块之间互连程序的度量。耦合的强弱取决于模块间接口的复杂程序,进入或访问一个模块的点,以及通过接口的数据。
- 功能内聚:功能内聚指模块内所有元素共同完成一个功能,缺一不可,因此模块不能再分割。
- 重构(Refactoring):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。常见的重构现象为重复代码。
- 观察者模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
- 软件工程(Software Engineering):是把系统的、有序的、可量化的⽅方法应⽤用到软件的开发、运营 和维护上的过程。软件工程的目标是创造出足够好的软件。
三、判断题
1. 编码风格由个人喜好决定,没有固定格式。(F)
考察内容:学生对基本编码风格的理解。
2. 当验收测试通过,软件开发就完成了。(F)
考察内容,软件开发还包括后期维护等等。
3.软件工程学只有理论意义,没有实际用途。(F)
考察内容,软件工程不仅有理论意义,还有实际意义,知道软件工程师进行软件的开发。
4. 软件生命周期中时间最长的是需求分析阶段。(F)
考察内容,软件生命周期中最长的是软件维护阶段。
5.软件工程的方法只适用于大型软件的开发,对小型软件的开发没有帮助。(F)
考察内容:软件工程不仅适用于大型软件,对于小型软件开发而言也具有指导意义
四、综合题
1.某一新闻管理系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布性温。任何人可以浏览新闻,浏览者可以注册成为系统会员,组册后可对新闻进行评论。管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。
请画出该新闻管理系统的用例图。
答案解析:新闻管理系统用例图如下图所示:

考察内容:考察学生软件开发过程中用例图的设计。
2.某航空公司拟开发一个机票预订系统。旅行社把预订机票的旅客信息(姓名、性 别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航 班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对 无误即印出机票给旅客。试用实体-联系图描绘本系统中的数据对象。
答案解析:E-R 图如下所示:

考察内容:考察学生对E-R图的理解与应用。E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。

浙公网安备 33010602011771号