写在前面:这一章主要讲软件开发过程,包含可行性研究、需求分析、总体设计、详细设计和实现,最重要的部分是需求分析和软件设计两大块,结尾附脑图。顺祝商祺!
一、可行性研究
1、什么是数据流图?其作用是什么?其中的基本符合各表示什么含义?
答:(1)数据流图(简称DFD),是结构化分析方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
(2)数据流图的作用
①数据流:是数据在系统内部传播的路径,因此由一组成分固定的数据项组成。
②加工:(又称为数据处理)对数据流进行某些操作或变换。
③数据存储:(又称为文件)指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。
④数据源点或终点:是本软件系统外部环境中的实体(包括人员、组织或其他软件系统),统称外部实体。
(3)基本符号表示的含义
①→:箭头,表示数据流。
②?:圆或椭圆,表示加工。
③=:双杠,表示数据存储。
④口:方框,表示数据的源点或终点。
解析:这里基本不会考DFD的概念,因为应用题里会重点考DFD的画法,理解这里的解答,在画DFD的时候就能规范自己是否缺少元素。
2、在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
可行性研究的任务有哪些?
答:(1)可行性研究的目的是【用最小的代价、在尽可能短的时间内】研究并确定客户提出的问题是否有行得通的解决办法。a.初步确定项目的规模和目标,确定项目的约束和限制。b.分析员进行简要的需求分析,经过压缩的设计,探索出若干种可供选择的主要解决办法。对每种解决方法都要研究它的可行性。
(2)从下述三个方面研究每种解决方案的可行性:
①技术可行性:要确定使用现有的技术能否实现系统,就要对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目能否实现。这里的资源包括已有的或可搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
②经济可行性:进行开发成本的估算以及取得效益的评估,确定要开发的项目是否值得投资开发。对于大多数系统,一般衡量经济上是否合算,应考虑一个最小利润值,经济可行性研究范围较广,包括成本效益分析、公司经营长期策略、开发所需的成本和资源、潜在的市场前景。
③社会可行性:确定要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
3、成本——效益分析的目的是什么?可用哪些指标进行度量?
答:(1)成本效益分析的目的
是从经济角度评价开发一个新的软件项目是否可行。首先估算将要开发的系统的开发成本,然后与可能取得的效益进行比较和权衡。
(2)成本效益的度量指标
①有形效益:可以用货币的时间价值、投资回收期、纯收入等指标进行度量,具体如下:
a.货币的时间价值:经过成本估算后,得到项目开发时所需要的费用,该费用就是项目的投资。项目开发后,应取得相应的效益,有多少效益才合算。
b.投资回收期:累计的经济效益等于最初的投资费用所需的时间。投资回收期越短,就越快获得利润,则该项目就越值得开发。
c.纯收入:整个生存周期之内的累计经济效益(折合成现在值)与投资之差。相当于投资开发一个项目与把钱存入银行中进行比较,若纯收入为零,则项目的预期效益和在银行存款一样,但是开发一个项目要冒风险,因此,从经济观点来看,这个项目可能是不值得投资开发的;若纯收入小于零,那么这个项目显然不值得投资开发。
②无形效益:主要从性质上(公司经营长期策略、潜在的市场前景)、心理上进行衡量,很难直接进行定量的比较。系统的经济效益等于因使用新的系统而增加的收入加上使用新的系统可以节省的运行费用。运行费用包括:操作人员人数、工作时间、消耗的物资等。
解析:投资$-效益=利润。投资:开发成本(软硬件+人员组织+支持设备和材料);
多长时间可以收回投资?T,越早获利$,越值得;
整个生命周期:,差值=0,要同时承担开发风险,不值得。
无形效益=新系统收入增加+运行费用节省
4、可行性研究包括哪些步骤?
简述软件分析员在系统分析中的任务和作用。
答:(1)系统定义:需要分析人员对有关人员进行调查访问,仔细阅读和分析有关的材料,对项目的规模和目标进行定义和确认,清晰地描述项目的一切限制和约束,确保分析人员正在解决的问题确实是要解决的问题。
(2)研究正在运行的系统:①正在运行的系统可能是一个人工操作的系统,也可能是旧的计算机系统,要开发一个新的计算机系统来代替旧的系统。因此,现有的系统是信息的重要来源,要研究它的基本功能、存在问题、运行现有系统费用、新系统新的功能要求、新系统运行时能否减少使用费用等。②收集、研究、分析现有系统的文档资料,实地考察现有系统,在考察的基础上,访问有关人员,然后描绘现有系统的高层系统流程图,与有关人员一起审查该系统流程图是否正确。这个系统流程图反映了现有系统的基本功能和处理流程。
(3)导出新系统的逻辑模型根据对现有系统的分析研究,逐渐明确了新系统的功能、处理流程以及所受的约束,然后使用建立逻辑模型的工具数据流图和数据字典来描述数据在系统中的流动和处理情况。
(4)设计方案分析人员建立了新系统的高层逻辑模型之后,要从技术角度出发,提出实现高层逻辑模型的不同方案,即导出若干较高层次的物理解法。根据技术可行性、经济可行性、社会可行性对各种方案进行评估,去掉行不通的解法,就得到了可行的解法。
(5)推荐可行的方案根据上述可行性研究的结果,应该决定该项目是否值得去开发。若值得开发,那么可行性的解决方案是什么,并且说明该方案可行的原因和理由。
(6)编写可行性研究报告将上述可行性研究过程的结果写成相应的文档,即可行性研究报告,提请用户和使用部门仔细审查,从而决定该项目是否进行开发,是否接受可行的实现方案。
(7)作用:系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现。
二、需求分析
1、论述需求工程过程,说明各阶段关系。
答:需求工程过程包括需求开发和需求管理两个部分。
(1)需求开发的一般分为需求获取、需求分析、编写需求规格说明书、需求验证四阶段:
需求获取:通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求;
需求分析:通过之前需求获取所得到的信息,为最终用户所看到的系统建立一个概念模型,作为对需求的抽象描述;
需求规格说明书:由需求模型构件生成精确的形式化的描述,它将作为用户和开发者之间的一致协议;
需求验证:需求分析的结果应该通过评审、测试等手段验证它的正确性、完整性和一致性。
(2)需求管理主要包括需求基线建立、变更控制及需求跟踪等活动:
需求管理中最基本的任务则是明确需求,并使所有相关人员达成共识;建立需求跟踪能力联系链,确保所有用户需求被正确地应用,并且在需求发生变更时,能够完全地控制其影响范围,始终保持产品与需求的一致性。
2、为什么要进行需求分析?通常对软件系统有哪些需求?
什么是需求分析?需求分析阶段的基本任务是什么?
答:(1)原因:为了开发真正满足用户需求的软件产品,需求分析是软件开发工作获得成功的前提条件,不能满足用户需求的程序只会令用户失望,给开发者带来烦恼。
(2)定义:指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程。
(3)基本任务:要准确地定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。
a.功能需求:所开发的软件必须具备什么样的功能。可靠性和可用性需求、出错处理、可维护性、可扩展性【将来可能提出的要求】。
b.性能需求:待开发的软件的技术性能指标。如存储容量、运行时间等限制。
3、怎样与用户有效地沟通以获取用户的真实需求?
答:访谈是最早开始使用的获取用户需求的技术,也是目前广泛使用的需求分析技术,访谈有两种形式,分别是正式的和非正式的访谈。
正式访谈时:分析员提出一些事先准备好的具体问题。
非正式访谈时:分析员提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法,其中情景分析技术往往非常有效。
4、什么是结构化分析,有什么特点?
答:面向数据流进行需求分析,遵循自顶向下、逐步求精原则。
主要特点:①快速、自然和方便;②成功率较高,发展较为成熟;③简单、易掌握。
适应于:瀑布模型,特别适合于数据处理领域中的应用;
不适应:对规模大的项目,特别复杂的应用不太适应;难于解决软件重用问题;难于适应需求的变化。
三、总体设计
1、简述总体设计的一般过程?
好的软件体系结构设计应遵循哪些原则?
答:总体设计又称为概要设计或初步设计。
通常由两个主要阶段组成:(1)系统设计:确定系统的具体实现方案。(2)结构设计:确定软件结构。好的软件体系结构设计应遵循合适性、结构稳定性、可扩展性、可复用性等原则。
分为9个步骤:设想供选择的方案、选取合理的方案、推荐最佳方案、功能分解、设计软件结构、设计数据库、制定测试计划、书写文档、审查和复审。
2、为每种类型的模块内聚举一个具体例子。
模块的内聚性有哪几种?各表示什么含义?
答:(1)功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可,因此模块不能再分割。功能内聚的模块易于理解、易修改,因为它的功能是明确的、单一的,因此与其他模块的耦合是弱的。功能内聚的模块有利于实现软件的重用,从而提高软件开发的效率。计算雇员年龄并给出生日的子程序就是功能内聚性的,因为它只完成一项工作,而且完成得很好。
(2)顺序内聚:一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算的年龄来确定雇员将要退休的时间,那么它就具有顺序内聚性。而如果它是分别计算年龄和退休时间的,但使用相同生日数据,那它就只具有通讯内聚性。
(3)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。把某一数据结构、文件、设备等操作都放在一个模块内,可达到信息隐藏。一般来说,这些类只着眼于数据的查询、访问和存储。
(4)过程内聚:一个子程序,它产生读取雇员的名字,然后是地址,最后是它的电话号码。这种顺序之所以重要,仅仅是因为它符合用户的要求,用户希望按这种顺序进行屏幕输入。另外一个子程序将读取关于雇员的其它信息。这个子程序是过程内聚性,因为是由一个特定顺序而不是其它任何原因,把这些操作组合在一起的。
(5)偶然内聚(巧合):指一个模块内的各处理元素之间没有任何联系,一个模块完成一组任务,这些任务彼此间即使有关系,关系也比较松散,就叫做偶然内聚。
(6)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。一个模块将打印季度、月份和日开支报告,具体打印哪一个,将由传入的控制标志决定,这个子程序具有逻辑内聚性,它的内部逻辑是由输进去的外部控制标志决定。
(7)时间内聚:把需要同时执行的动作组合在一起形成的模块,一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚。例如,将多个变量的初始化(init)放在同一个模块中实现,或将需要同时使用的多个库文件的打开(open)操作放在同一个模块中,都会产生时间内聚的模块。
解析:公孙通过(功能7顺序6通信5过程4)都是说一个雇员; 偶落实(偶然1逻辑2时间3) 都讲一个模块。它们的内聚性由1-7低到高。
过程内聚(补充):如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚。过程内聚模块的各组成功能由控制流联结在一起,实际上是若干个处理功能的公共过程单元。
3、为每种类型的模块耦合举一个具体例子。
答:(1)数据耦合:指两个模块之间有调用关系,传递的是简单的数据参数,相当于高级语言中的值传递。这种耦合程度较低,模块的独立性较高。计算机网络属于松耦合系统。
(2)控制耦合:当操作A调用操作B时,并且向B传递了一个控制标记,例如遥控器与电器。(3)公共环境耦合:多机系统。(4)内容耦合:汇编程序模块。
(5)标记耦合:当类B被声明为类A某一操作中的一个参数类型时会发生此种耦合。由于类B现在作为类A定义的一部分,所以修改系统就会变得更为复杂。
解析:无直接耦合:指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此模块间耦合性最弱,模块独立性最高。
4、模块化的三个重要特征是什么,阐明各自的作用。
答: (1)相对独立性:可以对模块单独进行设计、制造、调试、修改和存储,这便于由不同的专业化企业分别进行生产;
(2)互换性:模块接口部位的结构、尺寸和参数标准化,容易实现模块间的互换,从而使模块满足更大数量的不同产品的需要;
(3)通用性:有利于实现横系列、纵系列产品间的模块的通用,实现跨系列产品间的模块的通用。
5、衡量模块独立的两个标准是什么?它们各表示什么含义?
什么是耦合性?模块的耦合性有哪些内容?
答:(1)衡量模块独立的两个标准衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
(2)①耦合性也称块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
②内聚性又称块内联系,指模块的功能强度的度量,即一个模块内部各元素彼此结合的紧密程度的度量。若一个模块内各元素(语句之间、程序段之间)联系得越紧密,则它的内聚性就越高。
解析:耦合性(块间各模块联系)独立性;
内聚性(块内各元素结合)独立性
5.2、通常采取哪些措施来降低模块间的耦合度?
答:(1)在耦合方式上:降低模块间接口的复杂性。模块间接口的复杂性包括模块的接口方式、接口信息的结构和数量。接口方式不采用直接引用(内容耦合),而采用调用方式。接口信息通过参数传递且传递信息的结构尽量简单,不用复杂参数结构,参数的个数也不宜太多,如果很多,可考虑模块的功能是否庞大复杂。
(2)在传递信息类型上:尽量使用数据耦合,避免控制耦合,慎用或有控制地使用公共耦合。这只是原则,耦合类型的选择要根据实际情况综合地考虑。
四、详细设计
1、详细设计的基本任务包括哪些?
详细设计的任务是什么?
答:详细设计是软件工程中软件开发的一个步骤,就是对概要设计的一个细化,包括对业务对象、功能逻辑、数据库和人机界面设计等。
主要任务:设计每个模块的实现算法、所需的局部数据结构。
主要目标:实现模块功能的算法,保证逻辑正确且算法描述简明易懂。
(1)数据结构设计:对需求分析、总体设计阶段确定的概念性的数据类型,要进行确切的定义。这一部分的设计内容一般比较多,所以大多数采用小型数据库辅助的方法。
(2)物理设计:对数据库进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储格式、安排和方法,这些都依赖于具体所使用的数据库系统。
(3)算法设计:在总体设计的结构完成后,结构各个环节的实现是多解的。这就需要用系统设计与分析的技术来描述。可以用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。
(4)界面设计:用户界面的设计现在显得比较重要,可以采用字符、图形和多媒体人机界面设计。这就要结合具体的系统来处理。
(5)其他设计:根据软件系统的类型,还可能要进行以下设计:
①代码设计:为了提高数据的输入、分类、存储及检索等操作的效率以及节约内存空间,对数据库中的某些数据项的值要进行代码设计。
②输入/输出格式设计
③人机对话设计:对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容及格式的具体设计。
④网络设计:如果设计的软件是一个分布式系统,那么还要进行网络的拓扑结构设计。
(6)编写设计说明书。
(7)评审:对处理过程的算法和数据库的物理结构都要评审。
2、解释体系结构中深度、宽度、扇出、扇入对软件的影响。
答:深度:表示软件结构中控制的层数。
宽度:表示软件结构中同一层次上的模块总数的最大值。
扇入:指直接调用该模块的上级模块的个数,扇入大表示模块的重用性高、利用率高。
扇出:指该模块直接调用的下级模块的个数,扇出大表示模块的复杂度高。
设计原则:高扇入低扇出
解析:深度层数,宽度同一层;上入下出,高入低出
3、什么是面向数据流的设计方法?它有哪些策略?
事务型软件结构图有什么特点,原因是什么?
什么是“事务流”?
答:(1)面向数据流的设计方法也称结构化设计方法(SD),它与结构化分析(SA)相衔接,它按一定的设计策略将数据流图转换成软件的模块层次结构。
(2)面向数据流的设计策略
①事务型分析设计:一个大的复杂的系统分解成较小的,相对简单的子系统,这些子系统彼此之间相对独立一些,而高层数据流图的数据处理往往反映这些子系统的功能,有平行分别处理的特点,因此,高层数据流图的转换通常可作为事务型处理,把一个加工逻辑看成是一类特定的事务,把它们分别映射成一个模块,最高层模块为系统模块,通过对输入初始命令的判断决定调用哪个模块。这种事务型分析设计的策略也用于较低层数据流图向软件结构图的转换。
②变换型分析设计:变换型数据流图具有主要的处理功能及实现这项处理功能所需要的输入数据流和经过处理后产生的输出数据流。确定了第三部分,高层模块就可分解出三个从属于它的新模块,分别执行输入、变换、输出功能。变换分析设计一般用于对较低层数据流图向软件结构图的转换。
(3)事务流:若某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入的值选择其中一个路径来执行,这种特征的DFD称为事务型的数据流图,这个加工称为事务处理中心。
解析:前期关于事务流、变换流的题型非常多,近几年由于这两种策略已经比较落后,因此考题逐步减少,但是仍在考纲内未删除。
五、实现
1、什么是软件性能?论述软件开发中如何提高软件的性能。
答:软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。由于感受软件性能的主体是人,不同的人对于同样的软件能有不同的主观感受,而且不同的人对于软件性能关心的视角也不同。包括系统响应时间、应用延迟时间、吞吐量、并发用户数和资源利用率。
2、程序的编码风格主要体现在哪几个方面?
答:程序的编码风格即为程序设计风格或编程风格,其主要作用是使无论是程序本人还是其他人,都能比较容易的阅读、理解及修改源代码。
主要表现在四个方面:源程序文档化、数据说明方法,表达式和语句结构及输入/输出方法。