软考大纲

考试说明

1.考试目标

通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平

2.考试要求

(1)掌握计算机内的数据表示、算术和逻辑运算方法;

(2)掌握相关的应用数学及离散数学基础知识;

(3)掌握计算机体系结构以及各主要部件的性能和基本工作原理;

(4)掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;

(5)熟练掌握常用数据结构和常用算法;

(6)熟悉数据库与网络基础知识;

(7)熟练掌握一种结构化程序设计语言(C语言)和一面向对象程序设计语言(C++或Java);

(8)熟悉软件工程、软件过程改进和软件开发项目管理基础知识;

(9)掌握软件设计的方法和技术;

(10)了解信息化、常用信息技术标准、安全性,以及有关法律、法规的基础知识;

(11)正确阅读和理解计算机领域的英文资料。

 

3.考试科目设置

(1)计算机与软件工程知识,考试时间为150分钟;

(2)软件设计,考试时间为150分钟。

4.考试范围

题型举例

考试科目1:计算机与软件工程知识

1.在计算机中,最适合进行数字加减运算的数字编码是(1),最适合表示浮点数阶码的数字编码是(2)

(1)A.原码       B.反码        C.补码        D.移码

(2)A.原码       B.反码        C.补码        D.移码

 

2.某计算机系统由下图所示的部件构成,假定每个部件的千小时可靠度都为R,则该系统的千小时可靠度为(3)

(3)A.R+2R/4    B.R+R2/4        C.R(1-(1-R)2)     D.R(1-(1-R)2)2

 

3.指令系统中采用不同寻址方式的目的是(4)。

(4)A.提高从内存获取数据的速度      B.提高从外存获取数据的速度

   C.降低操作码的译码难度          D.扩大寻址空间并提高编程灵活性

 

4.用户A从CA获得用户B的数字证书,并利用(5)验证数字证书的真实性

(5)A.B的公钥        B.B的私钥       C.CA的公钥    D.CA的私钥

 

5.模块A直接访问模块B的内部数据,则模块A和模块B的耦合类型为(6)

(6)A.数据耦合       B.标记耦合        C.公共耦合        D.内容耦合

 

6.某软件公司研发的财务软件产品在行业中技术领先,具有很强的市场竞争优势。为确保其软件产品的技术领先及市场竞争优势,公司采取相应的保密措施,以防止软件技术秘密的外泄。并且,还为该软件产品冠以“用友”商标,但未进行商标注册。此情况下,公司仅享有该软件产品的(7)。

(7)A.软件著作权和专利权              B.商业秘密权和专利权

   C.软件著作权和商业秘密权           D.软件著作权和商标权

 

7.某进程有5个页面,页号为0~4,页面变换表如下所示。表中状态位等于0和1分别表示页面不在内存或在内存。若系统给该进程分配了3个存储块,当访问的页面3不在内存时,应该淘汰表中页号为(8)的页面。假定页面大小为4K,逻辑地址为十六进制2C25H,该地址经过变换后,其物理地址应为十六进制(9)。 

(8)A.0        B.1        C.2        D.4

(9)A.2C25H     B.4096H        C.4C25H       D.8C25H

 

8.假设某磁盘的每个磁道划分成9个物理块,每块存放1个逻辑记录。逻辑记录RO,R1,…,R8存放在同一个磁道上,记录的安排顺序如下表所示: 

如果磁盘的旋转速度为27ms/周,磁头当前处在RO的开始处。若系统顺序处理这些记录,使用单缓冲区,每个记录处理时间为3ms,则处理这9个记录的最长时间为(10);若对信息存储进行优化分布后,处理9个记录的最少时间为(11)。

(10)A.54ms        B.108ms        C.222ms        D.243ms

(11)A.27ms        B.54ms         C.108ms        D.216ms

 

9.下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边的权重表示活动的持续时间,则里程碑(12)在关键路径上。活动GH的松弛时间是(13)。 

(12)A.B       B.E       C.C        D.K

