第1章 软件工程概述
1、软件的定义是什么?并举例说明。
答:软件:是完成预定功能和性能的程序和数据,加上描述程序的操作和使用的文档(程序+数据+文档)。
1)程序:指令序列。
2)数据:操纵信息的数据结构。
3)文档:开发、维护和使用有关的图文资料。
2、软件与硬件相比你认为有什么特点?
软件与硬件相比有如下特点:
1)软件是一种逻辑实体,抽象性;
2)人类智力劳动的产物;
3)不会磨损和老化,存在退化问题;
4)尚未完全摆脱手工艺的开发方式;
5)依附于特定的计算机系统环境。
3、什么是软件危机?软论述软件危机的表现是什么?
答:软件危机:泛指在计算机软件的开发和维护过程中的一系列严重问题。
软件危机的具体表现有以下几方面:
1)开发进度难以预测
2)开发成本难以控制
3)产品不能满足用户的需求
4)质量无法保证
5)难以维护
6)缺少文档资料
4、 什么是软件危机?软论述软件危机产生原因是什么。
软件危机的产生原因如下:
1)用户需求不明确
不清楚软件开发的具体需求;遗漏、有二义性、甚至有错误等。
2)缺乏正确的理论指导
3)软件开发规模越来越大
4)软件开发复杂度越来越高
5、分析瀑布模型的形式和特点。
答:也称“线性顺序模型”、“传统生命周期模型”
瀑布模型:是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水。
(1)瀑布模型的优点
1)提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
4)它提供了一个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
(2)瀑布模型的缺点
1)各个阶段的划分完全固定,阶段之间产生大量的文档。
2)用户只有等到末期才能见到开发成果,从而增加了开发风险。
3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
4)不适应用户需求的变化。
6、讨论瀑布模型是否反映实际的开发过程?
答:由于软件系统的规模、开发工作量、复杂程度等不同,所以,开发过程也不相同。
●在降低软件复杂性,促进软件工程化方面发挥了重要作用,是软件工程实践中应用最广泛的过程模型之一。
7、分析增量模型的优缺点。
答: (1)增量模型,又称为:渐增模型,也称为:有计划的产品改进模型
(2)增量模型的优点
1)将模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
2)以组件为单位开发降低了软件开发的风险。
3)开发顺序灵活。先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
(3)增量模型的缺点
●要求软件系统可以被模块化。
●如果待开发的软件系统很难被模块化,会给增量开发带来很多麻烦。
8、分析喷泉模型的优缺点,来理解喷泉模型。
喷泉模型的优点
●该模型的各个阶段没有明显的界限,可以同步进行开发。
●提高软件项目开发效率,适应于面向对象的软件开发。
喷泉模型的缺点
●喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员。
●喷泉模型要求严格管理文档,使得审核的难度加大。
增量模型与喷泉模型的分析:
增量模型:
1)增量模型:对软件设计有更高的技术要求,要求软件体系结构具有很好的开放性与稳定性,能够顺利地实现构件的集成。
2)在新的构件集成到已建软件系统的结构中时,这个新增的构件应尽量少地改变原来已建的软件结构。
3)因此,增量构件要求具有相当好的功能独立性,其接口应该简单,以方便集成时与系统的连接。
喷泉模型:
1)喷泉模型:主要用于采用对象技术的软件开发项目。
2)喷泉模型:自下而上周期的各阶段是相互迭代和无间隙的特性。
3)软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。
4)无间隙指在各项活动之间无明显边界。
9、讨论和理解软件生存周期,软件生存周期各阶段的关键问题包括哪些?
答:软件生存周期SLC(Software Life Cycle)主要阶段有:
软件计划、需求分析、软件设计、编码、测试、维护与运行、退役等。
(1)第一个阶段:软件计划(Planning)
确定要解决的“问题是什么”以及“解决问题的可行方案”。
(2)第二个阶段:需求分析和规格说明(Requirement Analysis and Specification)
确定目标系统要“做什么”。
(3)第三个阶段:设计(Software Design)
确定目标系统要“怎么做”。
(4)第四个阶段:编码(Coding)
(5)第五个阶段:软件测试(Software Testing)
检查该软件是否符合要求,发现软件存在的错误。
(6)第六个阶段:运行/维护(Running/Maintenance)
持续时间长,占整个软件费用的比例最大。
(7)第七个阶段:报废/退役(Retirement)
软件生存周期各阶段的关键问题
阶段 关键问题 结束标准
计划阶段 问题是什么?进度及人员安排? 项目计划报告
需求分析 软件必须做什么? 需求分析报告
软件概要/总体设计 怎样概括地解决该问题? 概要设计报告
详细设计 怎样具体地解决该问题? 详细设计报告
编码 如何编码并最终实现该系统? 源程序清单
测试 寻找软件错误并使其符合要求? 测试报告
运行与维护 用户发现新问题?有新要求?如何解决新问题?满足新要求? 运行日志和维护记录
10、通过“麦当劳食品的制作过程”,说明软件过程是非常重要的。
答:过程方法是系统地识别和管理。
目的是更好地为用户创造价值,通常过程包括:实现过程、管理过程和支持过程三种类型。其中实现过程,负责把输入转化为输出,支持活动负责提供所需要的资源和能力,从而使关键性的实现活动,能够顺利进行。管理活动则是衡量和评价实现过程,和支持过程的效能,建立起组织的质量管理体系。
●软件过程:
软件过程它包括:问题定义、需求开发、软件设计、软件构造、软件测试等一系列软件开发的实现活动,而每一项活动,都会产生相应的中间制品,需要如项目管理、配置管理、质量保证等一系列开发管理活动,通过建立整个组织的质量管理体系,实现活动的有效控制和质量保证。
11、典型的软件开发模型有哪些?
答:
1、瀑布模型(Waterfall Model);
2、快速原型模型(Rapid Prototype Model);
3、增量模型(Incremental Model);
4、螺旋模型(Spiral Model);
5、喷泉模型(fountain model)。
12、软件工程对软件开发的作用和目标是什么?
答:
软件工程的作用是:在一定的成本和时间条件下,开发出的软件具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性等性能,同时还可以满足用户的需求。
软件工程的作用是:研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件。
软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。
第2章 软件需求分析
1、论述需求分析的重要性和任务是什么?
答:
(1)需求分析:将用户的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
(2)需求分析之所以重要,就因为:
●它具有决策性,方向性,策略性的作用;
●只有在确定了用户的需求后,开发人员才能够分析和寻求系统的解决方法。
●若未正确分析最后的软件系统实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。
(3)需求分析主要有两个任务
1)分析和建模:通过对问题及其环境的理解、分析和综合,建立分析模型;
2)描述和表达:在完全弄清用户对软件系统的确切要求的基础上,需求分析报告。
2、论述软件需求分析所关心的问题。
答:
(1)系统服务于什么样的行业?需要解决的具体问题是什么?需要处理哪些信息?
(2)系统需要具备哪些功能?需要处理哪些信息?
一个系统所具备的功能反映了系统能够做什么,说明了系统处理业务的基本能力等。
(3)系统的非功能性需求有哪些?
如:系统的性能、系统的安全、系统的容量、系统的并发、系统的可用性、友好性等。
(4)系统的其它需求有哪些?
如:系统与外部其它系统的接口需求;系统内部的接口要求;系统的界面需求、具体操作要求、系统的成本和时间进度要求等等。
(5)系统的约束条件和其它预期要求有哪些?
任何系统的建造都不是无限制的、无条件的,弄清用户要求的一些限制条件和其它需求是必要的。
3、论述软件需求分析的一般步骤。
答:软件需求分析的4个步骤:
1)需求获取
常用的需求获取方法,有:问卷调查法、访谈法、实地操作法、原型法、头脑风暴等。
原型法:要求在获得一组基本需求说明后,能够快速地使某些重要方面得以“实现”。通过原型反馈,加深对系统的理解,并对需求说明进行补充和优化。
实地操作法:以用户的身份,参与到现有系统的使用过程中
2)分析建模
获取到需求后,下一步就应该对开发的系统,建立分析模型。
常用的建模方法有:数据流图、实体关系图、状态转换图、控制流图、用例图、类图、对象图等。
3)需求描述
需求描述:就是指编制需求分析阶段的文档,也就是:编写软件需求规格说明书。
软件需求规格说明书(Software Requirement Specification)简称为:SRS,站在开发者的角度,对开发系统的业务模型、功能模型、数据模型等进行描述。
它将作为软件设计的基础。
4)需求验证
需求分析阶段的工作成果,是后续软件开发的重要基础。
确保设计与实现过程中的需求可回溯性,并进行需求变更管理。
4、论述结构化分析方法的基本思想是什么?
答:结构化分析方法的基本思想是:
●用抽象模型的概念,自顶向下(TOP-DOWN),逐层分解,直到找到满足功能需要的所有细节为止。
●分解:可以把大问题分解成若干小问题,然后分别解决。
●抽象:先考虑问题最本质的属性,暂把细节略去,以后再逐层添加细节,直至涉及到最详细的内容,
5、论述结构化分析的三种模型是什么?
答:
(1)实体-关系图,(Entity Relation Diagram,简称为:E-R图)
实体-关系图:用于描述数据对象间的关系,它代表软件的数据模型。
在实体-关系图中出现的每个数据对象的属性均可用数据对象说明来描述。
(2)数据流图,(Data Flow Diagram,简称为:DFD)
数据流图:主要作用是指明系统中数据是如何流动和变换的,以及描述使数据流进行变换的功能。
在数据流图中出现的每个功能的描述,则写在加工规格说明中,它们一起构成软件的功能模型;
(3)状态-变迁图,(Status Transfer Diagram,简称为:STD)
状态-变迁图:用于指明系统在外部事件作用下将会如何动作。
表明了系统的各种状态,以及各种状态间的变迁。
6、论述实体-关系图的组成元素,并给出实体-关系图的表达符号。
答:实体-关系图:主要成分是:实体、关系和属性。
- 实体:是现实世界中客观存在的,而且可以相互区别的事物或活动的抽象。
- 属性:是描述实体或关系中的一种特征。一个实体或关系通常具有多个特征,需要多个相应属性来描述。
- 关系:现实世界中事物内部以及事物之间的关系。在信息世界中反映为实体内部的关系和实体之间的关系。
绘制实体-关系图的表达符号:
1)用矩形表示实体,在框内写上实体名。
2)用椭圆形表示实体的属性,并用无向边把实体和属性连接起来。
3)用菱形表示实体间的关系,在菱形框内写上关系名,用无向边分别把菱形框与有关实体连接起来,在无向边旁注明关系的类型。
7、在实体-关系图中,实体之间的关系有几种情况?绘制“学生实体和班级实体的关系”的E-R图。
答:实体之间的关系,有3种形式:
- 一对一关系(1:1)
- 一对多关系(1:n)
- 多对多关系(m:n)
“学生实体和班级实体的关系”的E-R图如下:
8、论述数据流图的主要作用及表达符号有哪些?
答:指明系统中数据是如何流动和变换的,以及描述使数据流进行变换的功能,在数据流图中出现的每个功能的描述,则写在加工规格说明中,它们一起构成软件的功能模型。
数据流图由四种基本符号组成:
9、论述绘制数据流图的步骤和绘制时应注意的问题。
答:(1)具体实行时可按下述步骤进行:
1)识别系统的输入和输出,画出顶层图。
系统边界确定后,那么越过边界的数据流就是系统的输入或输出,将输入与输出用加工符号连接起来,并加上输入数据来源和输出数据去向就形成了顶层图。
2)画系统内部的数据流、加工与文件,画出一级细化图。
从系统输入端到输出端(也可反之),逐步用数据流和加工连接起来,当数据流的组成或值发生变化时,就在该处画一个“加工”符号。
画数据流图时,还应同时画上文件。
3)加工的进一步分解,画出二级细化图。
(2)数据流图绘制时应注意的问题
下面从四个方面讨论画分层数据流图时,应注意的问题。
1)合理编号
2)注意子图与父图的平衡
3)分解的程度
10、什么是状态转换图,状态转换图的组成元素有哪些?
答:状态转换图:描绘系统的状态及引起系统状态转换的事件。
状态转换图:主要由:状态、事件和转换组成。
11、什么是数据词典?由数据元素组成数据的3种方式是什么?
答:
(1)数据字典:是描述数据的信息集合,是对中使用的所有数据元素定义的集合。
(2)由数据元素组成数据的3种方式:
① 顺序:即以确定次序连接两个或更多的分量;
② 选择:即从两个或更多的分量中选择其中一个;
③ 重复:即把选定的分量重复0次或多次。
12、数据词典中应包含的信息及数据字典的符号有哪些?
答:(1)数据词典中应包含的信息有:
① 名称
② 别名或编号
③ 组成或组织结构的描述
④ 类型、长度、取值范围等
⑤ 何处使用:使用该词条的加工
(2)数据字典的符号:
= 表示:等价于、定义为,即“=”左边的部分由右边部分组成
- 表示:和的意思,起连接作用
[ ] 表示:[ ]括起来的部分是可选项
{ }表示:{ }括起来的部分是可重复项。
()表示:()括起来的部分可有/可无
*…*表示:限定的注释
14、如何理解软件需求是软件项目成败的关键?
答:
(1)
●软件需求:主要是满足用户的要求,明确功能需求和非功能需求,要全面分析,考虑需求的完整性,避免只看到用户的局部要求。
(2)怎样的需求才能被认为是“需求”呢?
●描述用户使用软件需要完成什么,在业务需求基础上进行用户访谈、调研,对用户的场景进行整理,从而建立用户角度的需求,这才能被认为是“需求”。
用户需求特点:
(1)零散:用户会给出不同角度、不同层面、不同粒度的需求。
(2)存在矛盾:由于用户处于企业组织的不同层次,从而导致需求的片面性。
(3)你是怎样理解软件需求的多样性的?
●从不同的角度看问题,就会得到不同的结论。
●看问题要全面,不要片面,要全面,多角度看.。
第3章-软件设计(1)
- 1、软件设计的意义和目标是什么?
答:软件设计就是把需求规格说明书里归纳的需求,转换为可行的解决方案,并把解决方案反映到设计说明书里。
软件设计的目标是:
- 软件设计阶段要解决“如何做”的问题
- 软件所有的开发工作都将根据设计的方案进行
- 要完成系统的总体结构设计
- 2、软件设计阶段的任务是什么?
答:软件设计阶段的任务可分为三部分:
-
划分模块,确定软件结构
-
确定系统的数据结构
-
设计用户界面
- 3、软件设计阶段的概念:模块化、抽象、逐步求精、信息隐藏是什么?
答:
1)模块化:把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能
2)抽象:就是抽出事物的本质特性而暂时不考虑它们的细节
3)逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑
4)信息隐藏: 一个模块的实现细节对于其他模块来说,是不能访问的
4、模块化的主要优点有哪些?
答:模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。提高模块质量在于提高模块独立性。
5、从活动任务方面软件设计分哪几类?从工程管理方面软件设计分哪几类?
答:从活动任务方面软件设计分为:
——数据设计、体系结构设计、接口设计、构件设计和部署设计
从工程管理的角度来看,软件设计分两步完成:
——总体设计(概要设计)和详细设计两个阶段。
(1)总体(概要)设计
•目标系统的总体架构
•每个模块的功能描述、数据接口描述及模块之间的调用关系
•数据库、数据定义和数据结构等
(2)详细设计
•过程设计:描述系统中每个模块的实现算法和细节
•数据设计:对各模块所用到的数据结构的进一步细化
•接口设计:软件系统各模块之间的关系或通信方式以及目标系统与外部系统之间的联系
6、什么是模块独立性,模块独立性的重要性是什么?
答:模块的独立性
——即功能专一,模块之间无过多的相互作用
模块独立性的重要性是:
•这种类型的模块可以并行开发,模块独立性越强,开发越容易。
•独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。
7、什么是耦合? 耦合的分几个等级?
答: 耦合:是对各个模块之间 互连程度的度量,不同模块之间互相依赖得越紧密则耦合程度越高。
耦合分7个等级
8、什么是内聚? 内聚的分几个等级?
答:内聚:是指模块内部各个元素之间彼此结合的紧密程度。
内聚分7个等级
9、深度、宽度、扇出和扇入概念是什么?一个好的软件结构的形态准则是什么?
答:
(1)深度:表示软件结构中从顶层模块到最底层模块的层数
(2)宽度:表示控制的总分布
(3)扇出数:指一个模块直接控制下属的模块个数。
(4)扇入数:指一个模块的直接上属模块个数。
一个好的软件结构的形态准则如下:
一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。
10、软件设计的启发规则有哪些?
答:
(1)改进软件结构提高模块独立性
(2)模块规模应该适中
(3)深度、宽度、扇出和扇入都应适当
(4)模块的作用域应该在控制域之内
(5)力争降低模块接口的复杂程度
(6)设计单入口单出口的模块
(7)模块功能应该可以预测
11、结构化设计方法是什么?什么是结构图?它的主要构成有哪些?
答:结构化设计方法:是一种面向数据流的设计方法。
它把系统作为一系列数据流的转换,输入数据被转换为期望的输出值,通过模块化来完成自顶而下实现的文档化。
(1)结构图:是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。
(2)结构图的主要构成有:
1)模块:用矩形框表示,框中写有模块的名字,说明模块的功能。模块是程序对象有名字的集合
2)调用:从一个模块指向另一个模块的箭头表示前一模块对后一模块的调用,一般是上层调用下层。右图表示模块1调用了模块2和模块3。
3)数据:调用箭头边上的小箭头表示调用时从一个模块传送给另一模块的数据。通常在短箭头附近应注有信息的名字,如图所示。
12、什么是变换型数据流和事务型数据流。
答:一般数据流图的信息流分为两种类型:一种是变换型数据流,另一种是事务型数据流。
(1)变换型数据流
变换型数据流:是指把输入的数据处理后转换成另外的输出数据
变换型数据流的结构图由输入、变换和输出3部分组成。
(2)事务型数据流
事务型数据流:是将输入的数据流分散成许多数据流,形成若干个加工,然后选择其中一个路径来执行。
在事务型数据流中,由至少一条接受路径、一个事务中心和若干条动作路径组成。事务型数据流如图所示。
13、分析下列观点:
答:没有完整、准确、清晰的软件设计,则无法完整、快速、正确完成程序编写。
14、分析下列观点:
有些人说“软件设计是一回事,而编写程序又是一回事,因此软件设计纯粹是浪费时间和精力。
答:编写程序建立在软件设计的基础之上。
第3章-软件设计(2)
1、简述变换型数据流图。变换分析技术的设计步骤有哪些?
答:
•变换型数据流图 :可看成是对输入数据进行转换而得到输出数据的处理。其特点是:DFD图可以明显分为“输入-处理-输出”三部分。
•变换分析技术的设计步骤如下:
① 确定变换中心及逻辑输入/输出
变换中心— 描述了系统的主要功能、特征。其特点是:输入/输出数据流较多,且往往变换中心不止一个。
逻辑输入/输出 — 是指输入/输出变换中心的数据流。
输入流 — 是把物理输入转换为逻辑输入的数据流。
输出流 — 是将逻辑输出转换为物理输出的数据流。
② 进行一级分解,设计上层模块
—— 为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为每个主加工设计一个处理模块。
③ 进行二级分解,设计中下层模块
—— 这一步的工作是自顶向下,逐步细化,为第一层的每一个输入模块、输出模块、处理模块设计它们的从属模块,设计下层模块的顺序一般从设计输入模块的下层开始。
④ 进一步细化
2、简述事务型数据流图。事务分析技术的设计步骤有哪些?
答:
•事务型数据流图:可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。
•事务分析技术的设计步骤如下:
① 确定流边界;
—— 首先从数据流图中找出事务流、事务处理中心和事务路径。
—— 事务中心前是接受事物,事务中心后是事物路径。
② 进行一级分解,设计上层模块;
事务分析的任务——是从数据流图中导出具有接受分支和发送分支的软件结构。
对事物流应设计“接受事物”模块;
对事务路径,应设计“发送控制”模块。
③ 进行二级分解,设计中下层模块;
对于接受分支,可用类似于变换型数据流图中对输入数据流的方法设计中下层。
对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。
④ 进一步细化
3、流程图的概念是什么?流程图有哪些优缺点?
答:流程图的概念如下:
•流程图(Flow Chart):也称为程序流程图。
•程序流程图:以特定的图形符号加上说明,表示过程、算法、流程的一种框图。
•程序流程图:直观地描述过程的控制流程。
流程图有哪些优缺点如下:
流程图的主要优点:
•采用简单规范的符号,画法简单
•结构清晰,逻辑性强
•便于描述,容易理解
流程图的主要缺点
•不利于逐步求精的设计
•图中可用箭头随意地对控制进行转移,与结构化程序设计精神相悖
•不易于表示系统中所含的数据结构
•当目标系统比较复杂时,流程图会变得很繁杂、不清晰
4、N-S图的基本符号有哪些?N-S图的主要特点是什么?
答:N-S图的基本符号 如下:
-+
N-S图的主要特点如下:
N-S图的主要特点
•不允许随意的控制转移,有利于严格的结构化程序设计
•可以很方便地确定一个特定控制结构的作用域,以及局部数据和全局数据的作用域
•可以很方便地表示嵌套关系以及模块之间的层次关系
5、问题分析图(PAD)的主要特点是什么?
答:
PAD图的主要特点:
•表示的程序结构的执行顺序是自最左边的竖线的上端开始,自上而下,自左向右
•表示的程序片断结构清晰、层次分明
•支持自顶向下、逐步求精的设计方法
•只能用于结构化的程序设计
•不仅可以表示程序逻辑,还能表示数据结构-±
+----------------+
| 冒泡排序(arr,n) |
+----------------+
|
v
+----------------+
| i = 0 |
+----------------+
|
v
+----------------+
| i < n-1 ? |
+------+---------+
|
+--------+---------+
| 是 | 否
v v
+----------------+ +----------------+
| j = 0 | | 结束 |
+----------------+ +----------------+
|
v
+----------------+
| j < n-i-1 ? |
+------+---------+
|
+------+--------+
| 是 | 否
v v
+----------------+ +----------------+
| arr[j] > arr[j+1]?| | j = j + 1 |
+------+-----------+ +------+-------+
| |
+------+--------+ |
| 是 | |
v | |
+----------------+ |
| 交换arr[j]与arr[j+1]| |
+----------------+ |
| |
+----------------------+
|
v
+----------------+
| i = i + 1 |
+----------------+
|
v
+----------------+
| i < n-1 ? |
+----------------+
6、以某个“学生档案管理系统”为例,给出了“学生档案管理系统”的数据流图,如图所示,进行变换分析。
答:
① 确定主加工及逻辑输入/输出
② 进行一级分解,设计系统的上次模块。
学生档案管理系统的系统结构一级分解
③ 进行二级分解,设计系统的下层模块。
学生档案管理系统的系统结构一级分解
④ 进一步细化
学生档案管理系统优化的系统结构图
7、以“产品管理系统”为例,给出了“产品管理系统”的数据流图,如图所示,进行事务分析。
答:
① 确定流边界
“产品管理系统”的数据流图
② 进行一级分解,设计上层模块;
产品管理系统的系统结构图
③ 进行二级分解,设计中下层模块
产品管理系统的系统结构图
④ 进一步细化
8、判定表的组成有哪些?判定树的优点有哪些?
答:判定表由4部分组成。
•左上部列出所有条件
•左下部是所有可能做的动作
•右上部是表示各种条件组合的一个矩阵
•右下部是和每种条件组合相对应的动作
判定树的优点如下:
•判定树的优点在于,它的形式简单到不需任何说明,一眼就可以看出其含义,因此易于掌握和使用
9、PDL应该具有哪些特点?PDL的优缺点是什么?
答:
•过程设计语言(Process Design Language,简称:PDL)
•也称程序描述语言(Program Description Language),
•又称为:伪码。
PDL应该具有下述特点
•关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点
•自然语言的自由语法,它描述处理特点
•数据说明的手段
•模块定义和调用的技术,应该提供各种接口描述模式
PDL的优点:
•可以作为注释直接插在源程序中间
•可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作 方便
•已经有自动处理程序存在,而且可以自动由PDL生成程序代码
PDL的缺点:
•不如图形工具形象直观
•描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单
10、数据库结构设计包括哪些内容?什么是数据库的逻辑结构设计?
答:数据库结构设计包括:概念结构设计、逻辑结构设计和物理结构设计
•概念结构:描述系统最基础的数据结构
•逻辑结构:提供比较接近数据库内部构造的逻辑描述
•物理结构:数据库的物理数据模型
数据库的逻辑结构如下:
•数据库的逻辑结构设计:就是把概念结构设计阶段设计好的基本E-R图,转换为与选用的数据库管理系统(DBMS)所支持的数据模型相符合的逻辑结构。
11、关系型数据库有3种“范式”是什么?
答:关系型数据库有3种“范式”,定义如下:
第一范式:所有关系中的每一个分量都必须是不可分的数据项。第一范式是建立关系型数据表的最基本的要求。
第二范式:满足第一范式的条件,并且每个非键属性都由整个键决定。
第三范式:满足第二范式的条件,并且每个非键属性不依赖于其他非键属性值。
12、数据库物理结构设计的主要内容包括什么?
答:
数据库的物理结构设计:逻辑结构实施到具体的环境中时,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法,这个过程就是数据库的物理结构设计。
数据库的物理结构依赖于给定的数据库管理系统(DBMS)和硬件系统。
13、人机界面设计的三条“黄金原则”是什么?人机界面设计中应该考虑的问题是什么?
答:人机界面设计的三条“黄金原则”是
•置用户于控制之下
•减少用户的记忆负担
•保持界面一致
人机界面设计中应该考虑的问题如下:
•系统响应时间
•用户求助机制
•出错信息
•命令方式
14、分析下列观点:
怎样进行软件设计,才能保证软件设计到位,才能使软件设计“有用”呢?
答:在明确的软件需求的基础上,对软件进行建模、分块,并完成撰文、分配等。
第4章 编码及实现
1、编码的任务是什么?
答:编码的任务:也就是将详细设计的结果转换为用某种计算机语言写的程序,即:源程序代码。
2、编程语言的发展过程如何?
答:
编程语言的发展过程如下:
(1)机器语言:是最早的编程语言,它是计算机可以识别、执行的指令代码。机器语言采用“0”和“1”数字指令代码来编写程序。
(2)汇编语言:是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
(3)高级语言:用类似英文的语句来表示语义,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。
(4)第四代语言(Fourth-Generation Language)
第四代语言:是超高级语言,它是对数据处理和过程描述的更高级的抽象。
3、汇编语言的特点是什么?
答:
汇编语言:代码较直观,容易被理解,但须由特定的翻译程序转化为相应的机器语言。
由于汇编语言依赖于硬件体系,且助记符量大难记,于是人们又发明了更加易用的高级语言。
4、什么是高级语言?给出几种高级语言。
答:
高级语言:但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。
如:
—— 面向过程高级语言:FORTRAN、COBOL、ALGOL和BASIC
—— 面向对象高级语言:C++ 、Java、C#
5、选择编程语言需考虑的因素有哪些?
答:
通常要考虑的因素有:项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性以及软件开发人员的知识等。
具体考虑的因素如下:
(1)待开发系统的应用领域,即项目的应用范围。
(2)用户的要求
(4)系统的可移植性要求
(5)算法和数据结构的复杂性
(6)平台支持
6、编码风格有哪些?
答:编码风格是指源程序的书写习惯。
—— 规范的编程风格:会对后期的软件维护带来很多便利
—— 规范的编程风格:可以从源程序文档化、数据说明、语句构造、输人输出和效率几个方面做起。
7、什么是编码规则?
答:
编码规则:要注意代码的正确性、稳定性、可读性。要避免使用不易理解的数字,用有意义的标识来替代,不要使用难懂的技巧性很高的语句。
8、在编码规则中,程序内部的文档要考虑哪些方面?
答:
所谓程序内部的文档,包括:恰当的标识符、适当的注解、程序的视觉组织等。
主要考虑一下几方面:
•选取含义鲜明的名字
•缩写规则一致
•加注解
•利用适当的阶梯形式,使程序的层次结构清晰明显
9、在编码规则中,数据说明要考虑哪些方面?
答:
数据说明主要考虑一下几方面:
•次序应该标准化
•多个变量名在一个语句中说明,应该按字母顺序排列变量
•使用复杂的数据结构,应用注解说明用程序设计语言实现这个数据结构的方法和特点。
10、在编码规则中,语句构造要考虑哪些方面?
答:
语句构造主要考虑一下几方面:
•不要为了节省空间,而把多个语句写在同一行
•尽量避免复杂的条件测试
•尽量减少对“非”条件的测试
•避免大量使用循环嵌套和条件嵌套
•利用括号使逻辑表达式或算术表达式的运算次序清晰直观
11、在编码规则中,输入/输出要考虑哪些方面?
答:
输入/输出主要考虑以下几方面:
•对所有输入数据都进行检验
•检查输入项重要组合的合法性
•保持输入格式简单
•使用数据结束标记,不要要求用户指定数据的数目
•明确提示交互式输入的请求,详细说明可用的选择或边界数值
•当程序设计语言对格式有严格要求时,应保持输入格式一致
•设计良好的输出报表
•给所有输出数据加标志
12、在编码规则中,效率要考虑哪些方面?
答:
效率:主要指处理机时间和存储器容量两个方面。
效率问题有3个原则:
第一,效率是性能要求。因此,应该在需求分析阶段确定效率方面的要求,软件应该像对它要求的那样有效。而不应该如同人类可能做到的那样有效。
第二,效率是靠好设计来提高的。
第三,程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要的提高效率。
14、目前最受欢迎的编程语言是Python语言,论述一下Python的特点。
答:
Python 是一种面向对象的、解释型的、通用的、开源的脚本编程语言。
Python的特点如下:
Python 简单易用,学习成本低,看起来非常优雅干净;
Python 标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用;
Python 是一种面向人工智能和大数据的。
Python 的优点
- 语法简单
- Python 是开源的
- Python 是免费的
- Python 是高级语言
- Python 是解释型语言,能跨平台
- Python 功能强大(模块众多)
- Python 可扩展性强
Python 的缺点 - 运行速度慢
- 代码加密困难
第5章 软件测试(1)
1、软件测试的定义是什么?软件测试基本原则是什么?
答: 软件测试:是指利用人工或自动的方法执行和评价软件各个模块的过程。
软件测试基本原则如下:
(1)穷举测试是不可行的
(2)测试是有风险的。
(3) 软件测试只能证明缺陷的存在,而不能证明产品没有缺陷。
(4) 软件中存在的错误数与已发现的错误数成正比。
(5) 测试用例应该包括:测试输入数据和对应的预期输出两部分,同时,输入数据应该包括合法输入和非法输入两部分。
(6) 注意测试中的群集现象。
(7) 妥善保存测试计划、测试用例等。
(8)尽早开始测试工作,并将其贯穿整个开发过程。
2、什么是软件测试用例?它包括哪些基本内容?
答:
1)软件测试用例:测试输入、执行条件和预期结果。其目标可以是测试某个程序路径,或核实是否满足某个特定的需求。
2)测试用例基本内容包括:测试目标描述、输入数据、测试步骤、预期结果。
3、软件测试分为几种类型?
答:根据开发阶段不同,可以将其分为:单元测试、集成测试、确认测试、系统测试和验收测试;
根据测试实施组织方式不同,可以将其分为:开发方测试、用户测试、第三方测试;
根据测试技术不同,可以将其分为:白盒测试、黑盒测试、灰盒测试;
根据测试内容不同,可以将其分为:符合性测试、验收测试、易用性测试、兼容性测试、可靠性测试、安全性测试、性能测试、压力测试等。
4、什么是静态测试?
答:静态测试:是指被测试程序,不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段,对程序进行检测。
具体有两种形式:
1)人工测试:是指不依靠计算机,而靠人工审查程序的办法。
2)计算机辅助静态分析:是指利用静态分析工具,对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
5、什么是动态测试?
答:动态测试:是指在计算机上运行被测试软件,通过输入测试用例,对其运行情况进行分析,发现其表现的行为与设计规约或用户需求不一致的地方。
对软件进行动态测试时,最常使用的方法为:白盒测试和黑盒测试。
6、什么是白盒测试法?白盒测试方法有哪些?
答:白盒测试法中,测试者可以看到被测程序源代码和内部结构,并根据内部结构找到合适的测试用例,以检验程序中的每条通路或关键元素是否都能按预定要求正确工作。
白盒测试:又称为:结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试方法包括:逻辑覆盖法和基本路径法
7、逻辑覆盖法的基本思想是什么?
答:逻辑覆盖法:是通过对程序逻辑结构的遍历实现程序的覆盖。它是一系列测试过程的总称。
根据覆盖目标的不同和覆盖程序语句的详尽程度,逻辑覆盖又可分为:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖和条件组合覆盖。
8、基本路径法的设计思想是什么?基本路径法的主要步骤有哪些?
答:基本路径测试法:是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。
基本路径法主要包括以下3个步骤:
1)绘制程序控制流图。
2)计算程序环形复杂度。
从程序的环形复杂度,可以导出程序基本路径集合中的独立路径数,这是确定程序中每个可执行语句,至少执行一次所必须的测试用例数目的上界。
3)导出测试用例:根据环形复杂度和程序结构设计测试用例。
9、环形复杂度的计算方式有哪几种?如图所示,a为一个简单的程序流程图,b为简化后的流图。试确定其独立路径和环形复杂度。
答:环形复杂度:是一种为程序逻辑复杂性提供定量尺度的软件度量。(独立路径条数)
其计算方式有三种:
(1)V(G)= E-N+2
其中:E-是流图中边的数量,N-是流图中的节点数量。
(2)环形复杂度V(G)等于控制流图中区域的数量
(3)环形复杂度V(G)等于控制流图中判定节点数+1
三种计算方法如下:
(1)在流图中,边的数量E=11,节点数量N=9
对应的环形复杂度为:V(G)= 11-9+2=4
(2)在流图中,区域的数量为4。
对应的环形复杂度为:4,
(3)在流图中,判定节点数为:3,
对应的环形复杂度为:3+1=4
10、 什么是黑盒测试?黑盒测试发现哪几种错误?
答:黑盒测试:又称功能测试、数据驱动测试或基于规格说明的测试。
把被测程序当作一个黑盒,在不考虑程序内部结构和内部特性,测试者只需知道该程序输入、输出之间的关系 或 程序的功能的情况下,检查程序是否符合它的功能说明。
黑盒测试试图发现以下类型的错误:
1)功能错误或遗漏;
2)性能错误;
3)初始化和终止错误;
4)界面错误;
5)数据结构或外部数据库访问错误等。
11、等价类划分法基本思想是什么?划分等价类的原则有哪些?
答:等价类划分法基本思想:将被测程序的所有可能输入数据(有效与无效的)划分为若干等价类,在指定等价类中任取一组数据作为一个测试用例,作为该等价类的代表。即等价类都能通过测试,若有等价类不通过,则测试出错误。
12、边界值分析法的设计思想是什么?在边界值分析法中选择测试用例时,应遵循以下原则是什么?
答:边界值分析法的设计思想是:
程序在处理边界情况时最容易发生错误,许多程序错误出现在下标、数据结构和循环等的边界附近。因此,设计程序运行在边界情况附近的测试用例,可以使程序错误更容易暴露出来。
13、什么是单元测试?单元测试的内容有哪些?
答:单元测试:单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。单元测试是对软件中的最小可测试单元进行检查和验证。
单元测试的主要内容是:接口测试、独立路径测试、出错处理测试、边界条件测试和局部数据测试五个方面。
14、单元测试需要哪两种辅助测试模块?它们的作用是什么?
答:单元测试需要哪两种辅助测试模块是:驱动模块和桩模块。
(1)驱动模块:作用是用来模拟 上级调用模块,功能要比真正的上级模块简单得多,它只完成接受测试数据,以上级模块调用被测模块的格式驱动被测模块,接收被测模块的测试结果,并输出。
(2)桩模块:用来代替被测模块所调用的模块,它的作用是返回被测模块所需的信息。
第5章 软件测试(2)和第6章 软件维护
1、什么是集成测试?单个模块能正常工作,为什么集成后不见得能正常工作?
答:集成测试,也叫组装测试或联合测试。
答:原因如下:
1)单元测试使用的驱动模块和桩模块,与它们所代替的模块并不完全等效,因此,单元测试有不彻底、不严格的情况。
2)各个模块组装起来,穿越模块接口的数据可能会丢失。
3)一个模块的功能,可能会对另一个模块的功能,产生不利的影响。
4)各个模块的功能组合起来,可能达不到预期要求的功能。
5)单个模块可接受的误差,组装起来可能累积和放大到不能接受的程度。
6)全局数据可能会出现问题。
2、集成测试的任务是什么?集成测试的方法有哪些?
答:集成测试的任务是:用于发现模块组装中可能出现的问题,最终,构成一个符合要求的软件系统。集成测试的重点在于检查模块之间接口的有关问题,发现公共数据与全程变量引起的模块间的干扰相互作用。
集成测试的方法有哪些?
答:集成测试的方法,主要有非渐增式测试和渐增式测试:
1)非渐增式测试。首先,对每个模块分别进行单元测试,然后,再把所有的模块,按设计要求组装在一起进行的测试。
2)渐增式测试。是逐个把未经组合的模块组装到已经测试过的模块上去,进行集成测试。
3、渐增方式集成测试有哪两种方法?渐增式测试的优点有哪些?
答:渐增方式集成测试有:自顶向下渐增集成和自底向上渐增集成两种方法。
答:渐增式测试的优点如下:
(1)渐增式测试利用已测试过的模块,作为部分测试软件,因此,可以减少一部分测试工作量。
(2)渐增式测试可以较早发规模块间的接口错误。
(3)在使用渐增式测试方法时,如果发生错误,往往和最近加进来的那个模块有关,因此,便于错误诊断与定位。
(4)这种方法对程序的测试更彻底。
4、自顶向下渐增集成方法的具体步骤是什么?自底向上渐增集成方法的具体步骤是什么?
答:自顶向下渐增集成方法不需要编写驱动模块,只需要编写桩模块。
其步骤是:从顶层模块开始,沿被测程序的软件结构图的控制路径逐步向下测试,从而把各个模块都结合进来。
自底向上渐增集成:是从软件结构最低层的模块开始,进行组装。
由于自底向上渐增集成:是从底部向上结合模块,在测试模块时,它的下级模块已经测试通过了,因此,这种方式不需要桩模块。但是,被测模块的上级模块还没有集成进来,因此,需要为正在测试的模块准备驱动模块。
6、自顶向下渐增集成测试的优点有哪些?自顶向下渐增集成的缺点有哪些?
答:自顶向下渐增集成测试的优点如下:
- 能较早地发现高层模块接口、控制等方面的问题。
- 初期的程序概貌可让人们较早地看到程序的主功能,增强开发人员的信心。
自顶向下渐增集成的缺点有:
1)桩模块不可能提供完整的信息,因此,把许多测试推迟到用实际模块代替桩模块之后;
2)设计较多的桩模块,测试开销大;
3)早期不能并行工作,不能充分利用人力。
7、什么是确认测试?什么是系统测试?典型的系统测试包括哪些?
答:确认测试又称有效性测试,
确认测试阶段包括:进行有效性测试与软件配置审查两项工作。
答: 系统测试,英文是System Testing。是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。
系统测试是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效地测试,以发现软件潜在的问题,保证系统的正常运行。
答:典型的系统测试包括如下:
(1) 功能测试
(2)性能测试
(3)安全测试
(4)恢复测试
(5)容量测试
(6)压力测试
8、什么是验收测试?什么是Alpha 测试(α测试)?
答:验收测试是一个过程,是一个用户主导的测试。
验收测试:一般是在软件系统测试结束,以及软件配置审查之后开始的。
什么是Alpha 测试(α测试)?
Alpha 测试:是指在开发者的现场进行,并且,开发者提供对用户指导下进行的测试。
Alpha 测试的目的:是让用户就软件的功能、操作界面、性能、可使用性、可靠性和支持等,进行直截了当的评价。
9、什么是Beta 测试(β测试)?
答:
Beta 测试:是由软件用户在软件实际使用环境下进行的测试。
与Alpha 测试不同的是,开发者通常不在测试现场。因此,Beta 测试是在开发者无法控制的环境下,进行的软件现场应用。
在Beta 测试中,由用户自己记录下遇到的所有问题,包括:真实的以及主观认定的,并需要将有关问题的记录以及意见报告给开发者,开发者则在综合用户的报告之后,做出修改。
在经过Beta测试之后,软件产品可交付给全体用户使用。
Beta 测试的重点测试内容:是软件产品的支持性,涉及用户文档、客户培训等。
Beta 测试:要求在Alpha 测试之后进行。
10、什么是软件调试?调试过程有哪些?
答:调试的定义:软件调试是确定错误的原因和位置,并改正错误的过程。
调试则是在进行了成功的测试之后,才开始的工作。
软件调试过程
具体调试基本过程如下:
第1步:从错误的外部表现形式入手,确定程序中出错位置。
第2步:研究有关部分的程序,找出错误的内在原因。
第3步:修改设计和代码,排除这个错误。
第4步:进行回归测试,并确认:是否已经排除了该错误和是否引进了新的错误。
11、软件调试方法有哪些?跟踪法有哪两种?
答:有6种方法:
第1种方法:硬性纠错法,又称为蛮干法。
第2种方法:跟踪法
第3种方法:演绎法
第4种方法:归纳法
第5种方法:试探法
第6种方法:对分查找法
跟踪法有:正向跟踪或是反向跟踪。
正向跟踪:是从可能的错误征兆处,沿着控制流找到出错处,分析排除错误。
反向跟踪:是从可能的错误征兆处,逐步向后追溯,直到找准错误,纠正为止。
12、什么是演绎法?什么是归纳法?什么是对分查找法?
答: 演绎法如下:
调试时,首先,设想出所有可能的出错原因,然后,试图用测试,来排除每一个假设的原因,若某个原因可能是真的原因,则对数据进行细化,以确定错误准确位置。
归纳法如下:
把和错误有关的数据,组织起来进行分析,
对分查找法如下:
如果已经知道每个变量在程序内,若干个关键点的正确值,则用赋值语句或输入语句,在程序中的关键点附近,输入这些变量的正确值,然后,检查程序的输出值。如果是正确的,则故障在程序的前半部分,反之故障在后半部分。循环。
13、软件维护定义是什么?软件维护分几种类型?
答:
软件维护:就是在软件运行维护阶段,为了改正软件错误,或为了满足用户新的应用需要,而对软件进行改错、变更或进化的过程。
软件维护可以分为以下四种类型。
1)改正性维护
2)适应性维护
3)完善性维护
4)预防性维护
改正性维护:由于软件测试技术的限制,已投入使用的软件必然会有一些隐藏的错误或缺陷。
因此,软件技术人员需要对暴露出来的错误,进行诊断,并设法改正这个错误。这个诊断与改正错误的过程,就叫做:改正性维护。
适应性维护:随着计算机技术的飞速发展,软件的工作环境,如:硬件设备、软件配置、数据环境、网络环境等,都有可能发生变化。
为了使软件适应这种变化,往往需要对软件进行改造。
这种为使软件适应新的环境,而对软件进行改造的过程,就叫做适应性维护。
完善性维护:在软件使用过程中,用户难免会对软件提出一些新的功能和性能方面的要求,而为了满足这些要求,就必须对软件进行改造,以使软件在功能、性能、界面等方面有所进化。由于这些原因,而对软件进行的维护活动,就叫做完善性维护。
预防性维护:预防性维护是为了提高软件的可维护性和可靠性,采用先进的软件工程方法,对需要维护的软件或软件中的某一部分重新进行设计、编制和测试,为以后进一步维护和运行打好基础。
14、什么是软件可维护性?软件维护的副作用有哪些?
答:软件可维护性:是指维护人员对软件进行维护的难易程度。
决定软件可维护性的因素:主要有:系统的大小、系统的年龄、结构合理性、程序设计语言、数据库技术的应用、先进软件开发技术等因素。
软件可维护性:可通过7个质量特征来衡量:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
软件维护产生的副作用,有以下三种:
1)修改代码的副作用。
在修改源代码时,由于软件的内在结构等原因,任何一个小的修改都可能引起新的错误。
2)修改数据的副作用。
在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而,导致软件出错。修改数据副作用:可以通过详细的设计文档加以控制,此文档中描述了一种交叉作用,把数据元素、记录、文件和其他结构联系起来。
3)修改文档的副作用。
对软件结构、模块逻辑等进行修改时,必须对相关技术文档进行相应修改。
第8次(第7章 面向对象技术)-讨论问题-01班
1、什么是面向对象方法?什么是对象?
答:面向对象 = 对象 + 类 + 继承 + 通信
面向对象方法具有下述4个要点。
- 认为客观世界是由各种对象组成的
- 把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法
- 按照子类与父类的关系,把若干个对象类组成一个层次结构的系统
- 对象彼此之间仅能通过传递消息互相通信
对象是封装了数据结构及可以施加在这些数据结构上操作的封装体。
2、什么是类?什么是实例?类与实例的区别是什么?
答:
类:就是对具有相同数据和相同操作的一组相似对象的定义。是对具有相同属性和行为的一个或多个对象的描述。
实例:是由某个特定的类所描述的一个具体的对象。
那么,类与实例的区别呢?具体区别如下:
1) 类是对具有相同属性和行为的一组相似对象的抽象,是属于抽象层面的。类在现实世界中并不真正存在。
2) 根据这个样板建立的一个个具体的对象就是类的实例。
3、什么是消息?什么是属性? 什么是方法?
答:
消息:是要求某个对象执行在定义它的那个类中,所定义的某个操作的规格说明。
通常,一个消息由3部分组成:1)接收消息的对象;2)消息选择符(或称消息名);3)0或多个变元
属性:是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。
方法:是对象所能执行的操作。
在C++和Java语言中,属性又被称为数据成员,方法又被称为成员函数
4、什么是封装? 什么是继承?
答:
封装:是把数据和实现操作的代码集中起来放在对象的内部,对外不可见。
封装又被称为信息隐藏。
继承:是子类自动共享父类定义中定义的数据和方法的机制。
继承具有传递性。
5、什么是多态? 什么是重载?
答:
多态:是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象,也可以发送给子类对象。
在类等级的不同层次中,可以共享(或公用)一个行为(或方法)的名字,而该不同层次中的每个类可以按各自的需要来实现这个行为(或方法)。
多态不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且,显著提高了软件的可重用性和可扩充性。
6、面向对象方法的主要优点有哪些?什么是面向对象模型?
答:面向对象方法的主要优点如下:
- 符合人类的思维习惯
- 稳定性好
- 可复用性好
- 可维护性好
模型:就是为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。
7、什么是对象模型?什么是动态模型?什么是功能模型?
答:
对象模型:表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
通常,使用统一建模语言(UML)所提供的类图来建立对象模型。
动态模型:表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。
通常,用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为。
功能模型:表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此,更直接地反映了用户对目标系统的需求。
8、面向对象有哪三种模型?三种模型之间的关系怎么样?
答:
面向对象有哪三种模型:
对象模型:描述系统数据结构
动态模型:描述系统控制结构
功能模型:描述系统功能
功能模型指明了系统应该“做什么”;
动态模型明确规定了什么时候做;
对象模型则定义了做事情的实体。
下面扼要地叙述3种模型之间的关系。
(1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
(2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
(3)功能模型中的用例对应于复杂对象提供的服务,简单的用例对应于更基本的对象提供的服务。有时一个用例对应多个服务,有时一个服务对应多个用例。
(4)数据流图中的数据存储,以及数据的源点终点,通常是对象模型中的对象。
(5)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
(6)功能模型中的用例可能产生动态模型中的事件。
(7)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。
9、什么是UML?2、什么是用例?3、什么是用例图?
答:
UML( Unified Modeling Language),即统一建模语言,是一种标准的图形化建模语言。它主要用于软件的分析与设计,用定义完善的符号来图形化地展现一个软件系统。
用例:是对系统提供的功能(即系统的具体用法)的描述。
用例描述的是外部行为者(actor,有时也成为执行者、操作者、角色等)所理解的系统功能。
用例应用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,描述了开发者和用户对需求规格所达成的共识。
用例图:在UML中,把用例图建立起来的系统模型称为用例模型。因此,用例图是进行需求分析和建立系统功能模型的强有力工具。
10、组成用例图的主要元素有哪些?以自动售货机系统为例,给出用例图。
答:
在UML中,组成用例图的主要元素是系统、用例、行为者以及用例之间的关系。
11、什么是类?什么是类图?类图的表示符号有哪些?什么是包?
答:
类:是对一组对象的描述,这些对象具有相似的属性、操作、关系和行为。
类图:描述类及类与类之间的静态关系。
类图:表示类的内部结构(即:类的属性和操作)。
一个类可以出现在多个类图中,一个系统可以由多个类图来描述。
类图的表示符号有:
类图的符号是一个长方形,用两条横线把长方形分为上、中、下三个区域。这三个区域分别放类的名字、属性和操作。
包:是一种组合机制。把各种各样的模型元素通过内在的语义关系连在一起,形成一个高内聚低耦合的整体,就叫做一个包。
包:通常用于对模型的组织管理,因此,有些地方又称包为“子系统”。
如图所示为包图示例
12、什么是对象图?对象图与类图有什么区别?对象图的表示方法有几种?
答:
对象图:可以看作是类图的实例,能帮助理解一个比较复杂的类图。
对象图与类图的区别如下:
对象图与类图具有几乎完全相同的表示形式,它们的主要区别如下:
(1)对象图是类图的实例,而不代表类图的定义。
(2)对象图中对象的名字下面要加上一条下划线。
(3)对象图通常只有名称和属性。
(4)对象名称的开头字母用小写。
对象图的表示方法有3种:
方法一:“对象名:类名”。即对象名在前,类名在后,中间用冒号连接。
方法二:“:类名”。即对象自身未命名,而只有冒号和类名,注意,类名前的冒号不能省略。
方法三:“对象名”。即不带类名
13、什么是状态图?状态图中定义的状态有哪些?什么是顺序图?
答:
状态图:描述一个特定对象的所有可能的状态以及引起状态转换的事件。
一个状态图包括一系列状态、事件以及状态之间的转移。
状态图通常只针对一个对象,而不会体现多个对象。
在状态图中定义的状态有:初态(即:初始状态)、终态(即:最终状态)、中间状态和复合状态。
顺序图:描述对象之间的动态交互关系,表现对象之间消息传递的时间顺序。
顺序图:有2个坐标轴:纵坐标表示时间、横坐标表示不同的对象。
顺序图:通常有多个对象,体现对象间的时间顺序。
顺序图中的对象用一个矩形框表示,框内标有对象名,从表示对象的矩形框向下的垂直虚线是对象的“生命线”,用于表示在某段时间内该对象的存在。
如图所示为顺序图示例。
14、什么是活动图?什么是协作图?什么是构件图?什么是部署图?
答:
活动图:是一种用于描述系统行为的模型视图,它可用来描述动作和动作导致对象状态改变的结果,而不用考虑引发状态改变的事件。
协作图:用于描述相互协作的对象间的交互关系和链接关系。
协作图中对象的图示与顺序图中一样。如果一个对象在消息交互中被创建,则在对象名之后标以“{new}”。类似地,如果一个对象在交互期间被删除,则在对象名之后标以“{destroy}”。通过在对象间的链接上标注带有消息标签的消息,来表示对象间的消息传递。
构件图:描述软件构件及构件之间的依赖关系,显示代码的静态结构。
构件是逻辑架构中定义的概念和功能在物理架构中的实现。典型情况下,构件是开发环境中的实现文件。
部署图:描述处理器、硬件设备和软件构件在运行时的架构,它显示系统硬件的物理拓扑结构及在此结构上执行的软件。
使用部署图可以显示硬件结点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含的逻辑单元(如:对象、类)等。
第9次(第8章 敏捷开发)
1、什么是敏捷开发?
答:敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。
2、常用的敏捷方法有哪些?
答:
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。敏捷开发方法很多,如:Scrum方法、水晶方法(Crystal)、特征驱动开发(Feature Driven Development,简称:FDD)、自适应软件开发(Adaptive Software Development,简称:ASD)、以及最重要的极限编程(eXtreme Programming,简称:XP)等。
3、敏捷开发有哪些特点?
答:
敏捷开发与文档驱动的开发过程相比较,在灵活性等方面更有吸引力,强调了在软件实践过程中的变更,而不是孤立的进行一些实践。
敏捷开发的特点如下:
充分发挥人的创造能力
及时的信息交流和沟通方式
处理变化时的快速响应与迭代
可用软件由低质量到高质量的不断演变
4、敏捷宣言的内容是什么?
答:
1)个体和交互胜过过程和工具
2)可以工作的软件胜过面面俱到的文档
3)客户合作胜过合同谈判
4)响应变化胜过遵循计划
5、什么是极限编程(XP -eXtreme Programing)?
答:XP is a lightweight methodology for small to medium sized teams developing software in the face of vague or rapidly changing requirements.
XP是一个轻量级的、灵巧的软件开发方法,同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;
6、极限编程的核心是什么?
答:XP核心:沟通、简明、反馈和勇气
7、什么是配对编程(pair programming)?
答:
开发人员每两人一组编写所有的代码,其中一人担当“驱动者(driver)”(负责操作鼠标和键盘),而另一个人同驱动者一道解决问题和规划更大的图景。
即两个人一起写同一段程序,而且代码所有权是归于整个开发队伍。程序员在写程序和优化程序的时候,都要严格遵守编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。
8、简述Scrum方法?
答:
Scrum提供了一种经验方法。它发现了软件工程的社会意义。这一过程是迅速,有适应性,自组织的,它代表了从顺序开发过程以来的重大变化。(Ken Schwaber)
Scrum是一种灵活的软件管理过程,它可以帮助驾驭迭代、递增的软件开发过程。
9、Scrum总体框架是什么?
答:Scrum总体框架如下:
10、Scrum方法的“3-3-4”开发原则是什么?
答:
原则1:开发团队有:3个角色
产品负责人(Product Owner)
Scrum主管(Scrum Master)
团队成员(Team)
原则2:开发制品有:3个工件
产品Backlog
迭代Backlog
燃尽图
原则3:开发活动有:4个会议:
迭代计划会议
迭代验收会议
每日站立会议
迭代回顾会议(AAR)
11、在Scrum方法中,开发团队的角色有哪些?
答:主要包括:产品负责人、Scrum主管和团队成员三种类型。
12、Scrum制品主要有哪些?
答:Scrum制品主要包括:产品订单、迭代订单和燃尽图。
13、在Scrum方法中,开发活动有哪些?
答:
在Scrum方法中,整个开发过程是由若干个很短的迭代周期所组成,一个短的迭代周期称为一个Sprint。
也就是我们要把一次迭代的开发内容以最快的速度完成它,这个过程我们称它为Sprint。
Sprint在整个开发过程中是保持固定的时间长度,结束时会产生一个完成的可运行的潜在可发布的产品增量,在一个迭代的执行过程中,它的实现目标质量和验收标准都是不允许变化的,除非迭代的目标失去了价值和意义,这个时候就应该取消迭代,不过由于迭代的周期非常短,这种情况一般也很少发生。
14、Scrum开发过程是什么?
答:Scrum开发过程如下:
1)首先需要确定一个Product Backlog(按优先顺序排列的一个产品需求列表),这个是由Product Owner 负责的;
2)Scrum Team根据Product Backlog列表,做工作量的预估和安排;
3)有了Product Backlog列表,我们需要通过 Sprint Planning Meeting(Sprint计划会议)来从中挑选出一个Story作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog;
4)Sprint Backlog是由Scrum Team去完成的,每个成员根据Sprint Backlog再细化成更小的任务(细到每个任务的工作量在2天内能完成);
5)在Scrum Team完成计划会议上选出的Sprint Backlog过程中,需要进行 Daily Scrum Meeting(每日站立会议),每次会议控制在15分钟左右,每个人都必须发言,要向所有成员当面汇报你昨天完成了什么,并且向所有成员承诺你今天要完成什么,同时遇到不能解决的问题也可以提出,每个人回答完成后,要走到黑板前更新自己的Sprint燃尽图。
6)做到每日集成,也就是每天都要有一个可以成功编译、并且可以演示的版本。
7)当一个Story完成,也就表示一次Sprint完成,这时,我们要进行 Srpint Review Meeting(演示会议),也称为评审会议,产品负责人和客户都要参加,每一个Scrum Team的成员都要向他们演示自己完成的软件产品(这个会议非常重要,一定不能取消);
8)最后就是 Sprint Retrospective Meeting(回顾会议),也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮Sprint的产品需求中。