2021年计算机本科形成性考核册答案附题目_第1页
2021年计算机本科形成性考核册答案附题目_第2页
2021年计算机本科形成性考核册答案附题目_第3页
2021年计算机本科形成性考核册答案附题目_第4页
2021年计算机本科形成性考核册答案附题目_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电大天堂【软件工程】形成性考核册答案注:本答案仅供参照,如有错误敬请指正来源:【电大天堂】电大天堂【软件工程】形考作业一:(第1~4章)一、选取题:1.开发软件所需高成本和产品低质量之间有着尖锐矛盾,这种现象称做(C)。A.软件工程

B.软件周期

C.软件危机

D.软件产生2.瀑布模型本质上是一种(A)模型。A.线性顺序

B.顺序迭代

C.线性迭代

D.初期产品3.瀑布模型存在问题是(B)。A.顾客容易参加开发B.缺少灵活性C.顾客与开发者易沟通D.合用可变需求4.螺旋模型是一种将瀑布模型和(A)结合起来软件开发模型。A.增量模型

B.专家系统

C.喷泉模型

D.变换模型5.原型化办法是顾客和设计者之间执行一种交互构成,合用于(A)系统。A.需求不拟定性高B.需求拟定

C.管理信息D.实时6.下列关于软件工程原则,属于国际原则是(D)A.GB

B.DIN

C.ISO

D.IEEE7.构造化办法是一种基于(D)办法。A.数据构造B.程序构造

C.算法D.数据流8.软件可行性研究实质上是要进行一次(A)需求分析、设计过程。A、简化、压缩B、详细

C、彻底

D、进一步9.可行性研究目是(D)A、分析开发系统必要性B、拟定系统建设方案

C、分析系统风险

D、拟定与否值得开发系统10.

设年利率为i,现存入p元,不计复利,n年后可得钱数为(C)。A、P×(1+i*n)

B、P×(i+1)*n

C、p×(1+i)n

D、p×(i+n)11.

可行性研究是在(A)之前A、系统开发B、测试C、试运营

D、集成测试12.

可行性研究需要时间长短取决于系统规模,普通来说,可行性研究成本只是预期总成本(C)。A、1%

B、20%

C、8%

D、50%13.

国内正式颁布实行(B)对计算机病毒定义具备法律性、权威性。A.《计算机软件保护条例》B.《中华人民共和国计算机信息系统安全保护条例》C.《中华人民共和国著作权法》D.《计算机病毒防治管理办法》14.

效率是一种性能规定,因而应当在如下哪个阶段规定?BA、可行性分析B、需求分析C、概要设计D、详细设计15.

需求规格阐明书作用不涉及(D)A、软件验收根据B、顾客与开发人员对软件要做什么共同理解C、软件可行性研究根据D、软件设计根据16.

数据字典是用来定义(D)中各个成分详细含义。A、程序流程图B、功能构造图

C、系统构造图D、数据流程图17.

数据流程图是(A)办法中用于表达系统逻辑模型一种图形工具。A、SA

B、SD

C、SP

D、SC18.

DFD中每个加工至少有(A)。A、一种输入流或一种输出流

B、一种输入流和一种输出流C、一种输入流

D、一种输出流19.

需求分析阶段核心任务是拟定(D)A、软件开发办法B、软件开发工具C、软件开发费D、软件系统功能20.

在SD办法中全面指引模块划分最重要原则是(D)。A、程序模块化B、模块高内聚C、模块低耦合D、模块独立性21.

在模块3种基本属性中,反映模块内部特性是(C)。A、接口B、功能

C、逻辑D、状态22.

模块耦合性可以按照耦合限度高低进行排序,如下哪一项符合从低到高对的顺序(D)。A、数据构造耦合,公共耦合,控制耦合,内容耦合B、数据耦合,控制耦合,数据构造耦合,公共耦合C、无直接耦合,数据构造耦合,内容耦合,控制耦合D、无直接耦合,数据耦合,控制耦合,内容耦合23.

PDL是描述解决过程(C)A、做什么B、为什么做C、怎么做D、对谁做24.

(D)工具在软件详细设计过程中不采用。A、鉴定表

B、IPO图

C、PDL

D、DFD图25.

为高质量地开发软件项目,在软件构造设计时,必要遵循(A)原则。A.信息隐蔽B、质量控制

C、程序优化D、数据共享26.

当一种模块直接使用另一种模块内部数据,这种模块之间耦合为(D)A、数据耦合B、公共耦合C、标记耦合D、内容耦合27.

详细设计与概要设计衔接图形工具是(B)。

A、DFD图B、SC图C、PAD图D、程序流程图28.

下列几种类型中,耦合性最弱是(D)。

A、内容型B、控制型C、公共型D、数据型29.

软件构造使用图形工具,普通采用(C)图。

A、DFD

B、PAD

C、SC

D、ER30.

在七种偶合中,最低偶合是(D)。A、内容偶合B、公共偶合C、数据偶合D、非直接偶合

二、简答题1.什么是软件工程?软件工程目的是什么?答:软件工程是①将系统化、规范、可度量办法应用于软件开发、运营和维护过程,即将工程化应用于软件开发和管理之中,②对①中所选办法研究。目的:1

合理预算开发成本,付出较低开发费用。2

实现预期软件功能,达到较好软件性能,满足顾客需求。3

提高软件可维护性,减少维护费用。4

提高软件开发生产率,及时交付使用2.指出瀑布模型中下列任务顺序:验收测试,项目筹划,单元测试,需求评审,成本预计,概要设计,详细设计,系统测试,设计评审,编码,需求规格阐明书。答:项目筹划,成本预计,需求规格阐明书,需求评审,概要设计,详细设计,设计评审,编码,单元测试,系统测试,验收测试3.可行性研究报告重要内容是什么?答:可行性研究重要涉及如下几种某些:

(1)概述(2)技术可行性(3)项目成熟限度(4)市场需求状况和风险分析(5)投资估算及资金筹措(6)经济与社会效益(7)综合实力和产业基本(8)项目实行进度筹划(9)其他尚需要阐明必要方面(10)结论4.什么是需求分析?需求分析阶段基本任务是什么?答:所谓"需求分析",是指对要解决问题进行详细分析,弄清晰问题规定,涉及需要输入什么数据,要得到什么成果,最后应输出什么。可以说,“需求分析”就是拟定要计算机“做什么”。任务:拟定软件项目目的和范畴。调查使用者规定,分析软件必要做什么,编写需求规格阐明书等它有关文档,并进行必要需求审查。除此之外,还涉及需求变更控制,需求风险控制,需求版本控制等对需求管理工作5.什么是构造化分析办法?该办法使用什么描述工具?答:构造化分析办法是面向数据流办法,因而,此办法研究核心是数据构成和数据流向和对数据加工解决。构造化分析办法用抽象模型概念,按照软件内部数据传递、变换关系,自顶向下逐级分解,直至找到满足功能规定所有可实现软件元素为止描述工具:1系统流程图2数据流程图3数据字典4IPO图5层次方框图6实体—关系图7状态—变迁图6.构造化分析办法通过哪些环节来实现?答:1)

拟定系统功能规定2)

拟定系统数据规定3)

拟定系统操作规定和界面规定4)

拟定系统性能规定5)

拟定系统运营规定6)

获得当前系统物理模型7)

抽象出当前系统逻辑模型8)

建立目的系统逻辑模型。9)

修正开发筹划10)

