2025年软件工程过程性与实践能力测评指南及解答_第1页
2025年软件工程过程性与实践能力测评指南及解答_第2页
2025年软件工程过程性与实践能力测评指南及解答_第3页
2025年软件工程过程性与实践能力测评指南及解答_第4页
2025年软件工程过程性与实践能力测评指南及解答_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

A.顾客轻易参与开发B.缺乏灵活性C.顾客与开发者易沟通D.合用可变需求A.需求不确定性高的B.需求确定的C.管理信息D.实时7.构造化措施是一种基于(D)的措施。A.数据构造B.程序构造C.算法D.数据流9.可行性研究的目的是(D)10.设年利率为i,现存入p元,不计复利,n年后可得钱数为(C)。11.可行性研究是在(A)之前B.《中华人民共和国计算机信息系统安全保护条例》C.《中华人民共和国著作权法》D.《计算机病毒防治管理措施》14.效率是一种性能规定,因此应当在如下哪个阶段规定?BA、可行性分析B、需求分析C、概要设计D、详细设计15.需求规格阐明书的作用不包括(D)16.数据字典是用来定义(D)中的各个成分的详细含义的。17.数据流程图是(A)措施中用于表达系统逻辑模型的一种图形工具。A、一种输入流或一种输出流B、一种输入流和一种输出流19.需求分析阶段的关键任务是确定(D)A、软件开发措施B、软件开发工具C、软件开发费D、软件系统的功能20.在SD措施中全面指导模块划分的最重要的原则是(D)。21.在模块的3种基本属性中,反应模块内部特性的是(C)。A、做什么B、为何做C、怎么做D、对谁做24.(D)工具在软件详细设计过程中不采用。25.为高质量地开发软件项目,在软件构造设计时,必须遵照(A)原则。A.信息隐蔽B、质量控制C、程序优化D、数据共享26.当一种模块直接使用另一种模块的内部数据,这种模块之间的耦合为(D)27.详细设计与概要设计衔接的图形工具是(B)。28.下列几种类型中,耦合性最弱的是(D)。30.在七种偶合中,最低偶合是(D)。A、内容偶合B、公共偶合C、数据偶合D、非直接偶合二、简答题1.什么是软件工程?软件工程的目的是什么?2实现预期的软件功能,到达很好的软件性能,满足顾客的需求。4提高软件开发生产率,及时交付使用3.可行性研究汇报的重要内容是什么?(1)概述(2)技术可行性(3)项目成熟程度(4)市场需求状况和风险分析(5)投资估算及资金筹措(6)经济与社会效益(7)综合实力和产业基础(8)项目实行进度计划(9)其他尚需要阐明的必要的方面(10)结论4.什么是需求分析?需求分析阶段的基本任务是什么?答:所谓"需求分析",是指对要处理的问题进行详细的分析,弄清晰任务:确定软件项目的目的和范围。调查使用者的规定,分析软件必须5.什么是构造化分析措施?该措施使用什么描述工具?换的关系,自顶向下逐层分解,直至找到满足功能规定的所描述工具:1系统流程图2数据流程图3数据字典4IPO图5层次方框图6实体一关系图7状态—变迁图6.构造化分析措施通过哪些环节来实现?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号r9号2.下面是旅客订飞机票的需求描述,试画出分层的数据流程图。顾客将订票单交给预订系统:(1)假如是不合法订票单,则输出无效订票信息;(2)对合法订票单的预付款登录到一种记账文献中;(3)系统有航班目录文目的地为顾客安排航班;(4)在获得对的航班信息和确认已交了部分预付款时发出取票单,顾客在指定日期内用取票单换取机票:(1)系统根据取票单文献对取票单进行有效性检查,无效的输出无效取票信息;(2)持有有效取票单的顾客在补交了剩余款后将获得机票;(3)订单中有订票日期、旅行日期、时间规定(上午、下午、晚上)、出发地、目的地、顾客姓顾客DS003取票单文件0层流程图机票文件提交订票单有效性检查提交取票单有效性检查发放机票补交剩余款3.一种简化的图书馆信息管理系统有如下功能:(1)借书:输入读者借书证,系统检查借书证与否有效;查阅借书文献,检查该读者所借图书与否超过10本,若已达10本,显示信息“已经超过借书数量”,拒借;未达10本,办理借书(检查库存、修改库存信息并将读者借可通过借书记录、库存信息查询读者状况、图书借阅请就以上系统功能画出分层的DFD图,并建立办公室办公室处罚信息DS001读者信息DS003借还信息DS002库存信息读者0层数据流程图DSDS001读者信息有效性检查数量检查DS003借还信息借书处理DS002库存信息数据字典:元素名称名称类型阐明根据书号做还书处理,违规做惩罚查询管理员对某些基本信息进行查询打印报表打印查询到的信息惩罚管理根据规则对延期予以对应的惩罚数量检查读者信息读者信息录入,修改,删除,保留库存信息图书的基本的状况以及所有图书的整体状况错还信息惩罚信息存储延期的惩罚信息软件工程作业2(第5~7章)1.从本质上说,面向对象是“先”确定(A)后确定执行的动作。A.动作的主体B.属性C.关系D.措施2.(B)是对象的静态特性。3.对象的(D)使对象的动态特性A.特性B.属性C.关系D.操作4.属于某个类的一种详细对象称为该类的(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.用例图C.实体关系图D.次序图A.分析类B.界面类C.实体类D.控制类13.在基于用例的面向对象分析过程中,定义交互行为的关键在于通过描述分析类实例之间A.消息传递B关联关系C继承关系D上下文关系14.用例的实现细节不会在(B)描述。A.用例阐明B.用例图C.活动图D.次序图A.发送消息B.接受消息C.发送和接受双方B.类图的一种C.用于识别角色的辅助图D.用例图的一种借书中有不一样规定。请问在面向对象设计中用(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.界面类A.边界类、实体类、控制类B.实体类、数据类、界面类C.控制类、实体类、数据类D.界面类、控制类、公共类A.对接口进行设计B.发现变化并且封装它C.先继承后组合D.先组合后继承A.可维护性B.安全性C.开发效率D.可移植性答:学生可作为一种类---学生类,每个学生就是这个学生类的一种2.面向对象分析的关键环节有哪些?应建立哪几种模型?3.什么是实体类、边界类和控制类?为何将分析类划提成这三种类型?答:(1)实体类保留要存入永久存储体的信息。实体类一般在事件流或交互图中,是对顾边界类位于系统与外界的交界处,包括所有的窗体、报表、系统控制类负责协调其他类的工作。每个用例中至少应当有一种控制4.UML中有哪几类个视图,它们的作用分别是什么?答:(1)用例视图(Use-Caseview)(2)逻辑视图(Logicalview)(3)组件视图(Componentview)(4)并发视图(ConcurrencyView)(5)配置视图(DeploymentView)5.次序图在分析阶段的作用?6.活动图在分析阶段的作用?三、应用题1)媒体库中可以添加新的尤其媒体文献。2)通过给定的文献编码查找需要的媒体文献。3)从媒体库中删除指定的媒体文献。4)给出媒体库中媒体文献的数量。考虑类image应当具有哪些恰当的属性和措施Format(格式信息);audioFile类除了拥有以上属性外尚有属性Time(文献时长);imageFile类的措施:Add(imageFile)(添加图像文献),Delete(Code)(删除文献),Get)(查找文献),GetNumber()(返回媒体文献的数量);audioFile类的措施:Add(audioFile)(添加声音文献),DeleteGet)(查找文献),GetNumber()(返回媒体文献的数量)。2.若把学生当作一种实体,它可以提成多种子实体,如小学生、中学生和大学生等。MiddleStudent;类UniversityStudent。试给出这4个类的属性以及它们之间ElementaryStudent类的属性有:IsTeamMember(与否是少先队员),IsGoodStudentMiddleStudent类的属性为:IsMember(与否是团员),Subject(文科理科)。UniversityStudent类的属性为:IsPartyMember(与否党员),Department(学院),三、应用题正正确库库存充足2.使用次序图描述下面的情景,当顾客在自己的计算机上向网络打印机发出一种打印任务时,他的计算机便向打印机服务器发送一条打印命令print(file),打印机服务器假如发现网络打印机处在空闲状态,则向打印机发送打印命令print(file),否则向打印队列发送一条保留命令store(file)。计算机打印服务器打印机队列(空闲)打印(忙)存储队列3.某报社采用面向对象技术实现报刊征订的计算机管理系统,该系统基本需求如下:(1)报社发行多种刊物,每种刊物通过订单来征订,订单中有代码,名称,订期,单价,份数等项目,订户通过填写订单来订阅报刊。(2)报社下属多种发行站,每个站负责搜集登陆订单、打印收款凭证等事务。(3)报社负责分类并记录各个发行站送来的报刊订阅信息。请就此需求建立对象模型。11+分类统计订单信息):书刊信息n软件工程作业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)。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、程序内部逻辑17.软件维护中,因修改交互输入的次序,没有对的的记录而引起的错误是(A)产生18.如下属于软件维护阶段文档的是(C)。19.产生软件维护的副作用,是指(C)。C、因修改软件而导致的错误D、运行时误操作20.维护中,因误删除一种标识符而引起的错误是(C)副作用。21.可维护性的特性中,互相增进的(A)。22.软件维护的困难重要原因是(C)23.软件维护费用高的重要原因是(C)。24.为了适应软硬件环境变化而修改软件的过程是(CA、校正性维护B、完善性维护C、适应性维护D、防止性维护25.可维护性的特性中,互相矛盾的是(B)A.可理解性与可测试性B.效率与可修改性C.可修改性和可理解性D.可理解性与可读性26.多种不一样的软件维护中,以(C)维护所占的维护量最小。A、纠错性维护B、代码维护C、防止性维护D、文档维护A.异步控制B.同步控制C.存取控制D.基线控制28.变更控制是一项最重要的软件配置任务,其中“检出”和(A)处理实现了两个重A.登入B.管理C.填写变更规定D.审查29.用Gantt图表达软件项目进度安排,下列说法中对的的是(B)A.可以反应多种任务之间的复杂关系B.可以直观表达任务之间互相依赖制约关系C.可以表达哪些任务是关键任务D.可以表达子任务之间的并行和串行关系以返回到近来和最恰当的(C)上A.配置项B.程序C.基线D.过程1.为建立良好的编程风格应遵照什么原则?答:1)节简化2)模块化3)简朴化4)构造化②按字母次序阐明对象名③使用读者明了的构造化程序部件;④采用直截了当的算法;⑤根据应用背景排列程序各个部分;⑥不随意为效率而牺牲程序的清晰度和可读性;⑦让机器多做啰嗦的工作,如反复、库函数;⑧用公共函数调用替代反复出现的体现式;⑨防止循环、分支的嵌套层数过高;⑩单入口单出口。①有效、合适地使用注释。②协调使用程序块注释和程序行注释。③保持文档和程序的同步。①一直采用统一缩进规则;②合适插入括号表明运算次序、排除二义性;③有效地使用空格符以区别程序的不一样意群。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、一种等价类中的某个测试可以发现缺陷,那么这个等价类的其他测试也能发现价类中的某个测试不能发现缺陷,那么这个等价类的其他测试也不能发现缺陷2)边界值分析法特点是:用边界值分析时时常收获较大,它是在等价类的边界上选择测试用例3)错误推测法特点是:没有确定的环节,很大程度上是凭借经验进行的4)因果图法特点是:9.白盒测试法有哪些覆盖原则?试对它们的检错能力进行比较。答:白盒测试的覆盖原则有:语句覆盖->鉴定覆盖->条件盖->条件组合覆盖->途径覆盖检错能力由弱到强10.根据下面程序代码,画出程序流程图,然后设计满足条件/鉴定覆盖、条件组合覆盖的ELSEIF(X>=90ANDY>=75)THENIF(X>=75ANDY>=90)THYNNN测试用例:条件/鉴定覆盖:条件组合覆盖:11.软件的可维护性是软件设计师最关注的性能,谈谈为了获得软件良好的可维护性,在设计时应当注意哪些问题?答:为获得软件的良好可维护性,在设计阶段应当做某些变更试验,检查系统的可维护性、灵活性和可移植性,设计时应当将此后也许变更的内容与其他部分分离开来,并且遵照高内聚、低偶合的原则。12.在软件文档中,你认为哪些文档对于软件的维护最重要?需求分析文档、设计文档、程序文档对软件维护很重要13.软件维护时的源程序修改方略是什么?答:软件维护时的源程序修改方略是:由于软件维护最终贯彻在修改源程序和文档上。为了对的、有效地修改源程序,一般要先分析和理解源程序,然后才能修改源程序,最终重新测试和验证源程序。14.软件项目计划包括那些内容?答:软件项目计划的内容包括:1.范围。对该软件项目的综合描述,定义起所要做的工作以及性能限制,它包括:2.资源。(4)其他。件进度与其他工程没有很大的区别,其措施重要有:15.什么是软件配置管理?什么是基线?三、应用题1.请读者参照可以找到的编程规范,设计一种C语言编程规范。1.1版权和版本的申明版权和版本的申明位于头文献和定义文献的开头(参见示例1-1),重要内容有:(1)版权信息。(2)文献名称,标识符,摘要。(3)目前版本号,作者/修改者,完毕日期。(4)版本历史信息。*Copyright(c),上海贝尔有限企业网络应用事业部**文献名称:*文献标识:见配置管理计划书*摘要:简要描述本文献的内容**目前版本: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<>格式来引用原则库的头文献(编译器将从原则库目录开始搜索)。【规则1-2-3】用#include“”格式来引用非原则库的头文献(编译器将从顾客的工作目录开始搜索)。【提议1-2-1】头文献中只寄存“申明”而不寄存“定义”#ifndefGRAPHICS_H//防止graphics.h被反复引用#include<math.h>//引用原则库的头文献#include“myheader.h”//引用非原则库的头文献voidFunction1(…);//全局函数申明classBox//类构造申明#endif1.3定义文献的构造(1)定义文献开头处的版权和版本申明(参见示例1-1)。(2)对某些头文献的引用。(3)程序的实现体(包括数据和代码)。假设定义文献的名称为graphics.cpp,定义文献的构造参见示例1-3。//版权和版本申明见示例1-1,此处省略。//全局函数的实现体{}//类组员函数的实现体}示例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-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类型的指针。上述写法的弊端是轻易引起误解,例如:int*x,y;此处y轻易被误解为指针变量。虽然将x和y分行定义可以防止误解,但并不是人人都乐意这样做。【规则2-4-1】应当将修饰符*和&紧靠变量名例如: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共性规则本节论述的共性规则是被大多数程序员采纳的,我们应当程序中的英文单词一般不会太复杂,用词应当精确。例如不要把CurrentValue【规则3-1-2】标识符的长度应当符合“min-length&&max-information”原则。几十年前老ANSIC规定名字不准超过6个字符,现今的C不再有此限制。一般来说,长名字能更好地体现含义,因此函数名、变量名、类名长达怪。那么名字与否越长约好?不见得!例如变量名maxval就比maxValueUntil0verflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们一般可用作函数【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的例如Windows应用程序的标识符一般采用“大小写”而Unix应用程序的标识符一般采用“小写加下划线”的方式,如add_child。别把这两intx,X;//变量x与X轻易混淆voidfoo(intx);//函数foo与F00轻易混淆【规则3-1-5】程序中不要出现标识符完全相似的局部变量和全局变量,尽管两者的【规则3-1-6】变量的名字应当使用“名词”或者“形容词+名词”。【规则3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的组员函数应当只使用“动词”,被省略掉的名词就是对象自身。DrawBox();//全局函数box->Draw();//类的组员函数【规则3-1-8】用对的的反义词组命名具有互斥意义的变量或相反【提议3-1-1】尽量防止名字中出现数字编号,如Valuel,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不愿为命名动脑筋而字(由于用数字编号最省事)。4.1参数的规则voidSetValue(intwidtvoidSetValue(int,int);//不良的风格floatGetValue(vofloatGetValue();//不良的风格例如编写字符串拷贝函数StringCopy,它有两个参数。假如把参数名字起为strl和str2,例如那么我们很难弄清晰究竟是把str1拷贝到str2中,还是刚好倒过来。可以把参数名字起得更故意义,如叫strSource和strDestination。这样从名字上就可以看出应当把strSource拷贝到strDestination。尚有一种问题,这两个参数那一种该在前那一种该在后?参数的次序要遵照程序员StringCopy(str,“HelloWorld”);//参数次序颠倒【规则4-1-3】假如参数是指针,且仅作输入用,则应在类型前加const,以防止该例如voidStringCopy(char*st【规则4-1-4】假如输入参数以值传递的方式传递对象,则宜改用“const&”方式【提议4-1-5】防止函数有太多的参数,参数个数尽量控制在5个以内。假如参数太C原则库函数printf是采用不确定参数的经典代表,其原型为:4.2返回值的规则C函数,为了防止混乱,规定任何C++/C违反这条规则的经典代表是C原则库函数getchar。按照getchar名字的意思,将变量c申明为char类型是很自然的事情。但不幸的是getchar确实不是char类型,而是int类型,其原型如下:由于c是char类型,取值范围是[-128,127],假如宏EOF的值在char的取值范围之外,那么if语句将总是失败,这种“危险”人们一般哪里料得到!导致本例错误的责【规则4-2-3】不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而回忆上例,C原则库函数的设计者为何要将getchar申明为令人迷糊的int类型呢?他会那在正常状况下,getchar确实返回单个字符。数(一般为负1)。因此函数getchar就成了int类型。我们在实际工作中,常常会碰到上述令人为难的问题。为该将正常值和错误标志分开。即:正常值用输出参数获得,而错误标志用return语句返函数getchar可以改写成BOOLGetChar(char*c);虽然gechar比GetChar灵活,例如putchar(getchar());不过假如getchar用错strcpy函数将strSrc拷贝至输出参数strDest中,同步函数的返回值又是strDest。intlength=strlen(strcpy(str,"HelloWorld"4.3函数内部实现的规则不一样功能的函数其内部实现各不相似,看起来似乎无观点。但根据经验,我们可以在函数体的“入口处”和“出口处【规则4-3-1】在函数体的“入口处”,对参数的有效性进行检查。诸多程序错误是由非法参数引起的,我们应当充足理解并对的使用“断言”(assert)【规则4-3-2】在函数体的“出口处”,对return语句的对的性和效率进行检查。(1)return语句不可返回指向“栈内存”的“指针”,由于该内存在函数{charstr[]=“helloworld”;//str的内存位于栈上}(2)要弄清晰返回的究竟是“值”、还是“指针”。4.4其他提议【提议4-4-2】函数体的规模要小,尽量控制在50行代码之内。是函数的“记忆”存储器。提议尽量少用static局部变量,除非必【提议4-4-4】不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内4.5使用断言断言assert是仅在Debug版本起作用的宏,它用于检查“不应当”发生的状况。示例4-5是一种内存复制函数。在运行过程中,假如assert的参数为假,那么程序就会中止(一般地还会出现提醒对话,阐明在什么地方引起了assert)。void*memcpy(void*pvTo,constvoi{assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用断言byte*pbTo=(byte*)pvTo;//防止变化pvTo的地址byte*pbFrom=(byte*)pvFrom;//防止变化pvFrom的地址}示例4-5复制不重叠的内存块assert不是一种仓促拼凑起来的宏。为了不在程序的Debug版本和Release版本引起差异,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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论