软件工程课程总结
一、项目开发
目的:将软件扩展为Web网站在线游戏,支持用户管理和成绩的记录。代码见:https://github.com/lxxlccly/scds/tree/cs
1、登录界面如下,可以进行用户的注册和登录,也可以进行管理员的登录,当密码错误时会有提醒,密码不足六位时也会进行提醒;
注册示例:

密码错误示例:

2、管理员登录示例,管理员登录成功后跳入账号管理界面,如下图所示,管理员可以对用户账号及其密码进行修改,可以删除用户账号,也可以添加用户账号:

3、用户登录成功示例,登录成功后进入游戏主界面:

4、点击出口成诗则可进入出口成诗界面,如下图所示,点击”查看答案“按钮则会弹出相应的答案,并且将该词的颜色设为红色,不可再次点击;回答正确之后该词的颜色变为灰色,也不可再次点击;高亮色表示正在回答的词,界面最上方表示当前的回答进度,左上方则表示剩余时间以及每次回答之后的反馈和得分情况。

当超时或完成所有回答时跳入”回答情况总结“界面,如下图所示,主要显示本次回答情况以及最终得分。

5、点击点字成诗,进入点字成诗界面,如下图所示,可以通过点击相应的字来进行回答,可以通过点击”x"删除刚才点击的字,也可以点击“下一题”直接进入下一题,其余功能与出口成诗类似,当超时或完成所有回答时跳入”回答情况总结“界面。

6、点击你说我猜,进入你说我猜界面,如下图所示,可以通过在文本框中输入答案进行提交,其余功能与出口成诗类似,当超时或完成所有回答时跳入”回答情况总结“界面。

7、点击查询成绩记录时进入成绩记录界面,如下图所示,用户可以删除某一条记录,也可以直接清空所有记录。