(13)A.0       B.1       C.2        D.3

 

10.一个功能模块M1中的函数F1有一个参数需要接收指向整型的指针,但是在功能模块M2中调用F1时传递了一个整型值,在软件测试中,(14)最可能测出这一问题。

(14)A.Ml的单元测试             B.M2的单元测试  

    C.Ml和M2的集成测试        D.确认测试

 

11.编译程序对C语言源程序进行语法分析时,可以确定(15)。

(15)A.变量是否定义(或声明)        B.变量的值是否正确

    C.循环语句的执行次数         D.循环条件是否正确

 

12.不同的对象收到同一消息可以产生完全不同的结果,这一现象叫作(16)。绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定在编译时进行,叫作(17);而(18)则在运行时进行,即一个给定的过程调用和执行代码的结合直到调用发生时才进行。

(16)A.继承        B.多态         C.动态绑定         D.静态绑定

(17)A.继承        B.多态         C.动态绑定         D.静态绑定

(18)A.继承        B.多态         C.动态绑定         D.静态绑定

 

13.在统一建模语言(UML)中,(19)用于描述系统与外部系统及用户之间的交互。

(19)A.类图         B.用例图         C.对象图         D.协作图

 

14.下列设计模式中,(20)模式既是类结构型模式又是对象结构型模式。此模式与(21)模式类似的特征是,都给另一个对象提供了一定程度上的间接性,都涉及从自身以外的一个接口向这个对象转发请求

(20)A.桥接(Bridge)   B.适配器(Adapter)   C.组成(Composite)   D.装饰器(Decorator)

(21)A.桥接(Bridge)   B.适配器(Adapter)   C.组成(Composite)   D.装饰器(Decorator)

 

15.(22)表示了系统与参与者之间的接口。在每个用例中,该对象从参与者处收集信息,并将之转换为一种被实体对象和控制对象使用的形式

(22)A.边界对象       B.可视化对象      C.抽象对象      D.实体对象

 

16.如下UML类图表示的是(23)设计模式。以下关于该设计模式的叙述中,错误的是(24)。

(23)A.工厂方法       B.策略        C.抽象工厂      D.观察者

(24)A.提供创建一系列相关或相互依赖的对象的接口,而无须指定这些对象所属的具体类

   B.可应用于一个系统要由多个产品系列中的个来配置的时候

   C.可应用于强调一系列相关产品对象的设计以便进行联合使用的时候

   D.可应用于希望使用已经存在的类,但其接口不符合需求的时候

 

17.UML中有多种类型的图,其中,(25)对系统的使用方式进行分类,(26)显示了类及其相互关系(27)显示人或对象的活动,其方式类似于流程图,通信图显示在某种情况下对象之间发送的消息,(28)与通信图类似,但强调的是顺序而不是连接。

(25)A.用例图        B.顺序图         C.类图         D.活动图

(26)A.用例图        B.顺序图         C.类图         D.活动图

(27)A.用例图        B.顺序图         C.类图         D.活动图

(28)A.用例图        B.顺序图的          C.类图         D.活动图

 

18.为了保证数据库中数据的安全可靠和正确有效,系统在进行事务处理时,对数据的插入、删除或修改的全部有关内容先写入(29);当系统正常运行时,按一定的时间间隔,把数据库缓冲区内容写入(30);当发生故障时根据现场数据内容及相关文件来恢复系统的状态

(29)A.索引文件       B.数据文件        C.日志文件        D.数据字典

(30)A.索引文件       B.数据文件        C.日志文件        D.数据字典

 

19.要使4个连续的C类网络汇聚成一个超网,则子网掩码应该为(31)。

(31)A.255.240.0.0      B.255.255.0.0    C.255.255.252.0       D.255.255.255.252

 

20.Ravi, like many project(32),had studied the waterfall model of softwaredevelopment as theprimary software life-cycle(33).He was allset to use it for an upcoming project, his first assignment. However, Ravifound that the waterfall model couldnot be used because the customer wanted thesoftware delivered in stages, something that implied that the system had to bedelivered and built in(34)and not as(35).

