软件工程提问回顾与个人总结

学期初提问博客

传送门

对当时的提问进行回答

结对编程

在结对编程的模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排地坐在一台电脑前,面对同一个显示器,使用过同一个键盘、同一个鼠标一起工作。

回答:

亲自体会了结对编程之后才会真实的体会到,沟通与交流的重要性,这其中主要的一点就是一起编程的过程中的交流。当然,在写代码之前的沟通也很重要,那关乎结对项目的整个问题,所以确实像书中所说的,在一起编程可以沟通起来方便很多。

产品的周期

随着时间的推移,这几类功能也会发生变化,例如手机的多点触摸曾经是“惊喜”的功能,后来是所有厂家竞争的核心功能,再后来已经是最基本的功能了。

回答:

这个问题我这个学期学习了经济管理中的产品设计之后有了一些自己的看法,对于客户来说,兴奋需求是永远无法满足的。所以开发者不断地了解客户,客户也会在潜移默化中将兴奋需求转变为期望需求,开发者应该从期望需求的角度来设计与管理产品的周期。

关于 goto 语句的使用

函数最好有单一的出口,为了达到这一目的,可以使用goto。

回答:

这个问题是一个同学给我解答的:书中写的是“函数最好有单一的出口”,在函数退出之前,可能还需要做一些清理工作。如果不用goto,在每个return语句前都需要把做清理工作的代码加上,这样就会出现重复的代码,并且比较繁琐,容易出错。

用户的体验

我们的软件要为新手和专家提供可定制化的设计。一些操作方式,如快捷操作,用户可以自行调整。我们还应该为存在某些障碍的用户(色弱、色盲、盲人、听力有缺陷的用户、操作键盘鼠标不方便的用户等)提供一定程度的便利。对于长期使用某个软件的用户,软件应该能适应用户的使用习惯,让用户越用越顺手,最后产生感情上的好感和忠诚度。

回答:

这个问题还是从经济管理中得到一些启示,如果我们从经济管理的供应链的角度看这个问题(一个不是很恰当的比较),那么我们考虑的就是产品的纵向与横向的设计。在产品的市场竞争优势中有一种优势是集中化的策略,顾客的集中化也是重要的一方面。但是在这个问题上还是要做到权衡,所以最直接与有效的方法就是通过使用者的反馈。

项目经理

软件团队里除了能写代码、测试代码和画图做设计的成员,还有一类角色,不做上面这些事情但也很重要,我们叫他们项目经理——PM。

回答:

一个优秀的项目经理完全是可以承担一部分的开发的任务的,不过这是相对于一个小的团队来说,比如说我之前所在的的那个 PureMan 的兼任项目经理与开发的吴昊同学就很优秀,参与到开发中还可以更好的把控整个项目的进度。

IT行业的创新

这个想法看起来没什么错,我们不就是为了成为某个领域的专家,才来上学,拿学位,希望拿到学位之后成为专家,然后再开始这个领域的创新?但是统计数据表明,70%的创新者说,他们最成功的创新,是在他们的拿手领域之外发现的。

回答:

这个问题我是在读了吴军老师的浪潮之巅之后,有了一些自己的见解,也算是解决了自己的当时的困惑吧,IT行业的创新,不仅仅是行业内技术的创新,还可以是与外界技术的结合的创新,还可以是商业模式的创新。

在实践中各个阶段学到的知识点我学到的知识点

需求阶段

软件开发是一个过程,我希望他是一个螺旋

需求阶段更多的了解客户,毕竟一切都是为了使用者,我们的目标就是提供更好的服务,所以要撤离知道需求是什么,就必须去了解客户,去了解市场。

设计阶段

这一阶段除了要考虑到客户之外,我们还要从开发者的角度看这个问题。从客户的角度,设计的目的就是尽最大的可能去满足客户的需求,这一阶段还可以达到使用者的兴奋需求,也就是需求者意料之外的惊喜,但是考虑到开发者的角度,以及其它因素,时间成本,人力成本等等,所以需要做出一些权衡。

实现阶段

实现阶段主要就是工程的推进,这个过程中,开发者要对自己的时间把握以及过程的推进有一定的掌控,既要保证质量,又不能开发的太慢,导致整个过程都滞后,这个过程也需要开发者自己权衡与考虑。同时要注重团队开发之间的合作与交流性,比如接口这些关键的地方。

测试阶段

开发的过程很重要,但是测试的过程同样很重要。因为没有人能够写出完全没有bug的代码,更何况是团队合作。测试的过程是对项目的进一步保证。测试不仅仅要从产品的需求的角度来看待成品,还有很多需要测试的地方,不是一个客户的需求,但是当客户组成一个群体的时候,它就变成了一种需求。

发布阶段

发布阶段,发布阶段主要的问题是平台的选择。如果不借助宣传以及平台的影响力的话,很难实现大规模的推广产品。所以平台的选择很重要,所以在开发的阶段还要考虑到之后平台的需求,也就是推广的需求。

维护阶段

维护阶段,主要是后期阶段,有一些项目只有前端没有数据库的维护起来就很简单,比如 PureMan 的博客园手机 APP,但是我之后参与的葫芦娃的神经网络可视化的,就遭遇过服务器被攻击的情况,不过还好当时没什么重要的数据,代码也使用 GitHub 管理,只好重新部署。

心得

学习方面的心得体会

我在软件工程开发的过程中,担任的角色是测试者的角色。我在博客园手机 APP 开发度过了 \(\alpha\) 阶段,然后在生成深度学习代码的网站小组度过了 \(\beta\) 与 $\gamma $ 阶段,这两段的测试分别是安卓软件的测试,与网页的测试。这两个阶段的测试,有些相同又有些不同。

相同之处

  1. 前端的测试都是以组件为基础测试,组件之间的相互作用是实现功能的基本方式
  2. 需要对接口进行测试
  3. 都可以使用自动化的方式进行功能测试

不同之处:

  1. 第一个不同是使用的软件不同,但是测试方法相似
  2. 对网站的测试,需要对后端的服务器测试,博客园APP本来也需要测试,只不过他调用的是博客园官方的API,
  3. 对 Django 框架下的代码做单元测试,

在功能方面,很难做到万无一失,但是天网恢恢,疏而不漏,我采用的是使用bug树的方式进行测试,但是这个方式也有局限性,那就是在我们这种产品功能较少的情况下,能够完整的覆盖功能,但是对于情况复杂的软件,使用的话,就会过于冗余。而对后端的测试,自己的体会就是,需要注意开发的代码是否过于冗余,这样不仅仅会降低效率,接口之间的相互调用也容易出错。

其它的心得体会

除了在学习技术上得到的知识外,在团队开发中也有一些体会。我经历了两个团队的两个不同的开发的过程。从一个队伍融入另一个队伍,然后一起学习,一起工作,一起将自己的事情做好,我觉得是一件很难得事情,还有就是,沟通真的很重要,进入葫芦娃的时候,有些地方感觉还是无法适应的那么块,与开发者之间的沟通,使自己的效率大大的提高了。

posted @ 2019-06-27 21:36  虾野百鹤  阅读(249)  评论(0编辑  收藏  举报