【D1章】1、为什么会出现软件危机?2018(5分)
(1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
(2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。
【D2章】2、在软件开发的早期阶段为什么要进行可行性研究?
开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计过程,就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
【D3章】3、怎样与用户有效地沟通以获取用户的真实需求?
与用户沟通获取需求的方法:
访谈;面向数据流自顶向下求精;简易的应用规格说明技术;快速建立软件原型
【D8章】4、软件的可维护性与哪些因素有关?
可理解性、可预测性、可修改性、可移植性、可重用性
【D1章】5、什么是软件过程?它与软件工程方法学有何关系?2017 (5分)
软件过程:是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型。
软件过程是软件工程方法学的3个重要组成部分之一。
软件工程方法学包含三个要素:方法、工具和过程。
6、从伪码转变为程序流程图或从程序流程图转变为伪码是否是唯一的?请说明理由。
伪码准确地描述了程序的控制流程。由于伪码在描述程序的控制流程时是无二义性的,因此,由伪码变成的程序流程图是唯一的。
但是,同样的控制流程可以用不同的伪码来描述,因此,由程序流程图转变成的伪码不是唯一的。
7、应该依据什么准则来评价状态图?
状态图应该描绘所有可能的状态转换。图中每条弧都要有一个引起状态转换的事件。从开始结点(初态)到每个结点(中间状态),以及从每个结点到最终结点(终态),都必须有一条路径。
【补充】应该根据什么准则来评价用例图?
用例图从用户的观点来描述系统的功能,因此,必须包含用户关心的所有关键功能。
【补充】应该根据什么准则来评价脚本?
脚本必须从用户的观点来描述每个重要的功能序列,因此,脚本应该能够说明系统的一类重要功能或具体的使用方法。
【第5版】8、为什么说参数化类有助于提高可重用性?
在实际的应用程序中,有一些软件元素,从逻辑功能看,彼此是相同的,所不同的主要是处理的对象类型不同。参数化类就是使用一个或者多个类型去参数化一个类的机制,有了这种机制,程序员可以先定义一个参数化的类模块,再使用时把数据类型作为参数传递进来,在不同的应用程序中重复使用。
【D1章】9、软件生命周期中每个阶段的提交物是什么?2016 A(6分)
(1)软件定义阶段:
10、常用的黑盒测试方法有哪些?
等价划分,边界值分析,错误推测
【补充】常用的白盒测试方法有哪些?
逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖),
控制结构测试(基本路径测试、条件测试、循环测试)
11、面向对象程序设计思想主要包括哪些特性?以及这些特性的具体含义是什么?
12、请简述耦合性的含义?
一个软件结构内不同模块之间互联程度的度量。
13、软件测试过程一般可划分为哪几个主要阶段?
【D1章】14、软件生存周期可以分为几个阶段?2016 B 2015(6分)
软件定义、软件开发、软件维护
15、什么是黑盒测试法?
功能测试,如果已经知道了产品应该具有的功能,可以通过测试来检测每个功能是否都能正常使用
【补充】什么是白盒测试法?
结构测试,如果知道产品的内部工作工程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
16、请简述需求分析的含义?
准确地回答系统做什么这个问题,对目标系统提出完整,准确,清晰,具体的要求。
17、请简述内聚性的含义?
一个模块内各个元素彼此结合的紧密程度。
【D2章】18、可行性研究报告的主要内容有哪些?
(1) 系统概述:说明开发的系统名称,提出单位 和开发单位。
(2) 可行性研究的前提:系统目标;要求;约束和限制;可行性研究的基本准则等。
(3) 对现有系统的分析:处理流程,图示说明现有系统的处理流程和数据流程;现有系统存在的问题。
(4) 系统需求:主要功能;主要性能及其要求;操作要求;信息要求;限制性要求。
(5) 建议系统:系统目标;处理流程;系统结构,功能,性能;系统技术可行性;投资和效益分析;操作可行性;法律可行性。
(6) 其它可选方案:与国内外同类型方案的比较;提出一两个可行性方案供论证和探讨。
(7) 制定下一阶段的预算。
(8) 结论性意见:由用户方、设计方和投资方共同签署意见。
【D1章】1、什么是软件工程?它的目标和内容是什么?2018(10分)
软件工程就是用科学的知识和技术原理来定义,开发,维护软件的一门学科。软件工程目标:付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。软件工程内容:包括开发技术和开发管理两个方面。
【D12章】2、选择面向对象程序设计语言时主要应该考虑哪些因素?
将来能否占主导地位;可重用性;类库、开发环境;其他因素。
(项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性以及软件开发人员的知识等。)
【第5版】3、请说明多态重用与继承重用的关系。2017 (10分)
多态重用实际是一种特殊的继承重用,是充分利用多态性机制支持的继承重用。一般来说,使用多态重用方式重用已有的类构件时,在子类中需要重新定义的操作比较少,因此,多态重用方式比继承重用方式成本低。
【D13章】4、什么是软件质量?试叙述它与软件可靠性的关系。
软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征一致的程度。
5、谈谈Overload和Override的区别。2016 A(10分)
目的:overload用于增加程序的可读性。 override用于提供其超级类已经提供的方法的特定实现。
范围:overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
参数 :overload参数必须不同。 override参数必须相同。
多态性:overload 静态多态,调用的函数在编译时被选中。 override 是运行时多态性的
override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子类、同类中。
6、软件开发设计模式都有哪些?结合自身情况,谈谈你对设计模式的理解?
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
【D1章】7、什么是软件危机?软件危机的表现是什么?其产生的原因是什么? 2015
软件危机的定义:
软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。
软件危机的典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。
软件危机出现的原因:
(1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
(2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。
补充:如何克服软件危机
(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法, 特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组 织,严格的管理,相互友好的协作。
(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个 整体,形成一个很好的软件开发支环环境。总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
8、谈谈您对软件设计过程中应遵循的高内聚、低耦合原则的理解?
高内聚就是提高模快内部的关联程度,低耦合当然就是降低模快之间的关联程度
耦合性比较高的话,模块代码不易分离,是不好的编程模式
内聚是越高越好,内聚个人认为是只是实现一个功能,不是很多的功能。
1、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?
软件工程是指导计算机软件开发和维护的一门工程学科。
具体的定义:1993年IEEE的定义:软件工程是:① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。
软件工程的本质特征:
(1) 软件工程关注于大型程序的构造
(2) 软件工程的中心课题是分解问题,控制复杂性
(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化
(4) 开发软件的效率非常重要
(5) 和谐地合作是开发软件的关键
(6) 软件必须有效地支持它的用户
(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品
消除软件危机的途径:
(1) 对计算机软件有一个正确的认识(软件≠程序)
(2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目
(3) 推广使用在实践中总结出来的开发软件的成功技术和方法
(4) 开发和使用更好的软件工具
2、简述结构化范型和面向对象范型的要点,并分析他们的优缺点。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时 间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。
优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。
3、什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的使用范围。
软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
优点:
它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。虽然有不少缺陷但比在软件开发中随意的状态要好得多。
缺点:
(1) 实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化而造成大的混乱。
(2) 经常情况下客户难以表达真正的需求,而这种模型却要求如此,这种模型是不欢迎具有二义性问题存在的。
(3) 客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,可能引起客户的惊慌,而后果也可能是灾难性的。
优点:使用户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。
缺点:产品的先天性不足,因为开发者常常需要做实现上的折中,可能采用不合适的操作系统或程序设计语言,以使原型能够尽快工作。
优点:
(1) 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量。
(2) 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。
缺点:
(1) 至始至终开发者和客户纠缠在一起,直到完全版本出来。
(2) 适合于软件需求不明确、设计方案有一定风险的软件项目。
该模型具有一定的市场。
优点:
对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好地对待和理解每一个演化级别上的风险。
缺点:
(1) 需要相当的风险分析评估的专门技术,且成功依赖于这种技术。
(2) 很明显一个大的没有被发现的风险问题,将会导致问题的发生,可能导致演化 的方法失去控制。
(3) 这种模型相对比较新,应用不广泛,其功效需要进一步的验证。
该模型适合于大型软件的开发
4、为什么说喷泉模型较好的体现了面向对象软件开发过程无缝和迭代的特性?
因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,而喷泉模型则很好的体现了面向对象软件开发过程迭代和无缝的特性。
5、试讨论Rational统一过程的优缺点。
优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。
6、Rational统一过程主要适用于何种项目?
大型的需求不断变化的复杂软件系统项目
7、说明敏捷过程的适用范围
适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束
8、说明微软过程的适用范围
适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式
9、软件工程方法学:包含三个要素:方法、工具和过程。
最广泛的方法学包括传统方法学和面向对象方法学。
10、软件工程支撑环境:如果把各个阶段使用的软件工具有机地集合成一个集体,支持软件开发的全过程。
11、软件开发中有哪几种过程模型?哪些适用于面向对象的软件开发?
软件开发中常见的软件过程模型有瀑布模型、原型模型、螺旋模型、喷泉模型、统一软件过程等。
其中喷泉模型、统一软件过程适用于面向对象的软件开发
12、什么是软件生存周期?它有哪几个活动?
软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括:可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。
13、什么是软件生存周期模型?有哪些主要模型?
生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。
14、软件工程三要素之间的关系?
软件质量是软件工程的生命线,软件工程以质量保证为基础。
质量管理促进了过程的改进,创造了许多行之有效的软件开发方法和工具。
软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
方法支撑过程和工具,过程和工具又促进方法学的研究。
1、应该从哪些方面研究目标系统的可行性?
一般说来,至少应该从以下三个方面研究每种解法的可行性:
a.技术可行性。对要开发项目的功能、 性能和限制条件进行分析, 确定在现有的资源条件下,技术风险有多大,项目是否能实现,这些即为技术可行性研究的内容。这里的资源包括已有的或可以搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
b.经济可行性。进行开发成本的估算以及了解取得效益的评估, 确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容对于大多数系统,一般衡量经济上是否合算,应考虑一个“底线”,经济可行性研究范围较广,包括成本—效益分析, 长期公司经营策略, 开发所需的成本和资源,潜在的市场前景。
c.操作可行性。有时还要研究社会可行性问题,研究要开发的项目是否存在任何侵犯、妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同、责任、 侵权和其他一些技术人员常常不了解的陷阱等。
必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
2、可行性研究步骤:(7 步)
3、数据流图的定义(DFD):是一种图形化技术,描绘信息流和数据从输入移动到输出过程中所经受的变换。无具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。在设计时值考虑系统必须完成的基本逻辑功能,完全不考虑具体怎么样实现。描绘数据流向,而不应该描绘出现啊某个数据流的条件。
4、数据流图的符号:
5、数据字典的作用:在软件分析和设计的过程中给人提供关于数据的描述信息。
6、数据字典由对4类元素的定义组成:
①数据流;②数据流分量(即数据元素);③数据存储;④处理
7、什么是数据字典?简述数据字典与数据流图的关系。
数据字典是关于数据的信息的集合,对数据流程图中的各个元素做完整的定义与说明,是数据流程图的补充工具;
数据字典与数据流图的关系:数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。 数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。
**8、数据字典包括哪些内容?**它的作用是什么?
数据字典是描述数据流图中数据的信息的集合。它对数据流图上每一个成分:数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。对用户来讲,数据字典为他们提供了数据的明确定义;对系统分析员来讲,数据字典帮助他们比较容 易修改已建立的系统逻辑模型。
1、为什么要进行需求分析?通常对软件系统有哪些要求?
(1)为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论我们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。
(2)确定对系统的综合要求:1、功能需求;2、性能需求;3、可靠性和可用性需求;4、出错处理需求;5、接口需求;6、约束;7、逆向需求;8、将来可以提出的要求,分析系统的数据要求。
2、需求分析的任务:
3、验证软件需求的正确性的4个方面:
4、验证软件需求的方法:①验证需求的一致性;②验证需求的现实性;三验证需求的完整性和有效性。
5、需求分析的描述工具有哪些?
有数据流图、数据字典、判定表、判定树、结构化自然语言、层次方框图、Warnier 图、IPO 图和需求描述 语言等。
6、软件需求规格说明书由哪些部分组成?
7、系统流程图与数据流程图有什么区别?
系统流程图描述系统物理模型的工具,数据流程图描述系统逻辑模型的工具。系统流程图从系统功能的角度抽象的描述系统的各个部分及其相互之间信息流动的情况。
数据流程图从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的工作状况。
2、在什么情况下应该使用形式化说明技术?使用形式化说明技术应遵守哪些规则?
在用非形式化的方式描述时,存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题时用形式化说明技术。
应用形式化方法的准则:
A 应该选用适当的表示方法;
B 应该形式化,但不要过分形式化;
C 应该估算成本;
D 应该有形式化的方法顾问随时提供咨询;
E 不应该放弃传统的开发方式;
F 应该建立详尽的文档;
G 不应该放弃质量标准;
H 不应该盲目依赖形式化方法;
I 应该测试,测试再测试;
J 应该重用
1、系统设计包括哪两个阶段
系统设计包括总体设计与详细设计两个阶段。
2、总体设计的主要任务是什么?
总体设计的主要任务是完成软件结构的设计,确定系统的模块及其模块之间的关系。
3、总体设计的9个步骤
1)设想供选择的方案
2)选取合理的方案
3)推荐最佳方案
4) 功能分解
5)设计软件结构
6)设计数据库
7)制定测试计划
8)书写文档
9)审查和复审
4、软件设计过程中遵循的基本原理
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立
5、什么是模块?模块具有哪几个特征?总体设计主要考虑什么特征?
模块是数据说明、可执行语句等程序对象的集合,可以单独命名且可通过名字来访问。 模块具有输入和输出(参数传递)、功能、内部数据结构(局部变量)和程序代码四个特性。 概要设计主要考虑输入、输出(参数传递)和功能两个特性。
6、什么是模块化?模块设计的准则?
模块化是按规定的原则将一个大型软件划分为一个个较小的、相对独立但又相关的模块。
模块设计的准则:
(1) 改进软件结构, 提高模块独立性:在对初步模块进行合并、分解和移动的分析、精化过程中力求提高模块的内聚,降低藕合。
(2) 模块大小要适中:大约 50 行语句的代码,过大的 模块应分解以提高理解性和可维护性;过小的模块,合并到上级模块中。
(3) 软件结构图的深度、宽度、扇入和扇出要适当。一般模块的调用个数不要超过 5 个。
(4) 尽量降低模块接口的复杂程度;
(5) 设计单入 口、单出口的模块。
(6) 模块的作用域应在控制域之内。
7、6种耦合和6种内聚及其详细解释、作用等
耦合:
(1)无直接耦合:如果两个模块分别从属于不同模块的控制和调用,它们之间 不传递任何信息,没有直接的联系,相互独立,称无直接耦合。
(2)数据耦合:如果两个模块之间有调用关系,相互传递的信息以参数的形式 给出,而且传递的信息仅仅是简单的数据,则称为数据耦合。
(3)标记耦合:如果两个模块之间传递的是数据结构,而且被调用模块不需要 作为参数传递过来的整体数据结构,只需要使用数据结构其中一部分数据元素, 则称为标记耦合。
(4)控制耦合:当一个模块调用另一个模块时,传递的信息控制了该模块的功 能,则称为控制耦合。
(5)公共环境耦合:两个或多个模块共用一个数据环境,称为公共环境耦合。
(6)内容耦合:一个模块直接访问另一个模块的内部数据,一个模块 不通过正 常入口而转入另一个模块内部,一个模块有多个入口,这都属于内容耦合。
内聚:
(1)偶然内聚:模块内的元素之间没有意义上的联系。
(2)逻辑内聚:将逻辑上相同或相似的一类任务放在同一个模块中,每次被调 用时,由传送给模块的参数来确定该模块应完成的某一功能。
(3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。
(4)通信内聚:如果模块中所有元素都使用相同的输入数据或者产生相同的输 出数据,则称为通信内聚。
(5)顺序内聚:一个模块中各个处理元素都紧密相关于同一个功能个且必须顺 序执行,此模块的块内联系属顺序内聚。
(6)功能内聚:模块内所有元素属于一个整体,共同完成一个单一功能,缺一 不可,则称为功能内聚。
1、详细设计的目的?
为软件结构图(SC 图或 HC 图)中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述.
2、详细设计的主要任务?
编写软件的“详细设计说明书”.软件人员要完成的工作:
(1) 为每一个模块确定采用的算法, 选择某种适当的工具表达算法的过程,写出模块的详细过程描述
(2) 确定每一模块使用的数据结构.
(3) 确定模块结构的细节,包括对系统外部的接口和用户界面,对 系统内部其它模块的接口,以及关于模块输入数据、输出数据及局部数据的全部细节.
(4) 为每一个模块设 计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试.
【补充】详细设计的基本任务是什么?
详细设计的基本任务包括:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计;其他设计;编写详细设计说明书;评审。
3、结构化程序设计的基本原则?
在详细设计中所有模块都使用单入口、单出口的顺序、选择、循环三种基本控制结构。
4、比较面向数据流和面向数据结构两类设计方法的异同?
相同点:
(1) 遵守结构程序设计“由顶向下”逐步细化的原则,并以其为共同的基础;
(2) 均服从“程序结构必须适应问题结构”的基本原则,各自拥有从问题结构(包括数据结构)导出程序结构的一组映射 规则。
不同点:
(1) 面向数据流的设计以数据流图为基础,在分析阶段用DFD表示软件的逻辑模型,在设 计阶段按数据流类型,将数据流图转换为软件结构。面向数据结构的设计以数据结构为基础,从问题的数 据结构出发导出它的程序结构。
(2) 面向数据流的设计的最终目标是软件的最终SC图,面向数据结构的 设计的最终目标是程序的过程性描述。
5.比较 Jackson方法和 LCP方法的异同?
6、详细设计有哪几种描述方法?
详细设计的描述方法有图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。
7、什么是结构化分析?它的结构化体现在哪里?
8、结构化程序设计的基本要点是什么?
(1)采用自顶向下、逐步求精的程序设计方法
(2)使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。
(3)主程序员组的组织形式。
1、什么是模块测试和集成测试?它们各有什么特点?
2、软件测试的基本任务?
软件测试是按照特定的规则,发现软件错误的过程;好的测试方案是尽可能发现迄今尚未发现错误的
测试;成功的测试方案是发现迄今尚未发现错误的测试;
3、测试与调试的主要区别?
(1) 测试从一个侧面证明程序员的失败;调试证明程序员的正确;
(2) 测试从已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试;调试从不可知内部条件开始,除统计性调试外,结果是不可预见的;
(3) 测试有计划并且要进行测试设计;调试不 受时间约束;
(4) 测试是发现错误、改正错误、重新测试的过程;调试是一个推理的过程;
(5) 测试执行 是有规程的;调试执行要求程序员进行必要的推理;
(6) 测试由独立的测试组在不了解软件设计的件下完 成;调试由了解详细设计的程序员完成;
(7) 大多数测试的执行和设计可由工具支持;调试用的工具主要 是调试器。
4、人工复审的方式和作用?
人工复审的方式:代码会审、走查和排练和办公桌检查;
人工复审的作用:检查程序的静态错误。
5、什么是黑盒测试?黑盒测试主要采用的技术有哪些?
黑盒测试也称为功能测试,它着眼于程序的外部特征,而不考虑程序的内部逻辑结构。测试者把被测程序看成一个黑盒,不用关心程序的内部结构。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能 按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信 息(如数据库或文件)的完整性。
黑盒测试主要采用的技术有:等价分类法、边沿值分析法、错误推测法和因果图等技术。
6、什么是白盒测试?白盒测试主要采用的技术有哪些?
= 白盒测试主要采用的技术有:路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。
7、路径测试技术中几种主要覆盖的含义?
8、等价分类法的测试技术采用的一般方法?举例说明?
(1) 为每个等价类编号;
(2) 设计一个新的测试 方案,以尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步骤,直到所有有效等价类被覆盖为止。
(3) 设计一个新的测试方案,使它覆盖一个尚未被覆盖的无效等价类, 重复这一步骤,直到所有无效等价 类被覆盖为止。
9、软件测试的一般步骤?
单元测试、子系统测试、系统测试、验收测试、平行测试。
10、软件测试的策略?
(1) 在任何情况下都应使用边界值分析的方法。
(2) 必要时用等价类划分法补充测 试方案。
(3) 必要时再用错误推测法补充测试方案。
(4) 对照程序逻辑,检查已设计出的测试方案。
(5) 根据对程序可靠性的要求采用不同的逻辑覆盖标准,再补充一些测试方案。
11、测试的定义及目的:
①测试是为了发现程序中的错误而执行的过程。
②好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
③成功的测试是发现了至今为止尚未发现的错误的测试。
12、什么是动态测试?为何静态测试方法往往比动态测试方法效率高?
动态测试是通过运行软件来检验其动态行为和运行结果的正确性。 动态测试是实际运行被测程序,输入相应的测试用例,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性。
静态测试是对被测程序进行特性分析的一些方法的总称,这种方法的主要特性是不利用计算机运行被测试的程序,而是采用其他手段达到检测的目的。因而在代码产生之前便可对各种文档进行测试,其效率当然高于动态测试。
13、单元测试与集成测试相关概念。
(1)请简述单元测试的主要内容?
模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
(2)在单元测试中,所谓单元是如何划分的?
单元测试的对象通常是软件设计的最小逻辑单元,单元的划分在面向过程的结构化程序中一般是函数或子过程,在面向对象的程序中可以是类或类的成员函数。
(3)如果开发时间紧迫,是否可以跳过单元测试而直接进行集成测试?
不可以。因为没有经过单元测试的模块会遗留大量的缺陷到集成测试阶段,而在集成测试阶段对这些缺陷定位困难,导致后续工作展开困难,修复缺陷成本成指数级增长。
(4)集成测试也叫组装测试又叫联合测试,为何要进行集成测试?
在的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。
14、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?
15、调试的目的是什么?调试有哪些技术手段?
调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。调试的技术手段有简单的调试方法、归纳法、演绎法和回溯法等。
1、在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?
在每个阶段结束前的技术审查和管理复查中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审。
2、维护的定义
软件维护是指软件系统交付使用以后,为了改正软件运行错误, 或者因满足新的需求而加入新功能的修改软件的过程
3、为什么说软件的维护是不可避免的?
因为软件的开发过程中,一般很难检测到所有的错误,其次软件在应用过程中需要随用户新的要求或 运行环境的变化而进行软件的修改或完成功能的增删等,为了提高软件的应用水平和使用寿命,软件的维 护是不可避免的。
4、软件的维护一般分为哪几类?
①为了纠正正在使用过程中暴露出来的错误而进行的改正性维护。
②为了适应外部环境的变化而进行的适应性维护
③为了改进原有的软件而进行的完善性维护
④为了改进将来的可维护性和可靠性而进行的预防性维护
5、影响软件维护的因素有哪些?
开发方法:采用模块化详细设计文档有助于理解软件的结构、界面功能和内部流程;开发过程中严格 而科学的管理规划及清晰可靠的文档资料对发生错误后的理解与纠错是至关重要的;开发过程中模块的独 立程度越高,对软件修改越容易,对软件的改进和移植越方便。
开发条件:软件开发及维护人员的水平决定了软件开发的质量和维护的效率;开发过程中使用标准的 程序设计语言和标准的操作系统接口,可以大大提高软件的可维护性;在测试过程中用例的有效性,可极 大地减少软件存在的错误;其次使用规范化的文档资料可为维护提供更好的依据。
6、软件维护困难主要表现在什么方面?
(1)理解别人写的程序通常很困难
(2)需要维护的软件文档资料太少
(3)当要求对软件维护时,不能指望由开发人员给人们仔细说明文档
(4)绝大多数软件在设计时没有考虑将来的修改
(5)软件维护不是一项吸引人的工作
7、决定软件可维护性的因素?
(1) 软件的可理解性、可测试性、可修改性、可移植性、可重用性
(2) 文档描述符合要求、用户文档简洁明确、系统文档完整并且标准
8、简述提高可维护性的方法。
(1)建立明确的软件质量目标;
(2)利用先进的软件开发技术和工具;
(3)建立明确的质量保证工作;
(4)选择可维护的程序设计语言;
(5)改进程序文档。
1、什么是面向对象方法学?它有哪些优点?
2、什么是“对象”?它与传统的数据有何异同?
人们把客观世界中的实体抽象为问题域中的对象。
异同:它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。
(对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务。)
3、什么是“类”?
类是对具有相同属性和行为的一个或多个对象的描述。
4、什么是“继承”?
子类自动地共享基类中定义的数据和方法的机制。
5、什么是模型?开发软件为何要建模?
模型就是为了理解而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
软件开发建立模型是为了帮助我们思考问题、定义术语、在选择术语时作出适当的假设,并且有助于保持定义和假设的一致性。
6、面向对象的方法学方程
OO=objects+classes+inheritance+communication with messages
对象 类 继承 消息
7、面向对象方法学的优点:
①与人类习惯的思维方法一致
②稳定性好
③可重用性好
④较易开发大型软件产品
⑤可维护性
**8、对象模型:**表示静态的,结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
**9、动态模型:**表示瞬时的、行为化的系统的“控制”性质。它规定了对象模型中的对象的合法变化序列
**10、功能模型:**表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映用户对目标系统的需求。
**11、三种模型之间的关系:**功能模型指明了系统应该“做什么”;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的出发)做;对象模型则定义了做事情的实体。
12、面向对象方法学包含哪些核心概念?简述之
(1) 对象:对象是现实世界中个体或事物的抽象表示,是其属性和相关操作的封装。
(2) 类:类是对具有相同属性和行为的一个或多个对象的描述。
(3) 继承:类之间的继承关系是现实世界中遗传关系的模拟,它表示类之间的内在联系 以及对属性和操作的共享。
(4) 聚集:现实世界普遍存在部分—整体关系。
(5) 消息:消息传递是对象与其外部世界相互关联的唯一途径。
13、说明面向对象的特征?
(1)对象唯一性。每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。
(2)分类性。是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
(3)继承性。是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
(4)多态性。是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。
**1、面向对象分析:**就是抽取和整理用户需求并建立问题域精确模型的过程。
1、面向对象设计应该遵循哪些准则?简述每条准则的内容,并说明遵循这条准则的必要性
模块化、抽象、信息隐藏、弱耦合、强内聚、可重用。
2、简述有助于提高面向对象设计质量的每条主要启发规则的内容和必要性。
(1)设计结果应该清晰易懂,使设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要措施;
(2)一般、特殊结构的深度应适当,应该使类等级中包含的层次数适当;
(3)设计简单的类,应该尽量设计小而简单的类,以便于开发和管理;
(4)使用简单的协议,一般说来,消息中的参数不要超过3个;
(5)使用简单的服务,一般只有3—5行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能;
(6)把设计变动减至最小,即使出现必须修改设计的情况,也应该使修改的范围尽可能小。
3、为什么说类构件是目前比较理想的可重用软构件?它有哪些重用方式?
具备可重用的软构件应有的特点:独立、可塑、接口清晰(文档详尽)。
重用方式有:实例重用、继承重用和多态重用。
1、面向对象实现应该选用哪种程序设计语言?为什么?
(1)将来能否占主导地位,为了使自己的产品在若干年后仍然具有很强的生命力;
(2)可重用性,采用面向对象方法开发软件的基本目的和主要优点,是通过重用提高软件生产率;
(3)类库和开发环境,决定可重用性的因素,不仅仅是面向对象程序语言本身,开发环境和类库也是非常要的因素;
(4)其他因素,对用户学习面向对象分析、设计和编码技术所能提供的培训服务;在使用这个面向对象语言期间能提供的技术支持;能提供给开发人员使用的开发工具、开发平台、发行平台;对机器性能和内存的需求;集成已有软件的容易程度等。
2、面向对象程序设计语言主要有哪些技术特点?
(1)支持类与对象概念的机制
(2)实现整体部分(即聚集)结构的机制
(3)实现一般特殊(即泛化)结构的机制
(4)实现性和服务的机制
(5)类型检查
(6)类库
(7)效率
(8)持久保存对象
(9)参数化类
(10)开发环境
3、良好的面向对象程序设计风格主要有哪些准则?
4、测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点?
5、测试面向对象软件时,主要有哪些设计单元测试用例的方法?
随机测试、划分测试、基于故障的测试
6、测试面向对象软件时,主要有哪些设计集成测试用例的方法?
多类测试、从动态模型中导出测试用例。也可采用随机测试、划分测试的方法。
7、测试面向对象软件时,主要有哪些设计确认测试用例的方法?
可以采用传统的黑盒方法,也可以采用基于情景的方法
1、一个程序能既正确又不可靠吗?解释一下自己的答案。
答:能。所谓软件可靠性,是程序在给定的时间间隔内按照规格说明书的规定成功地运行的概率.通常认为,软件可靠性既包含正确性又包含健壮性,也就是说,不仅在预定环境下程序应该能正确地完成预期功能,而且在硬件发生故障,输入的数据无效或用户操作错误等意外环境下,程序也应该能做出适当的响应. 如果一个程序在预定环境下能够正确地完成预期的功能,但是在意外环境下不能做出适当的响应,则该程序就是既正确又不可靠
2、什么是基线?为什么要建立基线?
答:是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。建立基线的三大原因是:重现性、可追踪性和报告。重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。
3、配置审计和技术复审有何不同?可否把它们的功能放在一次复审终完成?
答:正式的技术复审关注被修改后的配置对象的技术正确性。复审者审查该对象以确定它与其他软件配置项的一致性,并检查是否有遗漏或副作用,软件配置审计通过评估配置对象的那些通常不在复审过程中考虑的特征,而成为对正式技术复审的补充。
4、CMM的基本思想是什么?为什么要把能力成熟度划分为5个等级?
CMM的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以软件技术的运用并不会自动提高软件的生产率和质量。把能力成熟度划分成5个等级的原因是:对软件的改进不可能一撅而就。
整理于:张海藩, 牟永民, 软件工程导论(第6版), 清华大学出版社, 2016.
作者:Janet_zyh
原文来源:https://www.jianshu.com/p/050697c84836