软件工程实践总结

不知不觉软工实践已经结束了,在结束实践课程的后一段日子里,也验证了栋哥在这门课一开始就说的一句话:“别人正准备开始奋力赶软工的时候,我们就已经结束了可以全身心地投入复习”,舍友每天晚上赶软工,而我每天晚上可以赶复习。

除了高数、数据结构等一些硬课程,软件工程实践是为数不多的能够真正使用自己感兴趣的语言进行编程开发,并且实实在在地学到知识的一门课程,几乎所有的实践都投入到了实践课程之中,每天下课吃完饭回到宿舍就开始沉迷于代码无法自拔,其实不是因为时间赶,而是自己想做,所以学到了挺多知识。

一、开学初对于软件工程课程的想象、期望

对比现在的你和开学初博客开篇的课程目标和期待

在我的第一篇博客《软件工程的实践项目课程的自我目标》中有对这门课的期望和规划,对比现在:
  1. 对项目有总体的把握

“之前做项目的时候只是项目负责人每个时间段安排某个任务,就直接开始做而没有一开始对项目有个比较清晰的认识和把握,在项目初期有个清晰的框架对后期的细节修改有很大的帮助”

对比:这个预期总体上来说是达成了,因为和数据库打交道,所以对需求是十分的熟悉,对数据库的结构也比较了解,对每个用户觉得也有总体的把握,该实现什么功能、如何实现等等。
  1. PHP深度学习

“PHP是一种很优秀的语言,通过项目来学习各种框架,从而使PHP框架能够更加轻便的整合到项目中,为开发带来更大的便利,并且使整个项目的结构目录清晰,例如TP的MVC模式等等”

对比:经过两个多月的PHP开发,也算是从小小白变成了小白,学会了多维数组处理、文件打开/读取/创建/写入、Cookies、Session等等,算法处理、Excel导入导出等等,也算是达到了预期的目标
  1. 前端深入学习

“后台和前端是不可分割的部分,虽然后台和前端的开发可以同时进行,但是如果对前端HTML\CSS\JS没有了解学习的话,和前端的配合会很不默契,在后期功能的迭代上也会有较大的修改”

对比:没有对比就没有伤害,前端是个大坑慎入!写了四个个人信息的前端界面,但是自适应问题没有解决,倒是JS的基本知识学会了比较多,打算寒假继续学习

总结这门课程的实践给你带来的提升

  1. 学习和使用的新软件

    1. Github Desktop

      对于日常的commit和push、pull,图形化界面的Github桌面版其实已经绰绰有余了,在日常的提交我会使用图形化界面,但是如果要合并分支、处理冲突、版本会退等等我还是会使用命令行进行操作。

    2. Mou

      Mac版本下的md编辑神器,我的每一篇博客都是现在Mou上进行编辑,然后在发布到博客园上,操作简单,而且左右两边可以实时查看编辑情况。

    3. PhpStorm

      一款PHP集成开发工具,以前都是使用Sublime Text码代码,自从被安利使用了PhpStorm后就停不下来了,随时可以帮助我对编码进行调整,运行单元测试,个人感觉对开发效率的提升帮助很大。

    4. ShadowsocksX

      有时候遇到问题需要FQ出去找资料的时候,使用的FQ神器,刚好有西二的“飞机票”,完美FQ。

      其实这些软件都不算新学会的软件吧,因为之前在开发项目的时候都有使用到,并且相对比较熟悉了

  2. 学习和使用的新工具

    1. Git Shell

      其实要学会使用Github,还是需要掌握Github命令行的使用,图形化界面固然有它的方便之处,但是也有许多功能是图形化界面无法实现的。Github是一门大学问,但是使用起来并不难,在看完教程后自己动手,经过一学期的软工实践也差不多能够熟练使用命令行进行操作了,收获点之一。

    2. Postman

      Postman其实不算一个工具吧,应该算一个插件,测试接口的神器,可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的http请求,但是使用有个前提,就是必须要下载chrome。

      Postman在以前已经使用了比较多了,但是对Git Shell的了解和使用比较熟练了,以前使用图形化界面操作比较多,软工课因为代码量较大,有时候会容易出现莫名其妙的冲突而图形化界面无法解决,就学会使用shell来处理冲突等一些问题

  3. 学习和掌握的新语言、新平台

    1. PHP

      从大二下暑假开始学习的一门新语言,入门难度不大,暑假使用php进行项目开发后只能说对php有个入门的了解,反到是在软工实践课程中,对php才有了更深入的了解。

    2. ThinkPHP5.0.1

      虽然以前使用过ThinkPHP3进行开发,但是ThinkPHP5版本的整个框架的布局完全颠覆了以前的版本,其中的语句也更加接近原生化语句,所以是一个新学到的知识,相比于以前的版本,效率更高,安全性更高,项目的布局也更加的合理。

    3. JS

      作为一名后台程序猿,怎么能不懂一些JS呢!在开发过程中,才逐渐意识到后台程序猿也是需要懂得一些JS的知识的,有时候一些请求可以自己实现和测试,寒假决定好好学一学JS。

  4. 完成代码量

    和伟炜负责系负责人的页面和后台实现,因为是功能比较多的一个用户角色,所以代码量会比较大,我还实现四个用户组的个人信息界面和个人信息修改界面的功能:

    1. 总代码量:3274行 //包括注释以及空行

    2. 有效代码量:2800+行 //去除注释及空行

    3. 完成的issues和commit纪录统计:

  5. 学习和掌握的新方法

    以前尝试过前后端完全分离和前后端半分离两种开发模式,各有各的好处,但是在经过软工实践后,个人感觉前后端完全分离的开发模式可能比较合适,虽然程序猿的工作量会增大,但是整体的可移植性强,日后如果需要进行修改,改动的地方也不多,接口的可利用率更高。

  6. 其他的提升

    1. 团队合作意识更强了,一个项目能否顺利的进展是完全离不开团队所有人的合作,学会如何和多个队友进行合作开发

    2. 代码的命名规范,尤其重要,不然很容易出现在自己这里能够运行,一到其他队友那里就无法正常运行的问题

    3. 许多php处理的技巧,比如字符串、Excel导入导出、算法调用和格式处理等等

    4. 解决bug的能力,查阅资料的能力都有得到提升

