1.1 认为软件系统十分复杂是不是因为软件工程还没有充分发展?

GreyZeng 2022-03-18 22:12:48

为什么说软件是人类创造的最复杂的系统类型?大型建筑、飞行器甚至长篇小说的结构也可以非常复杂,并且容易变得难以理解和维护,认为软件系统十分复杂是不是因为软件工程还没有充分发展?

原文地址

...全文
76 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
GreyZeng 03-18
  • 从工程量上
    • 代码行数统计: https://informationisbeautiful.net/visualizations/million-lines-of-code/
    • 单纯从代码行数来看,许多大型工程的代码行数都比作为生物的细菌要多。虽然我们自己写的程序可能不超过几千行,但是人们经过长时间合作写成的代码却可以规模非常庞大。如此庞大的代码,光是单纯的通读一遍都需要耗费很长时间,更何况对其进行结构分析和正确性的判断。
  • 从结构复杂性上
    • 一般的程序语言虽然层次结构没有特别复杂的元素,过程上包含顺序、条件、循环和函数调用,对象上有继承关系等,但是这些简单的元素进行组合就可以形成非常复杂的层次结构。当我调用一个函数的时候,函数可能去调用别的函数,甚至去修改一些全局变量造成副作用。对于多层调用的函数,要去阅读其语义就要读懂它调用的函数的语义,如此递归下去。编写的时候,编写者需要思考好每一层调用如何定义其功能,如何适当地分层来提高代码的复用性,这些都是非常难以规划的问题。调试的时候,错误可能基于各种各样的影响,甚至是由于并非自己所写的函数造成的影响。各种顺序、条件、循环也会由于修改了共享的内存而互相影响。从编写一般过程性结构的程序来讲,都不是告诉计算机“要去做什么”,而是要“教计算机怎么去做”,这一过程基本上需要人来通过编程语言给出一个框架,这时就会容易产生错误。在实用的软件中,往往还有很多异常情况需要处理,这些情况嵌入到这些结构,又会使结构变得更加复杂。
  • 从团队合作上
    • 大型软件的编写不能光靠单枪匹马,而是需要团队合作。越大型的软件,就需要越大型的团队进行越复杂的团队合作。人类是复杂的生物,建立团队本身就是非常困难的事情,如何说服一帮有才能的人加入到团队中,如何分配工作,如何保持团队的凝聚力,各个模块之间的开发如何并行化如何对接,等等,都是不仅仅和计算机相关的问题。
  • 从服从性上
    • 任何软件的编写都不是为了编写软件的自身,而是为了服务于客户的需求。而需求是很容易变更的东西,开发的过程中可能由于需求的变更导致整个架构失效;要建立一个灵活应对变更需求的框架,就是非常困难的事情;现实中要考虑到的问题也不仅仅是计算机上是否正确的问题,虽然计算机本身已经行为非常复杂了,但开发一个软件还要考虑它在现实中要处理的复杂问题。比如要考虑建立一个学生成绩的管理系统,我们就不能只考虑建立这样一个表去存储成绩,还要考虑数据库的安全性,还要考虑到成绩的修改(由于各种人为错误需要修正),这又引申到一堆问题,比如谁来裁定修改的公正性,谁来执行修改的动作,什么样的情况是可以修改的,等等,这些东西在软件上的映射都已经远远超出了原来的范畴。

原文地址

  • 打赏
  • 举报
回复
发帖
构建之法

194

社区成员

程序员。写过:移山之道,编程之美,构建之法,智能之门。
程序人生 企业社区
社区管理员
  • SoftwareTeacher
  • GreyZeng
加入社区
帖子事件
创建了帖子
2022-03-18 22:12
社区公告
暂无公告