1. 软件有哪些特征?
无形性:软件是逻辑实体而非物理产品,不可触摸,但可通过功能感知。
复杂性:软件由大量交互的逻辑部件组成,修改局部可能影响全局,维护难度高。
复制零成本:软件可无限复制且成本极低,但开发成本集中在前期。
无磨损性:软件不会因使用而磨损,但可能因环境变化(如操作系统升级)而需适配。
依赖硬件:软件需在特定硬件环境中运行,但独立于硬件制造过程。
持续演化:软件需不断更新以满足新需求或修复问题(维护成本常超过开发成本)。
人工制品:高度依赖开发人员的智力活动,难以自动化全部流程。
2. 什么是软件危机?什么导致了软件危机?
软件危机:20世纪60年代末至70年代初,软件开发面临的一系列严重问题,包括预算超支、进度延迟、质量低劣(错误频发)、维护困难(修改成本高),以及无法满足日益增长的需求。
导致原因:
复杂度管理失败:大型软件系统逻辑复杂,缺乏有效方法控制复杂度。
开发方法原始:依赖个体编程技巧,缺乏系统化工程规范(如设计、文档、测试)。
估算与计划不足:对工作量、成本、进度估算不准,项目管理薄弱。
需求管理缺失:需求不明确或频繁变更,导致产品与预期不符。
维护困境:软件结构混乱、文档缺失,修改时易引入新错误。
人才短缺:软件开发需求增长快,但合格开发人员不足。
3. 软件工程的核心内容是什么?
软件工程的核心内容是通过系统化、可量化的方法高效开发高质量软件,包括:
工程化过程:定义软件开发的生命周期模型(如瀑布、敏捷),规范活动(需求、设计、编码、测试、维护)。
方法学支持:提供具体技术方法(如面向对象、结构化分析、测试驱动开发)。
工具与环境:使用自动化工具(IDE、版本控制、CI/CD)提升效率。
质量管理:确保可靠性、可用性、可维护性(通过评审、测试、度量)。
项目管理:合理规划资源、成本、进度,控制风险。
原则与伦理:遵循模块化、抽象、分治等设计原则,并承担社会责任。
4. 软件工程包含的领域有哪些?
软件需求工程:收集、分析、规格化需求,确保与用户一致。
软件设计:架构设计(高层模块划分)和详细设计(组件接口、算法)。
软件构造:编码、调试、单元测试(实现阶段)。
软件测试:验证功能与质量(单元测试、集成测试、系统测试)。
软件维护:修正错误、适配环境、增强功能(占生命周期成本主要部分)。
软件配置管理:管理版本、变更和发布(如Git)。
软件工程管理:项目管理、风险控制、质量保证。
软件工程过程:定义和改进开发流程(如CMMI、DevOps)。
软件工程工具与方法:支持开发的工具链(如建模工具、自动化测试)。
软件质量:度量与保证质量特性(可靠性、安全性、性能)。
相关学科交叉:如人机交互、数据库、网络安全等。