二、项目实践中的经验总结+实例/例证结合的分析

  1. 事先统一路径,这是一个团队的合作,不是一个人的战斗,每个人放项目的地方可能有所不同,不统一路径的话是根本无法继续往下开发的,当然这里的统一路径不是指所有人放项目的地方要一模一样,而是相对路径:

    1. 在我们的项目中,html页面调用css、js样式时,统一使用{{Think.const.OLD}}/css/xxx.css{{Think.const.OLD}}/js/xxx.js,这样在每个人都能正常显示

    2. 而接口调用的话统一使用{{Think.const.PREFIX}}/控制器/方法名/参数

  2. 要写详细的接口文档说明,前端程序猿在对接接口的时候才知道调用方式、所需参数、返回数据等等信息

    1. API接口文档说明采用统一的格式

    2. 接口说明链接

  3. 不要多人同时对一个文件进行操作,极其容易出现冲突,有一些文件需要加入到忽略中,不然也极其容易出现冲突

    1. 我们将运行时产生的临时文件、上传文件、缓存等加入了忽略中,避免其他人在pull的时候出现冲突

三、对下一届实践的建议、期许

  1. 强烈推荐还不会项目开发但是又想学会如何开始的同学选软工实践课。这门课会一步步的带你走进项目开发的大门,从最开始的需求确定、原型设计、编程、测试,了解一个项目的开发流程是什么样的,什么阶段该开展什么工作,课程会指明一条学习的道路。

  2. 强烈推荐想提升团队合作意识的同学选软工实践课。要在一个多月内开发出一款能用的app或者网页,光靠一个人是远远不够的,需要六七个人的通力协作,每个人的编程风格不同,学会如何合作是很重要的,这在以后的工作岗位上是很实用的。

  3. 推荐想要提升项目开发能力的同学选软工实践课。在项目中可能会碰到各种千奇百怪的bug,或者你从来都没有实现过的需求,要想解决这些问题,就需要不断的查找资料、学习和尝试实现,对编程能力的提升也是巨大的。

  4. 强烈不推荐只希望混分数混学分的同学选软工实践课。就算找到了大腿,分数中还是有很大的比例是需要自己单独完成的,而且在团队编程中,每个人的个人分数都是由老师根据PM给的分工比例来给分的,所以想混过去时很难的。

四、我的团队 - 我说的都队

  1. 成员:陈燊、许玲玲、胡心颖、王婷婷、陈齐民、黄伟炜、郑扬涛

  2. 团队特色:有四人是西二在线工作室成员,两位acm算法大佬,服务外包国赛中拿到好成绩的大牛,每个队友都是大腿,在开发过程中紧紧的抱住队友的大腿不放

  3. 团队发展:

    1. 萌芽阶段:在新学期还没开始的时候,选课阶段我们就初步组建好了团队了,//先下手为强,每个人对其他人的能力和技术都没有很好的认知,所以期初每个人有简单的介绍自己会的东西;因为一开始的软工课主要是以个人作业和结对编程作业为主,所以团队的磨合并未开始。

    2. 磨合阶段:磨合阶段其实是我们团队最困难的一个阶段,曾经出现两次“危机”,一次是在选题的时候,因为每个人有每个人想做的东西,导致迟迟没有定下来开发什么;/但是这个问题在我们决定做导师分配系统后就迎刃而解了/;另一次是在决定要做导师分配系统的安卓端还是PHP端的时候,但是两次“危机”我们都协商后解决了,在接下来的合作中也是愈挫愈勇。

    3. 规范阶段:这个阶段是最重要的阶段,我们团队在这个阶段付出了极大的努力;详细的撰写了软件需求规格说明书,介绍自己所会的东西,PM根据每个人的能力进行了角色安排、总体的任务分工,制定了PHP、JavaScript、HTML的编码规范,每个人对自己的位置和任务都十分清楚,团队向前迈进了一大步!

    4. 创造阶段:PM的创造能力太可怕了,每天邮箱都会发来好几封邮件:“PM为你创建了一个新的issue”,队友的创造能力也是可怕,每天工作进度汇报的时候都完成了许多的任务,尤其是在团队屡次拿到好成绩的时候,我都觉得我还能大战代码三百回合;在Alpha版本和Beta版本的演示中我们组都完成了预期的功能,由于PM的“极度完美强迫症”,我们也考虑到了许多细节之处。创造是一种从无到有的过程,创造的不仅仅是项目的开发,还有内心的成就感和团队的“战友情”。

