软件工程思考(一)

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

在实际工作的时候,码代码并不是一切,是我们实现一个完整软件的一个重要步骤。

在软件设计的过程中,我们需要知道软件设计流程、项目管理、需求分析、技术和架构设计、测试和分析性能等等。我们在软件设计的过程中,最好能够使用较好的debug工具、配置管理、单元测试、性能分析等等。在这里特别推荐一本书《Roger S. Pressman, Software Engineering, A Practitioner’s Approach》,这本书是软件设计集大成者,也是CMU软件工程的课程推荐的书籍,我正在看,感觉收获颇多。

软件设计流程

  • 瀑布式

这里写图片描述

整个流程像瀑布一样,一气呵成,但是很显然,在软件设计领域根本无法达到这种层次。

需求分析:主要问题是客户自己要什么它自己都不清楚、以及它知道但是无法表达,这部分的东西搞技术的我们先不管了。
设计:根据需求,我们需要知道选择软硬件平台、程序接口、用户接口、定义好各个部分以及所需算法。
实现:除了码代码以外,要注意做好document,代码管理,进度跟进、团队协作分工。
质量保证:通过unit test,功能测试、code review。
改进:通过改变代码能够满足新的需求。

这样子的流程沟通成本太高,而且必须保证一个阶段完成后,另外一个阶段才开始,导致团队效率比较低。

  • 螺旋上升

这里写图片描述

螺旋式就是考虑到了项目中的不确定性,比如需求更改。

项目预测

Oakinson’s law: 成本会越来越高,直到预算;时间会变长,为了等待所需要的资源。

系统预测有难点:infrequency;underestimate bias;

提前考虑好成本:比如人月;比如LOC(lines of code).

对于当前项目,我们需要找到熟悉的部分进行估计,对于不熟悉的部分需要更多一些调研。

一般计算cost,需要考虑不同平台,嵌入式和关键代码为5x,分布式为2.5x,普通的可重用的代码为1.5x。另外,千万不要基于所谓的经验进行估计,因为可能会遇到新的平台、新的问题。

一般使用Wideband Delphi可以进行比较有效的估计,作为架构师切割任务,分成模块,由对应人员给出。

文中截图来自于cmu software engineering course的slide截图。

猜你喜欢

转载自blog.csdn.net/c602273091/article/details/82720373
今日推荐