Scrum敏捷价值观与原则

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。如果还不知道Scrum敏捷开发的朋友们,请出门左转,点击 Scrum 了解。 敏捷价值观 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客服合作 高于 合同谈判 响应变化 高于 遵循计划 敏捷的原则 1.我们最重要的目的,是通过持续不断地及早交付有价值的软件使客户满意。 2.欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。 3.经常的交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。 4.业务人员和开发人员必须相互合作,项目中得每一天都不例外。 5.激发个体的斗志,以他们为核心搭建项目。提高所需的环境和支援,辅以信任,从而达成目标。 6.不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。 7.可工作的软件是进度的首要度量标准。 8.敏捷过程倡导可持续发。责任人、开发人员和用户、要能够共同维持其步调稳定延续。 9.坚持不懈的追求技术卓越和良好设计,敏捷能力由此增强。 10.以简洁为本,它是极力减少不必要工作量的艺术。 11.最好的架构、需求和设计出自组织团队。 12.团队定期地反思如何能提高成效,并依次调整自身的举止表现。   参考文献 《Scrum要素》作者:Chris Sims & Hillary Louise Johnson from:http://www.woshipm.com/discuss/84052.html

龙生   26 Dec 2018
View Details

敏捷开发之Scrum扫盲篇

现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP…   为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中的各个环节,主要目的有两个,一个是进行知识的总结,另外一个是觉得网上很多学习资料的讲述方式让初学者不太容易理解;所以我决定写一篇扫盲性的博文,同时试着也与园内的朋友一起分享交流一下,希望对初学者有帮助。    什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。 怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开发;   为什么说是以人为核心? 我们大部分人都学过瀑布开发模型,它是以文档为驱动的,为什么呢?因为在瀑布的整个开发过程中,要写大量的文档,把需求文档写出来后,开发人员都是根据文档进行开发的,一切以文档为依据;而敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。   什么是迭代? 迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。   关于Scrum和XP 前面说了敏捷它是一种指导思想或开发方式,但是它没有明确告诉我们到底采用什么样的流程进行开发,而Scrum和XP就是敏捷开发的具体方式了,你可以采用Scrum方式也可以采用XP方式;Scrum和XP的区别是,Scrum偏重于过程,XP则偏重于实践,但是实际中,两者是结合一起应用的,这里我主要讲Scrum。   什么是Scrum? Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作;把一个开发流程的名字取名为Scrum,我想你一定能想象出你的开发团队在开发一个项目时,大家像打橄榄球一样迅速、富有战斗激情、人人你争我抢地完成它,你一定会感到非常兴奋的。 而Scrum就是这样的一个开发流程,运用该流程,你就能看到你团队高效的工作。   【Scrum开发流程中的三大角色】 产品负责人(Product Owner) 主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。   流程管理员(Scrum Master) 主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。   开发团队(Scrum Team) 主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到Sprint的目标。     Scrum流程图   //———————— 下面,我们开始讲具体实施流程,但是在讲之前,我还要对一个英文单词进行讲解。 什么是Sprint? Sprint是短距离赛跑的意思,这里面指的是一次迭代,而一次迭代的周期是1个月时间(即4个星期),也就是我们要把一次迭代的开发内容以最快的速度完成它,这个过程我们称它为Sprint。   如何进行Scrum开发? 1、我们首先需要确定一个Product Backlog(按优先顺序排列的一个产品需求列表),这个是由Product Owner 负责的; 2、Scrum Team根据Product Backlog列表,做工作量的预估和安排; 3、有了Product Backlog列表,我们需要通过 Sprint Planning Meeting(Sprint计划会议) 来从中挑选出一个Story作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog; 4、Sprint Backlog是由Scrum Team去完成的,每个成员根据Sprint Backlog再细化成更小的任务(细到每个任务的工作量在2天内能完成); 5、在Scrum Team完成计划会议上选出的Sprint Backlog过程中,需要进行 Daily Scrum Meeting(每日站立会议),每次会议控制在15分钟左右,每个人都必须发言,并且要向所有成员当面汇报你昨天完成了什么,并且向所有成员承诺你今天要完成什么,同时遇到不能解决的问题也可以提出,每个人回答完成后,要走到黑板前更新自己的 Sprint burn down(Sprint燃尽图); 6、做到每日集成,也就是每天都要有一个可以成功编译、并且可以演示的版本;很多人可能还没有用过自动化的每日集成,其实TFS就有这个功能,它可以支持每次有成员进行签入操作的时候,在服务器上自动获取最新版本,然后在服务器中编译,如果通过则马上再执行单元测试代码,如果也全部通过,则将该版本发布,这时一次正式的签入操作才保存到TFS中,中间有任何失败,都会用邮件通知项目管理人员; 7、当一个Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,这时,我们要进行 Srpint Review Meeting(演示会议),也称为评审会议,产品负责人和客户都要参加(最好本公司老板也参加),每一个Scrum Team的成员都要向他们演示自己完成的软件产品(这个会议非常重要,一定不能取消); 8、最后就是 Sprint Retrospective Meeting(回顾会议),也称为总结会议,以轮流发言方式进行,每个人都要发言,总结并讨论改进的地方,放入下一轮Sprint的产品需求中;     下面是运用Scrum开发流程中的一些场景图: 上图是一个 Product Backlog 的示例。   上图就是每日的站立会议了,参会人员可以随意姿势站立,任务看板要保证让每个人看到,当每个人发言完后,要走到任务版前更新自己的燃尽图。 任务看版包含 […]

