软件工程是应用科学、工程和管理原则来定义、构建、维护软件的过程,旨在高效地生产出高质量、可维护、易扩展的软件产品。其根本原理包括:定义、开发、运行和维护的迭代过程,以及需求分析、设计、实现、测试和维护等阶段的紧密集成。
在软件开发中,进行成本-效益分析时,可以使用如下的指标进行度量:
- 成本(C):包括开发成本、维护成本和运营成本。
- 效益(B):通常指软件带来的收入或节省的成本。
- 收益率(ROI):B / C,用于衡量投资回报率。
- 投资回收期(Payback Period):C / (B - C),计算投资回本所需的时间。
数据流图是一种描绘系统信息处理流程的图形工具,包含四种基本符号:
- 数据流(Data Flow):表示信息的流动。
- 加工(Process):表示数据处理的操作。
- 存储(Data Store):表示数据的存储位置。
- 数据源/终点(Data Source/Sink):表示数据的输入或输出。
非渐增式测试如黑盒测试,一次性完成所有测试用例;而渐增式测试如白盒测试,每次仅测试一部分功能,逐步增加测试覆盖范围。
HC图(Hierarchical Control Structure Diagram)和JACKSON图都是软件设计的方法,前者注重控制结构的层次性,后者关注数据结构和算法的关联。它们的相同点在于都是结构化的设计方法,强调逻辑结构的清晰性;不同点在于HC图侧重于控制流程,JACKSON图则更重视数据驱动。
软件测试的目的是发现并修复软件中的错误,确保软件的质量和可靠性。它的目标不是证明软件无错,而是尽可能多地找出问题。
构造化程序设计思想主张采用模块化、自顶向下、逐步求精和限制使用GOTO语句的原则,以提高代码的可读性和可维护性。
极限编程(XP)强调快速反馈、团队协作和持续改进,而自适应软件开发(ASD)注重灵活响应变化。两者都强调敏捷性,但XP更注重实践和技术,ASD更注重适应性和学习。
在需求工程起始阶段,需求工程师应收集、分析和确认用户需求,编写需求规格说明书,并与利益相关者进行沟通。
用例图描述了系统与用户之间的交互,"在餐厅使用信用卡付费"的用例图应包括用户、餐厅系统、信用卡处理系统等角色,以及它们之间的交互关系。
构造化分析(SA)与面向对象分析(OOA)的主要区别在于:SA基于功能分解,强调数据流和处理过程;而OOA则基于对象模型,关注对象的属性和行为,以及对象间的相互作用。
评价软件设计质量的标准通常包括模块化、抽象、信息隐藏、低耦合和高内聚等。
一个良好的设计类需具备以下特点:单一职责、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。
软件工程估算内容包括项目规模、工作量、进度和成本等,步骤涉及需求理解、历史数据参考、风险评估和资源分配。
面向对象设计的准则是单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。五层架构为:用户界面、应用业务逻辑、数据访问、实体对象和数据存储。四局部包括:接口、实现、组件和部署。
软件工程的目标是有效地生产出满足用户需求的软件,主要问题包括需求变更、成本控制、质量保证和项目管理等。
软件工程过程涵盖了需求获取、软件设计、编码、测试、维护等阶段,强调迭代和增量开发。
模块独立性原则包括高内聚和低耦合,即模块内部元素应高度相关,模块间应尽量减少相互依赖。
构造化程序设计法的基本要点包括自顶向下设计、模块化、逐步求精和限制使用GOTO。
软件生命周期开发法的基本过程包括:需求分析、系统设计、编码、测试和维护,每个阶段都有特定的任务,如需求分析阶段主要是理解和记录用户需求,设计阶段是制定系统架构,编码阶段是将设计转化为代码,测试阶段是验证软件功能,维护阶段是解决运行中出现的问题。
复印机的工作流程大致包括:用户操作、扫描原稿、图像处理、打印输出和设备维护等步骤。
文档在软件工程中起到记录需求、设计、实现和维护信息的作用,是沟通交流、跟踪变更和确保软件质量的关键工具。