1.与计算机硬件相比,计算机软件有哪些特点?
无法直接观察计算机软件的物理形态,只能通过观察它的实际运行情况来了解它的功能、 特性和质量等。人们在分析、设计、开发、测试软件产品,以及在软件开发项目的管理过程中,渗透了大量的脑力劳动。不存在像硬件一样的磨损和老化现象,但存在着缺陷维护和技术更新的问题。软件的开发和运行必须依赖于特定的计算机系统环境,具有可复用性。
2.软件就是程序吗?如何定义软件?
人们经过长期的实践已经逐步认识到,软件即程序,程序只是软件的关键要素。普遍能被 接受的观点是:软件=程序+数据+文档。
3.什么是软件危机?什么原因导致了软件危机?
经费超岀预算,项目一再拖延。
不重视需求,开发的软件不能满足用户的要求,项目成功率低。
没有规范的软件工程方法,软件可维护性差、软件质量差、可靠性差。
开发工具落后,手工方式,开发效率低。
所有导致软件危机的原因,都与软件本身的产品特点相关。
软件是一个复杂的逻辑产品。如果没有解决复杂问题的有效方法,以及软件产品的结构、 质量、可维护性得不到保障,开发与维护费用就会持续升高。
软件产品不能实现大规模复用,这导致了软硬件生产效率的不同。
软件生产是脑力劳动,它看不见、摸不着,开发成本、开发周期等都无法做到准确估算, 生产过程不易控制。
软件成本主要是由研发成本构成;而硬件的生产成本主要是材料和制造成本,分摊的研发 成本很少,即软件研发过程与硬件制造过程相比要复杂得多。
(1)客观原因:
1. 软件本身的特点
逻辑部件:管理和控制软件开发过程相当困难,较难维护
规模庞大:代码长度不正比程序复杂程度
2. 软件开发与维护的方法不正确
(2)主观原因:
软件专业人员错误的认识,没有认识到软件的生命周期,采用错误的方法和技术,忽视软件需求分析的重要性,认为软件开发就是编写程序使之运行。
如何解决:
其次是必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。
1.技术措施
使用更好的软件开发技术、开发工具、开发工具。
2.组织管理措施
(1)创造良好的组织、严密的管理与协调工作的机制软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
(2)摆脱软件危机的主要出路是,按工程化的原则和方法组织软件的开发工作。
(3)强调文档的重要性。 “口说无凭,立字为据! !”是解决软件危机的格言。
4.为什么说软件工程的发展可以在一定程度上解决软件危机的各种弊端?
软件工程的提出是为了解决软件危机所带来的各种弊端。具体地讲,软件工程的目标主要 包括以下几点。
5.请简述软件工程研究的内容。
软件工程研究的内容包括软件开发方法、软件开发模型、软件支持过程和软件管理过程。
软件开发方法的内容涵盖市场调研、正式立项、需求分析、项目策划、概要设计、详细设 计、编程、测试、试运行、产品发布、用户培训、产品复制、销售、实施、系统维护、版本升 级等。
常用的软件开发模型有瀑布模型、迭代模型、增量模型和原型模型等。
软件支持过程由所支持的CASE工具组成,常用的CASE工具有Power Designer和Rational Rose 等。
6.请简述软件工程的三要素。
软件工程的三要素是从计算机科学的观点来看软件工程,即从软件开发的技术层面来看有 过程、方法和工具这三要素。
“过程”是软件产品加工所经历的一系列有组织的活动,保证能够合理、高质量和及时地 开发出软件。
“方法”为软件开发提供“如何做”的技术。它涵盖了项目计划、需求分析、系统设计、 程序实现、测试与维护等一系列活动的做法,如经常说的面向结构、面向对象、面向组件等开发 方法,以及项目管理中的估算、度量、计划等管理方法。软件工程以介绍方法为主。
“工具”可为过程和方法提供自动的或半自动的支持。这些工具既包括软件,也包括硬件。
软件工具包括编程、建模、管理等开发工具。通过网络环境把这些软件工具集成起来搭建一个能 够支持团队开发的平台,称为计算机辅助软件工程,即CASEO CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。
软件工程是一种层次化的技术。任何工程方法(包括软件工程)必须以有组织的质量保证为基础。全面的质量管理和类似的理念刺激了不断的过程改进,正是这种改进导致了更加成熟的软件工程方法的不断出现。支持软件工程的根基就在于对质量的关注。
7.请简述软件工程的目标、过程和原则。
目标、过程和原则是一切工程的三维框架,这里是以工程的观点来看待软件开发。
软件工程的目标:降低成本、及时交付高质量的软件产品(高质量、高效率、高效益)。
实现目标的过程即完成产品加工的过程,包括:基本过程、支持过程和组织过程。
进行过程应遵守的原则:原则就是过程中的轨道约束,包括:选取适宜的开发范型、采用 合适的设计方法、提供高质量的工程支持、重视开发过程的管理。
8.请简述软件工程的基本原则。
软件工程的基本原则如下。
9.请简述现代软件工程与传统软件工程显著的区别和改进。
传统的软件工程是基于结构化的软件开发方法,而现代软件工程是以面向对象技术为标志。不仅在编程技术上有很大的改进,而且在分析、设计等整个开发过程中,采用面向对象的 思维方式,更加完整、自然地反映客观世界。采用架构技术,开发效率、产品质量得到了极大提高。更注重团队开发和管理,融入更多、更新的管理理念和手段,如RUP模型、XP模型、过程改进、能力成熟度模型、配置管理等。
1.如何理解软件生命周期的内在特征?
软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件 实现、产品测试与验收、投入使用以及产品版本的不断更新,再到最终该产品被市场淘汰的全过程。软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段, 每个阶段都完成特定的相对独立的任务。由于每个阶段的任务相对于总任务难度会大幅度降低,因此在资源分配、时间把握和项目管理上都会比较容易控制°应该合理地划分软件生命周期的各个阶段,使各个阶段之间既相互区别又相互联系,为每个阶段赋予特定的任务。
2.对比瀑布模型、原型模型、增量模型和螺旋模型。
4种模型的对比如下:
瀑布模型:主要体现了分阶段、有控制的思想。活动间强调按顺序、文档化;存在的问题 是过于理想化,每一步的工作必须完整准确,否则无法进行下一步工作。
原型模型:需求分析入手快速、表达直观、容易交流。重点解决瀑布模型的需求分析入手难的问题。
增量模型:对于需求复杂的系统,采用分块开发、逐步集成的开发策略。增量体现了演进、 迭代思想,每一块就是一个增量。每个增量是一次迭代。增量模型的新版本叫做“极限编程(XP)”。
优点 :
采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源。如果核心产品很受欢迎,则可增加人力实现下一个增量。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,对客户起到镇静剂的作用。此外,增量能够有计划地管理技术风险。
缺点 :
1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。
螺旋模型:融合了上述3种模型,融进了循环往复、强化了演进迭代的思想,增加了风险 控制环节。但是,风险分析的正确性是左右软件演进的关键因素。
3.当需求不能一次搞清楚,且系统需求比较复杂时应选用哪种开发模型比较适合?
开发模型不是孤立或排斥的,它们之间需要相互借鉴和参考。螺旋模型是一种综合性的模型,适和于较复杂的系统。
4.RUP包含了哪些核心工作流和哪些核心支持工作流?
RUP建立了对软件过程普遍适用的理论指导框架,是典型的软件开发过程。它包括直接参与软件产品构造的核心工作流和若干属于项目管理范畴的支持工作流。
5.XP是一种什么样的模型?
XP是现代版的增量模型,特点是客户参与、适应变化、测试驱动、以代码为核心。实行XP的条件如下。企业具有较高的能力成熟度,具有团队开发环境和配套的测试工具。软件结构是开放的,增量可随意整合。开发团队拥有“系统隐喻”。
6.每个软件企业遵循的软件开发过程都是一样的吗?
任何软件过程只是给软件开发组织的一个参考,并非清规戒律。企业规划软件过程要适合企业的实际情况,并且不是一成不变,要随着企业的发展、环境的变化和项目的性质来改进软件 过程。RUP就是一个可裁剪的软件过程模板。
7.请简述软件过程。
软件过程就是软件产品的加工过程,其本质就是将“客观世界”映射(虚拟)到“计算机世界”,即从抽象到具体的逐步细化过程。系统分析就是对客观世界的抽象,中间要经过分析模型、设计模型的逐步细化(具体化),最终的具体结果就是计算机世界里的代码。
8.敏捷方法的核心价值观有哪些?它对传统方法的“反叛”体现在哪些方面?
敏捷思想的核心价值观大体包括以下几方面。
敏捷联盟强调的价值观是这一流派的核心。人是受价值观驱使的,敏捷项目管理因而也是以 价值观为推动力的。一个团队可以采用敏捷做法,但如果它不接受敏捷价值观,它将不能得到敏 捷方法的潜在好处。
敏捷方法对传统方法的“反叛”体现在以人为中心,不再依靠文档来控制过程,认为传统过 程过于僵化、文档繁烦,主张对传统过程瘦身,在上述价值观的支配下,做到够用为准。
9.请简述CMM的作用。
CMM的作用如下。
10.请简述CMM软件过程成熟度的5个级别,以及每个级别对应的标准。
5个级别如下
11.假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精 确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种软件生命周期模型?
对这个软件的需求很明确,实现开平方功能的算法也很成熟。因此,既无须通过原型模型来分析需求也无须用原型模型来验证设计方案。此外,一旦实现并测试完之后,该产品将被抛 弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。
综上所述,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了。
1.如何理解需求分析的作用和重要性。
一般情况下,用户并不熟悉计算机的相关知识,而软件开发人员对相关的业务领域也不甚了解,用户与开发人员之间对同一问题理解的差异和习惯用语的不同往往会为需求分析带来很大 的困难。因此,开发人员和用户之间充分和有效的沟通在需求分析的过程中至关重要。
2.如何理解结构化需求分析方法的基本思想。
结构化需求分析是一种面向数据流的需求分析方法。它基于“分解”和“抽象”的基本思 想,逐步建立目标系统的逻辑模型,进而描绘出满足用户要求的软件系统。“分解”是指对于一个复杂的系统,为了将复杂性降低到可以掌握的程度,可以把大问题分解 为若干个小问题,然后分别解决。最顶层描述了整个目标系统,中间层将目标系统划分为若干个模块,每个模块完成一定的功能,而最底层是对每个模块实现方法的细节性描述。可见,在逐层分解的过程中,起初并不考虑细节性的问题,而是先关注问题最本质的属性,随着分解自顶向下进行,才逐渐考虑越来越具体的细节。这种用最本质的属性表示一个软件系统的方法就是“抽象”。
3.如何进行结构化需求分析,其建模方法都有哪些?
结构化分析的具体步骤如下
建立当前系统的“具体模型”:系统的“具体模型”就是现实环境的真实写照,这样的表 达与当前系统完全对应,用户容易理解。
抽象出当前系统的逻辑模型:分析系统的“具体模型”,抽象出其本质的因素,排除次要因素,获得当前系统的“逻辑模型”。
建立目标系统的逻辑模型:分析目标系统与当前系统逻辑上的差别,从而进一步明确目标 系统“做什么”,建立目标系统的“逻辑模型”。
为了对目标系统进行完整的描述,还需要考虑人机界面和其他一些问题。
在结构化分析中经常用到的建模方法主要有以下几种。
4.为什么需求分析特别重要?
需求分析特别重要,是因为以下几点
许多大型应用系统的失败,最后均归结到需求分析:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客 户配合不好,导致客户又孺求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。
需求分析的输出文档是《用户需求报告》。它既是软件生命周期中的第一个里程碑,又是 客户、软件开发人员和项目管理人员三者必须遵守的一根基线,是三者共同工作的基础,是项目 Alpha测试和Beta测试的准则,是供方交付产品和需方验收产品的依据。
需求分析要占用整个软件开发时间或工作量的30%左右。
需求获取中的错误,属于软件开发中的早期错误,它会在后续的设计和实现中进行发散式 的传播。
根据以上4个原因,IT企业的高层经理对需求分析特别重视,常常派经验最丰富的人员去作 项目需求。正因为如此,“系统分析员”才是软件行业中最高的技术职称。
5.需求分析的目的和目标是什么?
6.需求开发经过哪些步骤?每个步骤有何作用?
7.需求分析的难点在哪里?
需求分析的难点:在系统的功能、性能和接口方面,开发者与客户要达成完全一致的需求,让客户最终签字确认,并保证在项目验收前,需求相对稳定不变。万一需求有一点变化,双方必须履行“需 求变更管理程序”,而变更管理程序在签订合同时已经做了规定。要知道,合同是具有法律效力的。
8.需求分析的理论基础有哪些?
需求分析的理论基础:什么是软件需求、软件需求需要量化、需求是一个过程、需求过程 中的角色、需求过程是一个迭代的过程、需求来源。
9.为什么说需求过程是一个迭代过程?
由于人们对客观事物的认识是不断深化的,因此需求过程是一个迭代过程,每次迭代都可 提供更高质量和更详细内容的软件需求。这种迭代会给项目带来一定的风险,上一次迭代的设计 实现可能会因为需求不足而被推翻。
在很多情况下,对需求的理解会随着设计过程和实现过程的深入而不断深化,这也会导致在 软件生命周期的后期,重新修订软件需求。原因可能来自于错误的分析,客户环境和业务流程的 改变,市场趋势的变化等。无论是什么原因,软件分析师应认识到需求变化的必然性,并采取相 应的措施,减少需求变更对软件系统的影响。
10.需求管理过程的目标和内容是什么?
11.用户需求报告与需求分析规格说明书有何差异?
用户需求报告与需求分析规格说明书的差异如下
用户需求报告是对外的,需求规格说明书是对内的。用户需求报告是站在用户(使用者) 的角度、用他们可以看懂的语言(如自然语言)写的,需要用户签字确认。需求规格说明书则不同,它是对内的,不需要用户签字确认。它是站在开发者的角度、可以采用形式化或半形式化的语言进行描述。
一般来说,用户需求报告是合同的产物,需求规格说明书是立项建议书的产物。用户需求 报告是对合同而言的。需求规格说明书是对立项建议书而言的。由用户需求报告可产生需求规格说明书。签完合同后,一般是先写出用户需求报告,后写出需求规格说明书。当需求报告由用户签字 确认后,需求规格说明书很快就会出来了。
12.需求评审的作用是什么?为什么必须评审?评审的标准是什么?
评审的作用,必要性及标准如下
13.请简述可行性研究所研究的问题。
可行性研究主要做4个方面的研究
14.请简述数据流图的作用。
数据流图的作用:数据流图可以用来抽象地表示系统或软件。从信息传递和加工的角度, 它以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。
15.请简述数据字典的作用。
数据词典的作用:分析模型中包含了对数据对象、功能和控制的表示。在每一种表示中, 数据对象和控制项都扮演一定的角色。为表示每个数据对象和控制项的特性,建立了数据词典。数据词典精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来, 使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。
1.请简述软件设计与需求分析的关系。
软件设计可看作将需求规格说明书逐步转换为软件源代码的中间过渡过程。
2.请简述软件设计的工作目标和任务。
3.请简述在软件设计的过程中需要遵循的规则。
在软件设计的过程中需要遵循的规则:模块化、抽象化、逐步求精和信息隐藏。
4.软件设计如何分类,分别有哪些活动?
从活动任务来看,软件设计是对软件需求进行:数据设计、体系结构设计、接口设计、构 件设计和部署设计。
从工程管理角度来看,软件设计分为概要设计和详细设计。前期进行概要设计,得到软件系 统的基本框架。后期进行详细设计,明确系统内部的实现细节。
5.什么是模块、模块化?软件设计为什么要模块化?
定义如下
6.为什么说“高内聚、低耦合”的设计有利于提高系统的独立性?
内聚和耦合往往密切相关,模块的高内聚通常意味着低耦合。低耦合因为模块之间的耦合 程度越低,相互影响就越小,发生异常后产生连锁反应的概率就越低;在修改一个模块时,低耦 合的系统可以把修改范围尽量控制在最小的范围内;对一个模块进行维护时,其他模块的内部程 序的正常运行不会受到较大的影响。
7.请简述面向数据流的设计方法的主要思想。
面向数据流的设计方法就是通常所说的结构化设计方法。它是以数据流图为基础,将DFD 变换成软件结构的不同映射方法,以软件结构图(SC图)的形式表现。SC图描述软件系统的层 次和分块结构的关系,体现模块与模块之间的联系与通讯,从而表达软件的体系结构。
8.请简述界面设计应该遵循的原则。
界面设计应该遵循的原则如下。
9.改进的Jackson图与传统的Jackson图相比有哪些优点?
运用改进的Jackson图表达选择型或循环型结构时,选择条件或循环结束条件可以在图上直接表现出来,并且框间连线为直线,方便打印输出。
10.请简述软件设计优化的准则。
软件设计优化的准则如下
11.请简述结构化设计的优点。
1.在选择编程语言时,通常要考虑哪些因素?
2.请简述编码风格的重要性。要形成良好的编码风格可以从哪些方面做起?
阅读程序是软件开发和维护过程中的一个重要组成部分,程序实际上也是一种供人阅读的文章。应当在编写程序时讲究程序的风格,这将大量地减少人们阅读程序的时间。良好的编码风 格有助于编写岀可靠而又容易维护的程序,编码的风格在很大程度上决定着程序的质量。要形成 良好的编码风格可从以下方面做起。
3.什么是调试?什么是测试?二者有何区别?
4.请简述软件测试的原则?
软件测试的原则如下。
5.请简述静态测试和动态测试的区别。
按照执行测试时是否需要运行程序,软件测试可以划分为静态测试和动态测试。
6.请对比黑盒测试与白盒测试。
黑盒测试
白盒测试
7.软件测试的目的是什么?
8.什么是黑盒测试?有哪些常用的黑盒测试方法。
9.什么是白盒测试?有哪些常用的白盒测试方法。
9.什么是白盒测试?有哪些常用的白盒测试方法?
10.请简述验证与确认之间的区别。
11.软件测试应该划分几个阶段?各个阶段应重点测试的内容是什么?
10.简述验证与确认之间的区别。
11.软件测试应该划分几个阶段,各个阶段应重点测试的内容是什么?
或者说软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?
软件测试总的来说可分为单元测试、集成测试、系统测试、验收测试。每个阶段又分为确定测试计划,测试设计,设计测试用例,实施测试,进行测试报告5个步骤。
1.请阐述面向对象的基本概念。
面向对象的基本概念包括对象、类、封装、继承和多态。对象可以是客观世界中存在的事物,也可以是概念化的实体,它由一组属性和操作组成。属性是用来描述对象静态特征的数据项,是对客观世界实体所具有性质的抽象。操作是用来描述对象动态特征。类是对对象的抽象,是对具有相同属性和相同操作的一组相似对象的定义。封装是指把对象的属性和操作结合在一起,组 成一个独立的单元。继承表示类之间的层次关系,它使得某类对象可以自动拥有另外一个或多个
对象的全部属性和操作。多态是一种使父类中定义的属性或操作被子类继承后,可以有不同的实现的机制。
2.与面向结构化开发过程相比,为什么面向对象能更真实地反映客观世界?
3.什么是面向对象技术?面向对象方法的特点是什么?
4.什么是类?类与传统的数据类型有什么关系?
5.与传统的软件工程方法相比,面向对象的软件工程方法有哪些优点?
1.请对比面向对象需求分析方法和结构化需求分析方法。
2.类间的外部关系有几种类型?每种关系表达什么语义?
类的外部关系有关联、继承、依赖3种关系,画出完整的类图是OOA建模的最终结果。
3.请简述面向对象分析的过程。
面向对象分析的基本任务是运用面向对象的方法,软件工程师和用户必须进行充分的沟通, 以了解基本的用户需求,对问题域和系统责任进行分析和理解。
4.什么是动态模型?
对于一个系统来说,功能模型指明了系统应该“做什么”,而动态模型则明确规定了 “什么时候做”。即在何种状态下、接受了什么事件的触发,来确定对象的可能事件的顺序。
5.请简述如何准备脚本。
在建立动态模型的过程中,脚本是指在某一执行期间内系统中的对象(或其他外部设备) 与目标系统之间发生一个或多个典型的互换信息时产生的事件,所互换的信息值就是该事件的参数。对于各事件,应确定触发事件的动作对象和该事件的参数。
6.请简述如何准备事件跟踪图。
事件跟踪图能形象、清晰地表示事件序列以及事件与对象的关系。在事件跟踪图中,一条竖线代表一个类和对象,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。事件按照先后顺序排列,时间从上向下递增。
7.请简述面向对象分析的目的。
8.请简述面向对象分析的基本任务。
面向对象分析的任务如下
1.请比较结构化软件设计方法和面向对象软件设计方法。
结构化软件设计方法和面向对象软件设计方法是两种主流的软件设计方法。
2.对基于面向对象思想的设计而言,有哪些方法或机制可以实现信息隐藏?
通常,模块的信息隐藏可以通过接口来实现。模块通过接口与外部进行通信,而把模块的具体实现细节(如数据结构、算法等内部信息)隐藏起来。一般来说,一个模块具有有限个接口, 外部模块通过调用相应的接口来实现对目标模块的操作。
3.请简述面向对象的启发规则。
面向对象启发规则如下
4.请简述何为面向对象设计。
面向对象设计是面向对象方法在软件设计阶段应用与扩展的结果,就是根据在问题域中已建立的分析模型,运用面向对象技术进行系统软件设计,并且补充实现的细节部分,如人机界面、数据 存储、任务管理等,形成符合成本和质量要求的、抽象的系统实现方案,在求解域中建立设计模型。
5.请简述如何优化对象设计。
1.面向对象实现应该选用哪种程序设计语言?为什么?
在选择编程语言时,应该考虑的首要因素是哪个语言能最好地表达问题域语义。一般来说, 应该尽量选用面向对象程序设计语言来实现面向对象分析、设计的结果。
2.面向对象程序设计语言主要有哪些技术特点?
3.选择面向对象程序设计语言时主要应该考虑哪些因素?
4.良好的面向对象程序设计风格主要有哪些准则?
良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(如继承性)而必须遵循的一些新准则。
5.测试面向对象软件时,单元测试、集成测试和确认测试各有哪些新特点?
6.面向对象的测试和传统开发方法的测试有什么不同?
1.UML的作用和优点有哪些?
2.UML有多少图,分别有什么作用?
UML的模型是用图来表示的,共有5类9种图
(1)用例图:
(2)静态图:
(3)行为图:
(4)交互图:
(5)实现图:
3.如何着手从自然语言描述的用户需求中画出用例图?
用自然语言进行用户需求的描述,是最高级的抽象。降解抽象层次的第一步就是画用例图, 也就是能找出系统的用例,统一方法建模称为“用例驱动”。由于找用例要先找角色(执行者), 因此又称“角色驱动”。
找出系统边界以外的角色,角色是与系统进行交互的外部实体,可以是与系统交互的人员、与系统相连并交换信息的设备和其他系统。
从这些角色如何与系统进行交互的角度,找出用例。用例表示向角色提供什么功能,每个 用例代表一个完整的功能。
绘制用例图,用例图表达角色如何使用系统功能,角色启动用例并与之通讯。用例图能完 整地描述系统所具备的基本功能。
用例描述。用例图只能宏观地表达系统功能,但却不能提供用例模型所必需的所有信息, 采用文本方式对每个用例的含义和具体动作序列加以详细的描述。用例描述也可釆用列表方式并 辅以活动图。
4.用例脚本有何作用?有哪3种描述方式?用例脚本是针对什么层次的用例?
1.请简述项目、项目管理和软件项目管理。
2.请简述软件项目管理和软件工程的区别和关系。
3.请简述项目计划应该包括的内容。
4.请简述软件估算的意义。
科学的软件估算可以在项目早期就相对精确地估算出项目的人力、时间和资金等成本,有利于制定合理的计划和安排合理的预算,保证项目的顺利实施。
5.如何进行项目的时间管理?
项目的时间管理首先要对项目活动进行定义,依据包括:工作分解结构、项目范围说明、 历史信息、约束条件、假定和专家评论。
在整个项目中,我们需要一份能清晰描述活动发生的时间和所需要的资源的计划,项目进度 安排的内容为如下。
6.怎样进行代码行LOC度量?怎样进行功能点FP度量?它们可以度量的指标有哪些?
度量方法如下
代码行度量:是指统计可执行的源代码行数来反映软件规模。采用直接测量法和经验估算 法都可以获得数据。虽然如何定义源代码行缺乏统一的认识和标准,时代的差异、语言的差异和 经验的差异可能会造成统计数据的差异较大,但是在一个企业内部仍具有参照性。
功能点度量:通过统计系统的“功能性”来反映软件规模。它只能釆用间接测量找出系统 的功能点FPO尽管是间接测量,但克服LOC度量存在的问题,FP度量用于事前规模估算要比 LOC严谨些。
用这两种规模度量的结果,可进一步计算生产率、软件质量、软件成本和文档数量等指标。
7.请简述估算的作用
计划是项目的启动入口,项目开展过程就是执行计划。而估算是制定计划的依据,因此估算是项目开展的基础。估算的主要工作如下。
8.项目的时间管理是否就是做进度计划?
完整的时间管理还包括活动定义、活动排序、活动资源估算、活动历时估算、进度计划、进度控制。进度计划只是项目时间管理的一个子集。
9.请简述做进度计划的两种方式。
① Gantt图用线段标明子任务的分解;标明各个任务的计划开始时间、完成时间;标明各个任务与参与工作的人数,各子任务间的并行和串行的关系的衔接情况。
特点:简单、明了、直观、易于编制;以文档与评审作为开发进度的里程碑。
缺点:无法标明多个任务之间存在的相互制约关系;无法标明关键的控制作业。
② 工程网络图是用时间和节点来表示工作流程的有序、有向的网状图形。它可弥补Gantt图 无法表达关键路径和作业之间的制约关系,并且易于调整。
10.请简述度量、估算和计划之间的关系。
1.目前项目开发时常用的小组组织方法有哪些?
目前,项目开发时常用的小组组织方法:民主制程序员组、主程序员组和现代程序员组。
2.请简述主程序员组的优缺点。
主要优点:主程序员广播式发布工作要求,组织管理好、效率高、质量容易保证、成本相对较低。主要缺点:人员完整配备较难、不利人才脱颖而出。并且,能够在技术和管理两方面都能同 时具备优秀品质的主程序员更不多见。
3.民主制、主程员制各存在什么问题?
民主制程序员组中所有程序员不分主次,这样在责任落实、分工协作方面存在一些问题。 责任不明,分工不清,大家都负责,实际上没有人负责。
主程序员制是主程序员负责制,克服了民主制的缺点,但又走到了另一个极端一一只有主程序员负责,其他成员的积极性就被扼杀了。另外,主程序员这个位置既是一个技术岗位,也是一个管理角色,这样的位置很难找到胜任的人担任。热衷于技术的人,往往对管理不感兴趣,而具 有管理才能的人,大多不会是技术专家。
4.你所在的信息系统开发公司指定你为项目负责人。你的任务是开发一个应用系统,该系统 类似于你的小组以前做过的那些系统,只是这一个规模更大而且更复杂一些。需求已经由客户写成了完整的文档。你将选用哪种小组结构?为什么?你准备采用哪(些)种软件过程模型?为什么?
由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克。为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提 高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜。
针对待开发的系统,客户已经写岀了完整的需求文档,项目组又有开发类似系统的经验,因此,可以采用广大软件工程师熟悉的瀑布模型来开发本系统。
1.风险识别的步骤有哪些?
2.如何进行软件项目的风险分析?
软件项目的风险分析主要在可行性分析阶段进行,其内容包括风险识别、风险预测和风险管理。风险识别主要从项目、技术和商业的角度对潜在的风险进行识别。风险预测利用定量的方法对风险发生的可能性和产生后果的严重程度做出估计。风险管理的内容涉及两个方面。一方面, 风险管理者需要综合考虑风险发生的概率及发生后产生后果的严重性,确定特定风险的处理策略。 对于发生概率低,影响也低的风险可以采用规避策略,即不需要考虑。另一方面,风险管理者需 要对已经识别出的风险定期进行评估,重新预测其发生的可能性和产生后果的严重程度,从而根 据变化及时调整对该风险的处理策略。由于变化具有永恒性,风险管理的活动应该存在于项目进行的整个过程中。
3.请简述软件质量的定义。
所谓软件质量,就是供方提供的软件产品满足用户明确和隐含需求的能力特性的总和。
4.针对软件质量保证问题,最有效的办法有哪些?
通常,人们将“质量标准”、“配置管理”、“测试测量”作为质量管理的三大支柱,而将“SQA 计划”、“SQA进度”、“SQA评审和审计”作为质量管理三大要素。软件质量保证是一个质量管理 过程,基本思想是以事前预防为主,以事后测试和纠偏为辅,釆取标本兼治的方法,且以治本为主。为此,要从“事前、事中、事后” 3个层次上对软件质量进行控制。归根结底一句话:软件质量保证的最有效的办法是软件质量过程管理,因为质量蕴涵在过程之中。
5.什么是配置项?什么是配置管理?
6.软件配置管理的目的是什么?
通俗地讲,软件配置管理的目的,就是为了做到3个有利于:有利于配置项的综合管理;有利于基线的变更管理;有利于版本的升级管理,以保证所交付的软件版本产品能够满足需求规格说明书中的各项具体要求,节省人力、物力资源,加强安全与保密工作。
科学地讲,软件配置管理的目的,就是为了建立和维护在整个软件生命周期内软件产品的完整性。
7.请简述软件配置管理的工作内容。
配置管理的工作内容一般包括如下的4个方面。
①标识配置项。配置项是配置管理中的基本单元,每个配置项应该包含相应的基本配置管理的信息。标识配置项就是要给配置项取一个合适的名字。
②进行配置控制。进行配置控制是配置管理的关键,包括存取控制、版本控制、变更控制和产品发布控制等。存取控制通过配置管理中的“软件开发库”、“软件基线库”、“软件产品库”来实现。每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。版本控制往往使用自动的版本控制工具来实现,如SVN。变更控制是应对软件开发过程中各种变化的机制,可以通过建立控制点和报告与审查制度来实现。产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是完整、正确和一致的。
③记录配置状态。配置状态报告记录了软件开发过程中每一次配置变更的详细信息。记录配置状态的目的是使配置管理的过程具有可追踪性。
④执行配置审计。配置审计是为了保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布的正确性。
1.为什么要进行软件维护?软件维护的作用有哪些?
软件维护是软件产品生命周期的最后一个阶段。在产品交付并且投入使用之后,为了解决 在使用过程中不断发现的各种问题,保证系统正常运行,同时使系统功能随着用户需求的更新而不断升级,软件维护的工作是非常必要的。概括地说,软件维护就是指在软件产品交付给用户之 后,为了改正软件测试阶段未发现的缺陷,改进软件产品的性能,补充软件产品的新功能等,所进行的修改软件的过程。
2.什么是软件的可维护性?软件的可维护性与哪些因素有关?
软件的可维护性是用来衡量对软件产品进行维护的难易程度的标准,它是软件质量的主要特征之一。影响软件可维护性的因素有很多,如可理解性、可测试性、可修改性等。
3.传统软件维护分哪几大类?
传统软件维护分4类,分别是纠错性维护、适应性维护、完善性维护和预防性维护。
4.请简述软件维护的工作程序。
软件维护的工作程序与软件开发的工作程序相仿。其工作程序是:维护的需求分析、维护的设计、修改程序代码、维护后的测试、维护后的试运行、维护后的正式运行、维护过程的评审和审计
5.请简述结构化维护和非结构化维护。
维护软件时,如果有一个完整的软件配置存在,那么维护人员可以进行结构化维护。结构化维护的起点是评价设计文档,维护步骤如下:
维护软件时,如果没有一个完整的软件配置存在,甚至只有程序代码,那么维护人员只能进行非结构化维护。非结构化维护的起点是评价程序代码,维护步骤如下:
由于文档资料缺失,而使非结构化维护难于评价软件结构、全程数据结构、系统接口和代码改动的后果。因此,非结构化维护需要付出高昂的代价,是因为这种维护方式没有使用良好定义的方法学来开发软件。相反,结构化维护能够使维护工作井然有序,减少维护成本,提高软件维护的质量。
6.软件维护的副作用表现在哪4个方面?
软件维护的副作用表现在如下的4个方面。
7.请简述面向缺陷的维护。
面向缺陷维护的内容:该软件产品能够正常运行,可以满足用户的功能、性能、接口需求,只是维护前在个别地方存在缺陷,用户不是非常满意。克服缺陷的方法是修改程序,也就是通常说的只修改程序,不修改数据结构。
8.请简述面向功能的维护。
面向功能维护的内容:该软件产品在功能、性能、接口上存在某些不足,不能满足用户的某些需求,因此需要增加某些功能、性能、接口。解决这些不足的方法是,不但要修改设计,而且也要修改程序,也就是通常说的,既要修改数据结构,又要修改编码。
9.怎样理解迭代模型RUP对软件维护的影响?
RUP的功能覆盖整个软件的开发周期,从需求分析开始,直到软件的发布、实施和维护为止,因而它对传统意义下的维护工作产生重大影响。
RUP把软件生命周期定义为4个主要阶段:初始、细化、构造、移交。经过这4个阶段的历 程被称为一个开发周期,自动产生一个周期内的所有文档,从而生成一个软件产品。首次经历这 4个阶段称为该产品的初开发周期。除非该产品的生命终止,否则它将重复初始、细化、构造和 移交这4个阶段,从而演化为下一代产品,这就是对旧有产品的维护,也是新产品的升级换代, 也就是开发周期的演化,也就是RUP对软件维护工作的影响。
10.软件工程中的文档可以分为哪几类?
按照文档产生和使用的范围,软件工程中的文档大致可以分为以下3类。
11.请简述软件文档的意义。
文档是指某种数据媒体和其中所记录的数据。它具有永久性,并可以由人或机器阅读, 通常仅用于描述人工可读的东西。在软件工程中,文档常常用来表示对活动、需求、过程或结果 进行描述、定义、规定、报告或认证的任何书面或图示的信息。它们描述和规定了软件设计和实 现的细节,说明使用软件的操作命令。文档也是软件产品的一部分,没有文档的软件就不能称其 为软件。软件文档的编制在软件开发工作中占有突出的地位和相当大的工作量。高质量、高效率 地开发、分发、管理和维护文档对于转让、变更、修正、扩充和使用文档,对于充分发挥软件产 品的效益有着重要的意义。
12.请简述软件文档的主要作用。
1.请简述软件重用的过程,并说明每个步骤须采用的关键技术。
软件重用是降低软件整体成本、提高软件质量和开发生产率的合理而且有效的途径。可重用的软件成分包括软件的技术表示(如规格说明、体系结构模型、设计和代码)、文档、测试数据, 甚至还包括与过程相关的任务(如审查技术)。
重用过程包括两个并发的子过程:领域工程和软件工程。领域工程的目的是在特定的应用领 域中标识、构造、分类和传播一组软件成分。然后,软件工程在开发新系统的过程中选取适当的 软件成分供重用。
分析和设计可重用构件的技术,使用与良好的软件工程实践中使用的相同的概念和原理。可 重用构件应该在这样一个环境中设计:该环境为每个应用领域建立标准的数据结构、接口协议和 程序体系结构。
2.可重用的软件成分中包括项目计划和成本估算,怎样重用这些成分?这样做能带来什么收益?
软件项目计划的基本结构和许多内容(如SQA计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间,也降低了与建立进度表和进行风险分析等活动相关联的不确定性。
3.请举例说明类构件的3种重用方式。
1.简述文档在软件工程中的作用
2.在结构化设计过程中,层次图和结构图的区别是什么?
通常用层次图作为描绘软件结构的文档。
结构图作为文档并不很合适,因图上包含的信息太多有时反而降低了清晰程度。利用IPO图或数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,却可以作为检查设计正确性和评价模块独立性的好方法。
3.录入统计计算某班学生成绩,画出数据流图(DFD)。(10分)
学生成绩表数据结构如下:
学号|高数|英语|计算机|总分|平均分|不及格门数
需求功能如下:
(1)录入全班学生各课的考分,生成成绩表;
(2)检查各课成绩,修改错误,补充未录入成绩,删除非法成绩;
(3)计算总分,平均分;
(4)统计不及格门数,然后再写入升级、补考、留级;
(5)打印成绩通知单,交家长。
4.下面是货运收费策略:铁路运费时,若收货地点在本省以内,快件每公斤1.5元,慢件每公斤1元。若收货地点在外省,重量小于或等于20公斤,快件每公斤2元,慢件每公斤1元,若重量大于20公斤,超重部分每公斤0.2元。分别用判定树和判定表进行表示。
*1* | *2* | *3* | *4* | *5* | |
---|---|---|---|---|---|
*省内* | *T* | *T* | *F* | *F* | *F* |
*快件* | *T* | *F* | *T* | *F* | **** |
*重量<=20公斤* | **** | **** | *T* | *T* | *F* |
*每公斤1元* | **** | *×* | **** | *×* | **** |
*每公斤1.5元* | *×* | **** | **** | **** | **** |
*每公斤2元* | **** | **** | *×* | **** | **** |
*超重部分每公斤0.2元* | **** | **** | **** | **** | *×* |
5.耦合性有哪几种类型? 其耦合度的顺序如何
低:非直接耦合® 数据耦合®标记耦合® 控制耦合®外部耦合® 公共耦合®内容耦合 :高 (耦合性低到高 模块独立性强到弱)
耦合定义
耦合强度依赖因素
降低耦合度的设计原则
内聚定义
6.简述需求分析工作可以分成哪四个方面?软件需求分析的有哪三个基本原则?
7.某“调整工资”处理模块接受一个“职称”的变量,根据职称的不同(助教,讲师,副教授,教授)作不同的处理,其中若是助教还必须输入工龄,只有工龄超过两年才能调整工资。请用等价类划分法设计测试用例。
划分等价类:
输入条件 | 合理等价类 | 不合理等价类 |
---|---|---|
职称 | ①教授②副教授③讲师 | ⑤四种职称之外任意一种 |
职称兼工龄 | ④助教兼工龄大于2年 | ⑥助教兼工龄等于两年 ⑦助教兼工龄小于两年 |
设计测试用例:
输入数据 | 预期结果 | 覆盖范围 |
---|---|---|
教授 | 输入有效,进行调整工资处理 | ① |
副教授 | 输入有效,进行调整工资处理 | ② |
讲师 | 输入有效,进行调整工资处理 | ③ |
助教 3 | 输入有效,进行调整工资处理 | ④ |
助教 2 | 输入有效,不调整工资处理 | ⑥ |
助教 1 | 输入有效,不调整工资处理 | ⑦ |
工程师 | 输入无效 | ⑤ |
8.假定某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重部分每公斤收费4元,对其它舱的国内乘客超重部分每公斤收费6元,对国外乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定树表示计算行李费的算法。
9.软件设计过程
软件设计是把许多事物和问题抽象起来,并且抽象它们不同层次和角度,是将需求转变为软件陈述的过程,是迭代的过程。软件设计,要根据需求规格说明 书,对整个设计过程进行计划,然后实施具体的设计过程,即“先整体,再局部”,也是不断迭代和精化的过程。然后需要对生成的设计规格说明书进行评审,启动质量评价的标准,若未通过评审,需重新修改设计,直至评审通过,确定最后定型的过程本身。进入后续阶段,完成软件设计过程。
10.原型化方法主要用于解决什么问题?试说明这种方法的主要优缺点
建立原型的主要原因是为了解决在产品开发的早期阶段需求不确定的问题,用户、经理和其他非技术项目风险承担者发现在确定和开发产品时,原型可以使他们的想象更具体化。
原型在软件开发过程中可以起到以下主要作用:
11.请看下列伪代码程序,要求完成下列问题:
(1)画出代码的流程图
(2)根据该程序流程图画出该程序的流图;
(3)计算该流图的环形复杂度;
START
INPUT (A,B,C)
IF A>5
THEN X=10
ELSE X=1
END IF
IF B>10
THEN Y=20
ELSE Y=2
END IF
IF C>15
THEN Z=30
ELSE Z=3
END IF
PRINT (X,Y,Z)
STOP
法一:环形复杂度=E-N+2=18-16+2=4
法二:环形复杂度=P+1=3+1=4
12.简述结构化程序设计方法的基本特点
(1)尽可能少用goto语句的程序设计方法;
(2)每个代码块都单入单出;
(3)使用控制结构:顺序、选择和循环;
(4) 自顶向下逐步求精。
13.请比较快速原型模型和螺旋模型的优缺点,并说明各自的适用范围。
模型 | 优点 | 缺点 | 适用范围 |
---|---|---|---|
快速原型模型 | 易于获取客户真实需求 | 可能导致系统设计差、效率低,难于维护 | 适用于对软件需求缺乏准确认识的情况 |
螺旋模型 | 风险驱动,降低风险 | 风险分析人员需要有经验且经过充分训练 | 内部开发的大型软件项目 |
14.衡量模块独立性的两个定性标准是什么?这两个标准的定义分别是什么?在我们的软件设计中,关于模块独立性我们追求的目标是什么?
15.面向对象设计中,存在有哪几种耦合和内聚?
16.某个程序的伪码如下(前面的标号只用于标明语句顺序,不参与程序运行):
START
IF L1 THEN
S1
DO WHILE L2
S2
IF L3 THEN
S3
ELSE
S4
END IF
END DO
EISE
S5
END IF
STOP
(2) 计算程序的环路复杂度
法一:环路复杂度=E-N+2=15-13+2=4
法二:环路复杂度=P+1=3+1=4
17.简述面向对象的4个要点的含义。
面向对象的4个要点是:对象分解、数据专有、继承、封装性。
行为者:Bank network, Manager, Clerk
用例:Authorize purchase, Log onto redister, Sell goods, Restock inventory, Open store
18.已知有一段代码实现了“输出ABC三个数中的最大值”,要求完成下列问题:
(1)画出代码的流程图
(2)根据该程序流程图画出该程序的流图;
(3)计算该流图的环形复杂度;
答:
(1) 流程图
(2) 流图
(3) 复杂度计算方法
因此复杂度为4
19.软件维护的过程
在软件开发完成交付用户使用后,为了保证软件在一个相当长的时期能够正常运行,就需要对软件进行维护。 软件维护的过程:
20.简述软件工程的概念
概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
21.简述典型的软件生命周期的各个阶段
软件生命周期(各阶段)软件生命周期由软件定义、软件开发和运行维护三个时期组成。
即每个有8个阶段及基本任务:
22.简述传统方法学软件设计的基本原理及内容。
传统方法学也称生命周期方法学或结构化范型。
23.以G.J.Myers的观点,简述对软件测试的定义。
G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。
(1) 测试是为了发现程序中的错误而执行程序的过程;
(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3) 成功的测试是发现了至今为止尚未发现的错误的测试。
从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。
24.简述面向对象方法学的4个要点。
概括地说,面向对象方法学具有下述4个要点:
(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2) 把所有对象都划分成类(class)。
(3) 按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。
(4) 对象彼此间仅能通过发送消息互相联系。
25.列举出5个详细设计阶段的常用工具
程序流程图,盒图,PAD图(问题分析图),判定表,判定树,过程设计语言
在系统的功能、性能和接口方面,开发者与客户要达成完全一致的需求, 让客户最终签字确认,并保证在项目验收前,需求相对稳定不变。万一需求有一点变化,双方必须履行“需求变更管理程序”,而变更管理程序在签订合同时已经做了规定。要知道,合同是具有法律效力的。
28.需求分析的理论基础
什么是软件需求、软件需求需要量化、需求是一个过程、需求过程中的角色、需求过程是一个迭代的过程、需求来源。
29.在本题中,数据操作主要分为存款和取款。
在取款过程中,核对密码时需要从取款单和存款信息中获取数据,并将取款信息传递给后续。数据流程依次进行计算利息和打印利息清单的相关操作,从而完成取款相关操作。在存款过程中,记录存款信息时需要将存款信息进行储存并将存款利息数据传递给后续流程进行存款单打印,从而完成存款相关操作。
数据流图
30.在本题中,外部交互方包括学生和教师两类。
对于教师而言,他们可以提交开课计划并在系统批准之后得到开课通知,被批准的开课通知会被系统存储。此外,教师还可以对学生的成绩进行录人和存储。系统会根据存储的学生成绩,将成绩单发送给学生。对于学生而言,他们可以通过查询开课信息从已存储的课程记录中获取开课信息。此外,他们还可以提交选课计划并在系统批准中得到申请结果。被批准的选课计划会被系统存储。该系统顶层的数据流图如图所示。
31.在复印机接到命令之前,应处于闲置状态;在接到命令之后,复印机处于准备复印的状态。在准备复印状态下,如果发现缺纸,则会发出相应警告,并在装纸之后重新进人闲置状态;否则,复印机会进入复印状态。在复印状态下,如果发生卡纸,则会发出相应警告,并在故障排除后重新进入闲置状态;否则,复印机会正常完成复印命令,并闲置。
复印机的状态转换图如图所示。
32.在计算两个正整数的最小公倍数时,首先需要确定最小公倍数的查找范围。由数学相关知识可知,最小公倍数的最小可能值为两个正整数中较大者,最大可能值为两个正整数的乘积。因此,在开始查找最小公倍数之前,首先要对这两个正整数进行比较并且计算二者乘积。在确定了查找范围之后,就可以对其中的数字进行逐一的判断,直至找到最小公倍数。
33.在计算两个整数的最大公约数时,可以使用辗转相除的方法。
#include
int cal(int x,int y){
int h=0;int r=0;
if(xy){if(x%y!=0){r=x%y;y=r;}}
return y;}
int main(){
int x=0,y=0;int a=0;
printf("请输入两个整数:\n");
scanf("%d,%d",&x,&y);
a=cal(x,y);
printf("两个数的最大公约数是:%d",a);
return 0;}
34.画出该问题的等价类表,并为每个等价类编号
35.环境控制器在被定义气候之前,处于空闲状态。在被定义气候之后,开始温度控制:当处于白天模式时,如果温度升高,则进行调温操作;如果日落,则转换为夜间模式。当处于夜间模式时,如果温度降低,则进行调温操作;如果日出,则转换为白天模式。当环境控制器被命令终止气候时,则重新处于空闲状态。环境控制器的动态模型如图所示。
36.图书馆所藏出版物拥有共同的基类:馆藏出版物类。馆藏出版物类的成员变量包括出版物名称、出版者、获得日期、目录编号、借出状态、借出限制等,并包括借出和收回两项操作。各种类型的出版物类继承于馆藏出版物类,并定义了各自的属性。图书馆馆藏出版物的对象模型如图所示
病员的病症信号会被局部监视系统采集,并传递到中央监视系统中。中央监视系统会读人病员的相关信息,并在必要的时候进行报警。护士会按照要求对病员的情况进行报告,该报告会与病员日志数据一并传递给医生。中央监视系统会对病员的病症信号进行分析处理,并根据病员日志数据对日志进行更新。医院病房监护系统的功能模型如图所示。
38.本题中,对象主要包括考生、人事局和招聘单位3种,所以包括3条对象生命线。招聘单位将招聘计划发送给人事局,再由人事局发布给考生。考生通过人事局进行考试报名,报名信息由人事局传递给招聘单位。考生通过人事局进行考试。人事局向考生和招聘单位发布考试成绩。招聘单位将录用信息发给人事局,再由人事局发布给考生。公务员招聘考试管理系统的顺序图如图所示。
39.在本题中,图书在初始时需要进行分类并更新在库数量。如果图书发生借阅,则执行借阅操作,并对在库图书数量进行更新。在借阅期间,如果图书发生续借操作,则对该图书重新执行借阅操作并更新在库数量。如果借阅的图书被归还,则需要对在库图书数量进行更新。此外,如果在库图书发生破损或者借阅图书发生遗失,则对在库图书的数量进行更新。图书馆系统图书的状态图如图所示。
在本题中,执行者应包括管理员和读者两类。其中,管理员包含处理后台信息维护和图书管理两种。读者可以查询书籍从而获得书籍信息。此外,读者还可以通过管理员来进行图书的借、还操作。负责图书管理的管理员可以执行借书和还书的操作,需要用管理员账号进行登录。负责信息维护的管理员可以进行书籍信息维护和读者信息维护,需要用管理员账号进行登录。其中,书籍信息维护主要包括添加书籍、修改书籍和删除书籍;读者信息维护主要包括添加新读者、读者信息修改以及读者注销。
40.模型优缺点以及适用情况
瀑布模型
特点
优点
缺点
适用场景
快速原型模型
基本思想
优点
缺点
适用场景:
(1)对所开发的领域比较熟悉而且有快速的原型开发工具;
(2)项目招投标时,可以以原型模型作为软件的开发模型;
(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
增量模型
本质
优点
缺点
适用场景
螺旋模型
基本思想
优点
缺点
适用范围
模型 | 优点 | 缺点 |
---|---|---|
瀑布模型 | 规范,文档驱动 | 系统可能不满足客户真正的需求 |
快速原型 | 克服了瀑布型的缺点 | ** ** |
增量模型 | 开发早期回报明确,易于维护 | 要求开放的软件体系结构 |
螺旋模型 | 风险驱动,适用于大型项目开发 | 风险分析人员需要有经验且经过充分训练 |
模型 | 优点 | 缺点 | 适用于哪类软件开发 |
---|---|---|---|
瀑布模型 | 只关注后面,不用管前面,整体比较规范,可强迫开发人员采用规范的方法; 提高开发效率,确保前面的工作是正确的,缩短开发周期,相应地减少时间和金钱的付出; 文档驱动,严格地规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 ,有问题可以提早发现。高质量(文档保证)。 | 从前往后,一步错步步错,最后才可以看到结果,系统可能不满足客户真正的需求,风险大; 模型缺乏灵活性,无法解决需求不明确问题,用户不经过实践提出完整准确的需求是不切实际的 文档也是缺点,工作量大 | 需求稳定的项目,功能和性能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目。 新团队。用最经典的最传统的开发方法来规范开发行为。 |
快速原型 | **克服了瀑布型的缺点 **及早提供有用产品; 及早发现问题,及时改错; 降低风险,减少开发时间,提高开发效率; 用户参与,增加沟通,减少误解; 适应需求的变化. | 缺少有力的工具支持; 尚未建立完整的开发标准; 对设计人员和开发环境要求高; 易变性给测试带来了困难. | 需求快速变化的; 用户心急的。 |
增量模型 | 开发早期回报明确,易于维护 各个阶段交付的是满足客户需求的一个子集的可运行产品,有问题,可及时改正。 因为首先交付具有较高优先权的模块,增量不断被集成进来,使得最重要的功能接受了最多的测试,从而降低风险。 合理的规划开发人员。 | 要求开放的软件体系结构 难点:每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。 管理人员须有足够的技术能力来协调好各增量之间的关系。 开发期间,开发者和用户必须始终在一起,直到系统的安全版本出来。 | 用户参与度高,团队人少,技术能力不足,需求不稳定的项目。 |
遇到不能集成的风险,软件必须具备开放式的体系结构 |
适用场景
螺旋模型
基本思想
优点
缺点
适用范围
模型 | 优点 | 缺点 |
---|---|---|
瀑布模型 | 规范,文档驱动 | 系统可能不满足客户真正的需求 |
快速原型 | 克服了瀑布型的缺点 | ** ** |
增量模型 | 开发早期回报明确,易于维护 | 要求开放的软件体系结构 |
螺旋模型 | 风险驱动,适用于大型项目开发 | 风险分析人员需要有经验且经过充分训练 |
模型 | 优点 | 缺点 | 适用于哪类软件开发 |
---|---|---|---|
瀑布模型 | 只关注后面,不用管前面,整体比较规范,可强迫开发人员采用规范的方法; 提高开发效率,确保前面的工作是正确的,缩短开发周期,相应地减少时间和金钱的付出; 文档驱动,严格地规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 ,有问题可以提早发现。高质量(文档保证)。 | 从前往后,一步错步步错,最后才可以看到结果,系统可能不满足客户真正的需求,风险大; 模型缺乏灵活性,无法解决需求不明确问题,用户不经过实践提出完整准确的需求是不切实际的 文档也是缺点,工作量大 | 需求稳定的项目,功能和性能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目。 新团队。用最经典的最传统的开发方法来规范开发行为。 |
快速原型 | **克服了瀑布型的缺点 **及早提供有用产品; 及早发现问题,及时改错; 降低风险,减少开发时间,提高开发效率; 用户参与,增加沟通,减少误解; 适应需求的变化. | 缺少有力的工具支持; 尚未建立完整的开发标准; 对设计人员和开发环境要求高; 易变性给测试带来了困难. | 需求快速变化的; 用户心急的。 |
增量模型 | 开发早期回报明确,易于维护 各个阶段交付的是满足客户需求的一个子集的可运行产品,有问题,可及时改正。 因为首先交付具有较高优先权的模块,增量不断被集成进来,使得最重要的功能接受了最多的测试,从而降低风险。 合理的规划开发人员。 | 要求开放的软件体系结构 难点:每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。 管理人员须有足够的技术能力来协调好各增量之间的关系。 开发期间,开发者和用户必须始终在一起,直到系统的安全版本出来。 | 用户参与度高,团队人少,技术能力不足,需求不稳定的项目。 |
螺旋模型 | 风险驱动,对于大型系统及软件的开发,具有很好的风险控制,开发者和客户能够较好地对待和理解每一级迭代的风险;软件质量作为软件开发的一个重要目标。 | 风险分析人员需要有经验且经过充分训练**(需要具有较高的风险评估技术,应用比较复杂。)** | 适用于大型项目开发; 自主研发项目 |