如果需要则开发系统原型7.什么是数据流图?其作用是什么?其中基本符号各表达什么含义?答:数据流图:简称DFD,就是采用图形方式来表达系统逻辑功能、数据在系统内部逻辑流向和逻辑变换过程,是构造化系统分析办法重要表达工具及用于表达软件模型一种图示办法。数据流图基本符号意思:1.矩形表达数据外部实体;2.圆角矩形表达变换数据解决逻辑;3.少右面边矩形表达数据存储;4.箭头表达数据流。8.什么是数据字典?其作用是什么?它有哪些条目?答:数据字典,重要用来描述数据流程图中数据流、数据存储、解决过程和和数据源点/终点。作用:数据流程图描述了系统逻辑构造,其中四个基本图形元素含义无法在数据流程图中详细阐明,因而数据流程图需要与其她工具配合使用,数据字典就是这样工具之一。涉及条目:数据流词条数据元素词条数据存储词条数据加工解决词条数据源点及终点词条9.什么是概要设计?有哪些基本任务?答:概要设计:依照顾客需求先拟定软件系统总体构造和总设计原则基本任务:设想供选取方案。推荐最佳方案。功能分解,拟定软件构造。设计软件构造。制定测试筹划。数据设计。书写文档。涉及总体设计规格阐明书。顾客手册。测试筹划。设计审查和复审。10.

详细设计基本任务是什么?有那几种描述办法?答:详细设计阶段任务是要为编写程序代码设计“图纸”,由程序员按“图纸”用某种高档程序设计语言编写程序代码。重要办法有设计程序流程图,表格设计符号以及过程设计语言。11.

什么是变换流?什么是事物流?答:变换型数据流可以划分为明显三某些:逻辑输入,中心变换,逻辑输出

事务流特点是数据沿某个输入途径流动,该途径将外部信息转换成事务,其中发射出多条事务解决途径中心解决被称为中心事务12.

模块内聚有哪几种?模块间耦合有哪几种?答:内聚分为七种类型:巧合内聚——一种模块执行各种完全互不有关动作,那么这个模块就有巧合内聚

逻辑内聚——当一种模块执行一系列有关动作时,称其有逻辑内聚。时间性内聚——当一种模块内各种任务是与时间关于时,这个模块具备时间性内聚。过程内聚——模块执行若干动作之间有顺序关系。通信内聚——模块执行若干动作之间有顺序关系,并且所有动作是在相似数据上执行。信息内聚——一种模块中执行一系列动作,每个动作均有自己入口点和解决代码,所有动作都作用在相似数据构造上,这样模块叫做信息内聚。功能性内聚——一种模块中各个某些都是完毕某一详细功能必不可少构成某些耦合分为七类:内容耦合——如果一种模块直接参照另一种模块内容,则这两个模块是内容耦合。公共耦合——如果各种模块都访问同一种公共数据环境,则称它们是公共耦合。外部耦合——如果两个模块都访问同一种全局简朴变量而不是同一全局数据构造,并且,不是通过参数表传递该全局变量信息,则这两个模块属于外部耦合。控制耦合——如果模块A向模块B传递一种控制信息,则称这两个模块是控制耦合数据构造耦合——当一种模块调用另一种模块时传递了整个数据构造,这两个模块之间具备数据构造耦合。数据耦合——如果两个模块传递是数据项,则这两个模块是数据耦合。非直接耦合——如果两个模块之间没有直接关系,它们之间联系完全通过主模块控制和调用来实现,这就是非直接耦合。三、应用题1.某旅馆电话服务如下:可以拨分机号和外线号码。分机号是从7201至7299。外线号码先拨9,然后是市话号码或长话号码。长话号码是以区号和市话号码构成。区号是从100到300中任意数字串。市话号码是以局号和分局号构成。局号可以是455,466,888,552中任意一种号码。分局号是任意长度为4数字串。写出在数据字典中,电话号码数据条目定义(即构成)。名称简称类型长度取值范畴分机号Extension_Number字符47201..7299外线市话号Addition_Internumber字符99+[455|466|888|552]+4{数字}4外线长话号Addition_Extennumber字符129+[100|101|102|..|298|299|300]+[455|466|888|552]+4{数字}4

2.下面是旅客订飞机票需求描述,试画出分层数据流程图。顾客将订票单交给预订系统:(1)如果是不合法订票单,则输出无效订票信息;(2)对合法订票单预付款登录到一种记账文献中;(3)系统有航班目录文献,依照填写旅行时间和目地为顾客安排航班;(4)在获得对的航班信息和确认已交了某些预付款时发出取票单,并记录到取票单文献中。顾客在指定日期内用取票单换取机票:(1)系统依照取票单文献对取票单进行有效性检查,无效输出无效取票信息;(2)持有有效取票单顾客在补交了剩余款后将获得机票;(3)记账文献将被更新,机票以及顾客信息将被登录到机票文献。订单中有订票日期、旅行日期、时间规定(上午、下午、晚上)、出发地、目地、顾客姓名、身份证号、联系电话。

0层流程图

预定流程图

取机票流程图3.一种简化图书馆信息管理系统有如下功能:(1)借书:输入读者借书证,系统检查借书证与否有效;查阅借书文献,检查该读者所借图书与否超过10本,若已达10本,显示信息“已经超过借书数量”,拒借;未达10本,办理借书(检查库存、修改库存信息并将读者借书信息登入借书记录)(2)还书:输入书号和读者号,从借书记录中读出与读者关于记录,查阅所借日期,如果超过3个月,作罚款解决。否则,修改库存信息与借书记录。(3)查询:可通过借书记录、库存信息查询读者状况、图书借阅状况及库存状况,打印各种登记表。请就以上系统功能画出分层DFD图,并建立重要条目数据字典。

0层数据流程图

还书流程图借书流程图

查询流程图数据字典:元素名称名称类型阐明IPO1还书解决解决依照书号做还书解决,违规做惩罚IPO2有效性检查解决检查读者号,图书号有效性IPO3借书解决解决按读者号,图书号进行借书解决IPO4查询解决管理员对某些基本信息进行查询IPO5打印报表解决打印查询到信息IPO6惩罚管理解决依照规则对延期予以相应惩罚IPO7数量检查解决对读者借出数量与否符合规定进行检查DS001读者信息数据存储读者信息录入,修改,删除,保存DS002库存信息数据存储图书基本状况以及所有图书整体状况DS003错还信息数据存储存储借还书信息,系统自动解决,不能人工录入DS004惩罚信息数据存储存储延期惩罚信息

电大天堂【软件工程】形考作业二:(第5~7章)一、选取题1.从本质上说,面向对象是“先”拟定(A)后拟定执行动作。A.动作主体

B.属性

C.关系

D.办法2.(B)是对象静态特性。A.办法

B.属性

C.关系

D.操作3.对象(D)使对象动态特性A.特性

B.属性

C.关系

D.操作4.属于某个类一种详细对象称为该类(A)。A.实例

B.虚拟

C.继承

D.多态5.UML是(A)。A)

一种可视化建模语言B)

是一种可视化程序设计语言C)

是一种过程D)

是一种办法6.封装作用是(A)。A.复用

B.对象

C.实例

D.办法8.面向对象分析核心在于建立(B)模型。A.建立对的模型B.辨认问题域对象C.辨认对象之间关系D.上面所有9.面向对象分析过程中建立模型有(D)。

A.数据模型、功能模型、活动模型

