- 什么是软件,软件可以分为用几种类型?
软件是指由程序、数据(data)和文档(document)所组成的一类系统,它可以在计算机系统的支持下实现特定的功能,并提供相笑的服务。软件概念的定文充分揭示了软件的目的性、组成性和驻留性。
分为三种类型,分别为应用软件,系统软件,支撑软件。
- 软件危机的表现,软件危机产生的原因?
表现:
1.软件开发成本高且经济超支
2.软件无法按时交付且经常延期
3.交付的软件存在质量问题
产生原因:
- 软件本质特性:软件是一种无形产品,其开发过程难以直接监控,且复杂度随规模呈指数增长。错误可能潜伏多年而不被发现。
- 管理与方法不当:早期软件开发缺乏有效的项目管理和工程方法,对软件生命周期的理解不足,仅侧重编程而忽视了整体的软件配置管理。
- 需求分析不充分:对用户需求的理解不够深入和明确,导致开发偏离用户实际需要。
- 技术与实践落后:软件工程理论和技术的发展滞后于软件应用的快速增长,特别是在需求管理、设计模式、测试技术和维护策略上。
- 人力资源问题:软件开发人员短缺、技能不匹配或团队协作不良,影响开发效率和产品质量。
- 变更管理不足:软件开发过程中对需求变更缺乏有效控制和管理,导致项目失控。
- 什么是软件生存周期,它划分有几个阶段,每个过程有什么特点?
软件生存周期是指一个软件从提出开发开始,到开发完成交付用户使用,及至最后退役不再使用的全过程。
划分阶段及特点:
1.需求分析阶段:此阶段聚焦于理解用户需求,收集、分析和记录软件所需的功能和性能要求,最终形成需求规格说明书。它是整个开发过程的基础,准确性直接影响后续阶段的工作。
2.软件设计阶段:分为概要设计和详细设计两个子阶段。概要设计确定软件的整体结构和模块划分;详细设计则深入到每个模块的内部设计,包括数据结构、算法、接口等细节
3.编码实现阶段:根据设计文档编写程序代码,实现软件的各项功能。这一阶段涉及选择合适的编程语言和工具,进行代码编写、单元测试等
4.软件测试阶段:确保软件质量的关键步骤,包括单元测试、集成测试、系统测试、验收测试等,目的是发现并修正错误,验证软件是否满足需求规
5.部署运行阶段:将开发完成的软件安装到目标环境中,进行配置、用户培训和正式上线。此阶段需确保软件能够在实际环境中稳定运行。
使用维护阶段软件投入日常使用后,持续进行的活动,包括软件的日常监控、错误修复、性能优化、版本升级和用户支持等,以应对环境变化和用户新需求
- 软件过程模型有什么,有何特点该方法具将测试边界情况
瀑布模型:
特点:线性顺序模型,阶段包括需求分析、设计、实现、测试、部署和维护,每个阶段完成后才能进入下一个阶段。
优点:简单明了,易于管理和控制;文档驱动,有助于早期发现问题。
缺点:适应性差,变更成本高;假设需求在项目开始时就能完全确定,不适用于需求频繁变更的项目。
原型模型:
特点:通过快速构建一个可运行的原型来展示软件的基本功能,根据用户反馈迭代改进。
优点:快速验证需求,提高用户满意度;适合需求不确定的项目。
缺点:可能忽视系统的整体质量和长期维护性。
增量模型:
特点:将软件开发分为多个增量版本,每个版本都可交付使用,逐步增加功能直到完成全部功能。
优点:早期获得可运行软件,风险分散,逐步反馈和改进。
缺点:集成多个增量可能复杂,需良好的规划和管理。
迭代模型:
特点:将开发过程分为多个迭代周期,每个迭代包含需求分析、设计、编码和测试,每次迭代都会产出可工作的软件并逐渐完善功能。
优点:灵活应对变更,持续验证和修正方向;提高产品质量。
缺点:项目管理挑战大,需持续评估和调整计划。
基于构件的过程模型:
特点:侧重于复用预先设计好的软件构件来构造系统,强调标准化和模块化。
优点:提高开发效率,降低错误,便于维护和升级。
缺点:构件质量直接影响系统质量,构件库的建设和管理成本高。
螺旋模型:
特点:结合了瀑布模型的系统化与原型模型的迭代特性,加入了风险分析,形成一个迭代且风险驱动的模型。
优点:强调风险控制,适合大型复杂项目。
缺点:过程复杂,成本较高,需要丰富的风险管理经验。
统一过程模型 (UP):
特点:是一种迭代和增量的软件开发过程框架,强调以用例和架构为中心,支持敏捷性和适应性。
优点:全面覆盖软件开发生命周期,注重用户需求,强调持续的质量改进。
缺点:实施成本高,对团队要求严格,文档工作量大。
- 软件设计应遵循的原则。
1.抽象和逐步求精原则
2.模块化与高内聚度,低藕合度原则
3.信息隐藏原则
4.多观点及关注点分离原则
5.软件重用原则
6.迭代设计原则
7.可追踪性原则
8.权衡抉择原则
- 用户界面设计的原则。
1.直观性
2.易操作性
3.一致性
4.反应性
5.容错性
6.人性化
- 面向对象的软件设计原则。
1.单一职责原则
2.开闭原则
3.里氏替换原则
4.接口隔离原则
5.依赖倒置原则
6.最少知识原则
- 面向对象软件的优势有哪些?
1.高层抽象和自然过渡
2.多种形式和粗粒度的软件重用
3.系统化的软件设计
4.支持软件的扩展与变更
- 程序设计的选择要考虑的因素有那些?
1.软件的应用领域
2.与遗留系统的交互
3.软件的特殊功能及需求
4.软件的目标平台
5.程序员的编程经验
- 程序员应遵循的编码规范有哪些?
① 格式化代码的布局,尽可能使其清晰、明了。
a. 充分利用水平和垂直两个方向的编程空间来组织程序代码,便于读者阅读代码。
b.适当插入括号“〔]”,使语句的层次性、表达式运算次序等更为清晰直观。
c.有效使用空格符,以显式地区别程序代码的不同部分(如程序与其注释)。
② 尽可能提供简洁的代码,不要人为地增加代码的复杂度。
a.使用简单的数据结构,避免使用难以理解和难以维护的数据结构(如多维数组、指针等)。
b. 采用简单而非复杂的实现算法。
c. 简化程序中的算术和逻辑表达式。
d. 不要引人不必要的变元和动作。
e.防止变量名重裁。
f. 避免模块的冗余和重复。
③ 对代码辅之以适当的文档,以加强程序的理解。
a.有效、必要、简洁的代码注释。
b.代码注释的可理解性、准确性和无二义性。
c.确保代码与设计模型和文档的一致性。
④加强程序代码的结构化组织,提高代码的可读性。
a.按一定的次序说明数据。
b. 按字母顺序说明对象名。
c.避免使用嵌套循环结构和嵌套分支结构。
d. 使用统一的缩进规则。
e. 确保每个模块内部的代码单入口、单出口。
- 软件测试有那些步骤,以及每个步骤测试对象是什么?
1.制定软件测试计划。测试对象:软件需求规格说明书。
2.设计软件测试用例。测试对象:软件需求规格和系统设计档。
3.实施软件测试活动。测试对象:软件的各个模块或整个系统
4.进行回归测试。测试对象:已修复的软件缺陷及周边功能
- 什么是白盒测试,什么是黑盒测试?
① 白盒测试技术。该测试技术的前提是知道软件模块的内部实现细节。在此情况下,针对该软件模块设计和运行测试用例,测试软件模块的运行是否正常,能否满足设计要求。单元测试通常采用白盒测试技术,基本路径测试是一类典型的自盒测试技术。
② 黑盒测试技术。该测试技术的前提是已知软件模块的功能,但是不知道该软件模块的内部实现细节(如其内部的控制流程和实现算法),这种情况下针对该软件模块设计和运行测试用例,测试软件模块的运行是否正常,能否满足用户的需求。通常,集成测试和确认测试大多采用黑盒测试技术,典型的黑盒测试技术包括等价分类法和边界取值法。
- 采用黑盒测试技术设计测试用例有那些?
等价类划分法,该方法将输入数据集合按有效的或无效的划分为若干个等价类,测试每个等价类的代表值,就等于对该类其他值的测试。
边界取值法,该方法是将测试边界情况,作为重点目标,选取正好等于,刚刚大于,或者者刚刚小于边界值的情况,根据这些情况选择测试用例。
- 什么是软件维护,有几种形式 ?
软件维护是指软件交付给用户使用之后修改软件系统及其他部件的过程,以修复缺陷,提高性能或其他属性,增强软件功能以及适应变化的环境。
软件维护的几种形式:
1.纠正性维护 2.改善性维护 3.适应性维护 4.预防性维护
- 采取什么措施可以提高软件的可维护性
① 需求分析复审。对将来可能修改和改进的部分加注释,对软件的可移植性加以讨论,并考虑可能影响软件维护的系统界面。
② 设计阶段复审。从易于维护和提高设计总体质量的角度,全面评审数据设计、体系结构设计、详细设计和用户界面设计。
③ 编码阶段复审。强调编码风格和代码注释,提高程序代码的可读性和可理解性。
④ 阶段性测试。要进行必要的预防性维护。
⑤ 软件维护活动完成之际的复审。不仅要评判是否完成了相关的维护工作,还要分析是否有助于将来的维护。
- 说明软件测试和软件调试有何区别
1.目的不同
软件测试的目标是发现软件中存在的错误、缺陷或不足之处。它旨在验证软件是否符合预期的功能和性能要求,检查软件是否做了它不应该做的事情(比如产生错误的结果或行为),同时也检查它是否没有做它应该做的事情。软件调试则是为了定位和修复已发现的错误。它是一个更深入的过程,专注于理解错误的具体原因,并修改代码以修正这些错误。
2.执行主体不同
软件测试通常由专门的测试工程师或团队执行,他们根据预先设计的测试用例和计划对软件进行全面检查。
软件调试主要由开发人员负责,因为他们对软件的内部结构和逻辑更为熟悉,便于查找和解决问题。
3.对象和范围
软件测试覆盖的范围广泛,不仅包括代码,还有软件的文档、用户界面、性能等方面。
软件调试则更聚焦于代码层面,直接与代码的执行路径和逻辑错误打交道
4.方法和工具
软件测试使用各种自动化测试工具和框架,以及手动测试技巧,按照测试用例执行测试。
软件调试则依赖于调试器等工具,允许开发者逐步执行代码,查看变量值,设置断点等,以便追踪和理解代码的执行流程和状态
- 在软件编码过程中,如何提高代码可阅读性
1.做好注释和文档。
2.保持缩进风格一致。
3.保护命名规则一致
4.避免嵌套层次过深
5.控制每行的长度
6.实用模块化开发合理封装代码模式
- UML中的活动图,状态图,顺序图各自都有什么特点
顺序图:
①强调角色之间的交互,信息传递很明确
②强调按时间先后顺序发生了什么顺序
③不太适合表达复杂流程。
活动图:
①强调每个角色做了什么事情,以及事情先后关系。
②适合表达各种特殊流程比如。分支循环
状态图:
①状态图侧重于表述对象状态,常用于状态较多的业务对象
- 面向对象的需求分析步骤和策略
- 明确问题边界,获取软件需求,建立用例模型。在该阶段,需求工程师需要和周户进行沟通,理解待开发软件系统的边界,识别系统的利益相关者,并从其视角导出或构思软件需求,绘制软件的用例图,建立软件的用例模型。
② 开展用例分析,精化软件需求,建立分析模型。针对用例图中的每一个用例,分析用例是如何通过一组对象之间的交互和协作来完成的,从而精化软件需求,建立用例的交互模型,并依此导出系统的分析类图,必要时绘制状态图和对象图等,形成软件错求的分析模型。
③ 汇总需求模型,撰写需求文档,评审软件需求。汇总上述所得到的不同视点、不同抽象层次的需求模型,擺写软件需求文档,对软件需求模型和文档进行评审,以确保它们的质量,并对发现的问题进行协商解决
- 获取软件需求过程步骤是什么?
1.建立顶级数据流图
2.精化数据流图中的转换,产生下一级数据流图
3.描述数据条目,建立数据字典