你NFR了吗?

NFR,即非功能性需求 (Non -Functional Requirements) ,即系统能够完成所期望的工作的性能与质量。具体包括如下内容:

– 效率: 软件实现其功能所需要的计算机资源大小,“时间 -空间”;
– 可用性: 用户使软件的容易程度,和学习;
– 可维护性: 软件适应“变化”的能力,系统很容易被修改从而新需求 或采用新的算法、数据结构能力;
– 可移植性: 软件不经修改或稍加就可以运行于同硬环境 (CPU 、 OS 和编译器 )的能力;
– 清晰性: 易读、理解,可以提高团队开发效率降低维护代价;
– 安全性: 在对合法用户提供服务的同时,阻止未授权使;
– 兼容性: 不同产品相互交换信息的能力;
– 经济性: 开发成本、时间和对市场的适应能力。
– 商业质量: 上市时间、成本 /受益、目标市场与老系统的集成生命周期 长短等。

软件工程课程上到这里,软工大项目我也完成的差不多了。至此,我想就软工开发经验,来谈谈NFR中的几点。

首先,我们来看看可用性。我们开发的项目是国际合作处系统,显而易见这个工程是面向对象的,而不是面向过程的。因此,可用性至关重。设想用户要看新闻,他们怀着愉快的心情打开我们的网站,然而,他们在我们的网站中迷失了。。。逛了半个小时,网站给他们的印象就是根本不知道在干嘛,甚至怎么找到新闻都是问题。这样的网站无疑是失败的。网站要易于让用户学习,不管是看新闻的“吃瓜群众”还是国际合作处秘书。

其次,我们来看可维护性。这当然是对我这种“程序员”来说的。毕竟网站是我开发的,维护工作当然得我来做。有谁能比我更了解我开发的网站呢?但是哦,实际公司运营过程中并不是这样的。在公司运营中,开发者与运营者是分开的。因此,开发者要留有足够多的说明文档给维护者。开发者最好能够将程序封装成模块,这样系统除了bug,维护人员可以根据模块尽快找到bug, 并且在模块中应用对应的技术攻克bug,完成debug。

我们接着看可移植性。系统最好可以封装成模块,这样的话就可以有较好的可移植性。比如我们的软工项目如果在本地,就会部署到tomcat上,然后运行。但是,这个项目也可以export成一个包,然后这个包就能够部署到新浪云、阿里云、腾讯云等网络平台上,可以让更多的用户使用。当然,可移植性远不止web项目的可移植,还包括更多的用户程序、系统程序在不同操作系统、运行环境下的可移植性。

系统的安全性,这是一个亘古不变的难题。自从有了计算机,就有了破坏计算机的人;自从有了互联网,就有了破坏互联网规则的人。阴阳守恒,相克相生。我们无法避免网络攻击,因此我们只能魔高一尺,道高三尺。这学期学了软件安全这门课,很有用。余教授讲了许多互联网攻击的手法和实例,并讲了如何识别互联网攻击(识别算法)、如何规避预防互联网攻击。在软工项目中,也会有很多“不配合的用户”。比如,他就用汇编的知识,打开我们网络应用的时候给我们来一个缓冲区攻击破了密码,或者不好好访问我们的web, 而是给我们搞一些僵尸网络等等。作为网站的开发者和维护者,这个软工项目是我的“亲儿子”,我怎么能够容许这种事情肆意发生呢?不可以!因此,我得增加我的网络应用的健壮性(robust)!

最后我们来看看商业质量。根据大王的要求,我们的软工项目是要有真实用户的,真实用户使用web,给反馈,我们接着改。因此,我打算将我们的“上市时间”提早到14周周三,提前一周上市,然后拉用户过来体验,给建议,改,改,改。我们的目标市场首先是哈工大国际合作处秘书,其次是来访学者,工大交流生,出访教授等等。

NFR的更多相关文章

  1. SaaS应用十大关键NFR - 第2部分

    SaaS应用十大关键NFR - 第2部分 在继续上一篇关于SaaS应用的十大关键NFR的博客之后,我们来看看接下来的5个对SaaS解决方案架构产生深刻影响的关键NFR. SaaS应用的关键NFR 多租 ...

  2. 转 SaaS应用十大关键NFR - 第1部分

    非功能需求(SaaS的NFR)是跨越应用功能的跨越所有模块和功能的要求.这些要求深入到应用程序的架构,这是他们得到解决的地方.因此,在SaaS架构阶段之前了解这些NFR对于特定应用程序很重要,因此应用 ...

  3. java web学习总结(三十一) -------------------EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  4. dubbo 配置解析

    1.dubbo 常用配置 <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心.eg.<dub ...

  5. 北京培训记day2

    后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa ...

  6. 最全的linux命令大全,shell运维手册

    shell实例手册 0 说明{ 手册制作: 雪松} 1 文件{        ls -rtl                 # 按时间倒叙列出所有目录和文件 ll -rt    touch file ...

  7. 问题解决——MFC Ribbon 响应函数 错乱 执行其他函数

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  8. C++ 基础知识复习(五)

    UML建模部分 70. 什么是UML: 答: Unified Modeling Language, 统一建模语言,是一种标准的图形化建模语言.是面向对象分析和设计的标准表示. 71. UML有哪些图: ...

  9. SSH的端口转发:本地转发Local Forward和远程转发Remote Forward

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

随机推荐

  1. WPF自定义控件第二 - 转盘按钮控件

    继之前那个控件,又做了一个原理差不多的控件.这个控件主要模仿百度贴吧WP版帖子浏览界面左下角那个弹出的按钮盘.希望对大家有帮助. 这个控件和之前的也差不多,为了不让大家白看,文章最后发干货. 由于这个 ...

  2. JavaScript随笔6

    Ajax:(1) 阻止缓存?+t = new data(); eval可以把string变为数组(2) get:放入URL username = &password = ; 容量有小 安全性差 ...

  3. Jquery Uploadify3.21.与2.1版本 使用中存在的问题--记录三

    Jquery Uploadify是个上传插件. 2.1版本与3.2.1版本有很大区别,方法名跟参数变动较大 1.uploader:该属性是用来存放swf的路径,这个swf就是一个Flash的一个图标, ...

  4. .NET中的逆变协变

    MSDN上的说法: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型----------(注 ...

  5. VS2013:Unit Test 单元测试入门

    一.打开VS ,找到工具栏的“工具->扩展和更新”,添加图片内容 二.新建控制台应用程序: CalculatorDemo 三.新建类:Operation.cs,并添加方法 namespace C ...

  6. jvm系列(六):jvm调优-从eclipse开始

    jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...

  7. Oracle数据库文件路径变更

    环境:RHEL 6.4 + Oracle 11.2.0.3 情景一:只是部分普通数据文件迁移,可以在线操作. 1.将对应表空间offline,移动数据文件到新路径 2.数据文件alter databa ...

  8. 多项目并行开发如何做到快速切换——sublime Text3

    sublime text有一个很人性化的功能,就是打开窗口的时候,它会把上一次关闭时的编辑器工作区状态完全复原(不论文件是否已经保存). 只有一个项目的时候,这个功能非常方便,可以保证重启电脑后cod ...

  9. .NET 开源SqlServer ORM框架 SqlSugar 3.0 API

    3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...

  10. DOM 事件深入浅出(一)

    在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...