第一篇:软件工程简答题
1.什么是软件工程?简述软件工程的七条基本原理。软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法来进行软件开发和维护的学科。
七条基本原理:用分阶段的生命周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代程序设计技术; 结果应能清楚地审查;
开发小组的人员应该少而精;
承认不断改进软件工程实践的必要性。
2.什么是软件生存周期模型?请至少列举四种主要的模型。软件生存周期模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
四种主要的模型:瀑布模型,演化模型,喷泉模型,螺旋模型、基于构件的开发模型 3.为什么软件需要维护?简述软件维护的过程。
1)改正在特定使用条件下暴露出来的一些潜在程序错误或设计缺陷;
2)因在软件使用过程中数据环境发生变化(如所要处理的数据发生变化)或处理环境发生变化(如硬件或软件操作系统等发生变化),需要修改软件,以适应这种变化;
3)用户和数据处理人员在使用时常提出改进现有功能、增加新功能、以及改善总体性能的要求,为满足这些要求,需要修改软件。
软件维护的过程:首先建立维护的机构,申明提出维护申请报告的过程及评价的过程,为每一个维护申请规定标准的处理步骤,建立维护活动的记录保管,并规定复审的标准。4.影响软件维护工作量的因素有哪些?
1)系统大小。系统越大,功能越复杂,理解掌握起来就越困难,需要的维护工作量越大。2)程序设计语言。使用功能强的程序设计语言可以控制程序的规模。语言的功能越强,生成程序所需的指令数就越少;语言的功能越弱,实现同样功能所需的语句就越多,程序就越大,维护起来就越困难。
3)系统年龄。老系统比新系统需要更多的维护工作量。许多老系统在当初并未按照软件工程的要求进行开发,没有文档,或文档太少,或者在长期的维护中许多地方与程序不一致,维护起来困难较大。
4)数据库技术的应用。使用数据库工具,可有效地管理和存储用户程序中的数据,可方便地修改、扩充报表。数据库技术的使用可以减少维护工作量。
5)先进的软件开发技术。在软件开发时,如果使用能使软件结构比较稳定的分析与设计技术(如面向对象分析、设计技术),可以减少一定的工作量。
6)其它。如,应用的类型、数学模型、任务的难度、IF嵌套深度等等都会对维护工作量产生一定的影响。
5.说明软件文档的作用
1.提高软件开发过程的能见度。把开发过程中发生的事件以某种可阅读的形式记录在文档中
2.提高研发效率。软件文档的编制,使得开发人员对各个阶段的工作都进行周密思考,全盘权衡,减少返工。
3.记录开发过程中有关信息,便于协调以后的软件开发、使用和维护。4.便于潜在用户了解软件功能、性能等各项指标。6.如何理解模块的独立性,用什么指标衡量模块的独立性。模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。
模块的独立程度可以由两个定性标准度量: 耦合,模块之间的相对独立性的度量; 内聚,模块功能强度的度量。
7.原型化方法用于解决什么问题,这种方法的优缺点是什么 主要用于解决诸如用户定义了一组一般性目标,但不能标识出详细的输入、处理及输出需求;开发者可能不能确定算法的有效性、操作系统的适应性或人机交互的形式等问题 优点:1.明确并完善需求
2.探索设计选择方案
3.发展为最终产品
缺点:1.用户看到一个正在运行的原型便以为产品即将完成,会要求不再进行产品重建,而只是对原型进行修改就交付。由于原型没有考虑软件的总体质量和可维护行,交付原型会产生欲速则不达的效果
2.开发人员为了快速构建原型,可能会采用不合适的操作系统或程序设计语言,也可能使用一些效率低的算法。在一段时间的开发后,他们往往已经习惯了这些选择,遇事便在系统中掺杂了这些不理想的选择。
8.以G,J,Myers的观点,简述软件测试的目的 1.软件测试是为了发现错误而执行程序的过程
2.一个号的测试用例能够发现至今尚未发现的错误
3.一个成功的测试是发现了至今尚未发现的错误
9.采用黑盒测试方法设计用例有哪几种方法。这些方法有什么特点
1.等价类划分法
把所有可能的输入数据划分成若干个等价的子集,使得每个子集中的一个典型值在测试中的作用于这一子集中所有其他值的作用相同
2.边界值分析法
使等价类的每个边界都要作为测试条件,不仅考虑输入条件们还要考虑输出空间产生的测试情况。边界值分析法不仅重视输入条件边界,而且也从输出域导出测试用例。
3.错误推测法
列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例,错误推测法很大程度上靠知觉和经验进行。
4.因果图法
因果图适合于描述对于多种输入条件的组合,响应产生多个动作的形式来设计测试用例
第二篇:软件工程简答题
第一章
1简述软件的概念
软件是计算机程序、数据结构和文档的有机结合。其中,计算机程序能够完成预订功能和性能的可执行的指令;数据结构使得程序能够适当地操作各种信息;文档全面描述了程序的分析、设计过程和使用方法。2什么是软件危机
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
3软件危机主要包含哪两方面的问题
一是如何开发软件,以满足对软件日益增长的需求;二是如何维护数量不断膨胀的已有软件。4简述软件危机产生的原因
是由于软件产品本身的特点,以及开发软件的方式方法,技术和人员引起的。
(1)软件规模越来越大,结构越来越复杂。(2)软件开发的管理困难而复杂。
(2)软件开发费用不断增加(4)开发技术落后(5)生产方式落后(6)开发工具落后
5什么是软件工程
软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。
6简述软件生存周期的概念
软件声明周期是由软件定义、软件开发、软件维护三个时期组成的。
定义阶段的主要任务是解决“做什么”问题。通常被分为三个阶段:问题定义、可行性研究、需求分析。开发阶段的任务是解决“如何做”的问题。通常包括软件设计、实现、测试等工作。
维护阶段的主要任务是使软件保持用户满意的需要。
7软件工程的目标和内容是什么
目标:旨在开发满足用户需求,及时交付、不超过预算和无故障的软件。
内容:(1)实现预期的功能,满足用户的需求。(2)增强软件过程的可见性和可控性,提高软件质量。
(3)提高软件的可维护性(4)提高软件开发的生产效率(5)合理预算开发成本。
第二章
1什么是项目?项目有哪两种常见的形式?
项目是一项有待完成的任务,有特定的环境与要求,在一定的组织机构内,利用有限资源(包括人力、物力和财力等),在规定的时间内完成任务,任务要满足一定质量、数量、性能技术指标等要求。通用商业软件项目、定制软件项目。
2简述项目的开发流程
软件项目开发流程通常包括:招标、投标、合同签订、软件项目开发等。
3简述软件生命周期的各个阶段
项目计划阶段、需求分析阶段、系统设计阶段、编码测试阶段、运行维护阶段
4列举项目的主要角色
机构领导、项目经理、系统分析员、系统设计师、程序员、测试员,还有配置管理员、质量保证员、产品维护人员等。
5典型的项目组织形式有哪些
民主制程序员组、主程序员组的组织方式、现代程序员组的组织方式
6简述检查点、里程碑、基线三者之间的关系
检查点比较细,里程碑比较粗、基线最粗;重要的检查点一般就是里程碑,重要的里程碑一般就是基线;检查点一般依据时间的先后顺序设定,里程碑一般依据关键成果的产出设定,基线依据一组关键成果的产出设定;在实际项目中,周例会是检查点的表现形式、高层的阶段汇报会是基线的表现形式。
7软件生命周期计划阶段的主要任务
8软件生命周期需求分析阶段的主要任务
9软件生命周期编码测试阶段的主要任务
第三章
1可行性研究的要素包括哪些
经济:这个系统的经济效益能超过它的开发成本吗?
技术:使用现有技术能实现这个系统吗?
社会:市场(未成熟、成熟、将要消亡)与政策
人:人物、开发人员、领导
法律:可能涉及的合同、侵权、责任及各种与法律相抵触的问题。
2可行性研究的任务是什么
对以后的行动方针提出建议。
如果问题没有可行的解,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费。如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。
3什么是系统流程图
系统流程图简称流程图或系统图,是概括地描绘物理系统的传统工具。
4可行性研究有哪些步骤及内容
① 复查项目目标和规模
访问关键人员,仔细阅读分析材料,对问题定义阶段书写的规模目标报告书进一步复确认。改正含
糊或不准确,清晰描述对目标系统的一切限制和约束。
② 研究目前系统
了解现有系统基本功能,保证新开发系统的功能性。
了解现有系统缺点,保证新开发系统改善缺陷。
了解现有系统运行使用所需费用,新系统应增加收入或减少使用费用。
了解现有系统能做什么,无需了解他怎样做这些工作。
③ 形成高层逻辑模型
数据流图:描绘数据在系统中流动处理情况。
数据字典:定义系统中使用的数据。
④ 重新定义问题
分析员与用户以数据流图和数据字典为讨论基础,再次复查问题定义、工程规模和目标。
如对问题有误解,或遗漏要求,在此阶段改正。
5简述软件质量的含义
软件质量是“软件与明确地和隐含地定义的需求相一致的程度”,是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。6度量软件规模的常用技术有哪些
(1)LOC(Lines of Code,代码行)估算(2)FP(功能点)估算
(3)Delphi 估算法(4)类比法
7简述成本估算的步骤
(1)任务分解(2)估算每个任务的成本(3)直接成本估算
(4)间接成本估算(5)项目总估算成本(6)项目总报价
8简述风险及风险管理的目标
所有可能危害项目的因素都称为风险,风险事件最终可能发生,也可能不发生,风险管理的目的是在风险产生危害之前识别它们,从而有计划地消除或削弱风险。
9简述风险管理的主要过程
风险识别,风险量化,风险应对计划制定和风险监控。
10简述什么是CMM
能力成熟度模型(CMM),用于评价软件机构的软件过程能力成熟度的模型
CMM的策略是力图改进对软件过程的管理,而在技术方面的改进是其必然结果。
11简述工程网络图的绘制步骤
(1)画工程网络图。(2)计算事件的最早时刻。(3)计算事件的最迟时刻。
(4)确定工程的关键路径。(5)计算每个子任务的机动时间。
第七章
1进行软件测试的目的(1)测试是一个为了发现错误而执行程序的过程。
(2)一个好的测试用例是指很可能找到迄 今为至尚未发现的错误的测试用例。
(3)一个成功的测试是指揭示了迄今为至尚未发现的错误的测试。
2简述什么是软件测试
“用人工或自动的手段来执行和评价系统或系统部件的过程,以检验它是否满足规定的需求,或识别期望的结果和实际的结果之间有无差别”。
3简述什么是软件质量
见第三章
4简述什么是静态测试
不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。5简述什么是动态测试
通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能。目前,动态测试是公司测试工作的主要方式。
6软件测试原则有哪些
(1)所有的测试都应可追溯到客户需求。
(2)应该在测试工作真正开始前的较长时间就进行测试计划。
(3)测试中发现的80%的错误可能来自于20%的程序代码。
(4)测试应从“小规模”开始,逐步转向“大规模”。
(5)穷举测试是不可能的。
(6)为了达到最有效的测试,应由独立的第三方来承担测试。
(7)在设计测试用例时,应包括合理的输入条件和不合理的输入条件。
(8)严格执行测试计划,排除测试的随意性。
(9)应当对每一个测试结果做全面检查。
(10)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
(11)检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事。
(12)在规划测试时不要设想程序中不会查出错误。
第八章
1什么是软件维护
是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。
2什么是软件的可维护性
软件能够被理解、改正、适应和完善以适应新的环境的难易程度。
3软件维护目标是什么??
为了改正软件系统中的错误,使软件能够满足预期的正常运行状态的要求;为了使软件适应内部或外部环境变化。
第三篇:软件工程
1.软件危机的概念 系统的数据要求,功能需求,性能需求,显示出程序的轮廓。
软件危机是指在计算机软件开发、使用与可靠性需求,可用性需求,出错处理需求,混合方式
维护过程中遇到的一系列严重问题和难接口需求,约束,逆向需求以及将来可能优点:综合了以上两种策略的长处 题。提出的需求。9.确认测试
补充: 5.常使用的图形工具 确认测试又称有效性测试。有效性测试是
1.软件危机的表现有哪些? 实体-联系图,数据流图,状态转换图,在模拟的环境下,运用黑盒测试的方法,答:1)对软件开发成本和进度的估计常层次方框图,warnier图,IPO图。验证被测软件是否满足需求规格说明书常很不准确。第五章 列出的需求。任务是验证软件的功能和性
2)用户对已完成的软件不满意1.总体设计的任务 能及其他特性是否与用户的要求一致。对的现象时有发生。划分出组成系统的物理元素——程序、文软件的功能和性能要求在软件需求规格
3)软件产品的质量往往是靠不件、数据库、人工过程和文档等等 说明书中已经明确规定,它包含的信息就住的。设计软件的结构。也就是要确定系统中每是软件确认测试的基础。
4)软件常常是不可维护的。个程序是由哪些模块组成的,以及这些模10.什么是白盒测试,其测试技术有那些,5)软件通常没有适当的文档资块相互间的关系。覆盖标准的强弱程度
料。2.模块化思想 白盒测试是一种测试用例设计方法,盒子
6)软件成本在计算机系统总成就是把程序划分成独立命名且可独立访指的是被测试的软件,白盒指的是盒子是本中所占比例逐年上升。问的模块,每个模块完成一个子功能,把可视的,你清楚盒子内部的东西以及里面
7)软件开发生产率提高的速度这些模块集成起来构成一个整体,可以完是如何运作的。“白盒”法全面了解程序内远跟不上日益增长的软件需求。成指定的功能满足用户的需求。部逻辑结构、对所有逻辑路径进行测试。
2.产生软件危机的原因主要有哪些? 3.衡量模块独立的标准(内聚和耦合的白盒测试的测试方法有代码检查法、静态答:1)用户对软件需求的描述不精确。含义,种类)结构分析法、静态质量度量法、逻辑覆盖
2)软件开发人员对用户需求的内聚:标志着每一个模块内各个元素彼此法、基本路径测试法、域测试、符号测试、理解有偏差。结合的紧密程度,是信息隐藏和局部化概路径覆盖和程序变异。
3)缺乏处理大型软件项目的经念的自然拓展。偶然内聚,逻辑内聚,时种覆盖标准:语句覆盖、判定覆盖、条件验。间内聚,功能内聚,顺序内聚,通信内聚,覆盖、判定/条件覆盖、条件组合覆盖和
4)开发大型软件易产生疏漏和过程内聚。路径覆盖发现错误的能力呈由弱至强的错误。耦合:是对一个软件结构内不同模块之间变化。
5)缺乏有力的方法学的指导和互连程度的度量。数据耦合,控制耦合,11.什么时候黑盒测试,其测试技术有哪有效的开发工具的支持。特征耦合,公共环境耦合,内容耦合。些,(等价划分,边介值分析法)
6)面对日益增长的软件需求,4.启发式规则 黑盒测试也称功能测试,它是通过测试来人们显得力不从心。1.改进软件结构提高模块的独立性检测每个功能是否都能正常使用。
2软件的概念 2.模块规模应该适中等价类划分的办法是把程序的输入域划完成特点功能的程序以及数据结构和文 3.深度、宽度、扇出和扇入都应适当 分成若干部分(子集),然后从每个部分档 4.模块的作用范围应在控制范围之内中选取少数代表性数据作为测试用例
3.软件工程的基本原理 5.力争降低模块接口的复杂程度 边界值分析是通过选择等价类边界的测
1.用分阶段的生命周期计划严格管理 6.设计单入口单出口的模块试用例。边界值分析法不仅重视输入条件
2.坚持进行阶段评审 7.模块功能应该可以预测 边界,而且也必须考虑输出域边界。它是
3.实行严格的产品控制 5.面向数据流的设计方法把信息流映射对等价类划分方法的补充。
4.采用现代程序设计技术 成软件结构 12.软件调试技术有哪些
5.结果应能清楚地审查 信息流:变换流,事物流 蛮干法,蛮干法可能是寻找软件错误原因
6.开发小组的人员应该少而精 映射:变换分析,事物分析 的最低效的方法,仅当所有其他方法都
7.承认不断改进软件工程实践的必要性失败的情况下才使用。
4软件生命周期分成哪几个阶段?各阶第六章 回溯法,回溯法是一种相当常用的调试方段的任务是什么? 1.详细设计的基本任务 法,当调试小程序时很有效。从发现症
1.问题定义: 1.为每个模块确定采用的算法。2.确定状的地方开始,人工沿程序的控制流往回
2.可行性研究:研究问题的范围,探索这每一模块使用的数据结构追踪分析源程序代码,知道找出错误原因个问题是否值得去解决,是否有可行的解3.确定模块接口的细节,包括对系统外为止。
决方法。部的接口和用户界面,对系统内部其 原因排除法,对分查找法、归纳法、演绎
3.需求分析:主要是确定目标系统必须具它模块的接口,以及关于模块输入数据、法都属于原因排除法。
备哪些功能 输出数据及局部数据的全部细节。13.软件可靠性(可靠性和可用性的含义)
4.总体设计: 4.为每一模块设计出一组测试用例。
5.详细设计:就是把解法具体化,设计出2.程序的三种基本结构
程序的详细规格说明。顺序结构,选择结构,循环结构
6.编码和单元测试:写出正确的容易理解3.详细设计的工具
容易维护的程序模块。1.图形工具
7.综合测试:通过各种类型的测试使软件2.表格工具
达到预定的要求 3.语言工具
8.软件维护:通过各种必要的维护活动使4.jackson方法
系统持久地满足用户的需要。(改正性维5.复杂性度量的方法
护,适应性维护,完善性维护,预防性维Halstead方法:它根据程序中运算符和
护)操作数的总数来度量程序的复杂程度
5.瀑布模型,快速原型模型,增量模型,McCabe方法 :McCabe方法根据程序控制
螺旋模型的特点 流的复杂程度定量度量程序的复杂程度,瀑布模型阶:段时间具有顺序性和依赖第七章
性。推迟现实的观点。质量保证的观点。1.选择程序设计语言应考虑哪些因素
快速原型模型:软件产品的开发基本上是1.系统用户的要求
线性顺序进行的,本质是“快速”加速软2.可以使用的编译程序
件的开发过程,节约软件开发成本。3.可以得到的软件工具
增量模型:能在较短时间内向用户提交可4.工程规模
完成部分工作的产品。逐步增加产品功5.程序员的知识
能,可以使用户有较充裕的时间学习和适6.软件可移植性要求
应新产品,从而减少一个全新的软件可能7.软件的应用领域
给客户组织带来的冲击。2.良好的编程风格包括哪些方面
螺旋模型:对可选方案和约束条件的强调1.程序内部的文档2.数据说明 3.语句构
有利于已有软件的重用,也有助于把软件造4.输入输出 5.效率
质量作为软件开发的一个重要目标。减少3软件测试的目标
了过多的测试或测试不足带来的风险。更目的:(1)测试是为了发现程序中的错误
重要的是在螺旋模型中维护只是模型的而执行程序的过程;
另一个周期,在维护和开发之间并没有本(2)好的测试方案是极可能发现迄今为
质区别。风险驱动的。止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未
第二章 发现的错误的测试。
1.可行性研究的目的 定义:为了发现程序中的错误而执行程序
就是用最小的代价在尽可能短的时间内的过程。
确定问题是否能够解决。补充:
补充: 软件测试步骤 :
可行性研究的步骤 :(1)模块测试(2)子系统测试(3)系统
1.复查系统规模和目标。测试(4)验收测试(5)平行运行
2.研究现有的系统。4.确定测试计划是在哪个阶段制定的3.导出新系统高层逻辑模型。5.黑盒测试和白盒测试的概念
4.进一步定义问题黑盒测试
5.导出和评价供选择的解法。1把程序看作一个黑盒子,完全不考虑程
6.推荐行动方针序的内部结构和处理过程
7.草拟开发计划2对程序接口进行测试,检查程序功能是
8.书写文档提交审查 否能按规格说明书的规定正常使用;
程序是否能适当地接受输入数据并产生
2.系统流程图的作用 正确的输出信息;
系统流程图是描绘物理系统的传统工具,程序运行过程中能否保持外部信息的完
它用图形符号来表示系统中的各个部件。整性
它表达了系统中各个元素之间的信息流白盒测试
动的情况。1把程序堪称装在一个透明的白盒子里,3.数据流图的概念 测试者完全知道程序的结构处理算法
数据流图是一种图形化技术,它描绘信息2按照程序内部的逻辑测试程序,检测程
流和数据从移动到输出的过程中所经受序中的主要执行通路是否都能按的变换。预定要求正确工作
4.数据流图里面的符号,画数据流图。6.测试的步骤及每个步骤形成的文档
5.数据字典最基本的功能,以及与数据流单元测试:(模块测试)发现的往往是编
图的关系。码和详细设计的错误
最基本的功能:在软件分析和设计的过程集成测试:着重测试模块的接口 中给人提供关于数据的描述信息。
关系:数据流图和数据字典共同构成系统系统测试:发现的往往是软件设计中的错的逻辑模型,没有数据字典,数据流图就误,也可能发现需要说明中的错误 不严格,然而没有数据流图,数据字典也验收测试:(确认测试)往往发现需求说难于发挥作用。只有数据流图和对数据流明书中的错误 图中每个元素的精确定义放在一起,才能7.渐增式和非渐增式的区别 共同构成系统的规格说明。“非渐增式”,即先独立地测试每一模块,第三章 然后将所有这些模块连接到一起运行; 1.需求分析属于哪一个阶段,任务是什“渐增式”,即在已测试过的N个模块的么。基础上再增加一个模块,再对N十1个模需求分析是软件定义时期的最后一个阶块进行测试。段.渐增式比非渐增式优越,因为用渐增式,1.确定对系统的综合要求(功能需求,性如果是“由顶向下”则可利用前面已测试能需求,可靠性和可用性需求,出错处理过的模块,而不必另外准备驱动模块,如需求,接口需求,约束,逆向需求,将来果是“由底向上”,也可利用已测试过的可能提出的要求)模块,不必再准备桩模块。渐增式可以较2.分析系统的数据要求早地发现模块界面之间的错误,有利于排3.导出系统的逻辑模型 错,检查比较彻底 4.修正系统开发计划2.需求分析的产品是什么 8.自顶向下,自下而上,以及混合策略的3.面向过程的分析方法主要是建立三类优缺点 模型 自顶向下数据模型(按照用户的观点对数据建立的优点:能较早显示整个程序的轮廓,向用模型,把用户的数据要求清楚,准确地描户展示程序的概貌,取得用户的理解与支述出来。描述了从用户角度看到的数据,持。缺点:当测试上层模块时因使用桩它反应了用户的现实环境,属性,联系),模块较多,很难模拟出真实模块的全部功功能模型,行为模型(通过描绘系统的状能,使部分测试内容被迫推迟,只能等待态及引起系统状态转换的事件来表示系换上真实模块后再补充测试。统的行为)由底向上4.软件需求规格说明书的内容 优点:测试从下层模块开始,测试设计用通常用自然语言完整,准确,具体地描述例比较容易。缺点:在测试的早期不能
第四篇:《软件工程》
《软件工程》课程分析
本课程是软件技术专业学生必修的一门专业必修课。根据培养软件开发人员的需要,本课程的任务是使学生通过本课程的学习,了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和最新方法。能在软件工程的理论指导下,开发一个小型管理系统,为今后从事软件工程实践打下良好的基础。
一、课程分析
(一)教学计划的制定和教学内容的选取
根据培养应用技能型人才的总目标,制订本专业教学计划,课程的教材配套,教学、实验、实训、课程设计大纲和指导书等教学文件齐全,近几年来引入了现代教学技术手段,已初步建设、形成了具有特色的全套课堂教学和实验教学课件。
根据该课程的基本教学要求和特点,结合学时的安排,从教材的整体内容出发,有侧重地进行取舍,筛选出学生必须掌握的基本教学内容,较好地解决了教学中质量与数量的矛盾。
(二)教学方法分析
由于该课程是用于指导软件开发的,和实践联系非常紧密。所以采用了理论联系实际的方法进行授课。一方面,让学生模拟软件公司的项目小组进行软件开发;一方面,对学生进行适时的理论指导。既调动了学生的积极性,又让学生了解了该课程的理论内容,收到了一举两得的效果。具体教学过程如下:
第一步:模拟软件公司的开发项目小组,分组,分设角色(项目经理、用户、需求人员、设计人员、程序员、测试人员、软件安装培训维护人员),确定开发题。让每个小组的学生聚在一起,在项目经理的组织下通过调研、讨论来制定自己小组的开发题目,大家感觉就象在软件公司实习一样,非常新鲜,感兴趣。每个学生都积极主动的去完成自己应承担的那部分工作。
第二步:模拟软件项目开发全过程的各个阶段,进行相关的理论授课和实际开发。即对软件开发的每一阶段,首先按照教材内容进行理论授课,然后让学生参照授课内容进行实际的软件开发实践。
在此阶段结束后,每班召开一个模拟方案论证会,由各开发小组选出代表上台讲解本组的开发方案,其他同学模拟用户对开发方案提出意见。由于大家对模拟方案论证会非常感兴趣,发言积极踊跃,论证会结束后,每个小组的设计方案都得到了很好的补充和完善。
第三步:学期末各小组提交各自完成的软件系统及开发文档,并进行总结演示,由任课教师进行讲评。
抽象理论课的教学应理论联系实际,让学生在实际应用中掌握抽象的理论,在兴趣中学习,达到我们高职的双向型培养目标。
二、存在的问题与希望
在上述的教学中,虽然实现了理论联系实际,但也存在着一些问题,比如每个项目小组中总有个别同学存在依赖心理,不参与项目开发,最后抄袭别的同学的项目成果,自己得不到实际的锻炼,影响了大三的毕业设计和日后的软件开发。另外,如果该课程只上课,没有实训的话,实验课时太少,学生很难全面完成一个系统的开发。
第五篇:软件工程
软件工程
1.谈谈你对软件工具的理解,你用过什么软件工具
软件工具是指为支持计算机软件的开发、维护、模拟、移植或管理而研制的程序系统。它是为专门目的而开发的,在软件工程范围内也就是为实现软件生存期中的各种处理活动(包括管理、开发和维护)的自动化和半自动化面开发的程序系统。
开发软件工具的最终目的是为了提高软件生产率和改善软件的质量。
软件工具分为六类:模拟工具、开发工具、测试和评估工具、运行和维护工具、性能质量工具和程序设计支持工具。
应该是看对象来选择测试工具!比如:
功能测试工具:WinRunner
性能测试工具:LoadRunner
内存泄漏测试工具:Purify
单元测试工具:Junit
测试管理工具:TestDirector还有东软的bugbaseIBM开发的 rational。
2.什么是软件的可维护性:
软件可维护性即维护人员对该软件进行维护的难易程度,具体包括理解、改正、改动和改进该软件的难易程度。
决定可维护性的因素:
1.系统的大小
2.系统的年龄
3.结构合理性
可维护性的度量:
可理解性
可测试性
可修改性
可移植性
3.软件开发和写程序有什么不同?软件开发的内容是:需求、设计、编程和 测试 维护!
需求分析
软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。本阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。本阶段的工作是根据需求说明书的要求,设计建立相应的软件系统的体系结构,并将整个系统分解成若干个子系统或模块,定义子系统或模块间的接口关系,对各子系统进行具体设计定义,编写软件概要设计和详细设计说明书,数据库或数据结构设计说明书,组装测试计划。
设计
软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据,也可以是可组合、可分解和可更换的功能单元。模块,然后进行模块设计。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。
编码
软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的“源程序清单”。充分了解软件开发语言、工具的特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。
测试
软件测试的目的是以较小的代价发现尽可能多的错误。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法测试对象是源程序,依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误。结构错误包括逻辑、数据流、初始化等错误。用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果。白盒法和黑盒法依据的是软件的功能或软件行为描述,发现软件的接口、功能和结构错误。其中接口错误包括内部/外部接口、资源管理、集成化以及系统错误。黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。黑盒法。
维护
维护是旨在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。
4.什么是软件设计的”高内聚 低耦合”
内聚:一个模块内各个元素彼此结合的紧密程度
耦合:一个软件结构内不同模块之间互连程度的度量
对于低耦合,(模块的独立性)
一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合.对于高内聚:
在一个模块内,让每个元素之间都尽可能的紧密相连。也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。
5.case在软件工程中的作用
CASE(Computer Aided(or Assisted)Software Engineering计算机辅助软件工程。CASE的一个基本思想就是提供一组能够自动覆盖软件开发生命周期各个阶段的集成的、减少劳动力的工具。CASE已被证明可以加快开发速度,提高应用软件生产率并保证应用软件的可靠品质。CASE工具由许多部分组成,一般我们按软件开发的不同阶段分为上层CASE和下层CASE产品。上层或前端CASE工具自动进行应用的计划、设计和分析,帮助用户定义需求,产生需求说明,并可完成与应用开发相关的所有计划工作。下层或后端CASE工具自动进行应用系统的编程、测试和维护工作。
除非下层CASE和上层CASE工具的供应商提供统一界面,否则用户必须编写或重新将所有信息从上层CASE工具转换到下层CASE工具。独立的CASE工具供应商愈来愈希望将它们的工具连接在一起建立统一的界面以减少用户不必要的开发工作。
CASE工具带来的好处
计算机专业人员利用计算机使他们的企业提高了效率,企业的各个部门通过使用计算机
提高了生产率和效率,增强了企业的竞争力并使之带来了更多的利润。
6.为什么要进行软件测试?常用的软件测试的方法有哪些?
软件测试的目的:尽可能发现并改正被测试软件中的错误,提高软件的可靠性。
软件测试方法主要包括单元测试,集成测试,系统测试,用户测试,回归测试。
还有就是自定而下,和自下而上的方法。
7.谈谈你对保证软件质量的技术和方法的认识? 1.作为一个软件质量保证人员需要良好的沟通能力,因为如果没有良好的沟通能力,很多问题都没有办法解决,原因很简单,测试人员发现了bug,开发人员或项目经理在怎么不理,但是他们都会想到,万一测试人员发现了bug而自己忽视了,那么就有可能成为软件里的一颗不定时地炸弹,那么作为一个开发人员或项目经理对bug的重视程度肯定相对比较高,至少要看测试人员发现的bug,但是QA就不一定了,因为QA保证的流程的正确的执行,相关人员就是认为流程不重要,只要我开发的产品没有问题那就没有问题,客户肯定不会关注我的流程,在加上古人的名言“结果说明了一切”,所以没有良好的沟通能力,一些问题将很难去解决,做起来就没有成就感。
2.个人感觉比沟通能力更重要的是,坚持原则,在遇到困难的时候,是不是还能坚持原则,在遇到项目组的种种不理不睬的时候,是不是还能坚持原则,在项目组不按照计划走的时候,是不是还能坚持原则。
3.个人心态,我工作三年的经历告诉我,如果开发和测试相比,开发是天堂,测试是地狱的话,但如果测试和QA相比的话,那测试就是天堂,QA就是地狱,所以心态很重要,在三年里我就锻炼成一个非常好的心态,随便怎么说CMMI没用,随便怎么说CMMI就是写文档,随便怎么说QA真烦人,我笑容依然灿烂,从容面对,而且一个QA要有坚定的信念,如果你都不相信过程能给项目开发带来好处,那你还指望谁能相信。
8.提高软件生产率有哪些手段?
1.挑选精干人员(管理 计划不好 技术搭配不当)
2.提高阶段效率 3消除人工阶段
4.减少重复劳动 5.建造简单产品
6.重用软部件库(已经存在的软件功能部件
9.什么是软件的可靠性和有用性
可靠性就是指软件运行的稳定性,可用性就是操作的便利性。比如一辆汽车,可靠性好应该归功于机械部分,可用性好则是内饰和中控系统的功劳。
10什么是软件规格说明?作用是什么?将其形式化的意义是什么?
11.什么是软件重用?实现软件重用的方法有哪些?
软件重用,是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需要分析文档甚至领域知识。通常,可重用的元素也称作软构件,可重用的软构件越大,重用的粒度越大。
根据软件开发的不同阶段实现软件重用主要有四个途径:
抽象:对重用对象概括提炼,从而得到能全面描述侧重算法和数据结构的软件构件的各部分的描述。
选择:是对重用对象进行存放,匹配和检索的功能。
实例化:对数据类型中对象进行参数的提供 转换。
集成:
12.什么是软件移植?你认为构造一个工具实现windows到Unix的移植有意义吗?难大不? 软件可移植性是指代码可以在不同平台间移植,我们一般说的软件的可移植性指的是软件可移植性,简单的说就是指源代码移到不同的平台下(不同的操作系统,例如从Windows
下移到Linux下)时,需要修改的内容越少,移植性越好。要保证软件可移植性,就是少用或不用系统特有的东西,比如你用C语言编程,你可以使用C语言本身的库,但不要用
WindowsAPI函数,因为WindowsAPI函数在Linux下是没有的,如果想移植到Linux平台下,使用WindowsAPI函数的部分代码就要做出修改了。