解答疑问

疑问的链接

疑问链接

1.软件工程的目标是创造足够好的软件,书上提及软件的几个重要指标是用户满意度,可靠性,软件流程的质量,可维护性。我的问题是如何能够更加具体地衡量一个软件是否适用,也就是软件开发所追求的一个核心要求(或者通过对各类要求的权重分配)是什么?

这个问题应该是没有一个准确答案的问题,我当时问的时候过于追求一个类似于综合评分的东西。但是经过一个学期的实践,我意识到并没有这种评价机制。或者说这种评价机制是一种模糊的,感性的,由用户给出的。衡量一个软件首先要确保其功能是可用的,并且能够稳定持久的使用,这就涉及到稳定性,并且用户体验要考虑进去,要符合用户习惯,并且要让用户易于接受,不能过于“劝退”,在保证这些指标都能达到基本要求的情况下,可以判定软件可用,如果在此基础上有一些亮点,软件就会真正有应用价值了。

2.教材上非常强调测试的重要性。那么我们测试除了软件功能的正确性之外,对于可靠性,可维护性以及运算性能等方面的测试应该用什么类型的数据集进行测试呢(尤其是可靠性,不知道应该怎么测试)

这一点主要通过搜索资料和看书。
可靠性测试就是为了评估产品在规定的寿命期间内,在预期的使用、运输或储存等所有环境下,保持功能可靠性而进行的活动。是将产品暴露在自然的或人工的环境条件下经受其作用,以评价产品在实际使用、运输和储存的环境条件下的性能,并分析研究环境因素的影响程度及其作用机理(助教的答案)。
这学期我正好负责测试,可靠性是一个比较大的范畴,确保可靠性主要保证功能可用性,软件的稳定性(主要是负载测试的承受力和抵抗非法访问的能力),这些都可以通过可实现的方式测试,比如 功能测试可以通过网页或者服务器端代码的测试,压力测试可以通过scrapy框架模拟访问等。

3.这门课非常注重合作,囧才上也提到了应该结对编程对于程序开发又很多好处,那么如何分配工作,以及建立怎样的合作气氛在实际上更有利于提高软件开发的效率呢(这一点在实际不同情况中尤其难以抉择)?

这一点主要通过实践。
分配工作可以通过“能者多劳”的方式,不要强行要求*均分配,因为团队中水*总会有高有低,*均分配实际上会降低效率。同时按照事先分配好的模块进行分工,每人负责自己的部分,也能提高主观能动性。团队氛围最好是趋向*等对话,相互督促,相互鼓励(而不是相互甩锅,推卸责任)。

4.开发软件是为了用户使用,所以首先了解用户需求。但很多情况下,我们没办法让用户确切表达出自己的核心需求,这种情况应该怎么做才能提高用户满意度呢(所有的功能?运行的速度?还是好的UI?)?

这一点是在实践过程中以及学习其他团队的。
虽然用户可能无法确切表达自己的需求,但是用户却有反馈的能力,在初步的成品拿出来之后,我们可以先把这个版本给一部分用户进行体验,用户肯定会对这个版本的软件有一些自己的看法,或者是使用上的bug或者是不符合审美或者使用习惯的问题,我们可以在此基础上进一步进行修改,则就比让用户从零开始提出需求要容易的多。

5.教材上所说PM的一个重要职责是协调团队,而如果团队内部有两种向左的开发意见,两者各有优劣,而且支持的人数相当,那么PM在决策的时候应该通过什么指标来决定最终的选择呢?

这一点通过团队实践得到。
在我们这种*乎*等的,真的只是有分工区别的团队中,其实并不是所有决议都由PM独立决定,我们是通过集体决议得到的,所以我们可以用最公*的方式“少数服从多数”,因为这种方式最不容易引起团队内部除了观点层面的分歧之外的冲突。如果这一点也不能结束相左的意见,可以通过用户调查,通过统计用户更能接受哪一种,因为软件最终面向用户,那么用户所做出的决议应该是更加有代表性的和实际性的。

6.在教材上提及软件开发大致可以分为需求分析,功能设计,编程与开发,软件测试,长期维护等流程,我想知道如果现有的时间不足以将每个步骤进行到完美的地步,那么对这些步骤应该怎么侧重呢?

这部分通过查询资料得出。
需求分析和功能设计是处在基石位置的,没有这两点,后续的步骤都毫无意义,所以这两点是无法缺省的,必须高质量完成的。而开发出一个基本样品后才能全面测试,也就是开发的优先级要高于测试。而测试完软件就进入了一个新的阶段,在这个阶段中,维护是最主要的工作,但在此之前,维护几乎不占用多少工作比例。所以优先级的确定要根据开发所处的阶段来判断。

请问你们在项目的 需求/设计/实现/测试/发布/维护阶段(一共6 个阶段)中都学到了什么“知识点”,每个阶段只要说明一个知识点就可以。

需求阶段:不要一味自己分析需求,在这部分与用户的联动是最重要的,可以通过用户调查来调整分析的需求。

设计阶段:在选择技术和框架的时候一定要做好充分的分析,因为这是后续工作的出发点,一定要分析清楚各种技术的利弊,再进行选择。(选了不合适的可能导致工作量巨大的提升)

实现:学会了前后端对接的django方式,对于网站的开发和数据库的搭建有了一点心得。

测试:学会了压力测试的方法,可以通过scrapy框架对常用网站进行测试。

发布:懂得了发布阶段宣传的重要性也了解了一些吸引用户的方式。(前期宣传真的可能决定项目的成果)

维护:可以通过比较大的用户调查对项目进行比较大的改动,改动的程度取决于用户的需求。