软件工程第一次作业补充
一、关注《构建之法》的作者邹欣老师的博客
二、花20分钟写一个能自动生成小学四则运算题目的“软件”,要求:除了整数以外,还要支持真分数的四则运算。将代码上传至coding.net,并将地址发布至自己的博客
修改后的代码地址(主要修改为真分数题目的生成):Four_operations
三、在一周之内快速看完《构建之法》,列出你不懂的5-10个问题
1、假设老师此次作业要求是一个用户需求(勉强假设了),那么我们应该如何理解并捕捉到用户真正的需求?(显然在很多情况下并不能通过焦点小组、深入面谈、卡片分类、用户调查问卷等方式来获取用户需求);尽可能对用户需求做全面的扩展是否有益,怎样为这样扩展益害加一个界定?就比如老师此次的作业,回答者如果尽可能的回答的详细就可能出现冗长而繁琐的情况,如果只是简要的提问,又会显得无据可依。
2、第4章结对编程(P75~P78)相对于伙伴复审和团队复审优势明显,除P78提到的5点外,结对编程是否适合于一些较大的项目?对于一些大项目,结对编程在减小复审难度的同时是否也会加重团队成员间的交流负担以及加大项目成本?
3、敏捷对团队成员有可自主管理、自我组织及多功能的要求,那么在这样的要求背景下团队成员的各方面素质一定较高,如果此时出现了项目无人认领或项目A依赖于项目B,但项目B无人负责怎么办?由谁来解决?(项目负责人还是Scrum Master?)如何解决?(特别是针对一些专业素质高但同时又极有个人想法的成员)
4、P46,老师在初级工程师如何成长中提到5点,分别为积累软件开发相关的知识,提升技术技能;积累问题领域的知识和经验;对通用的软件设计思想和软件工程思想的理解;提升职业技能(区别于技术技能)及实际成果,就其中的第3点,我想知道软件设计思想是包含于软件工程思想吗?如何区别二者?如何提升个人软件设计思想及软件工程思想?
5、P192至P198,在典型用户价值一小节中有这样一个描述:如果银行仅仅帮小企业主开个户就把他打发走了,银行就会失去很多商机;在怎样定义典型用户中提到“我们的软件不是为所有人服务的”、“我们宁可从小部分人出发,要非常明确地定义谁是我们的用户”,那很显然,我们要尽可能精准而全面的定义小部分人(典型用户)来让价值达到更大化,我想知道对于零经验者及经验甚少者如何定义典型用户而不至靠拢于所有人并使价值更大化?通过和典型用户的代表交流来确定场景,请问何种交流方式呈现的实际效果更佳?(问卷?面谈?······)
四、软件有很多种:包装在盒子里的软件、基于网页的软件、企业或学校或某组织内部的软件、游戏、手机应用、操作系统、工具软件,选取三种软件,请分析它们各自的特点。
- 1)这些软件开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户现金么么?还是别的?
- 2)这些软件是如何到你手里的(邮购,下载,互相拷贝)
- 3)这些软件是如何处理Bug的?又是如何更新新的版本的?
- 4) 同一类型的软件之间是如何竞争的?
基于网页的软件:如96微信编辑器
1、基于对微信公众号图文排版的需求,主动成为他们的用户。他们对有更高需求的用户有盈利目标,比如可选择升级为VIP;其目标也有与其他平台合作,如易速推等。
2、自己搜寻。
3、尚不明确
4、提高跨平台跨浏览器的兼容性,像96微信编辑器在360浏览器、百度及谷歌等上使用比较流畅,不会出现乱版;丰富素材库并提供更多免费的素材;精准定位用户需求合作其它平台,提供更多合适的免费资源等。
手机应用:如唯品会
1、我被吸引于他们的广告、界面及物流的统一色调、核心特性——正品,及对正品的保证;其目标是赚取现金。
2、下载。
3、在产品发布之前,会在Dev自测,同伴复审,源代码同步/合并/构建等环节中发现BUG,在自动测试、功能全面测试新建BUG,然后开发人员分析BUG,看BUG是否可以修复,如可修复,再进行详细设计、实现设计及测试等流程,如不可修复,则重审Spec,设计、更新Spec及相关文档、详细设计、实现设计及测试等。产品发布后,会根 据用户的用户体验而对已发布的产品不断的维护,推出对BUG修复后的最新版本。(上述内容来自对开发人员工作流程图的理解,可能并不准确)
4、唯品会的核心竞争力是只卖折扣的正品(注意有两点,折扣、正品),其次我能很强烈的感受到他们对用户体验至上的追求,比如他们很清楚目标用户而有了用户分类里的标签的应用,很清楚用户的使用时间而有了早8晚10的上新时间及其他会员俱乐部的开展和退换货上门取件等,虽然不及其它同类网站完善,但是已有的功能已相当精致。我觉得很多东西不在于多,而在于精,所以可能这是唯品会相对于其它同类型平台更核心的竞争力。
工具软件:如WPS
1、因其对空间极小的占用而主动成为其用户。不完全以盈利为目标。
2、下载
3、如在使用中自动退出后,再次进入时会询问我们类似是否将发生的错误反馈于后台等方式中积累用户体验,然后退出修复后版本等。
4、提升用户体验,如WPS16版仅为60多M,但运行速度快,兼容了多平台且免费,这可能就会大大提升它在同类软件中的竞争力。
- 列举你在使用上述软件时观察到的“特殊”现象,它们和硬件有什么不同?这些能说明软件的某些本质特性么?
软件=程序+软件工程,程序=数据结构+算法,所以软件是为了实现某种设计的计算机数据和指令的集合,是没有物理形态的。为实现某种设计,这就体现了软件的功能性;发现BUG并不断修复BUG,体现了软件的可靠性和可维护性;代码的复用及交付普通用户的使用,体现了其易用性。相比于软件,硬件是具有物理形态的,而且硬件产品在设计成型后可批量生产,且其存在老化和磨损问题,而软件如果可以,可以一直使用。