研究生课程考核试卷(适用于课程论文、提交报告)科目:敏捷软件开发教师:刘骥姓名:学号:专业:类别:专业上课时间:2014年4月至2014年6月考生成绩:卷面成绩平时成绩课程综合成绩阅卷评语:阅卷教师(签名)重庆大学研究生院制重庆大学研究生《敏捷软件开发》课程考核要求考核要求:根据敏捷软件开发的原理在如下项目中任选一个完成,提交软件的设计报告,并在设计报告中论述敏捷软件开发的思想是如何应用的。可以选择的项目包括:(1)社交网站(2)模式识别软件(3)3D游戏(4)Android手机相册完成的软件占总成绩的50%,软件设计报告占总成绩的50%,报告的字数不少于3000字,提交时间不得晚于2014年6月21日。参考资料:[1]MartinFowler.重构:改善既有代码的设计.人民邮电出版社,2010年4月.[2]SteveFreemanNatPryce.测试驱动的面向对象软件开发.机械工业出版社,2010年6月.[3]ErichGamma,RichardHelm,RalphJohnson,JohnVlissides.设计模式:可复用面向对象软件的基础.机械工业出版社,2000年6月.注:1、本试卷格式用于考核方式为“提交报告”、“课程论文”、“考查”等各类别研究生课程的考核。2、要有明确的课程考核要求:如课程论文(报告)题目(范围)、篇幅(字数)、必须的参考资料、提交时间等。并提前将课程考核试卷发给学生。3、提交课程论文撰写格式参考《重庆大学博士、硕士学位论文撰写格式标准》。摘要满足用户不断变化的需求是软件开发的长期无法解决的难题之一,经典的瀑布模式在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。敏捷方法满足需求的办法主要通过迭代。在每一次迭代周期结束时,都能交付用户一个可用的、可部署的系统,用户使用并体验该系统并反馈意见,在随后的迭代周期这些意见和需求的其他变化一起在产品中实现和集成。每次迭代周期应尽可能短,以便能及时地处理需求变化和用户反馈。简单的说,敏捷开发是一种以用户的需求进化为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。主张简单拥抱变化递增的变化快速反馈背景软件开发方法一直处在不断发展过程中。在诸多方法中,敏捷开发以其能持续满足不断变化的用户需求正在受到越来越多人的重视,从中小项目开始进入大型开发项目,近几年来上升势头明显在软件工业界,敏捷开发已成为众多高效开发团队的制胜之道。在欧美软件企业中,有近半数企业已采用敏捷方法进行开发,而近几年受软件外包和外企的带动,敏捷开发在中国也出现了日渐普及的态势,如腾讯内部几乎所有的开发团队都在实施敏捷方法。敏捷开发的流行绝非偶然,其最大的推动力是采用这种方法所能带来的受益。相关统计表明,敏捷开发可以将效率提高3~10倍,软件的质量也有更加可靠的保证;同时,还给团队内的每个成员提供了良好的发展机会,技术和合作水平都能得到相应提高。当然,敏捷的成功前提是其方法本身的适用性和团队对它的深入理解和合理运用。1.迭代式开发。即整个开发过程被分为几个迭代周期,每个迭代周期持续的时间一般较短,通常为1到6周。2.增量交付。产品是在每个迭代周期结束时被逐步交付使用,每次交付的都是可以被部署、能给用户带来即时效益和价值的产品。3.开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与到整个开发过程中。这使需求变化和用户反馈能被动态管理并及时集成到产品中。4.持续集成。新的功能或需求变化总是尽可能频繁地被整合到产品中。有些是在每个迭代周期结束的时候集成,有些则每天都在这么做。5.开发团队自我管理。人是敏捷开发的核心。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。SNS(SocialNetworkingServices)是“社交网络服务”的简称,SNS专指旨在帮助人们建立社会性网络的互联网应用服务。SNS(SocialNetworkingServices,社会化网络服务,或社交网络服务)是近几年互联网新媒体中一类重要的应用服务,其井喷式的发展速度使各界人士不得不刮目相看。Friendster、MySpace、Facebook三大网站被称为美国社交网站三巨头。而这三个网站的兴起和发展也代表了全球SNS网站的发展历程和趋势。随着Facebook及MySpace等SNS网站的示范性作用的刺激,世界各地的SNS网站也如雨后春笋般地迅速成长。亦是伴随这三个网站的兴起,中国的SNS经过了三波式的发展。国内知名的SNS主要有校内、开心、豆瓣标准意义上的SNS是基于P2P技术开发的,所以SNS开发中里也会出现feed这些概念。然而由于时间关系,本系统没有用到P2P技术,而是对SNS的部分基础功能模块研究后剥离,设计了一个拥有类似SNS基础功能的单机系统。不过系统在设计时考虑到了以后拓展的空间,可以在此雏形的基础上对系统进一步完善。本系统基于.net平台开发,编译器用VS2012。主要实现了后台功能和测试模块,并且经多次调试系统中功能都已通过测试用例。说到敏捷软件开发,我们首先想到的肯定是效率。敏捷开发通过几点原则来保证开发效率:(1)快速反馈(2)高效率迭代(3)增量交付。遵循这几个原则,本人开发了SNS1.0版本。软件设计:敏捷软件开发不提倡过度的设计,因为这会大大拖延开发的进度。所以这里只对SNS做了一些最简单的设计。首先要开发SNS系统不得不先去了解它里面有哪些模块,以下是对SNS功能的一个整体设计:可以看出,SNS的结构还是非常庞大的,实现里面每一个小功能可能就需要耗费我们大量的时间,要在短期内实现所有功能还是不太可能的。好在敏捷开发有增量交付,所以我们可以只着眼于SNS的部分核心功能,从最简单的部分入手,然后通过不断的迭代先形成我们初级版本。既然SNS被称作社交网络,那么它里面最重要的部分就是人了,所以我们可以先设计一个Person类,然后赋予它一些简单属性。Person类属性含义Id用来标识唯一Name用户的名字(可以是昵称也可以是真实姓名)Birthday用户生日(年龄可以推算出来)Gender性别因为是敏捷开发,所以我们在设计Person类的时候不需要考虑的太周到,其他的属性我们可以在我们需要的时候再去添加,(敏捷开发要求遵循开放——闭合原则,即它更倾向于在类中增加内容,而不是修改原来的类成员)而且这样一般不会破坏到程序。既然是社交网站,那么它肯定是有交互的,所以仅仅有人还是不够的,人和人之前还要产生关系。社交网站的核心价值就在于它维护了一个庞大的人际关系网络。这里即指我们的好友功能模块,所以我们为了让每个人的对象维护一个好友列表,添加了Friends_id属性,类型为Liststring。这里考虑到维护一个对象列表可能需要占用大量的内存空间,我们可以选择牺牲效率节约空间的方式,所以这里Person类只维护好友的的Id列表。Persons类:随后为了模拟数据库的功能,我们添加了一个Persons类,类比数据库Person表保存所有用户信息的功能Persons的对象负责维护所有的用户对象(其实可以考虑把Persons类做成单例模式,因为我们仅仅需要他产生一个对象)。它提供了添加用户,用户查询的方法。Persons类方法用途Add(Personp)添加好友PersonfindPersonById()