提出问题
Q1:初读本书,软件工程这四个字便映入我眼中,那么到底什么是软件工程,软件和程序有什么不同,两者之间的区别和联系是什么。其实在书中p8页也有关于软件工程的概念
软件工程是把系统的,有序的,可量化的方法应用到软件的开发,运营和维护上的过程。软件工程包括下列领域:软件需求分析,软件设计,软件构建,软件测试和软件维护。软件工程和下列的学科相关:计算机科学,计算机工程,管理学,数学,项目管理学,质量管理学,软件人体工学,系统工程,工业设计和用户体验设计`。
换句话来说,软件工程包含软件和工程两个词,所谓软件,书上如是说“软件是可以运行在计算机及电子设备中的指令和数据的有序集合。”,所谓工程,书上也有提出他的概念“创造性地运用科学原理,设计和实现建筑,机器,装置或生产过程;或是在实践中使用一个或多个上诉实体;或者是实现这些实体的过程”。对于程序来说,他只是实现某一功能的一段代码,是在建立在数据结构上的一些算法,把这些程序通过软件构建形成一个复杂的软件,这个过程就是软件工程。至少我是这么理解的。 那么软件工程的着重点是在于开发出用户需要的软件还是在对所开发软件的维护和管理或者两者皆是?
Q2:在书中每一章节的开始,都会有一个理论和知识点,提出本章所应该掌握的知识点,如在第二章的开头,便提出了本章的问题
· 理论和知识点
单元测试,回归测试,效能分析,个人软件开发流程(PSP)
然而我翻了整个第二章,书中也没有对这四个概念有一个系统性的解释,什么是单元测试?什么是回归测试?书中主要介绍的是这么样进行单元测试,为什么要进行单元测试之类的问题,而对基本的概念却没有一些系统的阐述,让人看书时看的云里雾里。
Q3:关于结对编程,书中用强有力的说辞讲述了结对编程的好处,提倡我们使用结对编程,这样可以获得更好的设计质量和代码质量,而我认为结对编程的建立需要有一个至关重要的前提,就是在双方编程能力差不多的情况下,这样才能对代码的设计和分析有平等的决策权力,如果编程双方能力差距较大,在这种情况下,是否还能进行结对编程,如果这样做,对编程双方的人是利大于弊还是弊大于利?
Q4:关于敏捷开发,百度百科如是说:
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
在书中也提出了要把产品订单上的任务进行进一步的细化,然后团队成员根据自己的情况来认领订单上的任务,这样做可以发挥其能动性。但使用敏捷的开发流程,没有计划,没有文档,马上写代码,这样做,是否对一些团队有一定的影响,换句话说,敏捷开发是否对开发团队的要求过高?一些能力较差的团队并不适合敏捷开发?
Q5:在用户需求分析的阶段,因为对于同一件产品来说,不同的利益相关者有着对这种产品不同的需求,如何权衡这些利益,换句话说,如何在不影响产品基本功能就情况下,去满足大多数人的利益,对于一个产品来说,用户的需求是否应该放在第一位,如果放在第一位的话,那么产品功能的优先性是否应该基于用户的需求?