软件工程:“银弹”论

来源:互联网 发布:美国windows vps 编辑:程序博客网 时间:2024/06/05 16:02

在我看来,软件开发过程至少暂时是没有这样一枚可以绝杀一切的“银弹”的。

就目前来看,软件工程的本身具有的复杂性都没有从根本上得到解决。依旧存在着复杂性,不可见性,可变性,一致性。这些特性就是导致每一个软件开发过程都具有其与众不同的特殊之处的原因。不同的软件要解决的实际问题通常都具有相当大程度的复杂性,数据,状态,逻辑关系的复杂组合以及当前纯人力的软件开发过程都是导致其复杂性的原因。

要想拥有这样一个可以百分之百置敌于死的银弹,我认为有以下的思路;

1.减少软件开发过程中人为的差异

这首先需要有配套的高度统一的标准和工具,能够尽可能得根据开发人员的简易的调控,自动得生成需要的结果。体现在代码,架构等多钟方面。只有减少人为的因素,才能说得到一种高度浓缩的方式去解决全部问题,开发人员只需要从问题中提取出合适的因素。

2.编程语言

首先面向对象编程语言,看起来能够解决软件中的很多细节问题,但是并没有从根本上解决软件概念固有的复杂性,高级编程语言大多都是在内部帮助我们实现一些常规的算法以及函数调用,等API。当我们在设计复杂软件系统时使我们免去设计一些复杂算法,从而提高我们的编程效率,但是因为高级编程语言本身就具备一定的复杂性,如果我们不能全面掌握其精髓,也可能会出现一些我们意想不到的问题。在这个方面来说,也会耗费我们的时间。

3.专家系统
专家系统就是一个能够辅助我们编程的系统,要想开发一个这样一个专家系统,首先需要一位专家。专家也是在这个系统里面设置他曾经碰到的各种场景,从而使后来人免去一些可以避免的错我,但是软件系统本身具备一定的复杂性,专家设置的这些场景,可能在某些场景下并不适用。

编程环境和工具

4.编程环境和工具

统一编程环境,使我们的软件在一个环境上运行成功之后,迁移到另外一个环境下面也是可以正常运行的,从而降低我们学习的成本,再者就是智能的编程工具,能够在开发阶段帮助我们检查我们最常见的语法,等逻辑错误。

5.人工智能
分为两种,一种是使用计算机来解决以前只能通过人类智慧来解决的问题,另一种是通过某种启发式算法或者基于某种规则的编程技术。像语音识别技术或者图像识别技术就属于第一种情况,但是这种情况并不能给我们软件系统带来什么根本上的帮助。

原创粉丝点击