软件工程思考(二)

版权声明:本文为博主原创文章,未经博主允许不得转载,否则将通知维权骑士维护自己的权益。 https://blog.csdn.net/c602273091/article/details/82819630

软件工程思考(二)

框架

在实际软件设计中,我们更倾向于使用现有的已经证明比较好用的框架。在人工智能领域,比如Tensorflow、PyTorch就是很好的框架。使用框架可以提高代码重用、后期维护等等。而且速度做起来更快很多,所以软件设计中很喜欢用框架来做,自己造轮子的话,速度慢、而且别人来维护、系统工作也需要较长的时间成本。

但是框架的问题在于:它想解决很多问题,导致抽象层次高,以及多了很多你现在用不到的接口、函数等等。同时,大多数时候需要override一些函数,以及一些关键词比如mutable。解决的办法无非就是看书、看document、看别人的example、以及自己开始写example。

框架和设计模式不是同一个东西,框架是具体的,设计模式是抽象的。我们可以说某个框架采用了xx设计模式,或者多个设计模式。框架像是一种特定的招式,而设计模式就是心法。

作为一个准系统架构师,需要了解到各种框架的优缺点,各种设计模式的优缺点,以及极强的代码阅读能力。

项目规划

一般分为:scope、estimate、risk、schedule、control。

scope就是要非常清晰地明白一个项目的界限,需要用到什么,不要用到什么。学海无涯,不要在没有用的地方浪费时间,知道什么东西我们能够做,什么东西不能做,或者短期无法做,之后可以做。scope的区分会影响到我们之后整个项目进度、客户需求等等。总而言之,就是心里对要做的事情要有x数。一般可以用QFD、FAST、user-cases等等来进行划分。

estimate:就是estimate你有什么资源,你做这个事情需要多少effort,多少human-month。

risk:有可能会发生什么意外情况,有什么解决办法,都需要了解。采用3M原则(motigation、monitoring、management)

在这里插入图片描述

扫描二维码关注公众号,回复: 5487652 查看本文章

scheduling:这里需要了解到的就是项目调度我们必须清楚知道项目过程中的依赖关系以及并行关系。一般通过PERT、WBS、Gantt Chart来进行项目调度。就是对项目进行进行分而治之、然后画网络图、就可以知道其中的依赖关系以及顺序,找到关键路径,就可以分析出这个项目需要的时间。
在这里插入图片描述

软件的周期

一个软件有它的生命期,不同的软件,有不同的lifecycle,lifecycle决定了软件开发模式。

在这里插入图片描述

先说经典的waterfall,就是瀑布一样从上到下。当然,目前采用当前软件设计的时候,已经有了新的模式:从idea到实现整个产品,中间是循环往复的,这种模式会导致界限不明晰,什么时候才是一个头。
在这里插入图片描述

在AI领域,用的多的应该是快速原型验证的模型,这种模型需要快速进行原型验证,指导下一步的产品出现。所以中间的循环很少,更多的是原型设计和分析的地方有些差别。
在这里插入图片描述

对于有源源不断新需求的软件,采用增量型模式,在加入新的需求后,需要重新在原来的设计出开始添加。
在这里插入图片描述

天下武功,唯快不破,快速部署的模型,应该就是AWS采用的,超快速部署模型,2,3个月迭代一次,强度非常可怕。
在这里插入图片描述

绝大多数的软件设计采用的是螺旋模型:不断迭代,但是每次迭代又有东西release,是一种很好的模型。
在这里插入图片描述

无论采用哪种模型,记得需要向消费者、想内部进行release东西,这才是最重要的。

测试

一般来说就是黑盒测试(black box test)、白盒测试(white box)、单元测试(unit test)、A/B test、功能测试。

一般来说,我们开发人员最常用的其实就是功能测试和单元测试了。

功能测试就是看我们的代码能不能根据符合规定的输入得到正确的结果。

单元测试就是测试每个函数,每个类的在非法,合法使用是否符合预期。

在这里插入图片描述

在这里插入图片描述

测试的时候最好自动化:
在这里插入图片描述

以上slides截图来自于CMU Foundation of software engineering这门课,现在看这些又有了新的体会。

转载请注明出处: https://blog.csdn.net/c602273091/article/details/82819630

欢迎讨论~

猜你喜欢

转载自blog.csdn.net/c602273091/article/details/82819630