软件工程200题详解:概念、模型与分析

0 下载量 177 浏览量 更新于2024-08-03 收藏 35KB DOC 举报
"软件工程习题集,涵盖了软件危机、软件工程、软件生存周期、开发模型、技术审查、可行性研究、需求分析、设计技术、编程语言特性、软件测试等多个核心概念。" 软件工程是解决软件危机的有效途径,它是一门系统化、规范化的科学,旨在提高软件的质量、生产率以及降低开发成本。软件危机指的是在软件开发过程中遇到的项目延期、成本超支、质量不达标等问题。产生软件危机的原因包括需求不明确、设计不规范、管理不到位等。消除软件危机的关键在于采用科学的管理方法和先进的开发技术,如引入软件工程理念。 软件工程包括需求获取、软件设计、编码、测试和维护等阶段,同时也涉及项目管理、质量管理、配置管理等方面。软件生存周期涵盖了从软件的构思到废弃的整个过程,包括问题定义、需求分析、概要设计、详细设计、编码、测试、运行和维护等阶段。 常见的软件开发模型有瀑布模型、增量模型、螺旋模型、敏捷模型等。瀑布模型按照顺序执行各个阶段,适合需求稳定的情况;增量模型将软件开发分成若干个阶段,每次完成一部分功能;螺旋模型强调风险分析,适用于大型复杂项目;敏捷模型强调灵活性和迭代开发,适合需求频繁变化的环境。 软件技术审查和管理复审是为了确保软件质量和符合规范,它们分别关注技术层面和管理层面的问题。软件开发不同于简单的编程,它需要更全面的规划、分析和管理。 在软件开发早期进行可行性研究,目的是判断项目的实施是否合理,可以从技术、经济、法律、操作和时间五个方面进行研究。可行性研究报告应当清晰地阐述项目的目标、方法、预期结果以及可能的风险。 数据流图(DFD)是软件分析的重要工具,其基本符号包括处理、数据存储、数据流和外部实体。画数据流图的原则包括保持平衡、避免跨层数据流、细化处理等。DFD有助于理解系统的数据流动和处理过程。 数据字典是DFD的补充,记录了系统中所有数据元素的详细信息,包括数据项、数据结构、数据流、数据存储和处理过程等。常见的效益分析方法有成本效益分析、净现值法、投资回收期法等。 需求分析是确定系统应做什么的过程,使用的技术包括结构化分析(SA)、面向对象分析(OOA)等。结构化分析以数据流图、数据字典为核心,强调逻辑建模。面向对象分析则基于类和对象的概念,强调封装、继承和多态。 原型开发技术旨在快速创建软件的初步版本,用于用户反馈和验证需求。其特点是快速、灵活,能有效减少需求理解的误差。 总体设计阶段,通常会构建软件架构,确定模块划分和接口设计。软件结构是软件的组织形式,软件工程则是系统化的方法论,二者相辅相成,前者是后者实践的结果。 深度、宽度、扇出和扇入是评价软件模块化程度的指标,它们影响软件的复杂性和可维护性。模块化有助于代码重用和独立性,M代表模块。 耦合度衡量模块间的相互依赖,而内聚度反映模块内部的统一性。高内聚低耦合被认为是理想的模块设计原则。 设计准则包括模块独立性、信息隐蔽、模块化、抽象等,它们有助于提高软件的可读性、可维护性。 层次方框图和软件结构图都是描绘软件结构的工具,前者更注重层次关系,后者侧重于模块间的调用关系。 事物型软件结构图通常用于数据库设计,反映了实体间的关系,原因是它能直观表示数据的实体和关联。 详细设计阶段的任务是制定模块的具体实现方案,包括流程图、伪代码等。结构化程序设计强调使用顺序、选择和循环三种基本结构,N-S图是其可视化表示。 Jackson、Warnier和McCreight方法是不同的程序设计方法,分别关注数据结构、图形结构和文档结构,用于提高程序设计的效率和质量。 程序设计语言经历了从机器语言到高级语言的两次重大转变,提高了可读性和可维护性。C语言是第二代到第三代的过渡语言,第四代语言如SQL强调自然语言表达,简化编程工作。 高级语言的应用特点包括易读性、可移植性和抽象性,它们影响软件的可靠性、可理解性、可修改性和可测试性。选择编程语言时,要考虑其适用性、性能、社区支持和学习曲线。 软件测试的基本任务是发现和报告错误,测试与调试的区别在于,测试是主动找错,调试是被动修复。软件测试通常分为单元测试、集成测试、系统测试和验收测试等步骤。