龙生   26 Dec 2018
View Details

CDN的combo技术能把多个资源文件合并引用,减少请求次数

CDN的combo技术能把多个资源文件合并引用,减少请求次数。比如淘宝的写法:

采用??形式。 参考: http://blog.csdn.net/function_basi/article/details/8809378 http://www.cnblogs.com/zhengyun_ustc/archive/2012/07/18/combo.html   from:https://www.cnblogs.com/EasonJim/p/6216594.html

龙生   26 Dec 2018
View Details

C#与C、Java的区别

C#与C的区别 C#通常不使用指针。 可以在一个方法里的任何地方声明变量,不必把声明语句放在方法的顶端。 使用一个对象前,不一定要声明它,可以在用到的时候再定义。 C#对结构体类型的定义有些不同,它根本不支持联合类型。 C#有枚举类型,允许一系列被命名的量(如颜色或一周里的各天)赋值为连续的数值,但语法有些不同。 C#没有位域,也就是说,变量至少要占用一个字节的存储空间。 C#不支持长参数列表。必须针对参数值和类型定义一个方法。然而,C#语句允许函数的最后一个参数为可变参数数组。 C#引入了代理和索引器的思想,这些在其他流行的语言中是没有的。   C#与Java的区别 C#与Java关系密切,由于C#是在Java之后设计出来的,它吸收了Java的大部分精华。但两者还是有一些细微差别。 许多系统对象方法都有相同的方法名,只是在大小写形式上有区别。 C#不提供throws关键字,该关键字使编译器检查你是否捕获了一个方法抛出的异常。 C#对于布局管理器有更多的限制。因为它是以Windows系统为中心的,大多数时候采取的是图形元素的绝对位置。 C#允许运算符重载。 C#引进了代理和索引器。 C#有枚举类型。 C#有不安全模式,在这种模式下可以使用指针。 必须专门声明一个方法能被覆盖及一个方法能覆盖另一个方法。 不能通过声明来区别继承和接口实现,它们的声明方式是一样的。 switch语句允许使用字符串变量。如果变量没有被匹配,必须有一个默认情况,否则会出现错误。break语句是必需的。 布尔变量类型在C#中拼为“bool”,在Java中拼为“boolean”。 摘自《C#设计模式》

龙生   24 Dec 2018
View Details

ASP.NET WebApi [FromBody]获取对象值一直为null的问题