B.对象模型、功能模型、测试模型

C.属性模型、功能模型、对象模型

D.对象模型、功能模型、动态模型10.下列(C)不是分析建模目。

A.定义可验证软件需求

B.描述客户需求

C.开发一种简朴问题解决方案

D.建立软件设计基本11.下列(C)不属于面向对象分析模型。

A.用例图

B.类图

C.实体关系图

D.顺序图12.(A)用于描述系统中概念层次对象。A.分析类B.界面类C.实体类D.控制类13.在基于用例面向对象分析过程中,定义交互行为核心在于通过描述分析类实例之间(A)将用例职责分派到分析类中。A.消息传递B

关联关系C

继承关系D

上下文关系14.用例实现细节不会在(B)描述。A.用例阐明B.用例图C.活动图D.顺序图15.用例职责普通分派给(D)对象。A.发送消息B.接受消息C.发送和接受双方D.分析类16.组织机构图是(C)。A.UML一种最新图B.类图一种C.用于辨认角色辅助图D.用例图一种17.在图书馆系统中,如果已经构造了一种普通借书者类,日后发现图书馆学生和教师在借书中有不同规定。请问在面向对象设计中用(B)办法可以以便地设计这两个类?A.信息隐藏

B.继承

C.动态联编

D.代码复制18.框架是一组可用于不同应用(A)集合A.类

B.对象

C.模块

D.代码19.下面哪个选项不能描述子系统之间关系。(D)A.祈求——服务关系

B.继承关系

C.依赖关系

D.数据关系20.每个子系统接口上定义了若干(B),体现了子系统功能。A.阐明

B.操作C.属性

D.关系21.普通将具备共性非功能规定设计在(B),以减少重新开发工作量。A.接口层

B.中间层

C.最低层

D.最高层22.每个用例至少应当有一种(C),它普通没有属性而只有办法,只是起协调和控制作用。A.接口类

B.实体类

C.控制类

D.界面类23.类有三种类型即(A)。A.边界类、实体类、控制类B.实体类、数据类、界面类C.控制类、实体类、数据类D.界面类、控制类、公共类24.下面那个选项不是对的面向对象设计思想。(C)A.对接口进行设计B.发现变化并且封装它C.先继承后组合D.先组合后继承25.定义类属性类型时尽量使用已有类型,太多自定义类型会减少系统(A)指标。A.可维护性

B.安全性C.开发效率D.可移植性

二、简答题1.举例阐明类和对象关系。答:学生可作为一种类---学生类,每个学生就是这个学生类一种实例,例如,学生张三就是学生类一种实例。2.面向对象分析核心环节有哪些?应建立哪几种模型?答:核心环节有辨认问题域对象并分析它们互相之间关系,建立简洁、精准、可理解对的模型;应建立模型有功能模型,对象模型,动态模型。3.什么是实体类、边界类和控制类?为什么将分析类划提成这三种类型?答:(1)实体类保存要存入永久存储体信息。实体类普通在事件流或交互图中,是对顾客最故意义类。边界类位于系统与外界交界处,涉及所有窗体、报表、系统硬件接口、与其她系统接口。控制类负责协调其她类工作。每个用例中至少应当有一种控制类,它控制用况中事件顺序。(2)分为三种类型是由于它们各自功能不同。界面类——描述系统与角色之间接口。控制类——在分析模型内表达协调、顺序、事务解决以及控制其她对象类。实体类——为需要长期保存信息进行建模类。

4.UML中有哪几类个视图,它们作用分别是什么?答:(1)用例视图(Use-Caseview)用例视图用于描述系统功能集。它是从系统外部以顾客角度,对系统做抽象表达。用例视图所描述系统功能依托于外部顾客或另一种系统触发激活,为顾客或另一种系统提供服务,实现与顾客或另一种系统之间交互。用例视图中可以包括若干个用例,用例表达系统可以提供功能,用例视图是其她视图核心和基本。其她视图构造依赖于用例视图中所描述内容,由于系统最后目的是实现用例视图中描述功能,同步附带某些非功能性特性,因而用例视图影响着所有其她视图。(2)逻辑视图(Logicalview)如果说用例视图描述系统“做什么”,那么逻辑视图就是描述“怎么做”。系统静态构造描述类、对象和它们之间关系,反映是系统静态特性或构造构成。(3)组件视图(Componentview)组件视图用来描述系统实现构造和行为特性,反映系统各构成元素之间关系。组件视图由组件图实现,重要供开发者和管理者使用。(4)并发视图(ConcurrencyView)并发视图用来描述系统动态和行为特性。并发视图将任务划分为进程或线程形式,通过任务划分引入并发机制,可以高效地使用资源、并行执行和解决异步事件。除了划分系统为并发执行进程或线程外,并发视图还必要解决通信和同步问题。(5)配备视图(DeploymentView)配备视图体现了系统实现环境,反映系统物理架构。配备视图还涉及一种映射,该映射显示在物理架构中组件是如何分派。

5.顺序图在分析阶段作用?答:顺序图描述了一组交互对象间交互方式,它表达完毕某项行为对象和这些对象之间传递消息时间顺序6.活动图在分析阶段作用?答:活动图反映系统中从一种活动到另一种活动流程,强调对象间控制流程。活动图特别适合描述工作流和并行解决过程。详细地说活动图可以描述一种操作过程中需要完毕活动;描述一种对象内部工作;描述如何执行一组有关动作,以及这些动作如何影响它们周边对象;阐明一种业务活动中角色、工作流、组织和对象是如何工作。7.比较构造化设计和面向对象设计区别?答:构造化设计:系统被划提成各种模块,这些模块被组织成一种树型构造。根就是主模块,叶子是最低档功能模块。这棵树也表达调用构造:每个模块都调用自己直接下级模块,并被自己直接上级模块调用。顶层模块负责收集应用程序最重要那些执行方略,底层模块实现解决细节。在这个体系构造中越靠上层位置,概念抽象层次就越高。但是,由于上层模块需要调用下层模块,因此这些上层模块就依赖于下层模块解决细节。也就是说,当实现细节发生变化时,抽象也会受到影响;如果想复用某一种抽象话,就必要把它依赖细节都一起拖过去。

面向对象设计:上层创立抽象不依赖于任何细节,而细节则高度依赖于上层抽象。这种依赖关系变化正是构造化设计与面向对象设计主线区别。8.什么是框架,它与“设计”有什么关系?答:框架是一组可用于不同应用类集合。框架中类普通是某些抽象类并且互相有联系,可以通过继承方式使用这些类,当面向对象设计进行底层设计时,对每个类进行详细设计,设计类属性和操作,优化类之间关系,就可以设计成框架来对类设计进行构架和优化。9.系统物理构架中应当涉及哪些信息?答:用UML配备图描述系统物理构架,然后将需求分析阶段捕获系统功能分派到这些物理节点上。涉及信息为节点拓扑构造、硬件设备配备、通信途径、各个节点上运营系统软件配备、应用软件配备。

三、应用题1.一种多媒体商店系统包括一种由媒体文献构成数据库,有两类媒体文献:图像文献和声音文献。每个媒体文献均有名称和唯一编码,并且文献包括作者信息和格式信息,声音文献还包括声音文献时长(以秒为单位)和作者信息。假设每个媒体文献可以由唯一编码所辨认,系统要提供如下功能:1)

媒体库中可以添加新特别媒体文献。2)

通过给定文献编码查找需要媒体文献。3)

