C1:概览Introduction
(1)软件的4个特性
一致性(Conformity):软件必须符合严格的规格和要求,包括与其他组件的接口和环境的连接,避免因为不一致导致无法复用或开发问题。
不可见性(Invisibility):软件没有物理属性,项目进展无法直观查看,开发者只能通过文档和代码进行间接管理,增加了项目管理的难度。
复杂性(Complexity):软件系统由大量相互作用的组件构成,包括并发调用、状态转换、数据耦合等,复杂性增加了缺陷隐藏的可能,且难以发现。
演化性(Changeability):软件是最容易修改的系统部分,但也因此面临更高的更改难度,尤其当复杂性和一致性要求较高时,修改变得极其困难。
(2)软件产品的2种类型
- 通用产品(Generic Products):如PC软件(如Photoshop),这些产品面向广泛市场,规范由开发者决定,软件更改由开发者控制。
- 定制产品(Customized Products):如航空交通控制软件,专门为某个客户定制,客户拥有软件的需求规范,软件更改由客户决定。
(3)软件过程的4个活动过程
- 软件规格(Software Specification):定义软件功能和操作约束。
- 软件开发(Software Development):软件的设计与编程实现。
- 软件验证(Software Validation):确保软件符合客户需求。
- 软件演化(Software Evolution):软件根据市场需求和客户要求进行修改和更新。
其中,软件验证过程包含Verification和Validation,目的是确保系统符合规范和客户需求。包含3种测试类型:
组件测试Component Testing: 测试单个组件。
系统测试System Testing: 测试整个系统,重点关注优先程度高的功能。
客户测试Customer Testing: 用实际客户的数据来测试系统。
(4)软件的6个质量特性
根据ISO 9126,软件的质量特性包括:
- 功能性(Functionality):软件是否具备所需功能。
- 可靠性(Reliability):软件的可靠性和稳定性。
- 可用性(Usability):软件是否易于使用。
- 效率(Efficiency):软件的性能和资源使用。
- 可维护性(Maintainability):软件是否容易修改和更新。
- 可移植性(Portability):软件是否容易转移到不同的环境中。
C2:Software Processes软件过程
(1)软件过程的模型
C3:敏捷开发Agile Software Development
(1)敏捷开发vs传统开发
开发目标、需求变化与响应速度、交付与反馈、开发文档与沟通、迭代与增量方式5个角度。
①开发目标:
- 传统开发(瀑布模型):需求定义、系统设计、实施与单元测试等各阶段按顺序进行,注重文档驱动和计划驱动,开发过程中较少的灵活性,项目过程控制较为严格。
- 敏捷开发:强调迭代式开发,要求软件在多个版本或增量中逐步演进,频繁交付并根据反馈进行调整。这与传统开发模式不同,敏捷开发侧重于快速交付和适应性,而传统方法则注重稳定的需求定义和严格的过程控制。
②需求变化与响应速度
- 敏捷开发的目标:敏捷开发应对快速变化的业务需求。在当今快速变化的市场环境中,软件需求不断变化,敏捷开发通过迭代式更新和反馈机制,使软件能够更快速地反映这些变化。
- 传统方法的问题:传统的计划驱动开发(如瀑布模型)无法很好应对快速变化的需求,因为它依赖于一次性的需求定义和设计,一旦需求变化,需要重做大量的工作。
③交付与反馈的频繁性
- 敏捷方法的变更:敏捷开发强调频繁交付小的可用增量,每个增量版本都经过利益相关者的评估和反馈。这种方式相比传统的“一次性交付”模式,在开发过程中能够及时发现问题并进行调整,避免了大规模错误的积累。
- 传统方法的对比:传统开发则更倾向于在开发周期的后期进行系统测试和交付,需求变更和反馈的响应较慢,开发过程中发现问题的代价较高。
④开发文档与沟通
- 敏捷开发的变更:敏捷方法对文档要求较少,强调工作代码的交付。这种减少文档的做法可以加速开发进程,让团队成员专注于实际代码的实现与功能的交付。
- 传统方法的文档驱动:与敏捷方法相比,传统方法通常需要大量的文档编写,以确保项目按计划执行。文档的繁复增加了开发的时间和成本,也可能导致沟通不畅,影响开发效率。
⑤迭代与增量的方式
- 敏捷开发:通过不断的迭代和增量交付,开发过程是动态的,资源配置和工作内容是随时根据实际需求进行调整的。这种方式更容易适应需求变化,特别是对于不确定性较高的项目。
- 计划驱动开发:则更多依赖于提前的计划和估算,项目的进度和资源配置较为固定,一旦发生需求变化,可能导致项目延期或超出预算。
选择敏捷方法后,开发过程中对需求的快速响应、交付周期的短频、团队的高协作性以及文档和计划的简化是主要的变更。这些变化能够显著提高项目的灵活性和适应性,但也可能带来一些实际的挑战,比如需求频繁变动时的成本控制、团队的协调和沟通等问题。
(2)敏捷宣言的4句话
- 个人和互动高于过程和工具
- 工作软件高于全面的文档
- 客户协作高于合同谈判
- 响应变化高于遵循计划
(3)敏捷方法适用的情况
- 敏捷方法适用于小型或中型软件产品的开发,尤其是在客户能够积极参与开发过程中且外部规则较少的情况下。
(4)极限编程(eXtreme Processing)
- 极限编程是一种强调迭代开发的敏捷方法,提出了诸如“测试优先开发”、“重构”等开发实践,强调通过频繁的交付和用户的直接反馈来快速适应需求变化。
(5)Planning Poker
- Planning Poker是一种基于共识的估算和计划技术。它帮助团队成员对任务进行时间或工作量估算,通过一轮轮的讨论和选择卡片,最终达成一致。
(6)重构Refactoring
①重构在做什么:重构是
②重构的目的是什么:为了
③重构怎么做:通过
(7)结队编程
①结队编程在做什么:在
②结队编程目的是什么:在
(8)Scrum
。。。。。