1软件工程导论1、软件工程的概念:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。2、软件生命周期的概念:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。3、软件生命周期每个阶段的基本任务:(1)问题定义(2)可行性研究(3)需求分析(4)总体设计(5)详细设计(6)编码和单元测试(7)综合测试(8)软件维护4、什么是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。(2)用户对已完成的软件不满意的现象时有发生。(3)软件产品的质量往往是靠不住的。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。(6)软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。(7)开发生产率提高的速度远跟不上计算机应用普及的需求。软件危机出现的原因:(1)来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。(2)软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。(3)供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。5、可行性研究一般从以下3个方面研究:(1)技术可行性(2)经济可行性(3)操作可行性6、数据流图:是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。有两种类型:变换流和事务流(要画数据流图,给出一个图要知道哪种类型)P1057、数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元瑶池的定义的集合。数据字典的内容由下列4类元素的定义组成:(1)数据流(2)数据流的分量(即数据元素)(3)数据存储(4)处理8、银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算机利息并印出利息清单给储户。用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。2实体-联系图:9、模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。10、信息隐藏和局部化:局部化的概念和信息隐藏概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素是局部化的一个例子。局部化有助于实现信息隐藏。11、衡量模块独立的标准:耦合和内聚耦合:是对一个软件结构内不同模块之间互连程序的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合分为:数据耦合(低耦合)、控制耦合(中等程序的耦合)、公共环境耦合、内容耦合(最高程度的耦合)。内聚:内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。内聚分为:低内聚(偶然内聚、时间内聚)、中内聚(过程内聚、通信内聚)高内聚(顺序内聚、功能内聚)功能内聚是最高程序的内聚。12、启发式规则(填空、选择、判断)P100:(1)改进软件结构提高模块独立性(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应适当(4)模块的作用域应该在控制域之内(5)力争降低模块接口的复杂程度(6)设计单入口单出口的模块(7)模块功能应该可以预测13、描绘软件结构的图形工具:层次图、HIPO图、结构图。(p103)314、结构程序设计概念:结构程序设计是尽可能少用GOTO语句的程序设计方法,最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前向GOTO语句。15、结构程序设计思想:(1)采用自顶向下,逐步求精的程序设计方法(2)使用三种基本控制结构构造程序,分别是顺序、选择、循环(3)采用主程序员组的组织形式(4)采用入口单出口的模块形式16、人机界面设计(大题—P119-128):17、程序复杂程度的定量和度量:18、编码实用标准:(1)系统用户的要求(2)可以使用的编译程序(3)可以得到的软件工具(4)工程规模(5)程序员的知识(6)软件可移植性要求(7)软件的应用领域19、软件测试的目标:(1)测试是为了发现程序中的错误而执行程序的过程(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案(3)成功的测试是发现了至今为止尚未发现的错误的测试。软件测试主要分为白盒测试和黑盒测试两大类。20、测试步骤:(1)模块测试(2)子系统测试(3)系统测试(4)验收测试(5)平行运行21、集成测试:自顶向下集成是一个日益为人们广泛采用的测试和组装软件的途径。自底向上集成测试从“原子”模块(即软件结构最低层的模块)开始组装和测试。22、什么是白盒测试技术?什么是黑盒测试技术?与白盒测试技术有什么不同?为什么做了黑盒测试还要做白盒测试?侧重点是什么?白盒测试以叫做结构测试,把程序看成一个透明的白盒子里,按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据,产生正确地输出信息。白盒测试逻辑覆盖:(1)语句覆盖(2)判定覆盖(3)条件覆盖(4)判定/条件覆盖(5)条件组合覆盖(6)点覆盖(7)边覆盖(8)路径覆盖423、等价划分(大题)?24、什么是调试?调试与测试有什么不同?测试的目的是显示存在错误,而调试的目的是发现错误或导致程序失效的错误原因,并修改程序以修正错误。调试是测试之后的活动。[Beizer,1984]认为,测试和调试在目标、方法和思路上都有所不同,如下:1、测试从一个已知的条件开始,使用预先定义的过程,有预知的结果。调试从一个未知的条件开始,结束的过程不可预计。2、测试过程可以实现设计,进度可实现确定。调试不能描述过程或持续时间。3、测试是显示错误的行为。调试是推理的过程。4、测试显示开发人员的错误。调试是开发人员为自己辩护。5、测试能预期和可控。调试需要想象,经验和思考。6、测试能在没有详细设计的情况下完成。没有详细设计的信息调试不可能进行。7、测试能由非开发人员进行。调试必须由开发人员进行。简单说来:软件测试是一种过程,目的是显示存在的软件错误,通常由软件测试工程师实施。而软件调试是一种方法,一种手段,目的是发现错误原因并解决,一般来说调试是测试后的活动,通常由开发工程师实施。25、软件维护的定义:所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。具体地定义软件维护为以下4个方面。(1)把诊断和改正错误的过程称为改正性维护(2)适应性维护(3)完善性维护(主要的)(4)预防性维护26、软件的可维护性定义:维护人员理解、改正、改动或改进这个软件的难易程度。决定软件可维护性的因素:(1)可理解性(2)可测试性(3)可修改性(4)可移植性(5)可重用性27、软件再工过程:(1)库存目录分析(2)文档重构(3)逆向工程(4)代码重构(5)数据重构(6)正向工程28、面向对象方法学的优点:(1)与人类习惯的思维方法一致(2)稳定性好(3)可重用性好(4)较易开发大型软件产品(5)可维护性好29、对象的概念:描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。30、对象的基本特点:(1)以数据为中心(2)对象是主动的(3)实现了数据封装(4)本质上具有并行性(5)模块独立性好31、类:现实世界中存在的客观事物有些是彼此相似的,人类习惯于把有相似特征的事物归为一类,分类是人类认识客观世界的基本方法。32、封装:在面向对象的程序中,把数据和实现操作的代码集中起来放在对象内部。33、继承:是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,断承是子类自动地共享基类中定义的数据和方法的机制。34、多态性:是指子类对象可以像父类那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。35、重载:有两种重载(1)函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名(2)运算符重载是指同一个运算符可以施加于不同类型的操作数上面。36、对象模型为建立动态模型和功能模型,提供了实质性的框架。37、关联:(1)普通关联(2)关联的角色(3)限定关联(4)关联类38、模型的5个层次:1.主题层、2.类与对象层、3结构层、4.属性层、5.服务层