软件工程第一次作业

自作多情 提交于 2020-03-29 00:55:45

1.关注《构建之法》的作者邹欣老师的博客;
2.花二十分钟写一个能自动生成小学四则运算题目的“软件”,要求除了整数以外,还要支持真分数的四则运算。将代码上传至coding.net,并将地址发布至自己的博客。
(代码地址:https://git.coding.net/Z_SY/zsy.git)
在一周之内快速看完《构建之法》,列出你不懂的5-10个问题,发布在自己的博客。
问题:
1.成长和代码量的关系是什么?代码量和工程师的水平是线性的关系么?
2.如何说 软件 = 程序 + 软件工程?
3.团队模式和团队的开发模式有什么关系?
4.如何提出DCR?以及如何决定DCR的执行次序?
5.我们软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述?
6.如果在项目中负责测试工作,需要设计什么样的测试用例才能发现Bug?以及什么样的改进能避免Bug的发生?

1.成长和代码量的关系是什么?代码量和工程师的水平是线性的关系么?
我在课本57页看了这一段文字 (软件工程师的工作就是写代码,相关专业的练习也是以阅读伪代码、写代码为主,那么代码量和工程师的水平是线性关系么?),有这个问题 (代码量和工程师的水平是线性关系是什么?)。我查了资料,有这些说法(代码量和工程师的水平是阶段性的关系,突破瓶颈意味着质的飞越),根据我的实践,我得到这些经验(代码量和工程师的水平就是阶段性的关系)。 但是我还是不太懂,我的困惑是(代码量和工程师的阶段性关系具体到实例是怎样的?)。
2.如何说 软件 = 程序 + 软件工程?
我看了这一段文字 (几乎所有的程序员都知道“软件 = 程序 + 软件工程”这句名言,但在实际的学习和工作当中,也有人产生了不少的疑问。),有这个问题 (软件、程序 、软件工程他们三者之间到底是怎样的关系?)。 我查了资料,有这些说法(软件开发活动( 构建管理、 源代码管理、 软件设计、 软件测试、 项目管理)相关的内容,是 软件工程的核心部分。广泛意义上的 软件工程也包括 用户体验、 用户 界面设计(User Interface Design)等。所以,一个推论是:
软件 = 程序 + 软件工程
一个扩展的推论是:
(软件企业 = 软件 + 商业模式),根据我的实践,我得到这些经验(软件 = 程序 + 软件工程)。
3.团队模式和团队的开发模式有什么关系?
我看了这一段文字 ( 团队模式主要取决于组成团队的成员,包括team leader以及team mates。其中,由于身处各个角色人员的性格,能力以及IQ,EQ等的不同,特别是team leader的上述这些“属性”,会往往决定了一个团队的“士气”“面对困难坚持不懈的程度”等特点,即我们常说的“软实力”。而这样的软实力也往往会激发一个团队的巨大潜能,为企业创造出超乎想象的价值。团队的开发模式与我们目前所熟知的软件开发模式,例如,瀑布、迭代、螺旋以及敏捷等等都密不可分,但它不同于单纯意义上的软件开发模式,因为这其中还加入了开发人员的因素,即“人”的因素。是更加贴近现实的,“接地气”的开发模式。),有这个问题 (团队模式和团队的开发模式有什么关系?)。 我查了资料,有这些说法( 团队模式和团队开发模式这二者的关系可做一个比喻,即为:二者共同构成了一个人,而前者是大脑,后者是身体。身体是行动的发出者和执行者而后者是身体的控制者和调度者。),根据我的实践,我得到这些经验(所有的软件开发模式,只是单纯的考虑到开发效率等问题,而最终能否成功完成任务,从某种意义上说,完全取决于项目执行者,也就是团队模式)。
4.如何提出DCR?以及如何决定DCR的执行次序?
我看了这一段文字 (结构化分析方法之应用实例——DCR-16电脑自动输入/输出控制系统),有这个问题 (如何提出DCR?以及如何决定DCR的执行次序?)。 我查了资料,有这些说法(在提交一个DCR时,选用任务作为工作件类型,并在标题中标明DCR,DCR的描述文字中,说明:
a. 问题在哪里,问题的影响;
b. 如果不修改,会有什么后果?
c. 几种修改方案,各种方案的优缺点和成本。),根据我的实践,我得到这些经验(在提交一个DCR时,选用任务作为工作件类型,并在标题中标明DCR)。
5.我们软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述?
我看了这一段文字 (软件设计与实现),有这个问题 (我们软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述?)。 我查了资料,有这些说法(软件主要用来解决我们生活中存在的一些问题),根据我的实践,我得到这些经验(软件可以解决许多生活中比较现代化的问题,给人类提供方便)。
6.如果在项目中负责测试工作,需要设计什么样的测试用例才能发现Bug?以及什么样的改进能避免Bug的发生?
我看了这一段文字 ( Bug一词相信很多朋友都在网上看过,尤其是编程人员更是经常要与Bug一词打交道。但经常有部分网友却不知道Bug什么意思,虽然Bug只有三个字母,但其涉及到的领域相当多,包含电脑各类软件、游戏等方面都会涉及到。),有这个问题 (如果在项目中负责测试工作,需要设计什么样的测试用例才能发现Bug?以及什么样的改进能避免Bug的发生?)。 我查了资料,有这些说法(.建议团队使用代码缺陷扫描工具,避免一些通用的bug的出现),根据我的实践,我得到这些经验(每次流程失败的时候,就是你学习如何改进代码标准和测试实践的机会,避免重大bug再次发生)。

软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。
(1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
答:1、微信:这是一款聊天软件,拥有较大的用户群,开发者通过用户传播来说服陌生人成为新用户。他们的目标也不仅仅是为了盈利,还为了为人们创造一个比较舒适的聊天环境。
2、开心消消乐:通过QQ软件给用户推荐。目标是给人们带来娱乐的同时让用户通过购买精力、通关小工具来赚取用户现金的。
3、王者荣耀:通过QQ或者微信等软件推荐用户使用。目标是给人们带来乐趣,与此同时通过用户购买英雄和英雄皮肤的方式来盈利。
4、QQ:这也是一款聊天交友软件,拥有更大的用户群,开发者通过各类软件下载APP和用户传播来说服陌生人成为它的新用户。他们的目标也不仅是为了盈利,而且也为了为人们创造一个比较舒适的聊天环境。
(2)这些软件是如何到你手里的(邮购,下载,互相拷贝)?
答:是通过下载和互相拷贝的方式
(3)这些软件是如何处理Bug的?又是如何更新新的版本的?
答:类似与QQ、微信、王者荣耀和开心消消乐这些软件,开发商都会不定期的在网上发布一些更新包,并且提醒用户更新使用,以防止出现漏洞。
(4)同一类型的软件之间是如何竞争的?
答:1、可能会捆绑于操作系统中,比如早年的IE。
2、有些软件会选择推出一些开源免费版。
3、软件在UI层面可能会做的很类似,让用户在切换的时候需要重新学习的成本最低,比如微信朋友圈和支付宝生活圈。往往软件商会用一些小利来吸引更多的用户:发红包,发优惠券。
4、然而对于各类游戏而言,他们有些会选择采取一种“擦边球”的方式来吸引更多的用户使用他们的游戏。

列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?
答:例如微信:用的时候有时候会莫名其妙的有陌生人添加好友,然而有别于其他正常的好友添加,他能够在添加你为好友之前就会发一些广告。
2、不同:
<1>软件是一种逻辑的产品,与硬件产品有本质的区别:
硬件是看得见、摸得着的物理部件或设备。在研制硬件产品时,人的创造性活动表现在把原材料转变成有形的物理产品。而软件产品是以程序和文档的形式存在,通过在计算机上运行来体现它的作用。在研制软件产品的过程中,人们的生产活动表现在要创造性地抽象出问题的求解模型,然后根据求解模型写出程序,最后经过调试、运行程序得到求解问题的结果。整个生产、开发过程是在无形化方式下完成的,其能见度极差,这给软件开发、生产过程的管理带来了极大的困难。
<2>软件产品质量的体现方式与硬件产品不同:
质量体现方式不同表现在两个方面。硬件产品设计定型后可以批量生产,产品质量通过质量检测体系可以得到保障。但是生产、加工过程一旦失误。硬件产品可能就会因为质量问题而报废。而软件产品不能用传统意义上的制造进行生产,就目前软件开发技术而言,软件生产还是“定制”的,只能针对特定问题进行设计或实现。但是软件爱你产品一旦实现后,其生产过程只是复制而已,而复制生产出来的软件质量是相同的。设计出来的软件即使出现质量问题,产品也不会报废,通过修改、测试,还可以将“报废”的软件“修复”,投入正常运行。可见软件的质量保证机制比硬件具有更大的灵活性。
<3>软件产品的成本构成与硬件产品不同:
硬件产品的成本构成中有形的物质占了相当大的比重。就硬件产品生存周期而言,成本构成中设计、生产环节占绝大部分,而售后服务只占少部分。软件生产主要靠脑力劳动。软件产品的成本构成中人力资源占了相当大的比重。软件产品的生产成本主要在开发和研制。研制成功后,产品生产就简单了,通过复制就能批量生产。
<4>软件产品的失败曲线与硬件产品不同:
硬件产品存在老化和折旧问题。当一个硬件部件磨损时可以用一个新部件去替换他。硬件会因为主要部件的磨损而最终被淘汰。对于软件而言,不存在折旧和磨损问题,如果需要的话可以永远使用下去。但是软件故障的排除要比硬件故障的排除复杂得多。软件故障主要是因为软件设计或编码的错误所致,必须重新设计和编码才能解决问题。软件在其开发初始阶段在很高的失败率,这主要是由于需求分析不切合实际或设计错误等引起的。当开发过程中的错误被纠正后,其失败率便下降到一定水平并保持相对稳定,直到该软件被废弃不用。在软件进行大的改动时,也会导致失败率急剧上升。
<5>大多数软件任然是定制产生的:
硬件产品一旦设计定型,其生产技术、加工工艺和流程管理也就确定下来,这样便于实现硬件产品的标准化、系列化成批生产。由于硬件产品具有标准的框架和接口,不论哪个厂家的产品,用户买来都可以集成、组装和替换使用。尽管软件产品复用是软件界孜孜不倦追求的目标,在某些局部范围内几家领军软件企业也建立了一些软件组件复用的技术标准。例如,OMG的CORBA,mICROSOFT的COM,sun的J2EE等,但是目前还做不到大范围使用软件替代品。大多数软件任然是为特定任务或用户定制的。
3、本质特征:软件是一种逻辑的产品,并且软件具有可变性,并且更新速度远大于硬件。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!