NFR
你NFR了吗?
NFR,即非功能性需求 (Non -Functional Requirements) ,即系统能够完成所期望的工作的性能与质量。具体包括如下内容:
– 效率: 软件实现其功能所需要的计算机资源大小,“时间 -空间”;
– 可用性: 用户使软件的容易程度,和学习;
– 可维护性: 软件适应“变化”的能力,系统很容易被修改从而新需求 或采用新的算法、数据结构能力;
– 可移植性: 软件不经修改或稍加就可以运行于同硬环境 (CPU 、 OS 和编译器 )的能力;
– 清晰性: 易读、理解,可以提高团队开发效率降低维护代价;
– 安全性: 在对合法用户提供服务的同时,阻止未授权使;
– 兼容性: 不同产品相互交换信息的能力;
– 经济性: 开发成本、时间和对市场的适应能力。
– 商业质量: 上市时间、成本 /受益、目标市场与老系统的集成生命周期 长短等。
软件工程课程上到这里,软工大项目我也完成的差不多了。至此,我想就软工开发经验,来谈谈NFR中的几点。
首先,我们来看看可用性。我们开发的项目是国际合作处系统,显而易见这个工程是面向对象的,而不是面向过程的。因此,可用性至关重。设想用户要看新闻,他们怀着愉快的心情打开我们的网站,然而,他们在我们的网站中迷失了。。。逛了半个小时,网站给他们的印象就是根本不知道在干嘛,甚至怎么找到新闻都是问题。这样的网站无疑是失败的。网站要易于让用户学习,不管是看新闻的“吃瓜群众”还是国际合作处秘书。
其次,我们来看可维护性。这当然是对我这种“程序员”来说的。毕竟网站是我开发的,维护工作当然得我来做。有谁能比我更了解我开发的网站呢?但是哦,实际公司运营过程中并不是这样的。在公司运营中,开发者与运营者是分开的。因此,开发者要留有足够多的说明文档给维护者。开发者最好能够将程序封装成模块,这样系统除了bug,维护人员可以根据模块尽快找到bug, 并且在模块中应用对应的技术攻克bug,完成debug。
我们接着看可移植性。系统最好可以封装成模块,这样的话就可以有较好的可移植性。比如我们的软工项目如果在本地,就会部署到tomcat上,然后运行。但是,这个项目也可以export成一个包,然后这个包就能够部署到新浪云、阿里云、腾讯云等网络平台上,可以让更多的用户使用。当然,可移植性远不止web项目的可移植,还包括更多的用户程序、系统程序在不同操作系统、运行环境下的可移植性。
系统的安全性,这是一个亘古不变的难题。自从有了计算机,就有了破坏计算机的人;自从有了互联网,就有了破坏互联网规则的人。阴阳守恒,相克相生。我们无法避免网络攻击,因此我们只能魔高一尺,道高三尺。这学期学了软件安全这门课,很有用。余教授讲了许多互联网攻击的手法和实例,并讲了如何识别互联网攻击(识别算法)、如何规避预防互联网攻击。在软工项目中,也会有很多“不配合的用户”。比如,他就用汇编的知识,打开我们网络应用的时候给我们来一个缓冲区攻击破了密码,或者不好好访问我们的web, 而是给我们搞一些僵尸网络等等。作为网站的开发者和维护者,这个软工项目是我的“亲儿子”,我怎么能够容许这种事情肆意发生呢?不可以!因此,我得增加我的网络应用的健壮性(robust)!
最后我们来看看商业质量。根据大王的要求,我们的软工项目是要有真实用户的,真实用户使用web,给反馈,我们接着改。因此,我打算将我们的“上市时间”提早到14周周三,提前一周上市,然后拉用户过来体验,给建议,改,改,改。我们的目标市场首先是哈工大国际合作处秘书,其次是来访学者,工大交流生,出访教授等等。
NFR的更多相关文章
- SaaS应用十大关键NFR - 第2部分
SaaS应用十大关键NFR - 第2部分 在继续上一篇关于SaaS应用的十大关键NFR的博客之后,我们来看看接下来的5个对SaaS解决方案架构产生深刻影响的关键NFR. SaaS应用的关键NFR 多租 ...
- 转 SaaS应用十大关键NFR - 第1部分
非功能需求(SaaS的NFR)是跨越应用功能的跨越所有模块和功能的要求.这些要求深入到应用程序的架构,这是他们得到解决的地方.因此,在SaaS架构阶段之前了解这些NFR对于特定应用程序很重要,因此应用 ...
- java web学习总结(三十一) -------------------EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- dubbo 配置解析
1.dubbo 常用配置 <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心.eg.<dub ...
- 北京培训记day2
后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa ...
- 最全的linux命令大全,shell运维手册
shell实例手册 0 说明{ 手册制作: 雪松} 1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file ...
- 问题解决——MFC Ribbon 响应函数 错乱 执行其他函数
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- C++ 基础知识复习(五)
UML建模部分 70. 什么是UML: 答: Unified Modeling Language, 统一建模语言,是一种标准的图形化建模语言.是面向对象分析和设计的标准表示. 71. UML有哪些图: ...
- SSH的端口转发:本地转发Local Forward和远程转发Remote Forward
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
随机推荐
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- Entity Framework 6 Recipes 2nd Edition(12-8)译 -> 重新获取一个属性的原始值
12-8. 重新获取一个属性的原始值 问题 在实体保存到数据库之前,你想重新获取属性的原始值 解决方案 假设你有一个模型 (见 Figure 12-11) 表示一个员工( Employee),包含工资 ...
- Entity Framework 6 Recipes 2nd Edition(13-7)译 -> 返回只部分填充的实体
问题 你有一个实体里的某个属性很少被读取或和更新,这个属性因为比较大,所以读取和更新都需要付很大的代价.你想有选择的放置这个属性 解决方案 假设你有一个如Figure 13-9 所示的模型 Figur ...
- AKKA 笔记 - 有限状态机 -2
AKKA 笔记 - 有限状态机 -2 原文地址: http://rerun.me/2016/05/22/akka-notes-finite-state-machines-2/ 在上一节的Akka FS ...
- ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理
话说来到上海已经快半年了,时光如白驹过隙,稍微不注意,时间就溜走了,倒是没有那么忙碌,闲暇之际来博客园还是比较多的,记得上次在逛博问的时候看到有同志在问MVC中Cookie过期后如何作相关处理,他在阐 ...
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
- node入门学习1
一个普通网站访问过程(1)浏览器向服务器发出一个HTTP请求(2)域名解析为IP地址(3)建立TCP连接(4)浏览器发起HTTP请求(5)服务器接收到HTTP请求,解析请求的路径和参数 出现乱码的原因 ...
- 【.NET深呼吸】应用上下文(AppContext)
在.net 4.6中新增了一个类,叫AppContext,这个家伙嘛,技术含量不算高,只不过是在编程的时候可以方便用用而已.应用上下文允许定义一个标识(用字符串表示),并且在应用程序运行期间可以切换状 ...
- .NET Core下的日志(1):记录日志信息
记录各种级别的日志是所有应用不可或缺的功能.关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net.NLog.Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关A ...
- SQLCMD备忘录:执行文件夹所有Sql文件
在做性能测试的时候最希望的一件事情是数据自动导入. 一般做法就是写很多SQL文件,通过Bat自动执行所有Sql文件. Bat代码: @ECHO OFF SET SQLCMD="C:\Prog ...