从媒体库中删除指定媒体文献。4)

给出媒体库中媒体文献数量。考虑类imageFile和audioFile应当具备哪些恰当属性和办法答:imageFile类属性有:Name(文献名称),Code(编码),AuthorInfo(作者信息),Format(格式信息);audioFile类除了拥有以上属性外尚有属性Time(文献时长);

imageFile类办法:Add(imageFile)(添加图像文献),Delete(Code)(删除文献),GetFile(Code)(查找文献),GetNumber()(返回媒体文献数量);audioFile类办法:Add(audioFile)(添加声音文献),Delete(Code)(删除文献),GetFile(Code)(查找文献),GetNumber()(返回媒体文献数量)。

2.若把学生当作一种实体,它可以提成各种子实体,如小学生、中学生和大学生等。在面向对象设计中,可以创立如下4个类:类Student、类ElementaryStudent、MiddleStudent;类UniversityStudent。试给出这4个类属性以及它们之间关系。答:Student类为基类,其她三个类都是Student子类。Student类属性有:Name(姓名),Sex(性别),Age(年龄),Class(班级)。ElementaryStudent类属性有:IsTeamMember(与否是少先队员),IsGoodStudent(与否是三好学生)。MiddleStudent类属性为:IsMember(与否是团员),Subject(文科理科)。UniversityStudent类属性为:IsPartyMember(与否党员),Department(学院),Specialty(专业)。

三、应用题1.某学校领书工作流程为:学生班长填写领书单,班主任审查后签名,然后班长拿领书单到书库领书。书库保管员审查领书单与否有班主任签名,填写与否对的等,不对的领书单退回给班长;如果填写对的则予以领书并修改库存清单;当某书库存量低于临界值时,登记需订书信息。每天下班前为采购部门提供一张订书单。用活动图来描述领书过程。解:2.使用顺序图描述下面情景,当顾客在自己计算机上向网络打印机发出一种打印任务时,她计算机便向打印机服务器发送一条打印命令print(file),打印机服务器如果发现网络打印机处在空闲状态,则向打印机发送打印命令print(file),否则向打印队列发送一条保存命令store(file)。

解:

3.某报社采用面向对象技术实现报刊征订计算机管理系统,该系统基本需求如下:(1)报社发行各种刊物,每种刊物通过订单来征订,订单中有代码,名称,订期,单价,份数等项目,订户通过填写订单来订阅报刊。

(2)报社下属各种发行站,每个站负责收集登陆订单、打印收款凭证等事务。

(3)报社负责分类并记录各个发行站送来报刊订阅信息。

请就此需求建立对象模型。解:

电大天堂【软件工程】形考作业三:(第8~11章)一、选取题1.构造化语言是介于自然语言和形式语言之间一种(D)。A.半形式语言B.计算机语言C.低档语言

D.高档语言2.程序设计语言技术特性不应涉及(C)。A、数据构造描述性B、抽象类型描述性C、数据库易操作性D、软件可移植性3.程序三种基本控制构造是(B)。A.过程、子程序和分程序

B.顺序、选取和重复C.递归、堆栈和队列

D.调用、返回和转移4.构造化程序设计重要强调是(D)。A.程序规模B.程序效率

C.程序设计语言先进性D.程序易读性5.下列关于功能性注释不对的说法是(B)。A.功能性注释嵌在源程序中,用于阐明程序段或语句功能以及数据状态B.注释用来阐明程序段,需要在每一行都要加注释C.可使用空行或缩进,以便很容易区别注释和程序D.修改程序也应修改注释6.下列关于效率说法不对的是(D)。A.效率是一种性能规定,其目的应当在需求分析时给出B.提高程序效率主线途径在于选取良好设计办法,数据构造与算法C.效率重要指解决机时间和存储器容量两个方面D.程序效率与程序简朴性无关7.构造化维护与非构造化维护重要区别在于(B)。A.软件与否构造化

B.软件配备与否完整

C.程序完整性

D.文档完整性8.关于JAVA语言下列说法不对的是(B)。A.跨平台

B.动态指针

C.解释型

D.面向对象9.使用白盒测试办法时,拟定测试数据应依照(A)和指定覆盖原则。A程序内部逻辑

B.程序复杂构造C.使用阐明书

D.程序功能10.

确认测试重要涉及文档是(A)。A、需求规格阐明书B、概要设计阐明书C、详细设计阐明书D、源程序11.

测试核心问题是(D)。A.如何组织对软件评审

B.如何验证程序对的性C.如何采用综合方略

D.如何选取测试用例12.

黑盒测试在设计测试用例时,重要研究(A)。A.需求规格阐明

B.详细设计阐明C.项目开发筹划

D.概要设计阐明与详细设计阐明13.

下面哪些测试属于黑盒测试(B)。A、途径测试B、等价类划分C、条件判断D、循环测试14.

在下述哪一种测试中,测试人员必要接触到源程序(B)。A、功能测试B、构造测试C、功能测试和构造测试D、性能测试15.

检查软件产品与否符合需求定义过程称为(D)。A、确认测试B、集成测试C、验收测试D、验证测试16.

软件测试办法中,黑盒、白盒测试法是惯用办法,其中白盒测试重要用于测试(D)。A、

构造合理性B、软件外部功能C、程序对的性D、程序内部逻辑17.

软件维护中,因修改交互输入顺序,没有对的记录而引起错误是(A)产生副作用。A、文档B、数据

C、编码D、设计18.

如下属于软件维护阶段文档是(C)。A、软件需求阐明B、操作手册C、软件问题报告D、测试分析报告19.

产生软件维护副作用,是指(C)。A、开发时错误

B、隐含错误

C、因修改软件而导致错误

D、运营时误操作20.

维护中,因误删除一种标记符而引起错误是(C)副作用。A、文档B、数据C、编码D、设计21.

可维护性特性中,互相增进(A)。A、可理解性和可测试性B、效率和可移植性

C、效率和可修改性

D、效率和构造好22.

软件维护困难重要因素是(C)A、费用低

B、人员少

C、开发办法缺陷D、顾客不配合23.

软件维护费用高重要因素是(C)。A、人员少B、人员多C、生产率低D、生产率高24.

为了适应软硬件环境变化而修改软件过程是(C)。A、校正性维护

B、完善性维护

C、适应性维护D、防止性维护25.

可维护性特性中,互相矛盾是(B)A.可理解性与可测试性B.效率与可修改性C.可修改性和可理解性D.可理解性与可读性26.

各种不同软件维护中,以(C)维护所占维护量最小。A、

纠错性维护B、代码维护C、防止性维护D、文档维护27.

在变更控制中,(B)可以用来保证由不同顾客所执行并发变更。A.异步控制B.同步控制C.存取控制D.基线控制28.

变更控制是一项最重要软件配备任务,其中“检出”和(A)解决实现了两个重要变更控制要素,即存取控制和同步控制。A.登入B.管理C.填写变更规定D.审查29.

用图表达软件项目进度安排,下列说法中对的是(B)A.可以反映各种任务之间复杂关系B.可以直观表达任务之间互相依赖制约关系C.可以表达哪些任务是核心任务D.可以表达子任务之间并行和串行关系30.

基线可作为软件生存期中各开发阶段一种检查点。当采用基线发生错误时,可以返回到近来和最恰当(C)上A.配备项B.程序C.基线D.过程

