《软件工程》复试问答题总结

软件系统的三个测试阶段:

第一阶段:发现和解决BUG 集中在发现bug,考研测试设计能力,发现bug之后如何清晰表述定级,以及验证,之后举一反三尽早发现更多类似bug
第二阶段:质量的管理 多做质量数据的统计与分析,并且针对问题进行溯源并且对开发进行考核,对测试也进行考核,最后推动开发自测
第三阶段: 推动全面的质量提升 针对开发流程进行梳理,并且对提交测试之后应该做的一些事情做好推动例如代码静态扫描,针对测试能力的提升也应拓展,并且把握发布环节的质量把控,对于团队来说更因注重外网的监控,外网事故与问题手机,跟进与反向推动,对用户的问题和满意度进行反馈,确保最后在运营方面的质量,慢慢形成一个良性的循环。
 

事务指的是满足ACID特性的一组操作,那ACID具体指的是:
​ 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。ACID是Atomic(原子性) Consistency(一致性)Isolation(隔离性)Durability(持久性)的英文缩写。

Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。
Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。
Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
 

面向对象和面向过程软件工程有哪些区别:
面向对象方法学是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。

​ 面向对象的分析OOA,OOA强调直接针对问题域客观存在的各项事物设立OOA模型中的对象.问题域有哪些值得考虑的事物,OOA模型中就有哪些对象.00A对问题域的观察、分析和认识是很直接的,对问题域的描述也是很直接的.它所采用的概念及其术语与问题域中的事物保持了最大 程度的数据一致,不存在语言上的鸿沟。

​ 传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划起,到废弃不用 止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为需求分析、总体设计、详细设计、编程和测试几个阶段。

​ 面向过程软件工程使用结构化分析技术,面向数据流自顶向下求精的技术来完成需求分析阶段。在全局范围内以功能、数据或数据流为中心来进行分析。主要阶段有实体—联系图、状态转换图的分析设计。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和重新组合。

​ 传统方法编程以过程为中心,把大的程序划分为若干个相对独立、功能简单的程序模块,强调过程,强调功能和模块化,通过一系列过程的调用和处理完成相应的任务。
面向对象编程以对象为中心,是对一系列相关对象的操纵,发送消息给对象,由对象执行相应的操作并返回结果,强调对象。理论上,面向对象的程序设计方法将产生更好的模块内聚和耦合特性,使得软件更易于重用与维护。
 

瀑布模型的优缺点?:
瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈。

优点:

有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。

缺点:

1)开发过程一般不能逆转,否则代价太大;

2)实际的项目开发很难严格按该模型进行;

3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。

4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。

什么是软件工程?目前有哪几种主要的软件工程方法?
​ 概括地说,软件工程是指导计算机软件开发和维护的一门工程学科.采用工程的概念、原理、技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

​ 但软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义。

​ 主要有传统方法也称为经典软件工程方法或生命周期方法或结构化范型和面向对象方法。
 

喷泉模型的优缺点?:
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。各活动之间无明显边界,例如设计和实现之间没有明显的边界,这也称为“喷泉模型的无间隙性”。

优点:喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
 

软件有哪几种维护类型?:
一、正确性维护

正确性维护又叫做改正性维护,是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行;而有的错误非常重要,甚至会影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。

二、适应性维护

适应性维护是指使应用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%~25%。由于目前计算机硬件价格不断下降,各类系统软件层出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。

三、完善性维护

完善性维护又叫做改善性维护,这是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,它还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重较大,也是关系到系统开发质量的重要方面。这方面的维护除了要有计划、有步骤地完成外,还要注意将相关的文档资料加入到前面相应的文档中。

四、预防性维护

为了改进应用软件的可靠性和可维护性,为了适应未来的软/硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。这方面的维护工作量占整个维护工作量的4%左右。

                        

软件需求分析的任务是什么?:
一。 确定对系统的综合要求

