课件
软件需求
需求分析是软件工程中的重要步骤,是决定软件项目成败的关键影响因素之一。需求阶段的错误在后期的纠错成本将远远高于软件设计和实现阶段的错误的纠错成本。因此需求工程成为软件工程和系统工程重要的分支领域之一,在需求工程中,我们主要关注的是软件和系统需求的获取、建模、分析验证和管理。
学习过程中需要注意两点:
- 将问题的分析和解决方案的生成区别开来;
- 要根据软件项目本身的规模、人员的技能、客观的条件、项目的成本,来选择合适的需求获取技术和建模方法,选择最合理的软件系统设计方案;
关于需求工程师
需求工程师在项目中扮演怎样的角色呢?先来一段小故事。
一段小故事
有一天,软件工程师、计算机科学家和数学家在圆明园相遇,他们看到湖面上游来一只黑天鹅:
于是软件工程师在他的世界模型中,将天鹅建模为黑颜色的,如下面公式所写,对应所有的 X,如果 X 是一只天鹅,那么 X 的颜色是黑色的:
但是,计算机科学家在他的世界模型中将天鹅中的一部分建模为黑色的,正如下面的公式所写,存在至少一只天鹅,它的颜色是黑色的:
而数学家则是得出的是以下结论,在圆明园,有一个湖上,存在至少一只天鹅,它的一面是黑色的:
从这则故事我门可以看出:
- 软件工程师的思维方式是做出尽可能简化问题复杂度的假设,也就是杀鸡不用牛刀;
- 计算机科学家的思维方式是要将眼前的问题看成是更具一般性问题的特例,因此需要找出不失一般性的解决方法,如果更具一般性的问题解决了,那么眼前的问题自然迎刃而解;
- 计算机科学家的思维方式在解决诸如编译器、操作系统、数据库等通用软件的设计时,是非常必要的,而软件工程师的思维方式则更适用于解决具体领域的工程应用问题;
- 数学家则追求的是精确性;
早期的需求工程师
在2010年的国际需求工程会议上,来自英国的 Michael Jackson 教授,也是 JSD 结构化设计方法的发明人,他提到早期的需求工程师也可以归为像 David Camier 这样在公司担任首席业务分析师的人员,David 的具体贡献是为食品巨头 Lyons 设计了它们的第一款订单处理软件,该系统从1951年运行到1954年,David 是那个系统的首席业务分析师。
当代的需求工程师
这是2006年需求工程会议上的一张名片,是西门子汽车电子公司的年轻的工程师 Natalie Darnell,她说每天在公司的日常工作是书写汽车电子产品的产品说明。
作为一位当代的需求工程师,应该具有的是能力是:
- 分析问题和解决问题的能力;
- 人际交流和沟通的能力;
- 软件工程师的基本知识和技能;
- 对应用领域的深厚的了解;
- 书面语言组织和表达能力;
- ……
优秀需求工程师的目标
一名优秀的需求工程师,将以以下的内容设为他自己的努力的方向和目标:
- 找出对环境以及系统的错误的假设
- 确保描述的一致性
- 提升对标准和规范的依从性
- 减少组织和个人间的误解
- 提高支持人员的反应速度和效率
- 提升客户满意度
- 撰写优质需求文档
需要注意的是:
- 要排除一切的干扰
- 避免沉默,避免过度规约
- 避免含糊和矛盾的需求描述
- 避免向前引用
- 避免不切实际和一相情愿的假设