二、简答题1.为建立良好编程风格应遵循什么原则?答:1)节简化①不使用不必要变量和函数②避免变量重名,变量重名可导致很难被发现错误。③尽量减小代码量。④尽量减少代码执行时间,提高执行效率。⑤避免功能冗余模块。⑥尽量不使用全局变量。2)模块化

①保证物理和逻辑功能密切有关。

②限定一种模块完毕一种独立功能,

提高模块内聚度。

③检查代码重复率,重复多代码,

要抽出来作为一种单独模块。3)简朴化

①采用直接了当算法,避免使用技巧

性高和难懂代码。

②使用简朴数据构造,避免使用多维

数组、指针和复杂表。

③注意对象命名一致性。

④以手工方式简化算术和逻辑表达式。4)构造化①按原则化顺序阐明数据;②按字母顺序阐明对象名③使用读者明了构造化程序部件;④采用直截了当算法;⑤依照应用背景排列程序各个某些;⑥不随意为效率而牺牲程序清晰度和可读性;⑦让机器多做啰嗦工作,如重复、库函数;⑧用公共函数调用代替重复浮现表达式;⑨避免循环、分支嵌套层数过高;⑩单入口单出口。5)文档化(documentation)①有效、恰本地使用注释。②协调使用程序块注释和程序行注释。③保持文档和程序同步。6)格式化(layout)①始终采用统一缩进规则;②恰当插入括号表白运算顺序、排除二义性;③有效地使用空格符以区别程序不批准群。2.什么是软件测试?答:软件测试从广义上讲,是指软件产品生存周期内所有检查、评审和确认活动。从狭义上讲,软件测试是为了发现错误而执行程序过程。或者说,软件测试是依照软件开发各个阶段规格阐明和程序内部构造而精心设计一批测试用例,用这些测试用例运营程序,以发现程序错误过程。3.软件测试原则是什么?答:软件测试原则有:1)

应当把测试贯穿在整个开发过程之中。事实上,从需求分析阶段开始,每个阶段结束之前都要进行阶段审查,目是尽早发现和纠正错误。2)

每个测试用例都应当涉及测试输入数据和这组数据输入作用下预期输出成果。在实际操作中可以列出一张表格,涉及每个测试用例编号、类型、输入数据、预期输出成果、实际输出成果、出错因素分析。3)

要对每个测试成果进行全面检查,不要漏掉已经浮现错误迹象。4)

程序员应当尽量避免检查自己编写代码。测试工作需要严格工作作风,程序员在测试自己编写代码时往往会带有某些倾向性,使得她们工作中经常浮现某些疏漏。并且,程序员对设计规格阐明书理解错误而引入错误更是难于发现。5)

在设计测试用例时,应当涉及有效、盼望输入状况,也要涉及无效和不盼望输入状况。既可以验证程序正常运营合理输入,也可以验证对异常状况解决不合理输入数据以及临界数据。在测试程序时,人们经常过多地考虑合法和盼望输入条件,以检查程序与否做了它应当做事情,而忽视了不合法和预想不到输入条件。事实上,顾客在使用系统时,输入某些错误指令和参数是经常发生,如果软件遇到这种状况不能做出恰当反映,给出相应提示信息,就也许会误导顾客,甚至导致严重损失。6)

软件中遗留错误数量与已经发现错误数量成正比。依照这个规律,对测试中发现错误成堆模块更要仔细测试。例如,在某个知名操作系统中,44%错误仅与4%模块关于。7)

回归测试关联性要特别引起注意,修改一种错误而引起更多错误现象并不少见。8)

测试程序时不但要检查程序与否做了它应当做事情,还要检查它与否做了不该做事情。例如,工资软件中,软件只完毕在编职工工资计算和输出,不在编人员工资是不进行计算和输出。如果软件将不在编人员工资信息也输出显然是不适当。9)

严格执行测试筹划。在测试之前应当有明确测试筹划,内容涉及:要测试软件功能和内容、测试用例和预期成果、测试进度安排、需要工具和资源、测试控制方式和过程等。10)做好测试记录,为记录和维护提供基本数据。4.请阐明集成测试、系统测试和验收测试有什么不同?答:集成测试界于单元测试和系统测试之间,起到“桥梁作用”,普通由开发小组采用白盒加黑盒方式来测试,既验证“设计”,又验证“需求”。

系统测试粒度最大,普通由独立测试小组采用黑盒方式来测试,重要测试系统与否符合“需求规格阐明书”。

验收测试与系统测试相似,重要区别是测试人员不同,验收测试由顾客执行。5.简述单元测试内容。答:单元测试内容有1)模块接口测试:对通过被测模块数据流进行测试。为此,对模块接口,涉及参数表、调用子模块参数、全程数据、文献输入/输出操作都必要检查。

2)局部数据构造测试:设计测试用例检查数据类型阐明、初始化、缺省值等方面问题,还要查清全程数据对模块影响。

3)途径测试:选取恰当测试用例,对模块中重要执行途径进行测试。对基本执行途径和循环进行测试可以发现大量途径错误。4)错误解决测试:检查模块错误解决功能与否包具有错误或缺陷。例如,与否回绝不合理输入;出错描述与否难以理解、与否对错误定位有误、与否出错因素报告有误、与否对错误条件解决不对的;在对错误解决之前错误条件与否已经引起系统干预等。5)边界测试:要特别注意数据流、控制流中刚好等于、不不大于或不大于拟定比较值时出错也许性。对这些地方要仔细地选取测试用例,认真加以测试。

5)此外,如果对模块运营时间有规定话,还要专门进行核心途径测试,以拟定最坏状况下和平均意义下影响模块运营时间因素。此类信息对进行性能评价是十分有用。6.什么是白盒测试?它适应哪些测试?答:白盒测试也叫构造测试,测试者需要理解被测程序内部构造。白盒测试普通依照覆盖准则设计测试用例,有语句覆盖、鉴定覆盖、条件覆盖、鉴定/条件覆盖和条件组合覆盖。

白盒测试合用与单元测试、集成测试、系统测试7.非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?答:1)渐增式可以较早地发现模块界面之间错误,非渐增式则要到最后将所有模块连接起来时才干发现此类错误。

2)非渐增式需要较多人工

3)渐增式有助于排错。如果模块界面间有错,如果用非渐增式,此类错误到最后联合测试时才干发现,此时很难判断错误发生在哪一某些,但如果用渐增式,此类错误就较容易定位,它普通与最新加上去模块关于。

4)渐增式比较彻底。

5)渐增式需要较多机器时间。

6)非渐增式方式,开始时容许几种测试人员并行工作,对大型系统来说,是很故意义。8.采用黑盒技术设计测试用例有哪几种办法?这些办法各有什么特点?答:黑盒测试设计测试用例办法有1)等价类划分法特点是:a、测试内容相似b、一种等价类中某个测试可以发现缺陷,那么这个等价类其她测试也能发现缺陷c、一种等价类中某个测试不能发现缺陷,那么这个等价类其他测试也不能发现缺陷2)边界值分析法特点是:用边界值分析时时常收获较大,它是在等价类边界上选取测试用例3)错误推测法

特点是:没有拟定环节,很大限度上是凭借经验进行4)因果图法

特点是:考虑输入条件间组合关系;考虑输出条件对输入条件信赖关系;测试用例发现错误效率高;能查出功能阐明中某些不一致或漏掉9.白盒测试法有哪些覆盖原则?试对它们检错能力进行比较。答:白盒测试覆盖原则有:语句覆盖->鉴定覆盖->条件覆盖->鉴定/条件覆

