软件是什么东西?
一个从人开始从人结束的东西:由人提出需求、人进行系统分析、设计和编码,人进行测试和维护,人直接或间接的使用软件提供的服务;整个过程都没有离开人,所以软件的问题本质上就是人的问题。
关于软件的价值:
软件最大的价值在于能够无限期、无次数限制的使用也不会坏掉。而且一旦开发出来其快速再生产(拷贝)的能力使其几乎没有成本。这样看上去软件似乎很完美但问题是软件是给人用的工具,一方面开发的一定存在bug只要被使用就需要专门的人进行维护,另一方面人的需求总是在变化的,即使软件不会坏掉能够轻易的复制,随着需求不断改变,软件必须要做出调整。所以软件开发从来都不会是一个一劳永逸的事情。从某个角度上说:软件开发不是为了软件的现在和不远的将来,而是为了一个无法预期的将来,因为软件的生命周期我们通常是无法预知的。因此可以说这个世界上不可能出现完美的软件,你不能准确预知软件在什么时候会变,在哪个地方需要变化。只有尽可能做到在一些我们认为最可能产生变更的地方使其容易扩展或修改,使修改成本降到最低。
很多事情我们没办法预测,但在最开始软件开发,我们尽量把需求做的全面细致,设计和开发尽量通用易于扩展和维护,测试尽量找出所有bug;这样做是无可厚非的,但是这样一个好的软件可能还么使用多久,业务发生调整它以后会很少被人使用,因此也不需要扩展和投入很多精力维护了。很明显但从生产成本和软件使用价值两方面衡量的话生产这个软件是“亏本生意”。如果把软件声明周期分成:婴儿 幼年 青壮年 老年 结束;
这么几个阶段,一个“不亏本”的软件在其每个时期的投入和产出应该满足一定的占比,婴儿和幼年期是投入成本的时期,青壮年和老年期是产出但同时也有消耗(维护和扩展)。
上面的描述说明的一个问题是:软件开发的到底值不值完全是由业务方向的发展来决定的。改变这种状况有很多方法:1.明显降低开发、测试周期,这样技术业务方向变了生产成本降低也不会太亏;2.开发过程中,我们自己能不能产生一些业务增长点尽量延长它的青壮年时间。对于第一个方法,解决的方法是复用:复用的粒度应该满足基本功能单元的组件,在不同的业务场景通过组装形成满足完整业务需求的软件。可以基于某个领域来生产领域“零件”,形成零件仓库到时候可以通过组装各种业务场景下的软件或应用。说到底这就是一种自底向上的软件开发方式,当组件达到一定规模可以很方便的产出一个软件。
关于耦合与聚合:
不正确的聚合即为耦合,合理的耦合即为聚合;
关键是要找到可能产生变化以及受变化影响的因素。
需求分析
设计编码
测试
维护
推荐阅读
- 软件测试|作为一名测试开发,因为偷偷接私活被...
- 软件测试|35岁大龄测试员的心酸(要15K还被砍5K,真的只能被劝退了吗())
- 软件测试|今天公司新来个字节25k出来的,让我见识到了真正的基础天花板
- 网络|Selenium 4.0-最新的测试自动化工具
- CMD 下运行python的unittest测试脚本无输出
- #|性能测试过程及模型构建
- Linux|使用JProfiler监控JBoss运行情况
- bugzilla 发送邮件配置
- 缺陷查找攻略大法