下面就是小编给大家带来的安全代码开发:敏捷的牺牲者?,本文共7篇,希望大家喜欢,可以帮助到有需要的朋友!本文原稿由网友“小逵”提供。
篇1:安全代码开发:敏捷的牺牲者?
敏捷团队以快速产生可靠和高质量的代码而著称,然而,快速交付的压力可能会导致走捷径的评审,缩减测试并缺乏对安全代码的重视。安全开发与敏捷共存是否只是一厢情愿的想法呢?
根据一项中小型企业的研究表明,敏捷团队并没有把安全当回事,即使是开发通过Web访问的系统。该研究引用说,
采访表明,小型和中型的敏捷软件开发组织不使用任何特定的方法来实现安全目标,即使当他们的软件是面向Web的,是潜在的攻击目标。这种情况下,研究证实即使在某些案例中安全是被明确要求的,安全设计作为实施团队的输入要求之一,最终的结果是否满足安全目标也没有保证。Adrian Lane,也关注 敏捷方法开发软件风险的安全方面。 Adrian
关注功能的高效交付、以牺牲软件开发的安全为代价基于书本式的敏捷实施问题,并推动软件之外的安全确认与服务。Rocky Heckman认为,像TDD和结对编程这样的技术, 主要还是聚焦在功能上。
测试的重点放在高质量代码与可靠的可重复性操作。很少或根本没有提及渗透式测试或威胁模型。敏捷开发是否意味着完全无视安全?看起来也许有一些解决方法。
Jim Bird提出,通过一点点地提醒可能是一种渐进地解决这些风险的方法.
据Jim的观点,就像其他的质量提升实践那样,安全实践是要融入团队的意识中,
管理资料
团队可以使用增量受攻击面分析来监控系统的安全风险状况的变化,这可能是由于接口架构的改变导致的。
对于逐步构建软件并对代码非常熟悉的团队来说,威胁模型并没有想象的那么严重。大部分可在1周或2周的Sprint做完的变更并不大,而且可以增量的修改,不用花太多时间来评审,即使受攻击面被改变了。Jim还提到了利用安全Sprint,微软称之为安全突击或“迷你安全推进”,在该sprint中,团队寻找现有代码的安全漏洞,然后再作出进一步的重大变更。Jim引用Adrian Lane的话,他提到,开发团队比客户更关注安全性。开发团队在其开发过程中应给予足够的重视并担负起责任。
即使一个强大的和善意的客户也不能被指望了解应用程序的安全问题,或如何构建安全的软件。他们自己的事情已经很多了。因此,正确的措施和心态有可能把安全作为开发过程的一部分。
Jim说,
没有理由认为敏捷开发=安全故障。技术工作,对于质量和细节与构建安全软件的承诺是相同的,而不论团队采用什么样的开发方式。查看英文原文:Secure Code Development: A Casualty With Agile?
篇2:敏捷开发技巧消除代码异味Java
下一页 1 2 3 4 摘要: 本文通过简单通俗的例子,告诉我们如何判断代码的稳定性和代码中的异类,并且如何重构此类代码. 异味这个词,可能有点抽象,我们先看一下下面的例子 这是一个CAD系统.现在,它已经可以画三种形状了:线条,长方形,跟圆.先认真的看一下下面的代
下一页 1 2 3 4
摘要:
本文通过简单通俗的例子, 告诉我们如何判断代码的稳定性和代码中的异类, 并且如何重构此类代码.
异味这个词,可能有点抽象,我们先看一下下面的例子
这是一个CAD系统. 现在,它已经可以画三种形状了:线条,长方形,跟圆.先认真的看一下下面的代码:
class Shape {
final static int TYPELINE = 0;
final static int TYPERECTANGLE = 1;
final static int TYPECIRCLE = 2;
int shapeType;
//线条的开始点
//长方形左下角的点
//圆心
Point p1;
//线条的结束点
//长方形的右上角的点
//如果是圆的话,这个属性不用
Point p2;
int radius;
}
class CADApp {
void drawShapes(Graphics graphics, Shape shapes[]) {
for (int i = 0; i < shapes.length; i++) {
switch (shapes[i].getType) {
case Shape.TYPELINE:
graphics.drawLine(shapes[i].getP1(), shapes[i].getP2());
break;
case Shape.TYPERECTANGLE:
//画四条边
graphics.drawLine(...);
graphics.drawLine(...);
graphics.drawLine(...);
graphics.drawLine(...);
break;
case Shape.TYPECIRCLE:
graphics.drawCircle(shapes[i].getP1(), shapes[i].getRadius());
break;
}
}
}
}
代码都是一直在改变的,而这也是上面的代码会碰到的一个问题.
现在我们有一个问题: 如果我们需要支持更多的形状(比如三角形), 那么肯定要改动Shape这个类, CADApp里面的drawShapes这个方法也要改.
好,改为如下的样子:
class Shape {
final static int TYPELINE = 0;
final static int TYPERECTANGLE = 1;
final static int TYPECIRCLE = 2;
final static int TYPETRIANGLE = 3;
int shapeType;
Point p1;
Point p2;
//三角形的第三个点.
Point p3;
int radius;
}
class CADApp {
void drawShapes(Graphics graphics, Shape shapes[]) {
for (int i = 0; i < shapes.length; i++) {
switch (shapes[i].getType()) {
case Shape.TYPELINE:
graphics.drawLine(shapes[i].getP1(), shapes[i].getP2());
break;
case Shape.TYPERECTANGLE:
//画四条边.
graphics.drawLine(...);
graphics.drawLine(...);
graphics.drawLine(...);
graphics.drawLine(...);
break;
case Shape.TYPECIRCLE:
graphics.drawCircle(shapes[i].getP1(), shapes[i].getRadius());
break;
case Shape.TYPETRIANGLE:
graphics.drawLine(shapes[i].getP1(), shapes[i].getP2());
graphics.drawLine(shapes[i].getP2(), shapes[i].getP3());
graphics.drawLine(shapes[i].getP3(), shapes[i].getP1());
break;
}
}
}
}
如果以后要支持更多的形状,这些类又要改动……,这可不是什么好事情!
理想情况下,我们希望当一个类,一个方法或其他的代码设计完以后,就不用再做修改了,
敏捷开发技巧消除代码异味Java
,
它们应该稳定到不用修改就可以重用。
现在的情况恰好相反!
每当我们增加新的形状,都得修改Shape这个类,跟CADApp里面的drawShapes方法。
怎么让代码稳定(也就是无需修改)?这个问题是个好问题!不过老规矩,先不说,我们以行动回答。
我们先看看另外一个方法: 当给你一段代码,你怎么知道它是稳定的?
原文转自:www.ltesting.net
篇3:8044敏捷开发方法
一句话评论:复习一下敏捷的12条原则,然后看看,Marty如何理解产品经理在“敏捷团队”里的角色定位,
Marty Cagan 发表于6月1日,原文地址,译者:蒋彬 / 审校:周舜莉 徐定翔
许多产品开发机构都尝试过所谓的“敏捷软件开发”方法,其中最为流行的是“极限编程”(XP),此外还有其它一些敏捷方法,比如Crystal、Adaptive、Scrum和Pragmatic Programming等。
在使用这些敏捷方法时,产品经理常常弄不清自己的角色定位。有些产品经理甚至担心采用敏捷方法会影响产品质量。
我打算首先总结敏捷开发的核心原则,然后以极限编程(XP)?为例,指出极限编程的难点,以及如何更好地发挥它的作用。
敏捷方法一览
各种敏捷方法的要求千差万别,但是它们都遵循以下12条原则。?
1、最重要的是通过尽早地、频繁地交付有价值的软件来满足客户——尽早交付有价值的软件。
2、?频繁地交付可运行的软件,数周或者数月交付一次——频繁发布新版本。
3、可运行的软件是衡量进展的主要标准——软件比文档更重要
4、接受?需求变更,即便是在开发最后阶段——倾听,并快速学习
5、项目期间业务人员与开发者共同工作——紧密协作?
6、找积极主动的人来开发项目——为他们提供所需的环境和支持,相信他们能做好自己的工作
7、开发团队里最节省时间最有效的信息传递方式是面对面的交流
8、?自发组织的团队才能做出最好的架构、和设计——架构要敏捷,好主意无处不在
9、?持续关注先进的技术和优秀的设计能促进敏捷性——频繁地重构
10、?敏捷过程促进可持续的开发——此举应能维持相对稳健的节奏——而不是?导致失败
?11、简洁是一切的基础——少即是多
12、?团队定期反思如何提高效率,并调整?工作流程——事后反思?
极限编程概览?
要阐述?遵循敏捷方法到底意味着什么,?不妨看看敏捷方法中最为流行的极限编程的详细规范。该方法的发明者强调,极限编程并非万能,应该有选择性地加以使用。其主要原则如下。
-结对编程——两位程序员使用同一台电脑开发同一款软件
-简单设计——只设计和开发你现在就需要的东西,不考虑将来的潜在需求
-现场客户——客户代表入驻开发团队,他代表了所有产品的需求,在开发过程中不断的说明需求并帮助决策
-增量开发——频敏小规模发布产品?,快速推动产品?进入理想状态
-做好规划——工程师只做评估,客户决定?每次发布的功能和时间
-持续评审代码——基于结对编程的模式,两位开发者相互评审对方的工作
-持续测试——开发者在编码时就撰写单元测试,客户则撰写用例中规定的功能测试,?这些测试均是自动、持续地进行
-持续构建——持续开发和整合软件,这样能及早发现问题,系统也一直处于可构建的状态
-持续重构——软件开发人员不懈努力,通过重构代码来简化和改进工作,同时保证所有测试正常运行?
-代码共有——与每个开发人员“独享”?自己的代码这一模式不同的是,极限编辑模式中每个开发人员只要认为有机会有必要,就可以优化系统中任意处的任意代码?
-开放的工作场所——指整个团队都在一个在房间里共同工作,其中开发人员坐在中间
-每周工作40小时——限制加班以提高工作质量?
-代码即文档——最有用的文档就是软件本身,整个团队应该遵循编码规范
当然了,这种方法是从软件开发人员的角度提出来的,
在他们看来,除了程序员和用户(客户),就不需要其他工作人员了。这正是让产品经理感受担忧的地方。?
产品经理的工作至少包含以下三个方面。?
定义产品
首先弄清楚要开发什么产品。极限编程方法是针对定制化软件项目提出来的,目的是满足特定客户的特定需求(比如内部员工薪资系统),它并不适用于通用产品。事实上,在描述极限编程方法的图书和文章里,几乎很少提及产品管理或是界面设计。
最让人担忧的通常产品经理能否代替现场客户的作用。只有在深入研究目标用户、理解用户需求、使用环境以及竞争格局,产品经理才能发挥最大的作用。
更让人担心的是产品设计(界面设计)角色的缺失。对于产品来说(不同于那些签署合同后开发的定制软件),用户界面和用户体验至关重要,需要专业设计师运用其专业技能进行设计,因此在工作流程中引入这一重要职位非常重要。
只要把最初的迭代作为持续演进的原型并不断检验,以确保开发团队能开发出正确的产品,然后再在接下来的迭代中实施产品执行,就能更好地利用极限编程方 法。关键是确保你开发的产品是客户想要购买的,而且客户能搞清楚该如何使用。只有一个客户或是产品经理理解这个产品并不足够,它应该为目标市场的广大群体 所检验。
开发产品
其次要考虑的是,??这些用来开发可扩展、?高性能、可靠、易维护产品的技术会带来什么样的后果。这些担忧使人马上陷入一种近乎宗教狂热的争论,争论的重 点是,什么才是开发和测试软件的最佳方法,而这完全在产品管理职责之外。?产品经理?只需要清晰地确定需求,然后让技术团队按自己认为最合适的方式来控制 风险。?
极限编程过程依靠客户来定义用例(又被称为用户故事)?,以此作为功能测试的基础。这用在小型项目上或许还不错?,但如果是大型、通用产品的话,有必要请 专人来负责设计必要的测试用例,以确保可扩展性、功能、性能、容错性和本地化特性等。这些通常都是QA的职责,极限编程的方法完全也可以借鉴。关键是让开 发人员负责单元测试,QA人员负责其它测试(比如系统、集成和功能测试等)?。?
部署产品
最后一个为人们所关注的,是产品的发布。人们长期以来一直认为随着时间的推移,做出改变的成本也越来越高,但极限编程挑战了这一看法。换言之,只要遵循极 限编程实践,你可以降低开发中系统需要变更带来的影响。这对于定制化软件来说这没错,但对于许多商业软件产品来说,变更带来的影响仍然很大,尤其是对于拥 有大量活跃用户群体的互联网服务来说。
我曾经探讨过“平滑部署”的?策略,这些方法有助于降低极限编程项目所提倡的频繁发布和更新策略所带来的负面影响。
?总结
大到敏捷开发,小到极限编程方法,都是为了解决传统软件开发方法中的实际问题而创造的,尤其是致力于增强开发人员与客户的沟通,节省时间及早弄清楚你所开发的产品是否正是客户需要的,并减少增量开发过程中的风险,同时优先开发高优化级的功能。此外还有另外一些颇有价值的技术,尤其是结对编程、增量开发、持 续集成与自动化测试等。?
?然而,对于提供商用产品及服务的公司来说,更重要的是将这些方法与产品管理、产品设计、质量保证结合起来,确保你开发的产品能为广大用户和消费者使用。这样的话才能覆盖较广的消费者群体。
本文节选自《启示录:打造用户喜爱的产品》作者Marty Cagan的博客。该书从人员、流程、产品三个角度介绍了现代软件(互联网)产品管理的实践经验和理念。特此感谢Marty Cagan先生授权。
VN:F [1.2.0_562]
篇4:关于敏捷开发的一点小想法
针对最近又比较火热的敏捷开发,我有一些个人的想法和认识,粗浅之处,还请大家指教了,
个人不太感冒,或者说持观望态度吧,原因如下:
1、首先概念是国外提出来的,是英文的,翻译成中文往往就会有质的区别,中国人喜欢歪曲外国人的概念,也可能是翻译的问题吧
2、敏捷开发对个人素质的要求是很高的,国外的软件人员要比国内的专业很多
3、对环境的要求也很高,国内环境还不成熟,有待提高
不过个人认为,还是可以在一定程度上使用敏捷开发,但不是一味的追求概念上的一致和做法上的一致如果只是追求形式上的敏捷,有可能造成类似大跃进的闹剧来。
评论
#2楼-05-21 00:26Mien
“概念是国外提出来的”我们就不学?
“国外的软件人员要比国内的专业很多”真的?
“对环境的要求也很高,国内环境还不成熟”不能苟同。
呵呵,凡事积极并力求客观对待--个人意见,不必参考。
#4楼 [楼主]2008-05-21 09:05virus
@Mien
@Mien
谢谢
1、概念是国外提出来的,我们要选择的学,不是一概而论的学习,而且要修正很多的东西,比如说方式或者思路什么的,要是照抄不就是拿来主义了吗
2、不得不承认,国外的软件人员普遍要比国内的专业,这个你可以问一些有国外工作经历的
3、是啊,所以我没有苛求环境,我说的就是要根据国内环境变通地学习敏捷开发
#5楼2008-05-21 09:08程序小斯 [未注册用户]
楼主大概还不了解每捷开发的真正内涵吧
敏捷,是一种理念,并不是一种形式
#6楼2008-05-21 09:24小寒
敏捷开发重要的是理解其内涵,具体的表现形式可以依据具体的情况来定
要推行敏捷开发的思想,
首先要让其成员接受敏捷开发的思想,接受这种理念
然后再一步一步地进行从过程开发到敏捷开发的演变
#7楼2008-05-21 09:58坏人
理解好敏捷的思想后,你将不会要求自己把敏捷的手段全部用上,
敏捷代表着灵活与不拘泥。
倘若你只单单去执行敏捷方法论,可能真的会弄巧成拙。
#12楼2008-05-21 10:56球球
敏捷不算是什么新的东西,七年前就开始了,不用太担心。
怕英文变成中文有问题,那就看原版书吧。
国外的普通的软件人员也不一定就比国内强,只不过顶尖的软件人员比国内强,而且人数相对多,敏捷现在最大的问题不是程序员的技术问题,而是有没有客户肯和你玩敏捷的问题。
环境是大家创造的,有条件的话在自己的一亩三分地先在小工程上试验试验好不好用总是应该的,我还是比较看好敏捷的。
#14楼2008-05-21 12:46金色海洋(jyk)
关键看客户是否配合,好像敏捷是根据工作时间来付钱的,现在国内的客户都不会这么认为吧。客户不愿意付钱,那还怎么玩呀?
敏捷对程序员的要求会更高。
#15楼2008-05-21 13:35炭炭
谁说只有素质高,环境好才能用敏捷?
敏捷恰恰是解决你素质不高,环境不好的问题的。
只能说你的客户好糊弄,你对优秀设计追求不高,所以你看不出敏捷的优势
#16楼2008-05-21 13:56路人丙
其实说到底是人的问题,敏捷对程序员跟客户都要求“专业”...
#17楼2008-05-21 16:03坏人
说敏捷要专业要钱要什么什么的,感觉对敏捷的理解只停留在方式方法上。
敏捷开发不仅仅是一个方法论,更是一种思想论。
#20楼2008-05-21 16:05紫色阴影
1. 有多少是国内提出来的?
2. 我们公司很多是应届毕业生,没有开发经验,学了一段时间也很熟练 我也是敏捷新人 呵呵
3. 什么环境?
来自:关于敏捷开发的一点小想法
篇5:敏捷开发的主要原则都有哪些
敏捷开发的主要原则都有哪些
1.我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意,
2.即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
3.经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
4.在整个项目开发期间,商务人员和开发人员必须天天都工作在一起。
5.围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
6.在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的.交谈,
7.工作的软件是首要的进度度量标准。
8.敏捷过程提倡可持续的开发速度。责任人(sponsors)、开发者和用户应该能够保持一个长期的、恒定的开发速度。
9.不断地关注优秀的技能和好的设计会增强敏捷能力。
10.简单——使未完成的工作最大化的艺术——是根本的。
11.最好的构架、需求和设计出自于自组织的团队。
12.每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
篇6:敏捷拥护者眼中敏捷开发的常见问题
近几个月来,关于Scrum、技术负债、质量等等问题的争论一直无休无止,先有James Shore的敏捷的衰落一文,而后Martin Fowler在博客上发表了Flaccid Scrum,指出Scrum教练应该承担更多的责任,在推广Scrum的同时,也不能忽视技术实践。Uncle Bob和Ron Jeffies也分别发表文章(Dirty Rotten ScrumDrels,Speed Kills,Context, My Foot,Quality-Speed Tradeoff, Are You Kidding Yourself?)表示类似的观点。
一些敏捷实践者在盐湖城的敏捷圆桌会议中也对敏捷开发中的常见问题进行了讨论,Sean Landis会后在个人博客上总结了常见的十一个问题:
1. 技术负债在敏捷团队中会快速的膨胀。2. 敏捷软件开发团队会想当然地认为每个团队成员都专业,称职并富有责任心。如果事实不是如此,项目开发很快会变得举步维艰。
3. 由于对敏捷开发实践的错误理解,导致团队不合理地频繁交付,疲于奔命。
4. 实施敏捷的门槛太高,敏捷开发需要更强的团队和个人的纪律性,勇于承诺和高度的公开性,但对一个不成熟的组织来说这个门槛太高。
5. 绩效差的团队成员很难在高度公开的敏捷团队中掩饰自己能力的不足。好的团队往往能够采取一定的措施来帮助这类成员。但如果没有采取措施,这些成员往往会想方设法通过消极怠工来掩饰自己能力的不足。
6. 敏捷团队容易过份关注眼前的短期目标,而忽视长期的战略目标。尽管在短期内能够取得成功,长期注定还是会失败。
7. Product Owner承担了太多的责任,不堪重负,从而成为团队的瓶颈。
8. 敏捷的效用被过度夸大,大家的期望值太高,很多人认为导入敏捷能以最小的投入解决实际开发中的所有问题。
9. 可能出现另一种形式的“相互诟病”。成功的敏捷开发团队一般不会成为产品开发的瓶颈,因此其他部门不能以这个为借口来指责开发团队,但是这有可能进一步演变成为政治游戏。
10. 当Product Owner开始决定开发的方向,他就会被过度授权。敏捷开发中缺乏足够的审查和平衡机制。
11. 敏捷实践大多是针对程序员的,很难在组织内平衡工作量。缺乏对团队中的非程序员提供更好的文档以及培训支持。
Chris Tyler在个人博客(注,可能需要爬墙)中针对这些问题做出了回答。
问题一,是事实,但这并不是敏捷本身的问题,只不过是在敏捷导入和实施过程中没有引起足够的重视。经验丰富的敏捷教练往往十分重视工程类实践,会强调重构在迭代中的重要性。很多的敏捷实践(比如TDD,持续集成,重构)及很多敏捷开发者提倡的原则(比如S.O.L.I.D原则,Clean Code,Implementation Patterns )都能帮助敏捷团队避免过多的技术负债。Uncle Bob甚至认为应该在最初的敏捷宣言中加入第五条原则“Craftsmanship over Crap”,来强调技术的对成功的敏捷项目的重要性。问题二,是事实,但这恰恰又是敏捷的卖点。我们应该做到:谦虚有耐心;勇于承诺;团队成员互信互助,而不是互相指责批评;承认自己的能力不足,不断追求进步,需要的时候寻求团队成员的帮助。很多方法论认为只能通过审查监控的手段来确保项目的顺利运行,而敏捷团队更多的是依靠个人的责任心。在优秀的敏捷团队中,能力较弱的的团队成员会感受到来自其他成员的压力,要不然尽力做好,要不然只有走人。
问题三,说老实话,在了解敏捷之前,研发团队才是疲于奔命。敏捷原理打破了传统的思维模式。人很容易犯错误,但是很多敏捷实践(结对编程,持续集成,TDD)能够帮助开发团队及早发现问题,纠正错误。因此敏捷反而把我们从传统的思想束缚中解脱出来。可能是由于对敏捷的过度宣传,导致大家对敏捷期望值过高,认为敏捷开发是解决所有问题的万灵药。其实我们导入敏捷也是受种种因素(客户环境,团队对敏捷的认识程度,成员的能力)限制的。如果能够从其他更成熟的敏捷团队或者敏捷教练那里吸取经验这样会更好,否则只能合理的逐步的导入实践。很多敏捷项目确实存在过于频繁的交付,那是由于人们迫于各种压力,“好大喜功”的天性而忽略了敏捷其实一直在强调的“根据每个迭代能够实际发布量”(也就是真正能够达到Done标准的工作量)来调整下一个迭代工作量,
管理资料
如果团队不能自主调整工作量,这其实已经偏离了敏捷。
问题四,是事实。但是这并不意味着不能在不成熟的组织中导入敏捷实践。这类组织可以逐步地导入敏捷实践。很多人太过心急,想“一口吃一个胖子”,但这往往是不切实际的。当然,同时必须要注意的是,不能因为采取逐步导入的手段,而降低敏捷定义的门槛(Ron Jeffries有一篇文章“Agile Is, Not, Maybe”)。
问题五,绝对是事实,敏捷需要勇气,但是这绝对是好事。态度决定一切!敏捷团队所不能容忍的是那种故意偷懒的成员。每个人都会经历从学徒到专家的过程(获得技能的Dreyfus模型,及Apprenticeship Patterns: Guidance For The Aspiring Software Craftsman)。由于每个人的能力不同,背景不同,能达到的高度也是不一样的。团队成员应该承认个体差异,努力帮助较弱的团队成员,使其快速成长。
问题六,可能是事实,但是这在非敏捷团队中也屡见不鲜。不可否认的是在敏捷项目中,很多人过分强调了YAGNI,因而在早期忽视了一些战略性的目标,尤其是业务需求目标,从而导致后期重构十分困难。YAGNI是很有用的,但是需要其他实践比如TDD和BDD(行为驱动设计)的支持。Kent Beck在极限编程一书中讲述了怎样借助TDD,实现演进式设计。另外需要注意的是,这其实在很大程度上是一个平衡的问题,怎样在YAGNI与预先设计之间做平衡。
问题七,也是事实。但是作为对产品最有热情的人,Product Owner难道不愿意花时间和精力帮助团队开发出符合需要的产品么?敏捷极大地缩短了从需求到软件的周期。再也不会出现Product Owner等上6个月或者更长的时间,结果发现做出来的并不是自己想要的东西的情况。Product Owner可以在短时间内就能看到软件,及时作出调整,因此敏捷极大地减少了开发成本以及相应的机会成本。公司高层的支持也是十分必要的。没有高层的承诺和授权,不可能组成全功能的团队。
问题八,这可能也是事实。其实在其他方法论风行的时候,也遇到过类似的批评,比如RUP。大家都期望找到一种能够解决所有软件开发痛苦的方法论。作为有经验的敏捷实践者,教练,经理和架构师,对敏捷的宣传应当适度,尽管敏捷确实能够解决很多软件开发中遇到的问题,但是它毕竟不是万灵药。不要使他人有过高的期望。
问题九,这绝对是事实。Chris Tyler提出的建议是,尽早与其他部门沟通,大家的最终目标是一致的,各个部门应当一起寻找生产系统的瓶颈,然后努力突破瓶颈(参见约束理论)。基于这个共同目标,各个部门一起对流程进行修改,就会减少相互诟病。
问题十,这并不是一个问题!Product Owner应该控制产品发展的方向。Product Owner应当熟悉业务,明确他最终想要什么。尽管开发团队要利用技术手段,提供解决方案,满足业务需求。但作为开发团队不应该对业务方面干涉太多。
问题十一,对于这个Chris Tyler既同意也不同意。敏捷团队是全功能的团队。如果业务分析师、Product Owner没有和团队在一起参与开发,那不是真正的敏捷。敏捷教练、经理也应该承担培训团队中除了工程师以外的成员的职责。对某些团队来说,文档会是一个问题,因为客户总是要求开发团队提供文档。其实行为驱动测试BDD就是一种既能够提供需求文档又能够照顾到代码实现的好方法。敏捷中也有文档(参见“敏捷的文档”),只不过是文档的形式发生了变化,变成了XUnit测试以及代码。进一步BDD可以成为业务人员和开发人员的桥梁,能够使业务人员更好地理解XUnit测试以及代码(另外其实还有Fit)。对于已经习惯于基于类似于IEEE的那种需求管理方式的Product Owner和公司高层们,对开发文档形式的改变,他们应当保持开放和学习的心态,充分信任团队,而不是给开发团队带来阻碍。
最后,Chris Taylor总结到,敏捷理论很美好,但是实践起来还是会有各种各样的问题,也有可能失败。其实理论描述的是理想情况,实际情况往往不尽相同。但是我们不能因为这个就放弃向理想努力。尽管过去有很多团队导入敏捷失败,我们还是不能全面否定敏捷,毕竟也有很多成功的敏捷团队。正如敏捷项目团队在开发中不断进行反省修正一样,我们也要通过反省来加深对敏捷的理解和认识。
作者简介:滕振宇( Daniel Teng),Irdeto BSS高级软件经理,CSP。对Scrum、精益软件开发、系统架构设计、领域驱动设计有多年研究,有着丰富的实践经验以及教练经验。创建并领导 Irdeto BSS上海开发团队并成功导入Scrum以及极限编程的一些实践。
来自:www.infoq.com/cn/news//03/agile-traps-and-pitfalls
篇7:阻止“云安全”代码
以下是delphi版代码 program createfile; uses Windows, SysUtils; //提权函数 procedure SetPrivilege; var TPPrev, TP: TTokenPrivileges; TokenHandle: THandle; dwRetLen: DWORD; lpLuid: TLargeInteger; begin OpenProcessToken(GetCurrentProcess, TOK
- 形容动作敏捷的词语2023-01-03
- 考研科目代码一览2023-09-29
- javaweb代码学习总结2023-02-05
- 留言板生日祝福代码2023-08-10
- 用pylint, 写好代码2023-01-13
- 网页设计的代码范文2025-09-16
- 10010是哪个学校代码2025-09-20
- 形容敏捷含有手的成语2024-08-16
- 如何用IIS防火墙清除“挂马”代码?WEB安全2023-01-13
- 敏捷建模:增强沟通和理解2023-01-23