盖->条件组合覆盖->途径覆盖

检错能力由弱到强10.

依照下面程序代码,画出程序流程图,然后设计满足条件/鉴定覆盖、条件组合覆盖测试用例。BEGINT:=0IF(X>=80

AND

Y>=80)THENT:=1ELSE

IF(X>=90

AND

Y>=75

)

THENT:=2ENDIF

IF

(X>=75

AND

Y>=90)

THENT:=3

ENDIFENDIFRETURN

测试用例:

条件/鉴定覆盖:1X=80

Y=80

2X=90

Y=753X=50

Y=50条件组合覆盖:1X=80

Y=802X=80

Y=753X=75

Y=804X=75

Y=755X=90

Y=756X=90

Y=707X=80

Y=758X=80

Y=709X=75

Y=9010X=75

Y=9011X=70

Y=9012X=70

Y=8511.

软件可维护性是软件设计师最关注性能,谈谈为了获得软件良好可维护性,在设计时应当注意哪些问题?答:为获得软件良好可维护性,在设计阶段应当做某些变更实验,检查系统可维护性、灵活性和可移植性,设计时应当将此后也许变更内容与其她某些分离开来,并且遵循高内聚、低偶合原则。12.

在软件文档中,你以为哪些文档对于软件维护最重要?需求分析文档、设计文档、程序文档对软件维护很重要13.

软件维护时源程序修改方略是什么?答:软件维护时源程序修改方略是:由于软件维护最后贯彻在修改源程序和文档上。为了对的、有效地修改源程序,普通要先分析和理解源程序,然后才干修改源程序,最后重新测试和验证源程序。14.

软件项目筹划涉及那些内容?答:软件项目筹划内容涉及:1.范畴。对该软件项目综合描述,定义起所要做工作以及性能限制,它涉及:(1)项目目的。(2)重要功能。(3)性能限制。(4)系统接口。(5)特殊规定。(6)开发概述。2.资源。(1)人员资源。(2)硬件资源。(3)软件资源。(4)其她。3.进度安排。进度安排好坏往往会影响整个项目按期完毕,因而这一环节是十分重要。制定软件进度与其她工程没有很大区别,其办法重要有:(1)工程网络图。(2)Gantt图。(3)任务资源表。(4)成本估算。(5)培训筹划。15.什么是软件配备管理?什么是基线?答:配备管理可以系统地解决变更,从而使得软件系统可以随时保持其完整性。配备管理又可成为变更控制,可以用来评估提出变更祈求,跟踪变更,并保持系统在不同步间状态。软件配备管理是一套规范、高效软件开发基本构造。基线是:已经通过正式复审和批准某规约或产品,它因而可以作为进一步开发基本,并且只能通过正式变化控制过程变化。

三、应用题1.请读者参照可以找到编程规范,设计一种C语言编程规范。答:

文献构造1.1版权和版本声明版权和版本声明位于头文献和定义文献开头(参见示例1-1),重要内容有:(1)版权信息。(2)文献名称,标记符,摘要。(3)当前版本号,作者/修改者,完毕日期。(4)版本历史信息。/**Copyright(c),上海贝尔有限公司网络应用事业部*Allrightsreserved.**文献名称:filename.h*文献标记:见配备管理筹划书*摘要:简要描述本文献内容**当前版本:1.1*作者:输入作者(或修改者)名字*完毕日期:7月20日**取代版本:1.0*原作者:输入原作者(或修改者)名字*完毕日期:5月10日*/示例1-1版权和版本声明1.2头文献构造头文献由三某些内容构成:(1)头文献开头处版权和版本声明(参见示例1-1)。(2)预解决块。(3)函数和类构造声明等。假设头文献名称为graphics.h,头文献构造参见示例1-2。【规则1-2-1】为了防止头文献被重复引用,应当用ifndef/define/endif构造产生预解决块。【规则1-2-2】用#include<filename.h>格式来引用原则库头文献(编译器将从原则库目录开始搜索)。【规则1-2-3】用#include“filename.h”格式来引用非原则库头文献(编译器将从顾客工作目录开始搜索)。【建议1-2-1】头文献中只存储“声明”而不存储“定义”【建议1-2-2】不倡导使用全局变量,尽量不要在头文献中浮现象externintvalue这类声明。#ifndefGRAPHICS_H//防止graphics.h被重复引用#defineGRAPHICS_H#include<math.h>//引用原则库头文献⋯#include“myheader.h”//引用非原则库头文献⋯voidFunction1(⋯);//全局函数声明⋯classBox//类构造声明{⋯};#endif示例1-2C头文献构造1.3定义文献构造定义文献有三某些内容:(1)定义文献开头处版权和版本声明(参见示例1-1)。(2)对某些头文献引用。(3)程序实现体(涉及数据和代码)。假设定义文献名称为graphics.cpp,定义文献构造参见示例1-3。//版权和版本声明见示例1-1,此处省略。#include“graphics.h”//引用头文献⋯//全局函数实现体voidFunction1(⋯){⋯}//类成员函数实现体voidBox::Draw(⋯){⋯}示例1-3C定义文献构造1.4目录构造如果一种软件头文献数目比较多(如超过十个),普通应将头文献和定义文献分别保存于不同目录,以便于维护。例如可将头文献保存于include目录,将定义文献保存于source目录(可以是多级目录)。如果某些头文献是私有,它不会被顾客程序直接引用,则没有必要公开其“声明”。为了加强信息隐藏,这些私有头文献可以和定义文献存储于同一种目录。程序版式版式虽然不会影响程序功能,但会影响可读性。程序版式追求清晰、美观,是程序风格重要构成因素。

程序版式

2.1空行空行起着分隔程序段落作用。空行得体(但是多也但是少)将使程序布局更加清晰。空行不会挥霍内存,虽然打印具有空行程序是会多消耗某些纸张,但是值得。因此不要舍不得用空行。【规则2-1-1】在每个类声明之后、每个函数定义结束之后都要加空行。【规则2-1-2】在一种函数体内,逻揖上密切有关语句之间不加空行,其他地方应加空行分隔。2.2代码行【规则2-2-1】一行代码只做一件事情,如只定义一种变量,或只写一条语句。这样代码容易阅读,并且以便于写注释。【规则2-2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。无论执行语句有多少都要加{}。这样可以防止书写失误。【建议2-2-3】尽量在定义变量同步初始化该变量(就近原则)如果变量引用处和其定义处相隔比较远,变量初始化很容易被忘掉。如果引用了未被初始化变量,也许会导致程序错误。本建议可以减少隐患。例如intwidth=10;//定义并初绐化widthintheight=10;//定义并初绐化heightintdepth=10;//定义并初绐化depth2.3代码行内空格【规则2-3-1】核心字之后要留空格。象const、virtual、inline、case等核心字之后至少要留一种空格,否则无法辨析核心字。象if、for、while等核心字之后应留一种空格再跟左括号‘(’,以突出核心字。【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与核心字区别。【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。【规则2-3-4】‘,’之后要留空格,如Function(x,y,z)。如果‘;’不是一行结束符号,其后要留空格,如for(initialization;condition;update)。【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符先后应当加空格。【规则2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等先后不加空格。【规则2-3-7】象“[]”、“.”、“->”此类操作符先后不加空格。【建议2-3-8】对于表达式比较长for语句和if语句,为了紧凑起见可以恰本地去掉某些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))2.4修饰符位置修饰符*和&应当接近数据类型还是该接近变量名,是个有争议活题。若将修饰符*接近数据类型,例如:int*x;从语义上讲此写法比较直观,即x是int类型指针。上述写法弊端是容易引起误解,例如:int*x,y;此处y容易被误解为指针变量。虽然将x和y分行定义可以避免误解,但并不是人人都乐意这样做。【规则2-4-1】应当将修饰符*和&紧靠变量名例如:char*name;int*x,y;//此处y不会被误解为指针2.5注释C语言注释符为“/*…*/”。虽然注释有助于理解代码,但注意不可过多地使用注释。【规则2-5-1】注释是对代码“提示”,而不是文档。程序中注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释花样要少。【规则2-5-2】如果代码本来就是清晰,则不必加注释。否则多此一举,令人厌烦。例如i++;//i加1,多余注释【规则2-5-3】边写代码边注释,修改代码同步修改相应注释,以保证注释与代码一致性。不再有用注释要删除。【规则2-5-4】注释应当精确、易懂,防止注释有二义性。错误注释不但无益反而有害。【规则2-5-5】尽量避免在注释中使用缩写,特别是不惯用缩写。【规则2-5-6】注释位置应与被描述代码相邻,可以放在代码上方或右方,不可放在下方。【规则2-5-7】当代码比较长,特别是有多重嵌套时,应当在某些段落结束处加注释,便于阅读。