五、有关代码质量的的经典论文的阅读笔记

作品:《Quantitative evaluation of software quality》

摘要:质量保证、软件质量、软件测量和评估质量指标、质量特性按目标管理软件标准、软件可靠性测试,本文报告的研究建立了一个概念框架和一些关键的初步结果在软件质量的特性分析。其主要结果和结论是:明确关注软件质量特性可以大大节省软件生命周期成本。当前的软件状态对我们自动和定量评估软件质量的能力施加了特定的限制。开发了明确定义的,良好分化的软件质量特性的确定层次。其高级结构反映了软件质量评估的实际用途;其较低级特性与可以执行的实际软件度量评估密切相关。已经针对其潜在益处,可量化性和易于自动化而定义,分类和评估了大量软件质量评价度量。已经确定特定的软件生命周期活动对软件质量具有显着的影响。最重要的是,我们认为本文中报告的研究首次提供了一个清晰,明确的框架,用于通过一致的和相互支持的定义.

  1. 就像论文中所说的,软件的质量特性可以大大节省软件生命周期的成本,而软件质量的高低很大程度上取决于代码质量的高低,我们在进行Alpha版本开发前,团队就针对JS、PHP、HTML做了详细的编码规范,旨在从一开始就为编码质量做好规范,但是即使按照编码规范来进行开发,难免还是会有一些出入,代码质量不仅仅取决于编程人员的素质,也取决于团队合作中是否能够很好的制定编码规范以及是否能够很好的遵循规范进行开发。

  2. 一个好的接口具备稳定性、可扩展性,使用起来要简单方便效率高,所以对代码质量的要求其实是很高的,在Beta版本的开发中我也有注意到这个问题,遇到一个问题就写一个接口的方式极大的增加来数据库的负担,而且接口也不够优雅,所以在接口的设计上需要细细琢磨,比如在设计导师列表和学生列表接口的时候,可以设计成一个接口,通过请求的参数来返回不同的信息,这样的接口才更佳灵活,而不是写成两个接口。

六、我学会了软工实践

  1. 研发出符合用户需求的软件

    导师智能分配系统的使用时间在每一年级的大二下学期近期末,所以目前所处的阶段仍然在于测试阶段,我们已经模拟测试过计算机实验班73名同学的选岛,导师选择/拒绝学生,查看结果,对结果进行调整,结果导出等功能,并且也让身边的部分同学试用选导系统,基本上没有发现重大的bug。

  2. 有计划、有安排的项目开发

    在项目开始前,组长对项目有总体的规划,进行了详细的需求说明分析讨论,再确定需求之后进行原型设计,经历Alpha版本和Beta版本的开发,并且在两次版本发布之后对项目都进行了维护,修改一些细节bug;在Alpha版本和Beta版本的整个开发过程中,每个人都有自己的任务分工,每个人都需要按时完成issues,并对完成issues进行说明,因为PM的合理分工,基本没有熬夜,也没有延迟交付软件,都预留了2-3天的时间进行项目测试。

  3. 软件可维护、可继续发展

    1. 项目Github链接 安装php环境后,把仓库拉下来后就可测试,项目已放置在服务器上,也可以直接登录网站进行测试

    2. 接口说明链接 有接口说明文档,请求方式、所需参数、返回数据格式及说明

    3. Github中有提供用户使用手册,详细地说明每个用户组的功能和操作步骤、流程:

    4. 代码中复杂的部分都有做注释,即使有新的程序猿接手项目,也能很容易的看懂代码,接着项目继续开发:

七、一只需要代码拯救的程序猿

我是陈齐民,“我说得都队”中的一只患有重度强迫症的程序猿,和其他程序猿不同的是我热爱体育,完全不喜欢宅在宿舍,但是每当进入代码的世界,我又沉迷代码无法自拔,一心只想解决bug;完美主义者让我的代码非常的整齐,以后看到整洁明了的代码,那就一定是我写的了!

软工课虽然结束了,但是编程开发的路还需要我一直走下去,我要扛着这代码一路拼下去,加油!

posted @ 2016-12-29 22:49  猿鸣  阅读(866)  评论(1编辑  收藏  举报