不同的人使用敏捷一词的含义不同。在计算中,该术语最初用于描述执行项目开发的轻量级方法,而最初的术语极限编程(XP)未能激发受托管理开发项目的众多管理人员。
基本上,敏捷软件开发指的是一组松散集成的原则和实践,旨在以经济有效的方式完成软件开发工作。
**首先考虑为什么我们需要敏捷的方法来进行软件开发,然后在实时和嵌入式系统的背景下讨论敏捷。然后,与更传统的方法相比,它转向了敏捷开发过程的优势。
敏捷宣言
的好地方开始理解敏捷方法与敏捷宣言。宣言是敏捷联盟的公开意向声明,由17个签署者组成,包括肯特·贝克,马丁·福勒,罗恩·杰弗里斯,罗伯特·马丁等。该宣言最初于2001年起草,总结为四个关键优先事项:
*通过流程和工具进行个人和交互
*通过综合文档进行工作软件
*通过合同谈判进行客户协作
*根据计划响应变更
为了支持这些声明,他们给出了12条原则。我将在此处说明它们,以设置以下讨论的上下文:
1)我们的首要任务是通过尽早并持续交付有价值的软件来满足客户。
2)即使在开发后期,也欢迎不断变化的需求。敏捷流程利用变更来获得客户的竞争优势。
3)经常交付工作软件,时间从几周到几个月不等,但最好选择较短的时间。
4)在整个项目中,业务人员和开发人员必须每天一起工作。
5)围绕有积极性的人建立项目。给他们提供所需的环境和支持,并信任他们来完成工作。
6)与开发团队内部交流信息的最有效方法是面对面的交谈。
7)工作软件是进度的主要衡量标准。
8)敏捷过程促进可持续发展。赞助者,开发者和用户应该能够无限期地保持恒定的步伐。
9)持续关注技术卓越和良好的设计可增强敏捷性。
10)简单性-最大化未完成工作量的艺术-是必不可少的。
11)最好的体系结构,需求和设计来自自组织团队。
12团队会定期思考如何提高效率,然后相应地调整和调整其行为。
敏捷方法起源于XP(极限编程)运动,很大程度上基于Kent Beck和Ward Cunningham的工作。敏捷和XP都最关注IT系统,并且都高度基于代码。
在本系列**中,我将重点介绍如何有效地将宣言的声明和原则应用于实时和嵌入式应用程序,以及如何将它们与建模结合起来以获得模型驱动开发(MDD)方法的协同优势。(获得有关敏捷建模的更多信息的好地方是Scott Ambler的敏捷建模网站。
为什么要敏捷?
但是,为什么需要诸如“敏捷”之类的概念来描述软件开发呢?当前的软件开发流程还不够好吗?
不,不是。
在这种情况下,过程可以定义为“由具有特定角色的工人执行的一组计划的工作任务,导致一个或多个工作产品的属性,状态或其他特征发生变化。” 基本假设如下:
1)使用该过程的结果是可重复的,从而产生具有预期特性(例如功能和质量)的产品。
2)当根据项目(例如,成本,工作量,日历时间)和产品(例如,功能,及时性和健壮性)属性执行流程时,可以高度预测工作产品的目标状态的产生。
3)人们可以被视为匿名的,可互换的资源。
4)嵌入式软件开发的问题是无限扩展的;也就是说,将资源加倍总是会导致日历时间减半。
事实证明,很难开发软件。从以上意义上讲,大多数现有的开发过程肯定是不可重复的或不可预测的。为此提出了许多原因。对我自己而言,我认为软件从根本上讲是复杂的,也就是说,它体现了复杂性的“东西”。
这就是软件最擅长的功能-捕获算法和状态机如何在很大范围内操纵大量数据以实现一组计算结果。这是“思想的东西”,这很难。
我听说过的关于软件可预测性的最好的故事是来自Scott Westfall在SlickEdit网站上的一个博客,叫做“洞穴的寓言”。 估计软件项目与估计探索故事中提到的未知洞穴所需的时间非常相似,但管理人员通常**要求进行高度精确的估计。
另外,软件范围正在迅速增加。与过去数十年的软件功能范围相比,如今的软件的数量级要高出几个数量级。
当时,我的第一台IBM PC具有64kB的内存,并运行了一个称为DOS的基本磁盘操作系统。DOS可以放在单个360kB软盘上。(我知道我正在约会自己,但是我的IBM PC是我的第五台计算机。我仍然怀念着我拥有4kB内存的TRS-80型号的时代。)
Windows XP包含超过3000万行代码。驱动数百种不同的打印机,磁盘,显示器和其他外围设备;并需要1 GB的内存才能舒适地运行。这些软件密集型系统所提供的功能远远超过它们所取代的仅电子设备。
例如,将传统电话听筒与现代手机进行比较。或将传统的心电图(ECG)驱使像我在医学院使用的纸质记录仪与现代ECG机一样,来驱动它。
现代机器可以完成老机器所做的一切,此外还可以检测各种心律不齐,跟踪患者数据,生成报告,并测量无创血压,血氧浓度,各种温度甚至心输出量。
最后,嵌入式软件开发确实是发明,发明不是可预测的。在电子和机械工程中,大量工作从概念上讲就是简单地将各个部分组合在一起以实现期望的目标,但是在软件中,这些部分通常是每个项目的发明(或重新发明)。
这并不是要过分简化电子或机械设计的问题,而只是要指出这些学科的基础物理学比软件要成熟得多,并且要好得多。
快速上手linux
http://www.makeru.com.cn/live/1758_310.html?s=156454
Linux网络经典案例
http://www.makeru.com.cn/live/3485_1630.html?s=156454
Linux网络高并发技术之epoll
http://www.makeru.com.cn/live/5413_1937.html?s=156454
linux之C语言内存管理
http://www.makeru.com.cn/live/1392_382.html?s=1564
|