命名规则3.1共性规则本节阐述共性规则是被大多数程序员采纳,咱们应当在遵循这些共性规则前提下,再扩充特定规则。【规则3-1-1】标记符应当直观且可以拼读,可望文知意,不必进行“解码”。标记符最佳采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中英文单词普通不会太复杂,用词应当精确。例如不要把CurrentValue写成NowValue。【规则3-1-2】标记符长度应当符合“min-length&&max-information”原则。几十年前老ANSIC规定名字不准超过6个字符,现今C不再有此限制。一般来说,长名字能更好地表达含义,因此函数名、变量名、类名长达十几种字符局限性为怪。那么名字与否越长约好?不见得!例如变量名maxval就比maxValueUntilOverflow好用。单字符名字也是有用,常用如i,j,k,m,n,x,y,z等,它们普通可用作函数内局部变量。【规则3-1-3】命名规则尽量与所采用操作系统或开发工具风格保持一致。例如Windows应用程序标记符普通采用“大小写”混排方式,如AddChild。而Unix应用程序标记符普通采用“小写加下划线”方式,如add_child。别把这两类风格混在一起用。【规则3-1-4】程序中不要浮现仅靠大小写区别相似标记符。例如:intx,X;//变量x与X容易混淆voidfoo(intx);//函数foo与FOO容易混淆voidFOO(floatx);【规则3-1-5】程序中不要浮现标记符完全相似局部变量和全局变量,尽管两者作用域不同而不会发生语法错误,但会使人误解。【规则3-1-6】变量名字应当使用“名词”或者“形容词+名词”。例如:floatvalue;floatoldValue;floatnewValue;【规则3-1-7】全局函数名字应当使用“动词”或者“动词+名词”(动宾词组)。类成员函数应当只使用“动词”,被省略掉名词就是对象自身。例如:DrawBox();//全局函数box->Draw();//类成员函数【规则3-1-8】用对的反义词组命名具备互斥意义变量或相反动作函数等。例如:intminValue;intmaxValue;intSetValue(…);intGetValue(…);【建议3-1-1】尽量避免名字中浮现数字编号,如Value1,Value2等,除非逻辑上确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义名字(由于用数字编号最省事)。函数设计函数是C++/C程序基本功能单元,函数接口两个要素是参数和返回值。。C语言中,函数参数和返回值传递方式有两种:值传递(passbyvalue)和指针传递(passbypointer)

表达式和基本语句4.1参数规则【规则4-1-1】参数书写要完整,不要贪图省事只写参数类型而省略参数名字。如果函数没有参数,则用void填充。例如:voidSetValue(intwidth,intheight);//良好风格voidSetValue(int,int);//不良风格floatGetValue(void);//良好风格floatGetValue();//不良风格【规则4-1-2】参数命名要恰当,顺序要合理。例如编写字符串拷贝函数StringCopy,它有两个参数。如果把参数名字起为str1和str2,例如voidStringCopy(char*str1,char*str2);那么咱们很难弄清晰究竟是把str1拷贝到str2中,还是刚好倒过来。可以把参数名字起得更故意义,如叫strSource和strDestination。这样从名字上就可以看出应当把strSource拷贝到strDestination。尚有一种问题,这两个参数那一种该在前那一种该在后?参数顺序要遵循程序员习惯。普通地,应将目参数放在前面,源参数放在背面。如果将函数声明为:voidStringCopy(char*strSource,char*strDestination);别人在使用时也许会不假思考地写成如下形式:charstr[20];StringCopy(str,“HelloWorld”);//参数顺序颠倒【规则4-1-3】如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。例如voidStringCopy(char*strDestination,constchar*strSource);【规则4-1-4】如果输入参数以值传递方式传递对象,则宜改用“const&”方式来传递,这样可以省去暂时对象构造和析构过程,从而提高效率。【建议4-1-5】避免函数有太多参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数类型或顺序搞错。【建议4-1-6】尽量不要使用类型和数目不拟定参数。C原则库函数printf是采用不拟定参数典型代表,其原型为:intprintf(constchat*format[,argument]⋯);这种风格函数在编译时丧失了严格类型安全检查。4.2返回值规则【规则4-2-1】不要省略返回值类型。C语言中,凡不加类型阐明函数,一律自动按整型解决。这样做不会有什么好处,却容易被误解为void类型。C++语言有很严格类型安全检查,不容许上述状况发生。由于C++程序可以调用C函数,为了避免混乱,规定任何C++/C函数都必要有类型。如果函数没有返回值,那么应声明为void类型。【规则4-2-2】函数名字与返回值类型在语义上不可冲突。违背这条规则典型代表是C原则库函数getchar。例如:charc;c=getchar();if(c==EOF)⋯按照getchar名字意思,将变量c声明为char类型是很自然事情。但不幸是getchar确不是char类型,而是int类型,其原型如下:intgetchar(void);由于c是char类型,取值范畴是[-128,127],如果宏EOF值在char取值范畴之外,那么if语句将总是失败,这种“危险”人们普通哪里料得到!导致本例错误责任并不在顾客,是函数getchar误导了使用者。【规则4-2-3】不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。回顾上例,C原则库函数设计者为什么要将getchar声明为令人迷糊int类型呢?她会那么傻吗?在正常状况下,getchar确返回单个字符。但如果getchar遇到文献结束标志或发生读错误,它必要返回一种标志EOF。为了区别于正常字符,只得将EOF定义为负数(普通为负1)。因而函数getchar就成了int类型。咱们在实际工作中,经常会遇到上述令人为难问题。为了避免浮现误解,咱们应该将正常值和错误标志分开。即:正常值用输出参数获得,而错误标志用return语句返回。函数getchar可以改写成BOOLGetChar(char*c);虽然gechar比GetChar灵活,例如putchar(getchar());但是如果getchar用错了,它灵活性又有什么用呢?【建议4-2-4】有时候函数原本不需要返回值,但为了增长灵活性如支持链式表达,可以附加返回值。例如字符串拷贝函数strcpy原型:char*strcpy(char*strDest,constchar*strSrc);strcpy函数将strSrc拷贝至输出参数strDest中,同步函数返回值又是strDest。这样做并非多此一举,可以获得如下灵活性:charstr[20];intlength=strlen(strcpy(str,“HelloWorld”));