The situationin many other projects is not very different.The real world rarely presents aproblem in which a standard process, or the process used in a previous project,is the best choice. To be the most suitable, an existing process must be(36)to the new problem.

A developmentprocess, even after tailoring, generally cannot handle change requests.Toaccommodate change requests without losing control of the project, you mustsupplement the development process with a requirement change managementprocess.

(32)A.customers         B.managers         C.users          D.administrators

(33)A.activity         B.procedure         C.process           D.progress

(34)A.parts           B.modules             C.software           D.a whole

(35)A.parts           B.modules             C.software           D.a whole

(36)A.modified         B.used               C.suited            D.tailored

 

考试科目2:软件设计

试题一(15分)

阅读以下说明和数据流图,回答问题1至问题4,将解答填入答题纸的对应栏内。

【说明】

某慕课教育平台欲添加在线作业批改系统,以实现高效的作业提交与批改,并进行统计。学生和讲师的基本信息已经初始化为数据库中的学生表和讲师表。系统的主要功能如下。

(1)提交作业。验证学生标识后,学生将电子作业通过在线的方式提交,并进行存储。系统给学生发送通知表明提交成功,通知中包含唯一编号,并通知讲师有作业提交

(2)下载未批改作业。验证讲师标识后,讲师从系统中下载学生提交的作业。下载的作业将显示在屏幕上。

(3)批改作业。讲师按格式为每个题目进行批改打分并进行整体评价

(4)上传批改后的作业。将批改后的作业(包括分数和评价)返回给系统,进行存储

(5)记录分数和评价。将批改后的作业的分数和评价记录在学生信息中,并通知学生作业已批改

(6)获取已批改作业。根据学生标识,给学生查看批改后的作业,包括提交的作业、分数和评价

(7)作业抽检。根据教务人员标识抽取批改后的作业样本,给出抽检意见,并形成抽检报告给讲师。

现采用结构化方法对在线作业批改系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。

 

 

【问题1】(3分)

使用说明中的词语,给出图1-1中的实体E1~E3的名称

【问题2】(4分)

使用说明中的词语,给出图1-2中的数据存储D1~D4的名称

【问题3】(6分)

根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点

【问题4】(2分)

若发送给学生和讲师的通知是通过第三方Email系统进行的,则需要对图1-1和图1-2进行哪些修改?用100字以内文字加以说明

 

试题二(共15分)

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内

【说明】

某集团公司在全国不同城市拥有多个大型超市,为有效管理各个超市的业务工作,需要构建一个超市信息管理系统

【需求分析结果】

(1)超市信息包括:超市名称、地址、经理和电话,其中超市名称唯一确定超市关系的每一个元组。每个超市只有一名经理

(2)超市设有计划部、财务部、销售部等多个部门,每个部门只有一名部门经理,有多名员工,每个员工只属于一个部门。部门信息包括:超市名称、部门名称、部门经理和联系电话。超市名称、部门名称唯一确定部门关系的每一个元组

(3)员工信息包括:员工号、姓名、超市名称、部门名称、职位、联系方式和工资。其中职位信息包括:经理、部门经理、业务员等。员工号唯一确定员工关系的每一个元组

(4)商品信息包括:商品号、商品名称、型号、单价和数量。商品号唯一确定商品关系的每一个元组。一名业务员可以负责超市内多种商品的配给种商品可以由多名业务员配给

【概念模型设计】

根据需求分析阶段收集的信息,设计的实体联系图和关系模式(不完整)如下:

 

【关系模式设计】

超市(超市名称,经理,地址,电话)

部门(  (a) ,   部门经理,联系电话)

员工(  (b) ,    姓名,联系方式,职位,工资)

商品( 商品号,商品名称,型号,单价,数量)

配给(  (c)  ,   配给时间,配给数量,业务员)

【问题1】(4分)

