软件工程是一门研究用工程化方法构建和维护有效、实用和高质量软件的学科,涵盖软件需求、设计、实现、测试、部署交付、质量管理和过程能力成熟度等方面,旨在提高软件生产率、质量并降低成本,确保软件项目的成功开发与维护。
5.1软件工程定义
软件工程是应用多学科原理,以工程化方法解决软件问题,提高软件生产率、质量并降低成本。由方法、工具和过程组成,方法是技术扩展,工具辅助开发与管理,过程贯穿各环节,管理人员需对质量、进度和成本进行评估、管理和控制。
5.2软件需求
5.2.1需求层次
- 业务需求:反映组织机构或用户高层次目标,确定项目视图和范围,为设计开发奠定基础,来源广泛。
- 用户需求:描述用户具体目标和任务,体现系统业务价值,通过用户访谈和问卷调查等方式获取。
- 系统需求:从系统角度说明软件需求,包括功能需求(规定系统功能)、非功能需求(描述系统属性和品质)和约束(限制软件设计和构造)。
5.2.2质量功能部署:将用户要求转化为软件需求,分为常规需求、期望需求和意外需求,以提升用户满意度。
5.2.3需求获取:确定和理解项目干系人需求与约束,常用方法有用户访谈、问卷调查等,需与用户有效合作。
5.2.4需求分析
- 结构化分析:以数据字典为核心,建立数据、功能和行为模型,常用工具包括实体关系图、数据流图和状态转换图,通过DFD需求建模方法和数据字典应用进行分析。
- 面向对象分析:强调对事物及关系的认识,找出类和对象,定义其属性、职责和联系,产生符合用户需求的模型,遵循抽象、封装等基本原则,按确定对象和类等步骤进行。
5.2.5需求规格说明书:是需求分析最终结果,确保项目干系人与开发团队对系统有共同理解,包括范围、引用文件、需求等内容,需进行验证以确保需求正确性。
5.2.6需求变更
- 变更控制过程:跟踪变更状态,包括问题分析、变更描述、分析成本、决策和实现等步骤,确保变更有序进行。
- 变更策略:遵循变更控制过程,由变更控制委员会决定变更,确保相关人员了解变更内容,保留原始文档,实现需求变更跟踪。
- 变更控制委员会:由多方成员组成,负责裁定变更,制定决策时权衡利弊,包括节省资金、增强满意度等利益和增加费用、推迟交付等弊端。
5.2.7需求跟踪:编制需求与系统元素联系文档,包括正向和逆向跟踪,建立需求跟踪矩阵,确保工作成果符合用户需求,可借助配置管理工具实现。
5.3软件设计
5.3.1结构化设计
- 模块结构:遵循信息隐藏与抽象、模块化原则,模块耦合类型包括非直接耦合到内容耦合,内聚类型从功能内聚到偶然内聚,设计应遵循“高内聚、低耦合”原则。
- 系统结构图:是概要设计工具,反映系统功能和模块联系,详细设计确定模块算法和数据结构,遵循概要设计进行,有图形、表格和语言工具表示设计结果。
5.3.2面向对象设计:是OOA延续,主要任务是设计类和对象,包括实体类(保存永久信息)、控制类(控制用例工作)和边界类(封装交互信息),遵循单职、开闭等原则提高软件可维护性和复用性。
5.3.3统一建模语言:是强大建模语言,结构包括构造块(事物、关系和图)、规则和公共机制,视图有逻辑、进程、实现、部署和用例视图,可用于软件开发全过程。
5.3.4设计模式:前人经验总结,可复用成功设计,分为类模式和对象模式,按目的分为创建型、结构型和行为型模式。
5.4软件实现
5.4.1软件配置管理:标识、组织和控制修改,核心是版本控制(追踪文件变更,支持并行开发)和变更控制(管理变更,确保有序进行),包括配置管理计划等活动。
5.4.2软件编码:将软件设计结果转换为程序,需选择合适程序设计语言,遵循良好编程风格,关注程序复杂性度量和编码效率。
5.4.3软件测试
- 测试方法:静态测试(包括文档和代码检查,如桌前检查、代码走查和审查)和动态测试(白盒测试检查内部逻辑,黑盒测试关注功能,常用多种测试技术)。
- 测试类型:单元测试、集成测试、确认测试、系统测试、配置项测试和回归测试等,不同测试有不同对象、目的和依据。
- 面向对象的测试:目标与传统测试一致,但策略因OO系统特征(封装性、继承性和多态性)而不同,带来测试困难。
- 软件调试:与测试相伴,通过调试技术确定错误原因和位置并改正,常用策略有蛮力法、回溯法和原因排除法。
5.5部署交付
5.5.1软件部署:是软件生命周期重要环节,面临风险,过程有特征,需关注诸多问题,目的是支持软件运行,有多种部署模式。
5.5.2软件交付:传统交付过程存在问题,导致困境,包括进度、流程、环境和协作问题以及底层技术问题。
5.5.3持续交付:自动化过程,解决传统交付问题,具备多方面优势,可缩短部署时间、降低风险等。
5.5.4持续部署:基于容器技术(如Kubernetes + Docker和Matrix系统),遵循部署原则,包括部署包来源、环境和脚本统一等,有蓝绿部署和金丝雀部署等方式。
5.5.5部署和交付的新趋势:包括工作职责和人员分工转变、大数据和云计算带来新飞跃以及研发运维融合。
5.6软件质量管理
软件质量与需求一致性程度相关,受产品运行、修改和转移等因素影响。软件质量保证通过建立方法确保标准被采用,主要任务包括审计与评审、报告和处理不合格问题,目标是预防缺陷、监控过程并提供信息。
5.7软件过程能力成熟度
软件过程能力成熟度模型(CSMM)包括治理、开发与交付、管理与支持和组织管理等能力域,定义了5个成熟度等级,从低到高特征各异,等级越高组织软件开发能力越强。
2. 成熟度等级:分为5个等级,从低到高依次为初始级、项目规范级、组织改进级、量化提升级和创新引领级,每个等级有不同结果和行为特征,高级别基于低级别实施并持续改进,成熟度等级的特征和提升过程在软考中常考查。
5.8本章练习
1.软件测试方法可分为静态和动态
静态测试指被测试对象不在机器上运行,只依靠需求规格说明书、设计以及源代码等进行结构分析和流程图分析,从而找出错误。
动态测试是指在计算机上实际运行程序,通过比较分析得到的结果与预期,同时评估效率和健壮性能等。
静态测试的优点是能够有效地发现逻辑设计和编码错误,但缺点是无法发现运行时错误。
动态测试的优点是能够发现运行时错误,但缺点是需要更多的资源和时间。
2.在软件过程能力成熟度模型(CSMM)中,3级的结果特征包括:
组织和项目使用统计分析技术建立了量化的质量与过程目标,支持组织业务的实现管理和实现预期的项目目标。
行为特征则包括:
依据组织的业务目标、管理要求以及外部监管需求,建立并持续改进组织标准过程和资产;
项目根据自身特征依组织标准过程和资产,在组织范围内能够稳定地实现预期的项目目标,并贡献过程资产。