免费智能真题库 > 历年试卷 > 程序员 > 2009年上半年 程序员 上午试卷 综合知识
  第50题      
  知识点:   需求分析   编码   概要设计   可行性分析   软件工程   软件系统   维护   详细设计
  关键词:   编码   测试   概要设计   开发   可行性分析   软件工程   软件系统   维护   详细设计   需求分析   可行性   需求        章/节:   数据库基础知识       

 
一个软件系统的生存周期包含可行性分析和项目开发计划、需求分析、设计(概要设计详细设计)、编码、测试和维护等活动,其中(50)是软件工程的技术核心,其任务是确定如何实现软件系统
 
 
  A.  可行性分析和项目开发计划
 
  B.  需求分析
 
  C.  设计
 
  D.  编码
 
 
 

 
  第55题    2017年上半年  
   24%
应用系统的数据库设计中,概念设计阶段是在( )的基础上,依照用户需求对信息进行分类、聚集和概括,建立信息模型。
  第57题    2016年上半年  
   44%
数据字典存放的是(57)。
  第53题    2009年下半年  
   49%
软件需求分析阶段要进行问题识别、分析与综合等几方面的工作,其中问题识别是双方确定对问题的综合需求,包括功能需求、(53)及用..
   知识点讲解    
   · 需求分析    · 编码    · 概要设计    · 可行性分析    · 软件工程    · 软件系统    · 维护    · 详细设计
 
       需求分析
        需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,明确用户需求,确定新系统的功能。
        调查的重点是"数据"和"处理",以获得用户对数据库的以下4点要求。
        (1)信息要求:指用户需要从数据库中获得信息的内容与性质。通过信息要求可以导出数据要求。
        (2)处理要求:指用户要完成什么处理功能,对处理的响应时间有什么要求,采用批处理还是联机处理方式。
        (3)安全性和完整性要求。
        (4)企业的环境特征:包括企业的规模与结构,部门的地理分布,主管部门对机构的规定与要求,对系统费用/利益的限制。
        调查的方法主要有:跟班作业、开调查会、请专人介绍、设计调查表请用户填写、查阅原系统有关记录。
        需求分析阶段生成的结果如下。
        (1)数据:数据字典(通常包括数据项、数据结构、数据流、数据存储和处理过程),全系统中的数据项、数据流、数据存储的描述。
        (2)处理:数据流图和判定表、数据字典中处理过程的描述。
 
       编码
               编码过程
               在给定了软件设计规格说明书后,下一步的工作就是编写代码。一般来说,编码工作可以分为四个步骤:
               (1)确定源程序的标准格式,制订编程规范。
               (2)准备编程环境,包括软硬件平台的选择,包括操作系统、编程语言、集成开发环境等。
               (3)编写代码。
               (4)进行代码审查,以提高编码质量。为提高审查的效率,在代码审查前需要准备一份检查清单,并设定此次审查须找到的bug数量。在审查时,要检查软件规格说明书与编码内容是否一致;代码对硬件和操作系统资源的访问是否正确;中断控制模块是否正确等。
               编码准则
               在嵌入式系统中,由于资源有限,且实时性和可靠性要求较高,因此,在开发嵌入式软件时,要注意对执行时间、存储空间和开发/维护时间这三种资源的使用进行优化。也就是说,代码的执行速度要越快越好,系统占用的存储空间要越小越好,软件开发和维护的时间要越少越好。
               具体来说,在编写代码时,需要做到以下几点:
               .保持函数短小精悍。一个函数应该只实现一个功能,如果函数的代码过于复杂,将多个功能混杂在一起,就很难具备可靠性和可维护性。另外,要限制函数的长度,一般来说,一个函数的长度最好不要超过100行。
               .封装代码。将数据以及对其进行操作的代码封装在一个实体中,其他代码不能直接访问这些数据。例如,全局变量必须在使用该变量的函数或模块内定义。对代码进行封装的结果就是消除了代码之间的依赖性,提高了对象的内聚性,使封装后的代码对其他行为的依赖性较小。
               .消除冗余代码。例如,将一个变量赋给它自己,初始化或设置一个变量后却从不使用它,等等。研究表明,即使是无害的冗余也往往和程序的缺陷高度关联。
               .减少实时代码。实时代码不但容易出错、编写成本较高,而且调试成本可能更高。如果可能,最好将对执行时间要求严格的代码转移到一个单独的任务或者程序段中。
               .编写优雅流畅的代码。
               .遵守代码编写标准并借助检查工具。用自动检验工具寻找缺陷比人工调试便宜,而且能捕捉到通过传统测试检查不到的各种问题。
               编码技术
                      编程规范
                      在嵌入式软件开发过程中,遵守编程规范,养成良好的编程习惯,这是非常重要的,将直接影响到所编写代码的质量。
                      编程规范主要涉及的三方面内容:
                      .命名规则。从编译器的角度,一个合法的变量名由字母、数字和下画线三种字符组成,且第一个字符必须为字母或下画线。但是从程序员的角度,一个好的名字不仅要合法,还要载有足够的信息,做到“见名知意”,并且在语意清晰、不含歧义的前提下,尽可能地简短。
                      .编码格式。在程序布局时,要使用缩进规则,例如变量的定义和可执行语句要缩进一级,当函数的参数过长时,也要缩进。另外,括弧的使用要整齐配对,要善于使用空格和空行来美化代码。例如,在二元运算符与其运算对象之间,要留有空格;在变量定义和代码之间要留有空行;在不同功能的代码段之间也要用空行隔开。
                      .注释的书写。注释的典型内容包括:函数的功能描述;设计过程中的决策,如数据结构和算法的选择;错误的处理方式;复杂代码的设计思想等。在书写注释时要注意,注释的内容应该与相应的代码保持一致,同时要避免不必要的注释,过犹不及。
                      性能优化
                      由于嵌入式系统对实时性的要求较高,因此一般要求对代码的性能进行优化,使代码的执行速度越快越好。以算术运算为例,在编写代码时,需要仔细地选择和使用算术运算符。一般来说,整数的算术运算最快,其次是带有硬件支持的浮点运算,而用软件来实现的浮点运算是非常慢的。因此,在编码时要遵守以下准则:
                      .尽量使用整数(char、short、int和long)的加法和减法。
                      .如果没有硬件支持,尽量避免使用乘法。
                      .尽量避免使用除法。
                      .如果没有硬件支持,尽量避免使用浮点数。
                      下图是一个例子,其中两段代码的功能完全一样,都是对一个结构体数组的各个元素进行初始化,但采用两种不同的方法来实现。下图(a)采用数组下标的方法,在定位第i个数组元素时,需要将i乘以结构体元素的大小,再加上数组的起始地址。下图(b)采用的是指针访问的方法,先把指针fp初始化为数组的起始地址,然后每访问完一个数组元素,就把fp加1,指向下一个元素。在一个奔腾4的PC上,将这两段代码分别重复10 700次,右边这段代码需要1ms,而左边这段代码需要2.13ms。
                      
                      算术运算性能优化的例子
 
       概要设计
        1)设计软件系统总体结构
        设计软件系统总体结构的基本任务是采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。
        2)数据结构及数据库设计
        (1)数据结构的设计。在需求分析阶段,已经通过数据字典对数据的组成、操作约束和数据之间的关系等方面进行了描述,确定了数据的结构特性,在概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。在概要设计阶段,宜使用抽象的数据类型。
        (2)数据库的设计。数据库的设计是指数据存储文件的设计,主要指以下几个方面。
        ①概念设计。在数据分析的基础上,采用自底向上的方法从用户角度进行视图设计,一般用ER模型来表述数据模型。
        ②逻辑设计。ER模型是独立于数据库管理系统(DBMS)的,要结合具体的DBMS特征来建立数据库的逻辑结构。
        ③物理设计。物理设计就是设计数据模式的一些物理细节,如数据项存储要求、存取方法和索引的建立等。
        3)编写概要设计文档
        文档主要有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。
        4)评审
        对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方法的可行性,关键的处理及内外部接口定义的正确性、有效性以及各部分之间的一致性等都一一进行评审。
 
       可行性分析
        可行性研究的任务就是研究系统开发的必要性和可能性,用最少的代价在尽可能短的时间内确定问题是否值得解决和是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统目标和规模是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。
               可行性分析的内容
               一般来说,系统可行性研究可从技术可行性、经济可行性和操作可行性三个方面进行考虑。
               (1)技术可行性。要确定使用现有的技术能否实现系统,就要对开发系统的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,系统能否实现。技术可行性一般要考虑的情况包括:在给出的限制范围内,能否设计出系统并实现必须的功能和性能;可用于开发的人员是否存在问题。可用于建立系统的其他资源是否具备;相关技术的发展是否支持这个系统。
               (2)经济可行性。进行开发成本的估算以及了解取得效益的评估,确定要开发的系统是否值得投资开发。对于大多数系统,一般衡量经济上是否合算,应考虑一个最小利润值。经济可行性研究范围较广,包括成本效益分析、公司经营长期策略、开发所需的成本和资源、潜在的市场前景等。
               (3)操作可行性。也称为运行环境可行性,包括法律可行性和操作使用可行性(执行可行性)等方面。法律方面主要是指在系统开发过程中可能涉及的各种合同、侵权、责任以及各种与法律相抵触的问题。操作使用方面主要指系统使用单位在行政管理、工作制度和人员素质等因素上能否满足系统操作方式的要求。
               可行性分析的步骤
               可行性分析工作的步骤如下:
               (1)核实问题定义与目标。系统分析师开始正式进行可行性分析工作之前,首先要做的一个工作,就是对该项工作的基础(问题定义)再次核实。这一步骤的关键目标是:使得问题定义更加清晰、明确、没有歧义,并且对于系统的目标、规模以及相关约束与限制条件做出更加细致的定义,确保可行性分析小组的所有成员达成共识。
               (2)研究分析现有系统。对现有系统的仔细分析与研究是十分重要的一项工作,因为它是新系统开发的最好参照物,对其充分分解有助于新系统的开发。
               (3)为新系统建模。在问题定义、现有系统研究的基础上,就可以开始对新的系统进行建模,建模的目的是为了获得一个对新系统的框架认识和概念性认识。通常可以采用以下几种技术:
               .系统上下文关系范围图:其实也就是数据流图的0层图,将系统与外界实体(可能是人、可能是外部系统)的关系(主要是数据流和控制流)体现出来,从而清晰地界定出系统的范围,实现共识。
               .实体关系图:这是系统的数据模型,这个阶段并不需要生成完整的E-R图,而是找到主要的实体以及实体之间的关系即可。
               .用例模型:这是系统的一个动态模型,有关知识将在第9章中详细介绍。
               .域模型:这是采用面向对象的思想,对于系统中主要的实体类找到,并说明实体类的主要特征和它们之间的关系。
               .IPO(Input/Process/Output,输入/处理/输出)表:这是采用传统的结构化思想,从输入、处理、输出的角度进行描述系统。
               (4)用户复核。系统模型建立之后,一项十分重要的工作就是与客户一起进行复核。在这个过程中,如果发现模型与用户的目标有不一致的地方,就应该再次通过访谈、现场观摩、对现有系统分析等手段进行了解,然后在此基础上修改模型。因此也可以说,(1)~(4)的步骤是一个循环,周而复始,直至客户确认了新的系统模型为止。
               (5)提出并评价解决方案。应该尽量列举出各种可行的解决方案,并且对这些解决方案的优点、缺点做一个综合性的评价,以便于下一步决策。在这个步骤中,可以使用候选系统矩阵和可行性分析矩阵,前者是用来记录候选方案之间的相同和不同的工具,后者是用来评定候选方案的工具。
               对于那些明显不可行的,如技术上还没有相应的办法、经济角度明显不可行的、违背企业或行业实际情况的解决方案应该直接过滤掉。
               (6)确定最终推荐的解决方案。明确地指出该项目是否可行?如果可行,什么方面是最合理的?对于这两个问题的回答,是可行性分析研究工作的核心目标。因此在各种解决方案提出之后,紧接下来就应该从中选出一个最合理、最可行的解决方案,并且更加详细地说明理由,而且还要对其进行更加完善的成本效益分析。
               (7)草拟开发计划。制订一个最粗略的开发计划,说明开发所需的资源、人员和时间进度安排。这也将作为可行性分析的一个重要依据,和立项开发后制订项目计划的基础。
               (8)提交可行性分析报告。将研究的结果整理成文,提交用户和管理层,进行审查通过。在国家标准GB/T 8567——88中,规定了可行性分析报告的详细格式和内容,大致包括引言、可行性研究的前提、对现有系统的分析、所建议的系统、可选择的其他系统方案、投资及效益分析、社会因素方面的可行性、结论。
 
       软件工程
        1)软件工程的概念
        为了消除软件危机,通过认真研究解决软件危机的方法,人们认识到软件工程是使计算机软件走向科学的途径,逐渐形成了软件工程的概念,并开辟工程学的新兴领域,即软件工程学。
        2)软件工程的要素
        软件工程具有以下3个要素。
        (1)方法。完成软件工程项目的技术手段。
        (2)工具。支持软件的开发、管理、文档生成。
        (3)过程。将方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。
        3)软件生命周期
        软件生命周期是指软件产品从考虑其概念开始到该软件产品交付使用,直至最终退役为止的整个过程,包括计划阶段、分析阶段、设计阶段、实现阶段、测试阶段和运行维护阶段。
        4)软件开发模型
        比较经典的软件开发模型有瀑布模型、快速原型模型、演化模型、增量模型、螺旋模型、喷泉模型等。
        5)软件开发方法
        软件开发方法有以下几种。
        (1)结构化软件开发(SASD)方法:采用结构化技术来完成软件开发的各项任务。它把软件生命周期划分成若干个阶段,依次完成每个阶段的任务。它与瀑布模型有很好的结合度,是与其最相适应的软件开发方法。
        (2)面向数据结构的软件开发方法:从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其他细节,从而可得到完整的程序结构图。有Jackson方法和Warnier方法。
        (3)面向对象的软件开发方法:随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(Object Modelling Technique)。这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构。
        (4)基于构件化的开发方法:用预先建立的构件和模板,像"搭积木"一样进行建造。
 
       软件系统
        网络系统软件包括网络操作系统和网络协议等。网络操作系统是指能够控制和管理网络资源的软件,是由多个系统软件组成,在基本系统上有多种配置和选项可供选择,使得用户可根据不同的需要和设备构成最佳组合的互联网络操作系统。网络协议是保证网络中两台设备之间正确传送数据的约定。
 
       维护
        维护阶段是软件生存期中时间最长的阶段。软件一旦交付正式投入运行后便进入软件维护阶段。该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。
 
       详细设计
        总体设计只是为整个信息系统提供了一个设计思路和框架,框架内的血肉需要系统的设计人员在详细设计这个阶段充实。总体设计完成后,设计人员要向用户和有关部门提交一份详细的报告,说明设计方案的可行程度和更改情况,得到批准后转入系统详细设计。详细设计阶段主要是在总体设计的基础上,将设计方案进一步详细化、条理化和规范化,为各个具体任务选择适当的技术手段和处理方法。系统的详细设计一般包括如下。
        (1)代码设计。
        代码设计就是信息分类和编码的工作,是将系统中有某些共同属性或特征的信息归并在一起,并利用便于计算机和人识别和处理的符号来表示这些信息的设计工作。
        (2)数据库设计。
        数据库设计就是构建既能客观、准确地反映外部世界,又便于人类大脑认识的概念模型,并在此基础上对数据进行建模,转化为数据库管理系统所支持的数据模型;选择合适的存储结构和存储方法,最终完成数据库的设计工作。
        (3)输入/输出设计。
        输入/输出设计主要是对以记录为单位的各种输入输出报表格式的描述。另外,对人机对话格式的设计和输入输出装置的选择也在这一步完成。
        (4)用户界面设计。
        用户界面设计是指在用户与系统之间架起一座桥梁。主要内容包括:定义界面形式;定义基本的交互控制形式;定义图形和符号;定义通用的功能键和组合键的含义及其操作内容;定义帮助策略,等等。
        (5)处理过程设计。
        总体设计将系统分解为许多模块,并基本决定了每个模块的功能和界面。处理过程设计则定义每个模块的内部执行过程,包括数据的组织、控制流、每一步的具体加工要求和实施细节。通过处理过程设计,为编写程序制定一个周密的计划。一般来说,每一个功能模块都应设计一个处理流程。
   题号导航      2009年上半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第50题    在手机中做本题