根据问题描述,补充四个联系,完善图2-1的实体联系图。联系名可用联系1、联系2、联系3和联系4代替,联系的类型分为1:1、1:n和mn(或1:1、1:*和*:*)

【问题2】(7分)

(1)根据实体联系图,将关系模式中的空(a) ~(c)补充完整

(2)给出部门和配给关系模式的主键和外键

【问题3】(4分)

(1)超市关系的地址可以进一步分为邮编、省、市、街道,那么该属性是属于简单属性还是复合属性?请用100字以内文字说明

(2)假设超市需要增设一个经理的职位,那么超市与经理之间的联系类型应修改为   (d)   ,超市关系应修改为    (e)   .

 

试题三(共15分)

阅读以下说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内

【说明】

某物品拍卖网站为参与者提供物品拍卖平台,组织拍卖过程,提供在线或线下交易服务。网站主要功能描述如下:

(1)拍卖参与者分为个人参与者和团体参与者两种。不同的团体也可以组成新的团体参与拍卖活动。网站记录每个参与者的名称

(2)一次拍卖中,参与者或者是买方,或者是卖方。

(3)一次拍卖只拍出来自一个卖方的一件拍卖品;多个买方可以出价;卖方接受其中一个出价作为成交价,拍卖过程结束。

(4)在拍卖结算阶段,买卖双方可以选择两种成交方式:线下成交,买卖双方在事先约定好的成交地点,当面完成物价款的支付和拍卖品的交付;在线成交,买方通过网上支付平台支付物价款,拍卖品由卖方通过快递邮寄给买方。

一次拍卖过程的基本事件流描述如下:

(1)卖方在网站上发起一次拍卖,并设置本次拍卖的起拍价

(2)确定拍卖标的以及拍卖标的保留价(若在拍卖时间结束时,所有出价均低于拍卖标的保留价,则本次拍卖失败)

(3)在网站上发布本次拍卖品的介绍

(4)买方参与拍卖,给出竞拍价。

(5)卖方选择接受一个竞拍价作为成交价,结束拍卖。

(6)系统记录拍卖成交价,进入拍卖结算阶段。

(7)卖方和买方协商拍卖品成交方式,并完成成交

现采用面向对象方法对系统进行分析与设计,得到如表3-1所示的类列表以及如图3-1所示的类图,类中关键属性与方法如表3-2所示

 

 

 

【问题1】(7分)

根据说明中的描述,给出图3-1中(1) ~(7)所对应的类名(类名使用表3-1中给出的序号)。

【问题2】(5分)

根据说明中的描述,确定表3-2中的属性/方法分别属于哪个类(类名、方法/属性名使用表3-1、3-2中给出的序号)。

【问题3】(3分)

在图3-1采用了何种设计模式?以100字以内文字说明采用这种设计模式的原因

 

试题四(共15分)

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内

【说明】

计算一个整数数组a的最长递增子序列长度的方法描述如下:

假设数组a的长度为n,用数组b的元素b[i]记录以a[i] (0≤i≤n)为结尾元素的最长递增子序列的长度,则数组a的最长递增子序列的长度为;其中b[i]满足最优子结构,可递归定义为: 

 

【C代码】

下面是算法的C语言实现

(1)常量和变量说明

a:长度为n的整数数组,待求其最长递增子序列

b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,其中0≤i<n

len:最长递增子序列的长度

i,j:循环变量

tmp:临时变量

(2)C程序

#include<stdio.h>

Int maxL(int*b,int n){

    inti, temp=0;

    for(i=0;i<n; i++){

     if(b[i]> temp)

      temp=b[i];

   }

  returntemp;

}

int main(){

     intn, a[100],  b[100] ,  i,  j, len;

     scanf(%"d", &n);

     for(i=0; i<n;  i++){

      scanf(%"d", &a[i]);

     }

       ( 1)   ;

     for(i=0; i<n; i++){

     for(j=0, len=0;  (2)  ; j++){

     if(   (3)   &&len<b[j] )

        len=b[i];

    }

      (4)    ;

 }

   printf("len:%d " ,  maxl(b,n));

 printf(" ");

 }

