软件Software开发为何不能像硬件开发那样可控?软件Software质量的旅将带给我们

些启示
提到软件Software产品开发

我们

脑海里总是浮现出这样

情景:开发组

每

位成员都在辛苦地工作

加班加点

甚至通宵达旦

虽然项目经理(project manager)

次又

次地修改了进度计划

而实际

开发情况却总是令人担忧

以至于每次向领导汇报工作

时候

总是觉得以前制定

计划没有很好完成

总是觉得人力资源不够

总是觉得没有太多

时间

等到代码终于开发完成了

测试进度同样非常令人担忧

每

个小BUG都要花很长

时间去查找

改了某

个小

却又引起了很多新



结果产品发布遥遥无期

而项目组里

每

位成员已经筋疲力尽
怎样摆脱这样

困境?为何软件Software开发项目管理(project management)这么困难?为何我们做

计划总是不能按时完成?为何软件Software开发不能像硬件开发那样可以控制?
软件Software开发是完全依靠人

大脑思维产生出产品

而每个人

大脑思维是不

样


因此在软件Software开发过程中有太多不确定、可变化

原因

那么我们怎样把握住这些变化原因呢?
软件Software项目管理(project management)——质量先行

如果我们能够控制软件Software生命周期每

个阶段

质量

就能很好地控制了软件Software开发

整个过程
软件Software产品

质量是个很大

概念


软件Software产品完全是人们大脑思维

产物

是将大脑里无形

思维变成可以解决实际问题


组界面或者组件

在这样

个复杂

过程中

应该如何保证质量呢?有人想到了ISO9000、CMM

也有人提出反对意见

认为应该用敏捷开发

其实

不管用什么样

开发过程

关键是找到这些过程

本质
有人说

ISO和CMM到中国来如何就变了味了?其实

我们只学到了怎样去做

但是不知道为什么要这样做

大家都知道在产品立项的前要写市场分析报告

但不了解为什么要写

市场分析报告

重要性有多高?不是资深开发人员很难理解其重要性

如果是简单地去写

篇形式上

文档

那么

除了负担的外就没有其它用途了
有些人又想到了测试

觉得是我们测试

力度不够

所以产品质量不过关
其实

软件Software开发

质量保证从最初就应该开始了

如果到了测试阶段才重视就已经晚了

软件Software产品开发过程

不管采用瀑布式模型还是迭代式模型

都离不开需求、设计、编码、测试这几个阶段

在迭代式开发中

这几个阶段也是周期性出现

怎样把握好每个阶段

质量

确实不是

件容易

事

对于软件Software产品

测试

不管是单元测试还是集成、系统测试

这方面

介绍已经很多了

因此笔者重点介绍

下需求、设计和编码阶段

质量保证
让我们开始

次质量的旅吧

第

站就是需求分析
在需求分析过程中

如何进行质量保证呢?我们平时可能更多地关注需求本身

却忽视了

个很重要

原因

那就是市场


我们开发出来

产品是直接面向市场


如果费了很多

人力物力开发出来

个没有市场前景

缺乏竞争力

产品

那么所有

努力都是白费

如何充分考虑市场原因

具体可以从以下几个方面进行
首先

判断需求是否符合愿景目标

所谓愿景目标就是我们开发出来

产品能够给我们

用户带来什么样

好处?如果有些需求没有被包含在愿景目标里

那么这样

需求其实就背离了我们开发产品

初衷

其次

判断产品需求能够给企业带来多大

利润

如果某个需求只是代表个别用户

需求

并不能给企业带来较大

利润

但又花费甚高

就可以考虑删除

最后

和竞争对手相比核心竞争力有哪些?如果核心竞争力不够

就应该考虑重新进行需求分析


如果没有核心竞争力

开发出来

产品就没有市场
在排除了市场原因产生

风险的后

我们应该保证需求描述

质量

人和人

交流总会存在

些误会

同样

句话

心情不好和心情好

时候听起来可能会截然相反

正是

人们的间存在着理解上

偏差

在描述需求

语言上就应该注意尽量避免歧义

产生

如果对UML比较熟悉

话

需求分析可以利用UML工具进行

这样可以减少

些自然语言引起

歧义

但是并不是所有

用户都了解UML各种图形

意思

和用户沟通起来存在障碍

除了工具的外

我们可以从以下几个方面来保证需求描述

质量
首先

看句子和段落是否简短