解决问题前,首先确定[FormBodyAttribute]的定义以及功能范围,相关资料: https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api 其实文中已经讲得足够详细,一般来讲FormUri获取参数不会存在什么疑惑,但在不了解规则的情况下如何设置和获取FormBody标识的值却有些迷惑:我到底该怎么传递参数api才能够获取到参数?很多文章给出的解决方案是利用="json string"这样的方式进行提交,但实在太别扭了。这样的代码写出去会被打吧…所以,到底该怎么请求呢? 如果你仔细阅读过文章,相信你应该注意到了这一段: When a parameter has [FromBody], Web API uses the Content-Type header to select a formatter.  意思是对于被标记为FromBody的parameter,WebApi默认会根据Content-Type中选择格式化方法。由于Web程序中常常使用JSON方式传递数据,所以这里只针对Content-Type="application/json"的请求进行分析。接着看下一句: In this example, the content type is "application/json" and the request body is a raw JSON string (not a JSON object). 其实到这里已经给出解决方案了,即Content-Type="application/json"的请求都需要将参数转换为JSON string,而非JSON Object. 接下来代码说话的时间到了: 1)创建一个复杂对象的实体类DataParameter: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [Serializable] public class DataParameter {     public DataParameter() […]

龙生   24 Dec 2018
View Details

ASP.NET MVC学习系列(二)-WebAPI请求

  继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理。 这里我使用Jquery 来发起异步请求实现数据调用。   继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用。   一、无参数Get请求   一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现:   请求的后台Action方法仍为上篇文章中的GetUser() :   也可以用$.ajax({type:"get"}) 方式,正确的获得了返回数据:   二、传递一个参数的Get请求   通常我们需要传递参数只需要指定ajax方法的data属性即可: data:{"name":"赵大宝"}    后台正确的返回数据:   三、传递两个或多个参数的Get请求   按照上面的方法,对于多个参数我们可以很容易就写出来: data:{"name":"赵大宝","age":12}    后台正确的返回数据: 四、无参数的Post请求   我们可以使用$.post() 或$.ajax({type:"post"}) 来发起post请求:   后台正确的返回了数据: 五、传递一个参数的Post请求:   首先这里需要提醒大家一下,我们在修改完后台代码后,如果没有重新生成项目,那么在请求时就会报错:“未找到与请求***匹配的HTTP资源” :   所以,我们只要我们修改了后台代码,就一定要重新生成一下:     不过,当我们重新生成项目,再次发送请求,看到的仍然是404错误,再次检查一番代码,也没有发现是哪里的问题。   事实上,ASP.NET Web API能够正确的识别我们的UserController控制器处理Post /api/user ,但却不能找到一个可以接受的方法来处理请求。 也就是说,Web API接收到的请求能够找到User控制器,但在该控制器中找不到名称为Def 的这个Action。 那我们要怎么来解决呢? 通过搜索MSDN上Web API官网中的说明,我们可以找到下面的一段介绍: 即在Action 方法中我们需要使用 [FromBody] 属性标签来标明属性。   修改后,再次发送请求,我们可以看到,Status Code 为200,请求发送成功。   可以看到,在post请求中,方法的参数必须要用 [FromBody] 属性来修饰才可以, [FromBody] 就告诉Web API 要从post请求体重去获取参数的值。 但让我们诧异的却是,后台返回的数据中name的值为空。   通过调试,我们可以看到,后台Action 中接收到的name值为null。     通过上面的测试我就也能够猜测到,Web API 要求请求传递的 [FromBody] 参数,肯定是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。 现在,咱们把data中的key设置为空,然后再次发送请求:   测试可见,后台正确的接收到了数据:  六、传递两个参数的Post请求   按理说,一个参数的请求实现了,那么传递两个或者多个参数也就很顺利了,对于两个参数的后台接收方法,我们可能会这样来写: 但事实证明,这样是错误的。   那到底两个或者多个参数我们要怎样来定义呢? […]

龙生   24 Dec 2018
View Details

出现身份验证错误,要求的函数不受支持(这可能是由于CredSSP加密Oracle修正)

问题描述: 从5月8\9日开始客户端Win10\WinSer2016突然无法访问测试环境下所有远程Win Ser2012/16资源,提示"出现身份验证错误。要求的函数不受支持… 这可能是由于CredSSP加密Oracle修正…" Win7中英文版本分别提示"发生身份验证错误。要求的函数不受支持"或"An authentication error has occurred and the required function is not supported" 问题截图: Win7报错截图: 具体信息: 远程桌面连接报错: 出现身份验证错误。要求的函数不受支持 远程计算机:*.*.*.* 这可能是由于CredSSP加密Oracle修正。 要了解详细信息,请访问https://go.microsoft.com/fwlink/?linkid=866660 问题排查: 根据提示我们访问https://go.microsoft.com/fwlink/?linkid=866660 发现是因为CVE-2018-0886 的 CredSSP 更新导致该问题的发生。简单了解下CredSSP: 凭据安全支持提供程序协议 (CredSSP) 是处理其他应用程序的身份验证请求的身份验证提供程序。 CredSSP 的未修补版本中存在远程代码执行漏洞。 成功利用此漏洞的攻击者可以在目标系统上中继用户凭据以执行代码。任何依赖 CredSSP 进行身份验证的应用程序都可能容易受到此类攻击。 此安全更新通过更正CredSSP在身份验证过程中验证请求的方式来修复此漏洞。 解决方法: 修改本地组策略: 计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择"易受攻击"。 易受攻击–使用CredSSP的客户端应用程序将通过支持回退到不安全的版本使远程服务器遭受攻击,但使用CredSSP的服务将接受未修补的客户端。 English: Group Policy ->Computer Configuration->Administrative Templates->System->Credentials Delegation>Encrypted Oracle Remediation change to Vulnerable Vulnerable – Client applications that use CredSSP will expose the remote servers to attacks by supporting fallback to insecure versions, and services that use CredSSP will accept unpatched clients. 步骤如下: 1.打开本地组策略: 2.依次展开计算机配置>管理模板>系统>凭据分配>加密Oracle修正 […]

龙生   22 Dec 2018
View Details

在.Net中跑RocketMQ_入门篇(下)

上一篇讲了如何再控制台将RocketMQ跑起来,本篇讲解,在asp.net mvc种跑起来,含(发布、订阅)。 因篇幅过长,本次将不挨个贴源码,直接展示目录,根据上一篇文章,进行相应的调整即可。 1、新建一个类库,将MQ公共部分提出来(源码在入门篇1中有讲解和截图): 如: 此时需要注意的有两点: (1)在RocketMQClientManager中,尽量将IRocketMQManager做成单例,避免每发一次消息,就实例化一个对象造成资源浪费。 (2)经测试,在RocketMQClientManager中发送消息时,遇到并发可能会存在消息丢失问题,防止消息丢失,可以在发布的时候,进行加锁处理。 2、在asp.net mvc 项目中配置MQ信息(需要在App_Data中修改RocketMQ的相应配置,入门篇1中有讲解)。 3、在asp.net mvc Global种添加初始化RocketMQ和订阅代码(按Tag进行订阅,也可订阅多有的Tag): 注意:FarseerBootstrapper.Create().Initialize(); //必须注册MQ服务,否则运行会抛出,未注册MQ服务啥。 4、接下来可以在控制器调用RocketMQ,进行测试(发布消息的Tag为BootsShuTestTag,消费可以根据指定的Tag进行消费): 发布、订阅运行结果: 注意、注意、注意: 1.需要将项目统一编译成X64、并且将项目寄宿到IIS,里边即可正常运行。在VS里边运行,是跑不起来的! 2.作者不推荐在服务端进行订阅,如果在IIS上运行,则可以将订阅模块提出来写成windows服务。 大家根据自己的业务场景自行甄别及其使用。 以上如有不对的,可以拍砖,相互学习,共同进步。 欢迎加入.NET CORE/ASP.NET CORE 技术交流群,我们期待你的加入。 群号:702566187   from:https://blog.csdn.net/weixin_37207795/article/details/81023914

龙生   22 Dec 2018
View Details

在.Net中跑RocketMQ_入门篇(上)

下面我将为大家介绍一款支持.NET端的RocketMQ。大名为:Farseer.Net.MQ.RocketMQ。 支持.Net Framework 4.5和.NetStandard 2.0 1、先创建一个.Net Framework的控制台,热热手。 2、通过Nuget安装相应组件。 Install-Package Farseer.Net.MQ.RocketMQ -Version 2.0.1 Install-Package Farseer.Net.Configuration 3、将ONSClient4CPP放到项目根目录: 如: 3.1、 3.2、 4、新建启动模块:PushModule: 如: 5、在我们创建的控制台中,编写RocketMQ代码: 如: 6、将项目改为X64。 7、修改App_Data下的Farseer.Net.josn(注意:程序运行,会自动生成改json配置文件) 8、运行控制台,能跑起来了吧! 欢迎加入.NET CORE/ASP.NET CORE 技术交流群,我们期待你的加入。 群号:702566187   from:https://blog.csdn.net/weixin_37207795/article/details/81023757

龙生   22 Dec 2018
View Details
1 162 163 164 432