【问题1】(8分)

根据说明和C代码,填充C代码中的空(1)~(4)。

【问题2】(4分)

根据说明和C代码,算法采用了  ( 5 )  设计策略,时间复杂度为  ( 6 )  (用O符号表示)

【问题3】(3分)

已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值

 

面向对象程序设计样题【从试题五、六中任选一题】

 

试题五(共15分)

阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文,那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求到如图5-1所示的类图。

 

【C++代码】

class  Libraryvisitor;

class  LibraryItemInterface {

public:

   1  ;

class Article : public LibraryItemInterface{

private:

  string m_title;    //论文名

  string m_ author ; //论文作者

  int m_start_page;

  intm_ end_ page;

Public:

  Article ( string p_author , string p_title , intp_start_page , int p_end_page );

int   getNumber0fpages();

void accept ( Libraryvisitor * visitor ) ;

};

class Book : public  LibraryItemInterface {

private:

string m_title;         //书名

string m_author;       //作者

string m_pages;       //页数

public:

 Book ( string p_author , string p_title,int p_pages );

  intgetNumberOfpages ();

  void accept ( libraryvisitor*visitor);

 };

class Libraryvisitor{

public:

    (2)   ;

    (3)   ;

Virtual void printSum()=0;

};

class LibrarySumPrintVisitor : public

Libraryvisitor {  //打印总页数

Private:

  intsum;

public:

    LibrarySumPrintVisitor();

    void visit ( Book * p_ book );

    void visit ( Article * p_article ) ;

   void printSum();

  }

//visitor . cpp

int Article : :getNumberofpages ( ){

  return m_end_page - m_start_page;

}

void Article : accept ( Libraryvisitor * visitor)

{  4 ;}

Book : Book ( string p_author , string p_title , intp_pages){

    m_title=p_title;

    m_author=p_author;

    m_pages=p_pages;

}

int Book::getNumberOfPages(){  return m_pages; }

void Book:accept( Libraryvisitor*visitor)

{   (5)  ; }   //其余代码省略

 

试题六(共15分)

阅读下列说明和Java代码,将应填入(n) 处的字句写在答题纸的对应栏内。

【说明】

某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文,那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求得到如图6-1所示的类图。

 

【Java  代码】

import  java . util.*;

interface  Libraryvisitor {

  (1)   ;

  (2)   ;

 voidprintSum();

}

class LibrarySumPrintVisitor implements

Libraryvisitor {  //打印总页数

   private int sum = 0;

  public void visit(Book p_book){

   sum = sum+ p_book . getnumberOfpages();

  }

public void visit ( Article p_article){

    sum = sum + p_article . getnumberOfPages ( );

   }

public void printsum () {

    system out printin (" SUM ="+ sum );

  }

}

interface LibraryItemInterface {

   (3)   ;

}

class Article implements LibraryItemInterface{

   private string m_title;       / / 论文名

   private string m_author;    / / 论文作者

   private int m_start_page

   private Int m_end_page

   public Article ( String p_author , Stringp _ title , int p_start_page , int p_end_page ){

          m_title=p_title;

          m_author=p_author;

          m_start_page=p_start_page;

          m_end_page-p_end_page;

          }

         public int getNumberOfPages(){

         return m_end_page-m_statr_page;

         }

        public void accept (LibraryVisitor visitor){

          (4)     ;

     }

}

class Book implementsLibrarryItemInterface{

 private  String m_title;   //书名

  private  String m_author;   //书作者

 private  int m_pages;       //页数

  publicBook(String p_author,  String p_title,  int p_pages ){

  m_title=p_title;

  m_author=p_author;

  m_pages=p_pages;

  }

  publicint getNumberOfPages(){

  returnm_pages;

  }

  publicvoid accept(LibraryVisitor Visitor){

     (5)    ;

  }

}

原文地址:https://www.cnblogs.com/lvqiang/p/11572258.html