对于软件本质就不多说,因为定义比较多,也不能完全的理解,只能说提出一些问题。
1.软件开发面临的问题:
- 为什么软件需要如此长的开发时间
- 为什么开发成本居高不下
- 为什么在将软件交付顾客使用之前,我们无法找到所有的错误
- 为什么维护已有的程序要花费如此多的时间和人工
- 为什么软件开发和维护的进度仍旧难以度量
2.软硬件失效图:
从图中我们可以看出不断的变更是软件退化的根本原因。
3.软件应用领域:
- 系统软件-一整套服务于其他程序的程序。
- 应用软件-解决特定业务需要的独立应用程序。
- 工程/科学软件-‘数值计算‘类程序
- 嵌入式软件
- 产品线软件-为多个不同用户的使用提供特定功能。
- Web/移动App
- 人工智能软件
4.遗留软件
对于一些老旧的系统。他们不断的改变适应现在的需求,对于这类软件维护代价高昂,且系统演化风险较高。同时质量也比较差,可扩展性低。可读性差等特点让人十分头疼。但是又不能简单的去替换因为成本高,涉及到核心功能点。
最合理的处理方式就是什么都不做,至少在其不得不进行重大变更前什么也不做。如果遗留软件可以满足用户的需求且可靠的运行,那么他就是合理的。但是由于一些原因导致需要变化。
- 软件需要进行适应性调整,从而可以满足新的计算环境或者技术的需求
- 软件必须升级以实现新的商业需求
- 软件必须扩展以使之具有与更多新的系统和数据库互操作能力
- 软件架构必须进行改建以使之能适应不断演化的计算环境
当这些变更发生时,就需要再次修改来适应现在的需求。
当代软件工程的目标是"修改在进化论理论上建立的方法论"即软件系统不断经历变更,新的系统从旧的系统中建立起来,并且…新旧所有系统都必须具有互操作性和协调性。