敏捷开发框架下的软件工程/完整流程/原型设计
系统隐喻 |
|
在传统的瀑布模型中,直到实施阶段(项目进行很长时间后)才进行很少的编码。这种结构化的开发在以下情况下最有效:
- 存在一套高质量、稳定的用户需求
- 开发人员以前构建过类似的系统
- 项目不很复杂
这些特点很少见,特别是在学生项目中。
另一方面,在快速应用程序开发中,编码几乎从第一天就开始,开发的系统本身就被用来描述其自身的需求。当系统不是很复杂,增量构建是可行的时,这种方法效果很好,也就是说,每个功能组件都可以添加到系统中而不会造成干扰。
我们已经确定敏捷开发框架是结构化方法和敏捷方法之间的折衷方案,在这里我们再次这样做,并将 ADF 描述为一种革命性的原型方法。
三个组成部分:原型设计;方法和革命性(好吧,顺序略有不同)。
让我们从原型设计不是什么开始:它不是我们用来称呼第一次尝试失败的名称:原型设计是我们有意为之,目的是为了回答一个具体的问题。
原型设计由 Sallis 等人(1995)定义为“工作模型”。这表明了抽象级别:“工作”意味着系统可以运行 - “模型”意味着它不能完全运行。两者合起来意味着原型设计是一个简化的版本,我们需要的部分在那里,我们不需要的部分则被删掉了。确定我们需要什么取决于我们要回答的问题。
这是一种方法,它不是黑客行为。黑客方法是,在遇到问题时,你坐下来开始编程。这对小型项目或爱好开发来说可能有效,因为在开发过程中确定规范并调整代码是可以的。它不适用于更复杂的系统,因为在后期重新修改会产生高昂的成本。
原型设计模型有几个优点:
- 能够快速将一个功能性和有用的系统放到用户手中
- 在工作开始之前,不需要完成信息需求
- 能够在低风险或低成本的情况下尝试想法
- 提高用户对过程的兴趣和理解
- 提高用户对最终系统的兴趣和满意度。
原型设计最重要的方面是它增加了你的知识。应该以这种思路来开发它。这就是原型设计的严谨性所在。有几种完整的原型设计方法,如动态系统开发方法 (DSDM),但我们使用一种更成熟的方法:科学方法。
问题:有时会以假设的形式提出
方法:一个经过精心设计的测试,以给出该问题的答案(并且仅此而已,“勉强足够”的概念在这里适用)
评估答案
我们还主张对原型设计采用一种革命性的方法。这意味着,虽然我们从每个原型中学习,但几乎没有,如果有的话,它们的设计会被继续使用。这有时被称为“一次性原型”。
布鲁克斯在他的著名著作《人月神话》(1975)中将一次性原型应用于计算机领域,他在书中寻找一种神奇的银弹,他认为“计划扔掉一个,你会的”。虽然这本书(及其建议)仍然受到高度重视,但现在这句话(包括布鲁克斯自己)都被认为有点过于简单。他的论点假设了一个标准的瀑布模型,但你只有两次机会来做对。
一次性原型避免了原型的一些潜在缺点:
- 避免了用户不愿意放弃原型设计的危险。由于原型设计明确地用于回答具体的问题,用户从一开始就知道这不是“最终的”系统。这意味着你不会处于这样一种境地:“你知道我们几个月前交付的系统吗?嗯,事实证明它有很多错误,所以这里有一个新的。”
- 由于原型设计明确地用于分析和设计,因此避免了原型设计成为分析的替代品的危险。
- 由于想法和技术被推动向前,而不是实际代码,因此避免了变通方法和快速修复固化在生产代码中的危险。我们确实需要小心地识别原型设计和生产之间的区别。生产系统将拥有高质量代码、验证、备份、恢复等,而原型设计可能没有这些东西。
下图显示了整个开发过程中构建和原型设计的角色。
力传感器