软件工程网络15个人阅读作业2(201521123082 黄华林)
标签(空格分隔): 软件工程
1.提出问题
快速通读教材《构建之法》,并参照提问模板,提出5个问题。
如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ,以及 在互联网时代如何提问题。 还有这些要点:
在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
列出一些事例或资料,支持你的提问。
说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
Question1:
相关内容:PSP(个人软件开发流程)
相关知识点:
1.代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。(来自:百度百科)
2.单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
文中与问题相关的内容:
100%的代码覆盖率不等于100%的正确性!代码覆盖率对于“应该写但是没有写的代码”无能为力。代码中有效能问题,虽然代码执行了,并且也正确返回了,但是代码效率非常低。多线程环境中的同步问题。其他与外部条件相关的问题
其他与外部条件相关的问题(例如与设备、网络的相关问题),这些问题具体指什么,以及如何用具体的方法来解决这些问题?
Question2:
相关内容:软件工程师的成长
文章内容如下:
在中国,软件工程师的职业资格考试有:
计算机等级考试和全国计算机技术与软件专业技术资格考试
基于笔者有限的经验和观察,此类考级有这样的好处:
国家级认证,有一定的权威性和通用性
任何人都可以参与
也有这样一些局限性:
以答题、评分为主要考试形式,没有面对面的口试
考试中每个人单独行动,不能考量团队的合作能力
要考虑到通用性和稳定性,考题和内容相对滞后于工业界的发展,部分内容相当滞后
因为我本人也将参加计算机等级考试和软考,但是在备考过程中,发现知识点的确有很多滞后和死板,但是很多公司和部门都还承认这是证书的价值性,公司是看中了同学的学习能力还是其他原因?还有国家的认证考试明明知道很多知识点滞后于工业界的发展,以及一些公司的认证考试都有题库,他们为什么不尝试改革和改进,真正地做到考察相关职业从事人员的能力?
Question3:
相关内容:两人合作
相关知识点:
1、敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
2、极限编程
极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能性以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。适用于小团队开发。
3、结对编程
结对编程技术是指两位程序员坐在同一工作台前开发软件。与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。
实施结对编程技术将给软件项目的开发工作带来好处,只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
文章内容如下:
既然代码复审能力能发现这么多问题,有这么好的效果,如果我们每时每刻都处在代码复审的状态,那不是很好嘛?事实上,极限编程正是这一思想的体现——那为什么不把一些卓有成就的开发方法用到极致,让我们无时不刻地使用它们?
通过查阅资料找到了相关名称敏捷开发、极限编程和结对编程,那么这三者的关系是什么?
敏捷开发是十几种开发方法的统称,极限编程就是这十几种开发方法之一。
极限编程包括了十几种实践(就是一些具体做法),结对编程是极限编程的一种实践。(来自百度知道)
Question4:
相关内容:敏捷流程
在《构建之法》第一版第6章中出现以下问答内容:
问:敏捷宣言是不是软件开发思想的顶峰?
答:敏捷宣言固然好,然而人的认识总是在发展,软件行业也不断地有新的思想出现,或者是旧的思想重新浮现。例如,2009年有人提出了软件匠艺宣言。
请问具体的软件匠艺宣言是什么?以及与敏捷宣言的异同点?
Question5:
相关内容:WIIFM(我能从中得到什么?)
在《构建之法》第一版的16章,我看到了以下文章的内容:
那怎么样才能让别人喜欢(至少不痛恨)你的创新?在我们提出一个创新的想法时,应该考虑这么几点:
对利益相关人要讲清楚“你能从中得到什么”。
创新的想法和目前流行的做法对比,有什么相对优势,能让别人清楚地看到这个区别,并能够尝试。
创新和目前大众习惯、已有系统是否兼容。
避免过度描述复杂的技术。
文章里作者提问读者,“你能否用简明的方式把你的创新描述出来?可以实践一下本书“需求分析”里讲过的NABCD方法?”
查阅第八章需求分析内容:
N(Need,需求)、A(Approach,方法)、B(Benefit,好处)、C(Competitors,竞争)、D(Delivery,推广)
看完之后,关于如何提出靠谱的项目还是不太理解,后来百度以后搜到邹欣老师的博客文章:
https://www.cnblogs.com/xinz/archive/2010/12/01/1893323.html
通过两章的学习,了解了创新的提出,满足用户的需求很重要。创新的东西不但要“新”,更重要的是利用自己的框架和判断,更好地推广它,使它的价值最大化。可是,我想问,在创新的路上,满足用户的需求的创新还是坚持一些颠覆性的创新哪个对于现在的社会发展帮助比较大?是不是有一定资本的个人或者团队,比较适合做后者这件事?但是一般有资本或者成功的个人或团队,在书中你也提到有许多因素影响着他们创新,那在中国这个大环境下,是不是一般由国家来主导这些项目?那么假如由国家来主导这些目前暂时看来收益不大的创新项目,有什么优势又有什么不足?虽然想得有点多,希望作者能够解答一下。
2.【附加题】
请将问题提交至豆瓣:https://book.douban.com/subject/27069503/, 并在博客中给出链接在豆瓣页面的最下方 “读书笔记” 那里发言,《构建之法》的作者会亲自答复问题。
链接:https://book.douban.com/annotation/54360971/