二、文档整理
见:https://github.com/lxxlccly/scds/tree/cs
三、个人总结
1.请回望第一次作业,你对于软件工程课程的想象。
1)对比开篇博客你对课程目标和期待,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
首先,在项目管理方面,我觉得已经达到了自己的期待和目标,学会了基本的软件仓库管理,项目合作开发,在程序编写方面,也已经学会了一些规范操作,还掌握了一些关于数据库、文件存储、人机交互的知识,总体上个人在这方面的能力有很大的提升;不足的地方主要是在算法分析方面还有很大的欠缺,程序执行效率可能也不是很高,因为在平时自己专业内编程计算东西时,计算量非常大,算法不好的话就会导致浪费很多的计算资源,此外,还没有掌握足够的解决错误的意识,在程序报错时,有时候一个问题要解决很久,浪费很多时间。
2)总结这门课程的实践工作和给你带来的提升:
在这门软件工程实践中,算上自己私下里做的一些小练习,总共完成了大约2500行的代码,软工实践的各次作业分别花费的时间如下:
| 作业 | 花费时间 |
| 第一次作业 | 约30h |
| 第二次作业 | 约19h |
| 第三次作业 | 约15h |
| 第四次作业 | 约13h |
| 第五次作业 | 约12h |
| 第六次作业 | 约12h |
| 第七次作业 | 约14h |
| 第八次作业 | 约8h |
| 第九次作业 | 约12h |
| 最后一次作业 | 约40h |
累积大约花了235小时在软件工程这门课上,平均每周大约花费了18小时,与第一周预想的“打算平均每周拿出十几个小时用在这门课上”差不多。其中,印象最深的还是第一次作业,因为装各种软件、配置环境的时候,存在很多问题,不知道怎么操作,而且还报错,尤其是试了几个方法都无法解决的时候,就觉得很绝望。此外,在第一次编写程序的时候,每一个简单的语法都要去查资料,每一个语句都是参照菜鸟教程写出来的,当时觉得非常困难,而且报错的时候解决一个问题可能比写代码的时间还要长,有点出乎意料。
总的来说,通过这门课程的学习掌握了很多新的知识,在一定程度上掌握了python这门语言,学会了利用github对代码进行管理,学会了利用Tower对项目进行管理,学会了用visio画相应的UML图,学会了利用数据库对结构化数据进行存储和读取,学会了利用txt、json文件等对数据进行存储和读取,学会了简单的利用python对网页数据进行爬取的技术,学会了简单的人机交互界面的实现,学会了HTML、CSS、JS等网页的编写以及网页与服务器之间如何建立连接、如何进行数据传递。其中,最有利于后续工作的就是学会了python这门语言,以前主要是利用成型软件进行专业领域的仿真计算,然后用MATLAB分析结果,很少接触到这种需要自己编程来进行处理的问题,现在学会了python,在以后工作中可能会将其应用到建模仿真计算中去。
2. 写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
1)编程能够让人产生很多快乐和烦恼,就比如说刚开始使用python这门语言的时候,连一个语句都不会写,写一行就要查一次资料,尤其是有时候参照资料上的例子写出来的代码还总是出现错误,也不知道自己怎么就错了,让人很苦恼,但当每一次把这个问题解决时,都会给人带来很高的成就感,尤其是每一次完成任务的时候,感觉自己学到了很多的东西,心情就会非常愉快。
2)所有的编程人员都是乐观主义者,在编写程序的时候,我们都会对自己的代码有很高的期待,希望没有错误出现,但在实际编写过程中,难免存在一些思想上的缺陷,导致出现一些bug。比如说在编写诗词大赛程序的时候,我们小组是从json中读取结构化的一些诗词,然后从中随机挑选出诗句,编写完这一部分代码后,运行一两次也没有出错,就决定自己程序没问题,很不错,但重复运行多次之后偶尔就会发生一些错误,比如列表索引超出下标范围,后来就发现从网上获取的json文件中部分诗词只有题目,没有句子,就导致产生了这个bug,然后就修改了代码解决了这个问题,所以在我们写代码的时候要给自己预留一些调试、修改bug的时间,有自信是好的,但不要太过自信。
3)由于课程人数比较少,所以我们这几次实践过程中小组人数都在2人或者4人,属于小型精干队伍类型,大家之间的沟通也比较容易,成员之间很快就能够磨合,但在一些大型软件生产过程中,这样的队伍开发过程也许会比较慢,可能需要像“外科手术”这样的队伍才更加能够提升软件开发的效率。
4)在团队项目实践中,组织中的交流是网状的,大家建立了群组,也互相添加了微信,所以不仅可以利用Tower进行任务分配,也可以直接利用微信等工具随时在小组中或对个人发起交流,网状的交流模式更利于大家之间的合作,能够互相了解成员之间的工作情况,帮助同学解决当前遇到的困难,给出自己的建议。
5)在编程过程中采用了结构化编程,这种方法减少了bug的产生,更加利于后续程序的调试和修改。比如在团队开发的诗词大赛游戏中,对每一种游戏模式都单独建立了一个类,在每个类中,对每一个稍微复杂一点的功能都单独编写成了函数进行调用,这样不仅提高了程序的可重复性使用性能,而且在调试过程中,更加容易找出存在问题的位置,从而对代码进行修改。
6)我们的开发更偏向于像是一种迭代开发的过程,从最初的点字成诗,逐渐扩展到了出口成诗、你说我猜,最后建立了游戏界面和网页在线游戏,一开始的目标可能没有那么明确,是在开发过程中才逐渐添加了一些新的玩法和新的功能,在实际软件开发的过程中,可能在一开始就会给出详细的目标和计划,然后一步步进行完成。
3. 对下一届实践的建议:
1)对于后来的学弟学妹,你有什么想建议、告知和期许想要告诉他们呢?
建议先在网上了解了解别人是通过什么方法或者有什么好的网站是大部分程序员常用的问题解决措施的来源,这样在自己调试程序过程中遇到问题时更加容易解决。
2)你认为一个组的人数应当在多少比较合适?
个人感觉一组四到六个人都比较合适,人数太多的话在团队合作开发过程中容易出现一些问题。
3)个人/结对/团队作业应该控制在怎样的规模?
当前的规模挺合适的,每周的任务基本上也比较匹配。
4)本次课程中印象最深刻最要感谢的同学是谁?为什么?
本次课程中印象最深最要感谢的同学是刘斯杰同学,因为从他的程序中有很多值得学习的地方,自己的程序也在这基础上进行了改进,更加精简,此外参考他的爬虫、数据库导入程序,基本上掌握了这方面的一些简单操作。
5)实践活动还应该增加哪些环节?
可以适当增加一些算法分析环节,了解不同算法下程序的执行效率有何不同,形成更好的编程思想,从而知道什么时候选择什么样的算法可能更加合适。
4. 分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》讲义“人、绩效和职业道德”)
我们小组的模式更像是一种业余剧团模式,在每一周老师布置任务后,通过分析得出小组本周应该完成什么内容,然后安排给每一个成员,每个成员负责自己那一部分程序的编写或者资料的查找,每个人都扮演着不同的角色。在团队的萌芽阶段,大家建立了微信群,添加了微信好友,进行熟悉,接下来互相了解了之前两人组时大家完成的工作内容,程序进展到什么程度;在团队的磨合阶段,分析了未来软件的目标,怎么对两组程序进行融合,还需要添加哪些新的功能,然后互相了解了大家的编程能力(看谁对哪一块更熟悉),并根据大家的情况合理的进行分工;在团队的规范阶段,每周大家根据自己的任务安排完成相应的任务,有什么不会的或者有什么建议都可以在群里或者对某个人提出来进行沟通交流,互相进行探讨,互相帮助,从而完成每一周的任务;最后达到了团队的创造阶段,因为大家之家已经互相了解,目标也高度一致,就是为了完成这项任务,在遇到困难时大家都能够携手合作、共克时艰,有什么新想法都能够及时讨论,互相支持、互相帮助,基本上也没有出现什么矛盾。
在整个软件开发过程中,大家没有因为任务的不完全平均而出现任何的分歧,每个人都能够及时完成自己的任务,小组成员之间都比较配合,也能够互帮互助,在程序员自身道德方面都是值得肯定的;在绩效方面,因为本来就是一个课程的软件项目,每周每个人都有具体的任务安排,只要大家都能够按时完成任务,我觉得在绩效方面大家就没有太大差别,都是值得肯定的。
5. 怎样证明你学会了软件工程?
首先,学会了利用UML图对整个项目开发过程进行指导(见word文档中的模型图),软件的开发首先要获取需求,然后进行用例建模、面向对象分析设计,接下来逐步进行开发,最终建立交互界面,在实际软件开发过程中,还将有交付、维护等相应工作;在python程序编写方面,学会了建立“类”等进行结构化编程,学会了利用PYSQL和json等对结构化数据进行存储和读取,学会了不同模块之间的引用以及测试代码的实现,样例:




在配置管理方面,学会了利用github对不同项目的代码进行存储、更新,学会了建立分支对开发过程进行管理,学会了团队合作开发时如何利用github对代码进行修改、合并,尤其是大家同时操作同一个文件时如何解决代码冲突问题,样例:


在项目管理方面,学会了利用Tower对大家进行任务分配,及时掌握大家正在做什么、存在什么问题以及完成得怎么样。样例:


浙公网安备 33010602011771号