对于第一次作业的补充:
一.关注《构建之法》的作者邹欣老师的博客。
二.写一个能自动生成小学四则运算题目的“软件”,要求:除了整数以外,还要支持真分数的四则运算。将代码上传至[coding.net],并将地址发布至自己的博客。
作业地址
三.对于作业“在一周之内快速看完《构建之法》,列出你不懂的5-10个问题”,邹欣老师在看了大家的博客之后提出了以下建议,大家根据要求修改这个作业。
作业补充要求:
•a.在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文
•b.列出一些事例或资料,支持你的提问
•c.说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
•例如:我看了这一段文字 (引用文字),有这个问题 (提出问题);我查了资料,有这些说法(引用说法);根据我的实践,我得到这些经验(描述自己的经验);但是我还是不太懂,我的困惑是(说明困惑);或者我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
•如何进行提问,大家可以参考娄老师的博客:如何提问
•1.将1的内容根据要求重新提一次
•2.本次作业命名为“软件工程第一次作业补充”
问题一:
在软件测试中什么是冒烟测试?为啥要采用?(第13章 软件测试中间部分)
>我在读《构建之法》这本书的时候从第13章中的258页和260中间这部分读到有一个“专有名词”叫“冒烟测试(Smoke Tesk)”,通过读书知道这是“一种基本验证测试,而且据说是从硬件设计行业流传过来的说法”根据我理解也就是根据电路板是否冒白烟来判断的,结果查资料后发现冒烟测试从操作上是一个随机的测试,操作对象通常是核心业务模块要是发现多数功能走不下去(20%),那么这个冒烟测试就算是结束了,但是冒烟测试一般不用参照测试用例那么为什么还要采用“冒烟测试”呢?
问题二:
开发一个项目时,想好了需求分析后就正式动手开始操作,第一步就是设计好用户界面吗?还是主要进行代码的编写?(第12章 用户体验)
>我在读书第12章235页到时看到这样一句话“考虑用户体验的各种角度,认知阻力,用户体验的衡量标准,要从用户的角度去思考问题,需要有“同理心”,要有理解用户的处境,心理,动机的能力”。所以作为开发人员在软件开发时的需求分析很重要,同时从用户的角度考虑问题则是软件的第一次使用和软件的好用度很重要,但是这样的话作为软件开发人员开发项目时通过需求分析后的第一步就是设计用户界面还是进行代码的编写这二者之间是有先后顺序还是根本就没有顺序之分?
问题三:
在软件测试的时候需要覆盖所有的代码段吗?(第2章 个人技术和流程)
>我在读书27页那部分的过程中了解到在软件测试中有许多种不同的测试方法而且代码覆盖测试是衡量测试质量的一个重要指标,而且书中提到“100%的代码覆盖率并不等同于100%的正确性”。进一步的软件的覆盖包括所有分支、正常路径和错误路径、有效的输入和输出情况等多个部分,我通过查找资料后知道了如果仅覆盖了代码的一小部分并不能代表软件的质量,但如果测试覆盖到了软件的绝大部分代码则对质量有些信心。所以代码的覆盖测试只能作为判断软件质量的一部分指标不能代表全部,但除此之外测试时还应该注意哪些关键点?
问题四:
在瀑布模型中温斯顿提到瀑布模型(模拟版本)和原型模型有何不同?(第5章 团队和流程)
>我在读团队和流程这一章的时候从书93页看到“温斯顿指出,要让产品成功,最好要把这个模型走两边,先有一个模拟版本,在此基础上收集...”。这部分看完后不是十分理解通过查相关资料后知道了瀑布模型主要强调文档的作用,并且要求每个阶段都要仔细验证,用户只有等到整个开发项目的末期才能见到产品的成果耗费时间长已经不太适合用于现代项目开发;而原型模型实现客户或未来的用户与系统的交互,用户或客户对原型进行评价从而可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。既然这样那瀑布模型还有具体可用的范围吗?
问题五:
我在第7章MSF这一章中看到“微软解决方案框架,其实也是一个方法论,是一个微软推荐做软件的方法MSF”但其也具有它自己一定的基本原则:1.推动信息共享与沟通;2.为共同的远景工作;3.充分授权的信任;4.各司其职,对项目共同负责;5.保持敏捷,预期和适应变化;6.投资质量;7.学习所有的经验;8.与顾客合作。这些原则教会我们要怎样高效率地去做一个软件。同时,我们也要结合MSF团队模型与MSF过程模型,从不同的层面上发现软件隐藏的问题,然后修复不同的bug;但是读完了这一章,我熟悉了MSF的科学内涵,但还有一点不是很明白就是,在今后的就业过程中,上司们大多会考验我们毕业生的实战经验和能力,但作为一个初出茅庐的大学生,还有太多的缺点跟不足,我们应当如何打破这种境况呢?(老师能不能给些建议呢?)
四.软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。
1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
2)这些软件是如何到你手里的(邮购,下载,互相拷贝)
3)这些软件是如何处理Bug的?又是如何更新新的版本的?
4)同一类型的软件之间是如何竞争的?
手机应用:如常用的QQ、淘宝
>QQ:由于人们在交流的时候比较方便进而得到广泛的传播从而使人们主动去下载使用,他们的目标不是盈利;
淘宝:一方面是方便快捷,另一方面是由于可供选择的东西多而且范围广泛从而使我主动去下载使用,他们的目标是盈利从而赚取用户现金。
>通常是通过下载所得。
>QQ、淘宝都一样,通常都是相关工作的开发人员通过用户的需求在原有的代码、功能基础上进行分析、修改、添加,然后进行设计、管理和实现等步骤,最后实现交付并且把更新的资源包发布于网页让用户实现更新。
>同一类型的软件之间功能非常相似,因此往往会在便利性方面、不定时的给用户发一些小福利如;粮票、购物券、阅读券等方面来吸引用户从而进行竞争。
操作系统:如windows、dos、linux等
>一般是去买电脑时出厂家都已经安装好windows系统,并且windows系统的兼容性好,而且适用性强,不完全为盈利目标。
>通过下载安装或者互相拷贝。
>微软每次定期会将windows平台的大型软件的新版本都会发布在各自的官网上并且向用户推送补丁等,用户只需实时关注等待自己的电脑系统更新通知,然后下载更新。
>一般通过在系统的兼容性、所支持的硬件平台等方面强或者不定期的为用户提供免费使用、试用期等进行竞争。
工具软件:如Microsoft office系列
>由于使用方便、简单而广为传播进而成为该软件的用户,不完全为盈利目标。
>通过下载安装或者互相拷贝。
>根据用户需求进行进一步的完善然后不定期的发布更新的资源,用户通过下载更新。
>通过在使用快捷性、方便性、使用效果好、价格优惠等功能提升了它在同类型软件之间的竞争。
五.列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?
1) 硬件是看得见、摸得着的物理部件或设备,而且在研制硬件产品时,人们对于硬件往往会表现在把原材料转变成有形的物理产品。而软件产品是以程序和文档的形式存在,通过在计算机上运行来体现他的作用并且软件可以分很多模块,有些模块是可以根据人的需求进行增删改,而且软件本身是用程序语言堆砌的。
2)软件的本质其实是硬件工作的任务,软件协调并指导硬件与硬件正确地交互产生人们想要的正确结果;最重要的是软件程序能够满意的处理信息的数据结构。