提问回顾
提问题博客
问题解答
1.第一次听到理想的师生关系为健身教练和健身学员的关系,感觉很新颖,我的问题是我们学生该如何做到像健身学员一样找到自身定位点,把握老师身上的那套健身资源,朝自己的目标前进呢?
对于如何找到自身的定位点,实际上就是如何评估自身能力的问题,方法可以像这篇博客自我评价问题列表那样,在软件工程方面评估软件工程师,从硬方面和软方面对自我进行评估,硬实力为自己专业方面的能力,而软实力为在成长过程中不断学习的能力;相对地,我们一方面可以根据这两方面评估自己,同时可以从这两方面出发提高自己,提高自己的能力,根据自身能力找到自己的定位和方向。
2.看到书中提到阿超打印题目的例子,还有老师在课堂上也举例出四则运算题的例子,让我们能看到程序的可扩展性是多么的重要!那么我们在面对开始的需求时可以通过哪些方法增强程序的可扩展性呢?
相对来说软件在设计之初很难考虑到其未来发展的各种变化,因此关键的是实现目前的功能需求,同时为提高扩展性性采取一些措施,一是按照一定的设计模式来进行程序设计,同时通过我们这门课程的实践来说,一个比较好的方法是代码规范和框架设计,开始通过框架搭建建立程序的总架构,后期增加功能时在此基础上从1到n的开发方式,有利于提高扩展性。
3.书中提到:软件工程的一个重要任务,就是要决定一个软件在什么时候能“足够好”,可以发布。感觉很好奇,我们如何或者说通过什么来证明一个软件足够好,可以发布呢?希望通过后面的学习弄明白。
在我们开发阶段结束发布时都会被问到一个问题是软件的出口条件,相对来说,我们的软件是面对用户的,因此当用户能够认可时说明软件可以发布了,具体上可以考察说明软件基本上没有影响用户体验的bug,对用户体验性要良好,基本实现用户的需求,这样的软件从才是足够能发布了的。
4.看书上提到的和我们课程中要求的结对项目和团队项目,个人感觉结对项目中两个人的角色定位和团队项目中的各个人的角色定位有些重叠的地方,那么我的问题是课程同时设置结对项目和团队项目的用意是什么?
通过这一学期的学习我发现了结对项目和团队项目还是有很大的不同的,首先就结对项目来说两个人的交流成本相对团队项目来说少得多,结对人员通过代码复审,结对编程的方式能够快速的解决对接问题,而团队项目中交流成本大,要求开始对设计明确,对各人员分工合理明确,这样才能调动团队积极性,提高团队开发效率,当然团队项目中也可以借鉴结对项目中的一些好处来局部改善团队开发效率,例如结对编程代码复审等等。
5.书中提到了许多的软件团队模式,感觉我们的课程其实就是一种功能团队模式,每个人在这种模式中执行协作共同完成一个功能,那么刚开始学习软件工程这门课时面对后面的项目如何有法可循的发觉自己适合在这个团队中的职能。
其实感觉这个问题和第一个问题类似,其关键点还是找到自身能力点找到自我定位的问题,需要我们开始自我评估,同时课程设置为两个阶段的好处可以让我们有一定的时间来通过实践找到自己的定位,更好的发挥自己的作用。
6.软件工程开发过程其实是有许多人共同合作的开发完成和完善的,在这个过程中我们要如何处理好和客户,设计,测试的关系呢?
我们软件开发是依托用户需求的敏捷开发,这其中用户的作用不容忽视,当我们脱离用户时软件做的再好也没有应用市场,因此在设计之间就要 进行用户需求分析,通过对用户的需求分析确定适合的功能,执行设计开发,同时其中比较重要的测试我们不能仅局限在最后的功能测试,在开发过程中也要有测试,保证最终面向用户的是好的软件。
7.在产品开发的过程中PM起到了举足轻重的作用,那么如何才能做好一个PM而不是尽量不犯大错呢?
在团队开发中,PM的能力在一定程度上举足轻重,要求PM能够很好地理解用户,同时协调各组员之间的工作,做好设计和进度管理,能够针对特殊事件及时做出改进,首先PM要经常和组员沟通,协调解决组员之间存在的问题,同时不断完善设计,掌握软件开发的进度,保证开发流程按照进度完成,同时不断反省,改善开发过程中存在的问题。
8.书中在后面提到了创新的重要性,前面又说到在现实中大部分都是面对用户需求利用现有的东西实现做好,那么这两者之间如何抉择呢?
我们所有的开发都是面向用户的,因此我们开发出来的软件要满足用户的需求,这是软件基本的也是最重要的东西,软件可以在保证这方面上做出软件创新,同时要求创新紧密联系用户,要求创新结果能够吸引用户,打开用户市场,这样的创新才是成功的创新。
9.书中提到的很多种对绩效的评价方法,但作者似乎对提到的那些方法都没有明确表示赞同,那么我想问是否存在好的又能够实践的好的绩效评价方法?
通过比较我们的绩效评价和其他好的绩效评价,我感觉好的绩效评价方法要能够有能够提高组员积极性的设计同时对各方面有严格的要求,这一点是我们没有设计好的。
10.我们知道软件开发的过程有很多步骤,比如用户需求分析,设计文档,软件设计,用户体验,软件测试等等,那么我想问的是万一在实践过程中遇到时间不足的情况,如何有效的利用这些过程?
首先我们开发的前提就是要用户需求分析,没有用户开发出来的功能也是无用的,设计文档是极为关键的,好的设计文档能够极大地促进开发效率,用户体验上只有好的用户体验才能吸引用户,这样的软件才是好的软件,软件测试上我们实际操作时经常由于时间原因忽略了其重要性,当测试不足未能及时发现问题时当bug面对用户时会极大的影响用户体验甚至影响用户的信任。因此,这些方面都是必不可少的,没有办法舍弃掉其中的那一部分。
学到的知识点
需求阶段
及时获取用户需求,使用NABCD模型分析用户需求设计功能
设计阶段
设计要完善和细致,要求考虑一定的扩展性,同时在开发上有严格的规范。
实现阶段
代码规范,严格按照设计要求,有变动时有严格的文档说明,保证开发透明化 。
测试阶段
测试能够尽可能全面覆盖,而不是简单的功能测试
发布阶段
及时发布,通过多渠道发布,注意多方面用吸引用户
维护阶段
及时获取用户反馈,根据用户反馈改进软件,提高用户体验性