4.3函数内部实现规则不同功能函数其内部实现各不相似,看起来似乎无法就“内部实现”达到一致观点。但依照经验,咱们可以在函数体“入口处”和“出口处”从严把关,从而提高函数质量。【规则4-3-1】在函数体“入口处”,对参数有效性进行检查。诸多程序错误是由非法参数引起,咱们应当充分理解并对的使用“断言”(assert)来防止此类错误。【规则4-3-2】在函数体“出口处”,对return语句对的性和效率进行检查。如果函数有返回值,那么函数“出口处”是return语句。咱们不要轻视return语句。如果return语句写得不好,函数要么出错,要么效率低下。注意事项如下:(1)return语句不可返回指向“栈内存”“指针”,由于该内存在函数体结束时被自动销毁。例如char*Func(void){charstr[]=“helloworld”;//str内存位于栈上…returnstr;//将导致错误}(2)要弄清晰返回究竟是“值”、还是“指针”。4.4其他建议【建议4-4-1】函数功能要单一,不要设计多用途函数。【建议4-4-2】函数体规模要小,尽量控制在50行代码之内。【建议4-4-3】尽量避免函数带有“记忆”功能。相似输入应当产生相似输出。带有“记忆”功能函数,其行为也许是不可预测,由于它行为也许取决于某种“记忆状态”。这样函数既不易理解又不利于测试和维护。在C语言中,函数static局部变量是函数“记忆”存储器。建议尽量少用static局部变量,除非必须。【建议4-4-4】不但要检查输入参数有效性,还要检查通过其他途径进入函数体内变量有效性,例如全局变量、文献句柄等。【建议4-4-5】用于出错解决返回值一定要清晰,让使用者不容易忽视或误解错误状况。4.5使用断言程序普通分为Debug版本和Release版本,Debug版本用于内部调试,Release版本发行给顾客使用。断言assert是仅在Debug版本起作用宏,它用于检查“不应当”发生状况。示例4-5是一种内存复制函数。在运营过程中,如果assert参数为假,那么程序就会中止(普通地还会浮现提示对话,阐明在什么地方引起了assert)。void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize){assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用断言byte*pbTo=(byte*)pvTo;//防止变化pvTo地址byte*pbFrom=(byte*)pvFrom;//防止变化pvFrom地址while(size-->0)*pbTo++=*pbFrom++;returnpvTo;}示例4-5复制不重叠内存块assert不是一种仓促拼凑起来宏。为了不在程序Debug版本和Release版本引起差别,assert不应当产生任何副作用。因此assert不是函数,而是宏。程序员可以把assert当作一种在任何系统状态下都可以安全使用无害测试手段。如果程序在assert处终结了,并不是说具有该assert函数有错误,而是调用者出了差错,assert可以帮助咱们找到发生错误因素。很少有比跟踪到程序断言,却不懂得该断言作用更让人沮丧事了。你化了很多时间,不是为了排除错误,而只是为了弄清晰这个错误究竟是什么。有时候,程序员偶尔还会设计出有错误断言。因此如果搞不清晰断言检查是什么,就很难判断错误是出当前程序中,还是出当前断言中。幸运是这个问题较好解决,只要加上清晰注释即可。这本是显而易见事情,可是很少有程序员这样做。这好比一种人在森林里,看到树上钉着一块“危险”大牌子。但危险究竟是什么?树要倒?有废井?有野兽?除非告诉人们“危险”是什么,否则这个警告牌难以起到积极有效作用。难以理解断言经常被程序员忽视,甚至被删除。【规则4-5-1】使用断言捕获不应当发生非法状况。不要混淆非法状况与错误状况之间区别,后者是必然存在并且是一定要作出解决。【规则4-5-2】在函数入口处,使用断言检查参数有效性(合法性)。【建议4-5-3】在编写函数时,要进行重复考查,并且自问:“我打算做哪些假定?”一旦拟定了假定,就要使用断言对假定进行检查。【建议4-5-4】普通教科书都勉励程序员们进行防错设计,但要记住这种编程风格可能会隐瞒错误。当进行防错设计时,如果“不也许发生”事情确发生了,则要使用断言进行报警。其他编程经验5.1提高程序效率程序时间效率是指运营速度,空间效率是指程序占用内存或者外存状况。全局效率是指站在整个系统角度上考虑效率,局部效率是指站在模块或函数角度上考虑效率。【规则5-1-1】不要一味地追求程序效率,应当在满足对的性、可靠性、健壮性、可读性等质量因素前提下,设法提高程序效率。【规则5-1-2】以提高程序全局效率为主,提高局部效率为辅。【规则5-1-3】在优化程序效率时,应当先找出限制效率“瓶颈”,不要在无关紧要之处优化。【规则5-1-4】先优化数据构造和算法,再优化执行代码。【规则5-1-5】有时候时间效率和空间效率也许对立,此时应当分析那个更重要,作出恰当折衷。例如多耗费某些内存来提高性能。【规则5-1-6】不要追求紧凑代码,由于紧凑代码并不能产生高效机器码。5.2某些有益建议【建议5-2-1】当心那些视觉上不易辨别操作符发生书写错误。咱们经常会把“==”误写成“=”,象“||”、“&&”、“<=”、“>=”此类符号也很容易发生“丢1”失误。然而编译器却不一定能自动指出此类错误。【建议5-2-2】变量(指针、数组)被创立之后应当及时把它们初始化,以防止把未被初始化变量当成右值使用。【建议5-2-3】当心变量初值、缺省值错误,或者精度不够。【建议5-2-4】当心数据类型转换发生错误。尽量使用显式数据类型转换(让人们懂得发生了什么事),避免让编译器轻悄悄地进行隐式数据类型转换。【建议5-2-5】当心变量发生上溢或下溢,数组下标越界。【建议5-2-6】当心忘掉编写错误解决程序,当心错误解决程序自身有误。【建议5-2-7】当心文献I/O有错误。【建议5-2-8】避免编写技巧性很高代码。【建议5-2-9】不要设计面面俱到、非常灵活数据构造。【建议5-2-10】如果原有代码质量比较好,尽量复用它。但是不要修补很差劲代码,应当重新编写。【建议5-2-11】尽量使用原则库函数,不要“创造”已经存在库函数。【建议5-2-12】尽量不要使用与详细硬件或软件环境关系密切变量。【建议5-2-13】把编译器选取项设立为最严格状态。【建议5-2-14】如果也许话,使用PC-Lint、LogiScope等工具进行代码审查。

2.有学生总是问教师“我应当掌握什么程序设计语言更好?”你以为该如何回答这个问题?答:一方面必要掌握C语言,面向对象程序设计语言,各有各优势,看你想往哪方面用了,如果是服务器端应用最佳是java,跨平台性好;如果是,普通桌面应用,C#是较好选取;至于易上手限度,VB,Delphi等是上手比较快;至于数据库应用本人以为PB是最佳选取,VB,Delphi也是比较好选取;当特别强调效率时候VC是不二选取,其中VC最为复杂,也最为灵活,“偷懒程序员用VB,聪颖程序员用Delphi,真正程序员用VC”,如果想要设计某些系统级核心程序,最佳用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论