个人作业4-Alpha阶段个人总结

个人总结


回答自己的问题

以下为当时提出的五个问题与回答

Q1 : 个人技术和流程

来自第2章 p36

PSP有以下的特点:

  • ...
  • PSP依赖于工程输入数据,记录工程师的各项活动,这本身就需要不小的时间代价
  • 如果数据不准确或者有遗失,怎么办?让工程师编造一些?
  • 如果一些数据不利于工程师本人(例如:花很多时间修改缺陷),我们怎么才能保证工程师愿意如实地记录这些数据呢?

我的问题是,PSP是否不适合学生

正如书中所言,PSP这一模型在实施的时候似乎有一些困难的地方,尤其是对于学生来说,例如:

  • 数据如何才能较为精确的获取到
  • 各个阶段之间的分界点不明确
  • 学生的时间比较分散,所以很可能会出现学生利用了好几块分散的时间才做完了一个阶段的事情,那么这样子又该如何统计呢?显然这之间不能简单地线性相加,例如,我要设计接下来一个项目的各模块接口。我花了三天没课的上午在onenote上写好了文档,但是实际上从我开始准备写文档那一刻起,我的脑中就开始构思各模块的接口之间的关系了,可能在某一节无聊的课堂上,也可能是在食堂里吃饭的时候...对于经常没有完整时间块的学生来说,PSP的数据很难获取到
  • 文中所举例举例的工程师的问题当然同样也适用于学生身上

问题提出的原因是与我在日常学习生活中的经验矛盾

回答
  现在认为PSP适合学生,但在实施上是有一些问题,之前提出的问题都发生了,统计时间的时候确实很麻烦,最后只能采用模糊估计的方式

Q2 :两人合作

来自第4章 p87

如何结对编程

  1. 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
  2. 领航员:审阅驾驶员地文档;监督驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。领航员也可以设计TDD中的测试用例
  3. ......

我认为,结对编程可能在现今的大学环境下难以发挥效果。

首先看到书中关于结对编程的例子,一般都是公司内部的两个工程师,二者同为一家公司的工程师,那他们之间一般来说技术、关于技术的思想等等就不会差距太大,而这个技术差距恰恰是学生之间和工程师之间的不同之处。比如说用0到10的数字表示一个人对有关结对编程中使用技术的掌握程度,两个工程师是4和7,而学生之间甚至可能出现0和1的情况(没有其它人比学生更了解学生,作为计算机学院的学生,四年下来连要求的某些编程语言的基本语法都没有学会的也不是没有)。这样的情况下,根本没法结对,别说设计单元测试了,可能连表述出来的设计需求都听不懂。

问题出发点同样是与学习环境中的经验不符。

回答
  结对编程确实在大学中可能难以发挥效果,不过锅在学校和学生自身上,0和1的问题都是学生自身未尽到学生的职责所导致的。

Q3 : 实战中的软件工程

来自第7章 141

保持敏捷,预期和适应变化......

以及 第3章 p53

“过早优化是一切罪恶的根源”......

当我看到敏捷的思想的时候,就回想起了在本书前面看到的过早扩大化/泛化等的问题。前者的要点是:要预料变化,适应变化,对变化做好准备;而后者的要点是:不要过早地泛化......我感觉这两种思想似乎有着冲突的地方,问题是该如何在二者在过早泛化和提前为变化做好准备之间找到平衡点呢

举个更具体的例子,我要用C++写一个web/linux/windows/iOS/android上都可以使用的个人事项管理软件。我打算从windows客户端开始设计,在设计其中一些方法的时候,我是应该将函数全部泛型化,抽取出变化的部分全部设置成参数?还是先将这一平台的当前需求以合理的资源和算法结构等先设计实现出来呢?

回答
  根据实际项目的期限和目标等确定,有经验作为指导才能做好决定。

Q4 :软件测试

来自第13章

章节中的各种测试技术的应用场景......

在阅读软件测试等章节的时候,我认为确实单元测试和软件测试等等都是十分有必要的,那么一个GUI软件该如何更好地测试呢,或者说GUI软件的自动化测试有没有必要呢?

这是我找到的部分观点:

在我看来,GUI测试由于其变化可能性大,测试(覆盖率/成本) 率高,所以难以进行大规模的自动化测试,就像某前辈所说的

keep the UI very, very thin—all it does is forward user gestures to some underlying code, and display the results. No logic. Definitely no database access.

UI就该做UI的事情,并且只做那件事

在测试问题上,该如何找到最佳的GUI测试方案呢

回答
  还是要根据项目规模和期限资源等适当抉择,例如:对于将会持续变化的部分,自动化UI测试将是不现实的,也是在资源人力上无法接收的。而如果是变化不大的部分可以考虑适当的自动化测试(一般没有)。

Q5 : 人,绩效和职业道德

来自第17章 p411

软件工程师的职业道德

其中有一个规范:

原则1 公众
软件工程师的行为应与公众利益一致
原则2 客户与雇主
软件工程师应以其客户和雇主利益最大化的方式做事,与公众利益保持一致
......

看到这种一条一条的的准则,就会产生疑问:

  • 如何衡量是否与公众利益一致
  • 若公众利益与雇主利益不一致,甚至互斥怎么办

举个例子
某大厂开发的一款即时通讯软件,在发布后由于其出色地整合了许多同类应用的优秀功能而大火。之后雇主(公司老板)要求工程师设计出一套付费vip的服务,对于使用该应用的用户来说,这当然不利于他们的利益,但是从雇主的角度来说,他可以凭借该应用的巨大用户基数怒赚一笔

回答
  审视自己的内心:你为何从事这个职位。
如果为了生存那只能维护自己的利益,尊重雇主的利益。
如果为了兴趣或是信仰啥的,该离开就离开,不要为虎作伥。


再提问题

Q1:如何做好项目估计

经过Alpha阶段,发现项目开发的过程中总是可能会出现突然情况,影响项目的进度,甚至导致项目无法完成,那么如何在项目准备阶段有效的考虑到这些变量并更准确地做好项目估计呢?

Q2:对于项目中成员水平不够,无法参与项目开发的问题

团队已经组建好了,项目开始后,发现有一些队友的水平无法有效的完成分配的任务,这种情况下,作为PM该如何处理?

Q3: 软件工程课程究竟学习的是什么?

在本课程中,我们每个同学都分担了不同的角色,那么我们经过这个阶段的学习,对于大部分人来说,都是根据PM的分配完成自己的任务,那么软工课程主要学习的是什么呢?

Q4:PM需不需要懂开发

一方面,不懂开发的PM在与开发交流的时候难免会有代沟,而另一方面,掌握太多开发细节的PM将会在管理的时候陷入细节,影响自身的判断。

Q5: 软件工程对于要考研和研究学术的学生有什么帮助?

软件工程本身作为工程,当然绝大部分都是工程相关的知识,那么这些知识对于哪些要研究学术、要考研的同学有什么帮助呢?

posted on 2018-05-19 21:52  Agt  阅读(403)  评论(14编辑  收藏  举报

导航