项目 | 内容 |
这个作业属于哪个课程 | 任课教师博客主页链接 |
这个作业的要求在哪里 | 作业链接地址 |
作业学习目标 |
(1)掌握软件项目评审会流程 (2)反思总结课程学习内容 |
任务一:结合本学期课程学习内容,对比的任务5你所提的问题,尝试对提出问题进行解答,并阐明是如何通过学习/实践/讨论弄清楚的;学习中是否产生了新的问题?如有,请提出。
实验一 通读教材《构建之法》后的问题
1.什么是软件工程中的敏捷开发?
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
核心原则
◆主张简单
当从事开发工作时,你应当主张最简单的解决方案就是最好的解决方案。不要过分构建敏捷开发。
敏捷开发
(overbuild)你的软件。用AM的说法就是,如果你现在并不需要这项额外功能,那就不要在模型中增加它。要有这样的勇气:你现在不必要对这个系统进行过分的建模(over-model),只要基于现有的需求进行建模,日后需求有变更时,再来重构这个系统。尽可能的保持模型的简单。
◆拥抱变化
需求时刻在变,人们对于需求的理解也时刻在变。项目进行中,Project stakeholder可能变化,会有新人加入,也会有旧人离开。Project stakeholder的观点也可能变化,你努力的目标和成功标准也有可能发生变化。这就意味着随着项目的进行,项目环境也在不停的变化,因此你的开发方法必须要能够反映这种现实。
2.我们应该如何正确的进行结对编程?
结对编程(Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。 输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。 两个程序员经常互换角色。要进行正确的结对编程,首先要选择水平相当的人,因为不然的话我觉得所有的活基本上就会落在了一个人的身上,这样会使得结对编程没有意义。其次,我觉得要进行正确的结对编程,每个人都应该自觉做好自己的那一部分,这样会减少不必要的摩擦,使得项目可以快速的进行。最后,我觉得要进行正确的结对编程,应该尽可能的选择脾气对味,技术观点相近的人,这样结对会很愉快,而且会碰撞出很多火花,效率会明显提高。反之,就可能陷入很多的争吵,导致进度停滞不前,最终影响团队协作。
3.软件团队如何才能准确全面的找到需求分析?
1.获取和引导需求。
2.分析和定义需求。
3.验证需求。
4.在软件产品的生命周期中管理需求。
需求提出
主要集中于描述系统目的。需求提出和分析仅仅集中在使用者对系统的观点上。开发人员和用户确定一个问题领域,并定义一个描述该问题的系统。这样的定义称作系统规格说明,并且它在用户和开发人员之间充当合同。
需求描述
在问题分析阶段分析人员的主要任务是:对用户的需求进行鉴别、综合和建模,清除用户需求的模糊性、歧义性和不一致性,分析系统的数据要求,为原始问题及目标软件建立逻辑模型。分析人员要将对原始问题的理解与软件开发经验结合起来,以便发现哪些要求是由于用户的片面性或短期行为所导致的不合理要求,哪些是用户尚未提出但具有真正价值的潜在需求。
需求评审
在需求评审阶段,分析人员要在用户和软件设计人员的配合下对自己生成的需求规格说明和初步的用户手册进行复核,以确保软件需求的完整、准确、清晰、具体,并使用户和软件设计人员对需求规格说明和初步的用户手册的理解达成一致。一旦发现遗漏或模糊点,必须尽快更正,再行检查。
任务二:总结自己在项目的 可行性分析/需求分析/软件设计/实现/测试/项目验收/中学到了哪些“知识点”。
阶段 | 所学知识点的总结 |
---|---|
可行性分析 | 可行性分析是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。可行性分析应具有预见性、公正性、可靠性、科学性的特点。 |
需求分析 | 需求分析是要决定“做什么,不做什么”,需求分析是一个项目成功与否的关键,所以思想上一定要重视。在做需求分析时一定要一定要考虑全面,尽可能的满足用户需求,要做必要的调研。 |
软件设计 | 在软件设计阶段,系统学习了原型设计工具、画图工具等,了解了MVC设计模式、C/S与B/S结构等。 主要对前台的设计和数据库的设计,非常重要,只有前台的布局和后台的数据库设计的完善,才能在编写代码时不会目无头绪.减少后期的工作量. |
测试 | 测试主要有黑盒测试和白盒测试,黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。白盒测试也称结构测试,检测程序中的主要执行通路是否能按预定要求正常工作。 |
项目验收 | 项目验收,也称范围核实或移交(Cutover)。它是核查项目计划规定范围内各项工作或活动是否已经全部完成,可交付成果是否令人满意,并将核查结果记录在验收文件中的一系列活动。 |
任务三:结合个人项目/结对编程/团队项目的个人经历,谈谈心得。
刚开始上课时,我不知道这门课到底是做什么的,以为软件工程就是写代码,后来通过一学期的学习,知道这门课可以指导我们进行软件开发,刚上实验课的时候,第一个任务就是申请自己的个人博客并写一篇博客,原以为很简单,几句话就写清楚了,没想到还有一定的格式和规范,花费了很多时间在编辑博客上面。第一个项目为个人项目,由于之前的课程有基础,虽然功能、界面都比较简单,但基本功能都能实现,这个项目比较轻松的完成了,对于博客的撰写,只是机械的依照老师给的模板把每部分填了内容。
第二个项目是结对项目,项目是在个人项目上的改进和扩展,开展形式也从单人变成需要合作沟通的两人编程,这时候,感觉明显有些吃力,因为结对意味着这个项目需要两个人的思想统一,但在完成项目的过程中难免会有冲突,比如时间冲突、想法冲突、技术冲突等,如何有效解决这些冲突就很重要了,我们小组通过制定时间表,在项目整体框架上面进行讨论,项目实现上采取择优的方式一步步解决了这些问题,算是一次满意的合作项目。对于团队项目,从项目选题,进行项目需求分析和文档的编写、系统设计、详细设计、项目的编码及测试,亲身经历和感受了一个完整的项目的过程,通过撰写一系列的说明书,我了解了编写需求分析说明书、系统详细设计说明书、编码规范说明书的规范等等说明书的规范,学习了一些工具的使用,比如利用mockplus进行项目的原型设计,采用Visio进行项目的建模,在团队项目的过程中,我最大的收获是团队合理的分工 ,这会使得效率很高,让擅长这个技术的人拿到自己擅长的部分,对于都不熟悉的大家就一起学习,小组成员共同协作,共同探讨与研究,遇到意见不统一时大家要及时沟通;其次,对于文档的撰写,我明白了它存在的意义,在进行编码时,经常会忘记这个部分接口是什么、函数名怎么写、用到数据库的话,在数据库中用到的那个属性是什么,这时就会查阅写过的文档,文档不仅是对现阶段工作的总结,也为以后的工作提供保障。
在完成我们团队项目“酒店管理系统”中,从最开始的问卷调查,用户需求的分析,到《软件需求规格说明书》,到基于墨刀的原型系统的实现再到项目的系统改进,最后到系统的实现,这一路走来,每一步都走的不容易,期间也遇到了很多的问题,例如最开始的时候,用户需求分析团队成员的意见出现了分歧,为此我们再次调查了更多的用户后,小组经过认真讨论后达成一致,正是我们在前期的充分调研,才使的我们在后面的具体实现工程中游刃有余,在预期的时间内完成我们的项目。当然,实现过程也不是一帆风顺,在会议栏目编辑富文本框实现的时候,就遇到了麻烦,之前没有接触到,所以不知道如何去实现,在我不知所措的时候,我们的团队成员挺身而出,在他们的帮助下,我顺利的完成了我的任务。团队项目的实现除了学习更多的新知识外,我觉得更重要的是团队成员的相互合作,相互配合。这接下来的时间,我们会更加完善我们的项目。
任务四:总结这门课程的实践总结和给你带来的提升,包括以下内容:
1.统计在软件工程实践中,你完成了多少行的代码:
统计在软件工程实践中,我完成了大约2100行代码。
2.你在软件工程实践的各次作业分别花了多少时间?
实验 | 用时(h) |
---|---|
实验一 软件工程准备 | 3 |
实验二 软件工程个人项目 | 16 |
实验三 作业互评与改进 | 6 |
实验四 软件工程结对项目 | 16 |
实验五 软件研发团队组建 | 6 |
实验六 团队项目选题 | 5 |
实验七 团队项目原型设计与开发 | 16 |
实验八 基于原型的团队项目需求调研与分析 | 16 |
实验九 团队项目需求改进与系统设计 | 16 |
实验十 团队项目系统改进与详细设计 | 16 |
实验十一 团队项目设计完善与编码 | 25 |
实验十二 软件测试与Alpha冲刺 | 25 |
实验十三 Beta冲刺与团队项目验收 | 25 |
3.哪一次作业让你印象最深刻?为什么?
最让我印象深刻的是实验四软件工程结对项目。因为上一次我们的实验在个人项目,所以做结对项目时,我和队友冯婷秀首先就我们彼此之间的个人项目进行了点评,对我们两个中做的好的部分进行了整合,我们一起确定了项目的代码规范,一起对实验进行了需求分析,明确了在结对项目中我们需要的功能,确定了项目的基本框架,项目该如何开展和大体的用时时间,最后进行各自的编码,整合等。因为这是我第一次接触结对编程,所以我对这次实验充满了热情,印象也最深刻,通过结对项目,也让我了解到团队合作的重要性,以及在团队合作时我们应该注意的诸多事项,知道了在做一个团队项目时,双方交流、沟通的重要性,双方合作的重要性。
4.累计花了多少个小时在软件工程实践上?平均每周花多少个小时?
累计共花了160个小时在软件工程实践上,平均每周大约花10个小时在软件工程实践上。
5.你学习和掌握的新语言、新平台
语言:Java Web、Java、Markdown
平台:博客园、GitHub、中国大学MOOC、雨课堂
6.填写下表,总结一学期的学习中,你学习或使用的软件工程开发工具、开发方法和建模方法;
软件开发工具、项目管理工具 | 软件开发方法 | 软件建模方法 |
---|---|---|
墨刀、GitHub | 面向对象方法,Jackson方法,原型方法 | 数据流图,数据库建模,面对对象建模 |
7.其他方面的收获或提升
通过这学期学习,锻炼了我的编程能力、文档撰写能力、任务规划能力、团队协作等能力,最大的感触就是团结合作的力量比单打独斗的力量大,学习效率也更高,做出来的项目也会比个人项目更完善。遇到问题小组成员集思广益,互帮互助,最后解决问题,体会了完整的项目开发流程,使我对待每一件事情的态度更加严谨仔细。
任务五:你认为目前的课程存在哪些问题,你有什么更好的建议。
在本学期课程实验过程中,老师按照软件工程的开发流程安排指导我们实验,项目难度可以接受,项目前期的时间安排比较合理,但是到了最后编码实现时,由于到了期末,各科进入项目结交时间,要在一周内就完成项目的编码工作,有一定挑战,希望以后可以增加至两周。课程总体让我获益匪浅,学到了很多知识与技能。