长句子看起来会非常困难

很难弄懂真正

需求:另外

过长

句子和段落容易让人忽视

些需求

所以

如果

个句子不能完全描述清楚需求

应该将其拆分成多个小句子
其次

句子是否有语法


还要注意标点符号

有时

标点符号点错了就完全成了另外

个意思

再次

是否存在模糊不清

需求

出现“可能

大概

或者”等词汇表述
最后

注意是否存在形容词及比较性词语

比如:容易

、快速

、方便

、有效

、许多、很少、简单、复杂、最新

、界面友好

、减少、扩大

不小于等等

需要将描述性词语进行量化

并且给出具体值或者范围
另外

保证需求质量


个很重要

原因就是需求是否细化

如果需求不细化就很容易造成代码

返工

出现

员尽管加班加点却总是不能如期完成任务

情景

怎样才能判断需求细化

程度呢?需求细化程度确实很难把握

什么样

需求可以算是比较细了

不用再进行细化了呢?
答案是:是否可以将需求写出相应

测试用例

如果写不出来

就介绍说明需求还不是很细

还需要进

步进行细化
把握住了需求分析这

关

下

站我们就可以进行设计了
软件Software架构设计在软件Software产品开发周期中占有很重要

位置

我们开发出来

软件Software产品在开发伊始到产品发布会涉及到方方面面

角色
例如:用户、项目管理(project management)人员、

员、测试员、维护人员等等

区别

角色对架构设计

要求也不相同

对于

员来说更关注模块是否清晰

类

功能是否单

等等

对于测试人员来说

关注

是系统

可测试性

对于维护人员来讲

系统

扩展性、可维护性如何?

个高质量

软件Software架构

应该最大限度

考虑并满足区别角色

区别要求

因此我们在进行软件Software设计

时候

应该进行全面

考虑


般用来衡量软件Software设计质量

标准可以从以下几个方面来考虑:
◆功能性
包括完全性、正确性、安全性、兼容性、互用性
◆效率
产品运行

时间效率和利用

硬件资源两方面
◆维护性
包括架构

可改正性

可扩充性以及可测试性

如果用户


个很小

需求变更会引起架构设计很大

变化

那么这样

架构设计

可改正性和可扩充性就比较差
◆可移植性
包括硬件

独立性、软件Software独立性、可安装性、可重用性

软件Software设计是否模块化、可复用性都是应该考虑

原因
◆可靠性
包括无缺陷性、容错性、可用性
◆使用性
包括可理解性、易学习性、可操作性、易沟通性

我们软件Software

最终目

是让用户来使用


如果易用性不好

可操作性不好都会影响用户对软件Software

接纳程度

因此软件Software

可用性也是非常重要

完成了设计的后

接下来就要进行编码了

在编码阶段

应该怎样保证我们

编码质量呢?两个比较有效

思路方法就是代码走查和单元测试
代码走查可以以组为单位进行

代码走查可以发现代码是否符合代码规范标准

是否存在拼写


是否具有可读性

类和思路方法是否过于冗长

类的间是否存在高耦合性
代码质量


个很重要

标准就是代码

可读性

可读性不

定是简单

代码

而是容易理解

代码


过于复杂

代码难以测试和维护

同时出错

几率也会更高
如果

个思路方法内部

代码很长

而且使用了很多令人难以理解

数据集

就会带来代码维护

困难


很少有人能够有效地分析它们

因此也就最容易出现缺陷和


类的间

耦合度会造成类和类的间

相互关联

当

个类发生改变时会使其他

类发生意想不到

变化


般从导入类

个数判断类的间

耦合度

如果导入类

个数很多

或者该类

public思路方法太多都会导致类的间

高耦合性增加
编码阶段另

个非常重要

手段就是单元测试

单元测试是

个模块

功能及常规

测试

单元测试是由

员进行



般单元测试能够捕获80%

bug

因此单元测试对保证代码质量方面占有很重要

地位

由于这方面内容比较多

我们这里就不做具体阐述了
好了

经过了这样

次质量旅行

我们对软件Software开发是否增加了很多信心呢?当然软件Software项目管理(project management)还有很多其他

原因

但是如果每个阶段都能够很好

控制质量

就会在产品开发初期减少很多风险

从而使我们

软件Software开发在

个可以控制

范围内进行

这样我们才能够避免过多

没有必要

人力物力

浪费

从而使我们

产品更快更好

投入市场