需求分析是为确保做正确的软件;软件设计是为确保正确的做软件。两者结合,才能做出一件成功的软件产品。
需求分析从用户的使用场景来考虑。用户希望拿到的是一个端到端完整的功能,这个功能可能涉及软件的多个模块,多个子系统甚至包括和外部其它软硬件系统的结合。分析需求是从软件的纵向维度考虑,姑且称之为软件的经。
软件设计是从横向维度考虑,追求模块独立性,遵循MVC的思想,考虑的是软件的简洁性,健壮性,可维护性,可扩展性,代码的可读性。姑且称之为软件的纬。
如果在软件开发过程中,仅分析了需求后就开始开发软件就会缺乏抽象,用户提出一种需求搞一个特殊处理,再提一个需求又弄另一个特殊处理。写代码像说口水话,想到哪写到哪,搞出一大堆重复的垃圾代码。我们周围有些人业务能力很强,沟通能力很强,但代码写的很烂,写的比较随意。这部分人认为业务比技术重要,只要需求理解清楚了,代码怎么写都能实现。这种思想在开发小型系统时危害性不明显,代码构思差一些,代码写烂一些,因软件系统比较简单,花点时间还是能理清。开发大型系统,复杂系统时将面临灭顶之灾,软件将陷入开发几个版本就做不下去的情况,一般经过3~4个版本软件就要推到重来一次。俗话说傻瓜也能写出机器能读懂的代码,只有聪明的人才能写出人能读懂的代码。程序设计是个入门容易,精通难的话。
如果仅从技术的出发来开发软件,没有弄清楚用户需要什么就开始编码,又将陷入另一个坑中。经验不足的程序很容易陷入到实现细节,只顾埋头做事却没有看清方向,导致做出的不是用户想要的,或者开发的功能非常难用,不会取得商业上的成功,也挫伤程序开发者积极性。 从用户的角度来看,他们不管软件如何实现,要求的是功能清晰好用,要求的是功能的完整性。
软件开发是需要两条腿走路。某些人偏重业务可向需求分析师发展。某些人喜欢纯技术性的东西喜欢专研软件结构向软件架构师发展,当然架构师也需要深入理解业务。