软件工程--提问回顾与总结

项目 内容
这个作业属于哪个课程 2019春季计算机学院软件工程(罗杰)
这个作业的要求在哪里 作业要求

1、以前提问题的博客

软件工程第一次阅读

2、对自己曾经提出的问题进行解答和分析

  • 问题1:关于如何权衡高层次的科研和工程基础。

    我认为两者是可以兼顾的,之前由于基础知识的欠缺,做很多学术方面的工作都很吃力,现在经过两个学年的学习,计算机方面的综合素质也得到了锻炼。在接触实验室的过程中,发现很多领域都需要从头开始学起,特别也需要学习一些基础的数学知识,有些在本科也是涉及不到的,的确如书中所说,要把底层的问题解决后再去解决高层次的问题。在学有余力的时候应当多去实验室接触科研,也能提前知道自己适合哪方面的研究。

  • 问题2:对结对编程的质疑,是否真的能提高编程效率?

    经过自己的实际操作,结对编程是可以提高效率的。在团队项目中,我和另一个队友写后端,由于我们两个人刚开始接触ruby这门语言,在实际操作中非常不熟练,我们采取了结对编程的方式,两个人的思维能力都提高了很多,能及时发现对方的错误,或者在某个方面提出更好的实现方法。虽然最后写出来的代码被大佬否定了。即使是很少时间量的结对编程,也能从对方身上学习到一些提高编程效率的方法。

    在阅读相关论文"Case study: using pair programming in development of a complex module."后,论文提出了结对编程需要满足的条件:

    1、结对成员必须在一些编程观念上达成一致

    2、结对成员之间必须保持良好的交流,愿意相互合作

    3、结对成员技术知识必须具有可比性。如果一个经验丰富的成员和一个没有经验的成员一起工作,他们可以建立良好的指导关系,但他们不同的经验水平不利于有成效的结对编程。

  • 问题3:关于敏捷流程中的Backlog如何制定和评估?

    在我们的团队项目中,Backlog的制定和评估由PM来完成,我们在产品的三个阶段都制定了详细的需要完成的功能需求。alpha阶段,我们遵循mvp原则,我们alpha版本的目标便是以较高的质量实现最核心的社团展示相关功能。尽管alpha版本的功能与某些组相比略显简单,但是我们功能的完成度更高,从结果来看,我们的做法是正确的。Gamma阶段我们仍有很多可以实现的功能(之前版本功能的拓展,社联希望我们支持的功能,社团管理人员希望我们支持的功能,一般用户希望我们支持的功能),我们最终综合实现成本、收益分析、后续维护问题以及用户需求调研进行了筛选决定了gamma阶段实现的功能。锻炼了软工的需求分析能力。

  • 问题4:在创新中为什么一些先行者会最后在竞争中被淘汰呢?

    一件产品是否能在竞争中赢得胜利其实是有诸多方面的原因的。先行者能够抢占一定的先机,但如果后续的运营跟不上,很可能被后来者赶超。

    我们的小程序也借鉴了之前南京大学的社团小程序,发现他们学校也有两个这样的小程序,而那个先行者运营的并没有很好,最终被取代了,后来的社团小程序和学校官方进行合作,用户活跃度明显高出很多。有效的竞争策略加上公司资源的合理配置和使用能够增强一个公司的竞争力。

  • 问题5:关于沉没成本,如何砍掉功能?

    在Gamma阶段我们的团队项目有一个爬取公众号链接的功能没有做出来,这个功能之前问过从前的开发人员也发现实现的难度很大,而且经过我们的讨论后,发现该功能也并不是那么必要,可以让社团负责人自己上传链接。

    这个功能实际上在前两个阶段都一直在摸索,但没有找到合适的解决方法,可以说在这件事情上花了一些沉没成本,但如果我们一直守着沉没成本不放,只会给继续增加投入的成本而没有任何收益。所以在砍掉新功能的时候要考虑沉没成本,也不能过分迷恋沉没成本。

    从决策的角度看,以往发生的费用只是造成当前状态的某个因素,当前决策所要考虑的是未来可能发生的费用及所带来的收益,而不考虑以往发生的费用。

    人们在决定是否去做一件事情的时候,不仅是看这件事对自己有没有好处,而且也看过去是不是已经在这件事情上有过投入。但是这些不可回收的支出其实对未来的效益并没有改善。

  • 新的问题:

    关于团队中的角色转换和转会,究竟有没有这方面的需要呢?我们团队进行了角色的转换,但大家都需要花费很长的时间进行新知识的学习,是不是降低了效率呢?

3、团队项目项学到的“知识点”

需求

需求分析是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。

我们在每个阶段都会进行用户需求的调研,发放问卷等,开组会进行详细的需求分析,每个组员表达自己的看法,并且由PM撰写需求分析文档。

在后续阶段也进行了需求文档的维护和更新,使得团队成员对需求的理解更加深入。

设计

我们团队由PM进行了产品的原型设计,把设计稿交给前端进行详细的设计。把ui设计和前端进行了分离,设计出来的产品也更加美观。

实现

学习了ruby on rails的开发框架,学会使用orm模型框架的后台。

同时也参与了一些前端的工作,在接口设计部分向大佬学习了很多经验,注意一些接口的命名规范等。我们普遍使用的是RESTful的接口命名规范,方便前后端进行通信。

测试

在ruby on rails中,我学会了单元测试的一些框架,并用此找出了代码中的很多bug。也在ruby mine ide中学会使用了代码覆盖率的插件。同时我也对服务器进行了压力测试,使用了ab测试工具。

发布

由于微信小程序是腾讯的平台,有诸多方面的限制,我们实现一些小程序的功能,例如跳转到公众号的链接,主动推送微信消息给用户,就需要认证成为企业小程序,还有审核等问题需要花费很多时间,这些都需要提前进行规划。

维护

软件维护是软件生存周期的最后一个阶段,是在软件交付使用后,为了改正错误或满足新的需要而修改软件的过程。软件维护工作的目标是:不断地、持续地改进、扩充、完善软件系统,以提高系统运行效率,并尽量延长系统的使用寿命,为用户创造更大的价值。

我们在发布之后也及时收集用户的反馈,发现了一些bug并及时修复。

4、心得体会

通过软件工程这门课,我有机会接触一个项目的完整开发,也速成了一门新的语言。

在alpha和beta阶段中,我负责的是后端的开发工作,我们组有一位有开发经验的同学。在一开始我和另一位同学没有ruby的开发经验,还处于学习阶段。在随后的开发工作中,我们三个也一直在磨合,由于自己的开发经验不足,导致很多地方的代码写的很丑,不符合规范,也没有使用最好的实现方法,被大佬指正出来并进行改正。有时候问题没有及时反馈,会导致后面大规模的返工,降低了开发效率。在这个过程中也明白了团队合作的重要性,团队成员要如何在项目中分工等。

在gamma阶段中,我开始学习前端的开发,实现了两个页面的制作,获取formid等功能,对前后端的交互也有了更深一步的了解。

在这门课真的收获了很多,并且遇到了一群靠谱的队友和特别负责的PM芬姐,在这里也感谢我的队友们和老师助教,希望软工越来越好。

posted @ 2019-06-24 21:04  ZACKERrr  阅读(190)  评论(0编辑  收藏  举报