功能需求
性能需求
可靠性和可用性需求
出错处理需求
接口需求
约束
逆向需求
将来可能提出的要求
二 。分析系统的数据要求
任何一个软件系统本质上都是信息处理系统,系统必须处理的信息和系统应该产生的信息在很大程度上决定了系统的面貌,对软件设计有深远影响,因此,必须分析系统的数据要求,这是软件需求分析的一个重要任务。
分析系统的数据要求通常采用建立数据模型的方法(举例)。

三。 导出系统的逻辑模型
综合上述两项分析的结果可以导出系统的详细的逻辑模型,通常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型。
四。 修正系统开发计划
根据在分析过程中获得的对系统的更深入更具体的了解,可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。
 

简述数据字典,数据流图?:
数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
画数据流图一般步骤:
1.考虑源点,终点
2.考虑处理
3.考虑数据流、数据储存
4.考虑事物功能分解

数据字典(data dictionary)是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。作用是在软件分析和设计的过程中给人提供关于数据的描述信息。
数据流图与数据字典的关系:
数据字典和数据流图共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,没有数据流图数据字典也难于发挥作用。只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。
数据字典的组成
1.数据流
2.数据流分量(数据元素)
3.数据存储
4.处理
 

索引的设计原则?:
索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍。高效的索引对于获得良好的性能非常重要。设计索引时,应该考虑一下的准则:
1)索引并非越多越好,一个表中如有大量的索引,不仅占用磁盘空间,而且会影响INSERT,DELETE,UPDATE等语句的性能,因为当表中的数据更改的同事,索引会进行调整和更新。
2)避免对经常更新的表进行过多的索引,并且索引中的列尽可能的少。而对于经常用与查询的字段应该创建索引,但要避免添加不必要的字段。
3)数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
4)在条件表达式中经常用到的不同值较多的列上建立索引,在不同值很少的列上不要建立索引。比如在学生表的“性别”字段上只有“男”与“女”两个不同值,因此就无需建立索引。如果建立索引不但不会提高查询效率,反而会严重降低数据更新速度。
5)当唯一性时某种数据本身的特征时,指定唯一索引。使用唯一索引需能确保定义的列的数据完整性,以提高查询速度。
6)在频繁进行排序或分组(即进行group by 或者 order by操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
 

解析高内聚低耦合?:
**耦合和内聚的的评判标准是强度,耦合越弱越好,内聚越强越好。**耦合指模块与模块之间的关系,最弱的耦合就是通过一个主控模快来协调n哥模块进行运作。例如:客户要求在界面上增加一个字段,你的项目要修改几个地方呢?如果你只要修改项目文档,那么你的开发构架就是最低强度的耦合,而这种设计 成熟的开发团队都已经做到了,他们使用开发工具通过项目模型驱动数据库和各层次的代码,而不是直接修改那些代码;内聚指的是模块内部的功能,最强的就是功能不能拆分,也就是原子化。

简单来说: 高内聚、低耦合讲的是程序单位协作的问题, 你可以这样理解,一个企业的管理, 最理想的情况就是各个部门各司其职,井然有序,互不干涉, 但是需要沟通交流的时候呢, 各个部门都可以找到接口人专门负责部门沟通以及对外沟通。在软件里呢, 就是说各个模块要智能明确, 一个功能尽量由一个模块实现, 同样,一个模块最好只实行一个功能。这个是所谓的“内聚”; 模块与模块之间、系统与系统之间的交互,是不可避免的,但是我们要尽量减少由于交互引起的单个模块无法独立使用或者无法移植的情况发生, 尽可能多的单独提供接口用于对外操作, 这个就是所谓的“低耦合”。但是实际的设计开发过程中,总会发生这样那样的问题与情况,真正做到高内聚、低耦合是很难的,很多时候未必一定要这样,更多的时候“最适合”的才是最好的,不过,理解思想,审时度势地使用,融会贯通,灵活运用,才是设计的王道。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值