随笔分类 -  9、博文视点技术专区

摘要:正确性正确性是指软件按照需求正确执行任务的能力。这里“正确性”的语义涵盖了“精确性”。正确性无疑是第一重要的软件质量属性。如果软件运行不正确,将会给用户造成不便甚至损失。技术评审和测试的第一关都是检查工作成果的正确性。正确性说起来容易做起来难。因为从“需求开发”到“系统设计”再到“实现”,任何一个环节出现差错都会降低正确性。机器不会主动欺骗人,软件运行出错通常都是人造成的,所以不要找借口埋怨机器有毛病。开发任何软件,开发者都要为“正确”两字竭尽全力。健壮性健壮性是指在异常情况下,软件能够正常运行的能力。正确性与健壮性的区别是:前者描述软件在需求范围之内的行为,而后者描述软件在需求范围之外的行为 阅读全文
posted @ 2012-11-28 09:32 博文视点(北京)官方博客 阅读(534) 评论(0) 推荐(0)
摘要:如何理解软件的质量什么是质量?词典的定义是:① 典型的或本质的特征;② 事物固有的或区别于其他事物的特征或本质;③ 优良或出色的程度。CMM对质量的定义是:① 一个系统、组件或过程符合特定需求的程度;② 一个系统、组件或过程符合客户或用户的要求或期望的程度。上述定义很抽象,软件开发人员看了准会一脸迷惘。软件的质量不容易说清楚,但我们今天非得把它搞个水落石出不可。就以健康做类比吧。早先人们以为长得结实、饭量大就是健康,这显然是不科学的。现代人总是通过考察多方面的生理因素来判断是否健康,如测量身高、体重、心跳、血压、血液、体温等。如果上述因素都合格,那么表明这人是健康的。如果某个因素不合格,则表明 阅读全文
posted @ 2012-11-28 09:17 博文视点(北京)官方博客 阅读(581) 评论(0) 推荐(0)
摘要:有最好的编程语言吗作者的观点:程序员在最初学习BASIC、Fortran、 Pascal、C、C++等语言时会感觉一个比一个好,不免有喜新厌旧之举。而如今的Visual Basic、Delphi、Visual C++、Java等语言各有所长,真的难分优劣。能很好地解决问题的编程语言就是好语言。开发人员应该根据实际情况,选择业界推荐的并且是自己擅长的编程语言来开发软件,才能保证有较好的质量与效率。编程是一件自由与快乐的事情,不要发誓忠于某某语言而自寻烦恼。编程是一门艺术吗作者的观点:水平高到一定程度后,干啥事都能感受到“艺术”,编程也不例外。但在技术行业,人们通常认为“艺术”是随心所欲、不可把握 阅读全文
posted @ 2012-11-27 09:03 博文视点(北京)官方博客 阅读(328) 评论(0) 推荐(0)
摘要:C语言中的构造数据类型如结构、联合、枚举等在C++中仍然有效。由于C++新增了一种类型名class,许多人错误地认为struct只能用来包装数据,或者class必须定义成员函数。C++对C的结构、联合、枚举等进行了必要的改造和增强,本章比较分析了异同点,总结了使用要点,对于那些正在从C语言向C++语言过渡的程序员有较好的参考价值。结构(struct)如果只能使用基本数据类型来编程,那将是一件痛苦的事情。C语言支持把基本数据类型组合起来形成更大的构造数据类型,这就是C语言的struct,有时也称为用户自定义数据类型(User Defined Type, UDT)。构造数据类型还可以嵌套(对象嵌入 阅读全文
posted @ 2012-11-26 13:10 博文视点(北京)官方博客 阅读(215) 评论(0) 推荐(0)
摘要:BroPHP是一个免费开源的轻量级PHP框架(学习型),允许你把基于BroPHP框架开发的应用去开源或发布、销售商业产品。BroPHP框架完全采用面向对象的设计思想,并且是基于MVC的三层设计模式,具有部署和应用及为简单、效率高、速度快,扩展性和可维护性都很好等特点,可以稳定地用于商业及门户的开发。BroPHP框架包括单入口文件、MVC模式、目录组织结构、类自动加载、强大基础类、URL处理、输入处理、错误处理、缓存机制、扩展类等功能。是专门为《细说PHP》的读者及LAMP兄弟连全体学员提供的“学习型PHP框架”。当然,任何PHP应用开发爱好者都可以从BroPHP框架的简单和快速的特性中受益。另 阅读全文
posted @ 2012-11-23 08:52 博文视点(北京)官方博客 阅读(817) 评论(0) 推荐(0)
摘要:在PHP中,有一些简单的图像函数是可以直接使用的,但大多数要处理的图像,都需要在编译PHP时加上GD库。除了安装GD库之外,在PHP中还可能需要其他的库,这可以根据需要支持哪些图像格式而定。GD库可以在http://www.boutell.com/gd/免费下载,不同的GD版本支持的图像格式不完全一样,最新的GD库版本支持GIF、JPEG、PNG、WBMP、XBM等格式的图像文件,此外还支持一些如FreeType、Type 1等字体库。通过GD库中的函数可以完成各种点、线、几何图形、文本及颜色的操作和处理,也可以创建或读取多种格式的图像文件。在PHP中,通过GD库处理图像的操作,都是先在内存中 阅读全文
posted @ 2012-11-22 09:57 博文视点(北京)官方博客 阅读(346) 评论(0) 推荐(0)
摘要:处理器负责从内存读取数据,并利用数据执行加法等处理。指示执行这些处理的就是“指令”。指令有以下几种:进行加法的ADD指令,进行乘法的MULT(multiply)指令,以及读写内存的LOAD指令、STORE指令等。让我们看看这些指令是怎样规定的。指令架构入门前面说过,指令架构详细地规定了处理器应当支持哪些指令、各个指令应执行什么操作等。“架构”这个词源于建筑术语,意思是建筑的基本设计,现在被挪用到计算机的基本设计中,表示指令的设计、结构等。拿汽车打比方,可以把指令架构想象成这样:发出向右打方向盘的指令,汽车就向右转;发出踩油门的指令就加速;发出踩刹车的指令就减速。对于汽车来说,这些基本指令是通用 阅读全文
posted @ 2012-11-20 08:47 博文视点(北京)官方博客 阅读(301) 评论(0) 推荐(0)
摘要:计算机的性能以10年约200倍的惊人速度提升。其支撑的中心台柱就是半导体技术的进步。本节来看看为什么半导体技术的进步会带来计算机的进步。摩尔(Moore)定律——更多的晶体管,更高的并行度Intel的创始人之一Gordon Moore在1965年的Electronics杂志上发表题目为Cramming more components onto integrated circuits的论文,预测集成度的提高,如图1.9所示的图表。图1.9只显示了从1962年到1965年4个点的数据,但Moore大胆预测,此倾向将延续到1975年。集成电路就是利用光学微缩投影曝光技术在硅芯片上制作较小的部件零件, 阅读全文
posted @ 2012-11-19 10:46 博文视点(北京)官方博客 阅读(265) 评论(0) 推荐(0)
摘要:处理器本身能理解的机器指令是0和1的序列,让人来写就要大费周章了,因此人们一直在努力开发各种系统,用人类易于理解的形式来编写程序。本节仅简单介绍一下指示处理器工作的机器语言程序的编写方法。用汇编语言编程人类很难书写处理器能够理解的0、1序列,也很容易出错。另外,写完后回头看看一堆0和1,根本看不懂会向处理器发出什么指令,即使出了bug、无法正常运行也毫无办法。因此,我们将加法指令写成ADD,减法指令写成SUB(Subtract),从内存读取数据的加载指令写成LD(Load),向内存写入数据的存储指令写成ST(Store)。这种易于人类理解的写法称为助记符(Mnemonic)。另外,这些指令使用 阅读全文
posted @ 2012-11-16 09:09 博文视点(北京)官方博客 阅读(627) 评论(0) 推荐(0)
摘要:在x86/x64体系里,由于x87 FPU硬件使用扩展双精度格式,因此必然会遇到single/double precision格式与double extended-precision格式之间的互换问题。转换为扩展双精度数当由单精度数或双精度转换为扩展双精度数时,exponent部分必须基于扩展双精度数的biased码来调整。于是扩展双精度数的exponent值为:① 从单精度转化:exponent – 127 + 16383。② 从双精度转化:exponent – 1023 + 16383。而扩展双精度数的significand部分,由单/双精度数的significand部分移植过来。以单精度 阅读全文
posted @ 2012-11-15 09:25 博文视点(北京)官方博客 阅读(454) 评论(0) 推荐(0)
摘要:我们知道在计算机中处理的数是按照一定的规则进行组织和存放的。其中的每个数按特定的编码规则组织。可是光有这些数的组织规则还是不够,计算机每条指令的操作数可能会有不同的数据类型。那么计算机能处理哪些数据类型呢?在这一章里,我们将要了解数与数据类型。数计算机能处理各种各样的信息,计算机硬件对数据进行处理后,可呈现出各种各样的信息。数字数字是个基本的计数符号。通用的数字有10个:0,1,2,3,4,5,6,7,8,9。以这些数字组合构成的数是十进制数。思考各个进制数的数字。1.二进制数字包括0和1。2.八进制数字包括0,1,2,3,4,5,6,7。3.十进制数字包括0,1,2,3,4,5,6,7,8, 阅读全文
posted @ 2012-11-14 08:43 博文视点(北京)官方博客 阅读(277) 评论(0) 推荐(0)
摘要:选择编译器nasm?fasm?yasm?还是masm、gas或其他?前面三个是免费开源的汇编编译器,总体上来讲都使用Intel的语法。yasm是在nasm的基础上开发的,与nasm同宗。由于使用了相同的语法,因此nasm的代码可以直接用yasm来编译。yasm虽然更新较慢,但对nasm一些不合理的地方进行了改良。从这个角度来看,yasm比nasm更优秀些,而nasm更新快,能支持更新的指令集。在Windows平台上,fasm是另一个不错的选择,平台支持比较好,可以直接用来开发Windows上的程序,语法也比较独特。在对Windows程序结构的支持上,fasm是3个免费的编译器里做得最好的。ma 阅读全文
posted @ 2012-11-13 08:54 博文视点(北京)官方博客 阅读(502) 评论(0) 推荐(0)
摘要:现在,我们将用Objective-C定义一个实际的类,并学习如何使用类的实例。同样,我们将先学习过程。因此,实际的程序范例可能不是特别实用,那些更加实际的内容将在稍后讨论。假设要编写一个用于处理分数的程序,可能需要处理加、减、乘、除等运算。如果你还不知道什么是类,那么可以从一个简单的程序开始,代码如下:代码清单3-1// 采用分数的简单程序#import <Foundation/Foundation.h>int main (int argc, char * argv[]){ @autoreleasepool { intnumerator = 1; intdenominator = 阅读全文
posted @ 2012-11-09 09:36 博文视点(北京)官方博客 阅读(175) 评论(0) 推荐(0)
摘要:你已经遇到过Objective-C的基本数据类型int。回顾一下,声明为int类型的变量只能用于保存整型值,也就是不包含小数位数的值。Objective-C还提供了另外3种基本数据类型:float、double和char。声明为float类型的变量可以存储浮点数(即包含小数位数的值)。double类型和float类型一样,通常,前者表示的范围大约是后者的两倍。char数据类型可存储单个字符,例如字母a、数字字符6或者一个分号(后面将详细讨论有关内容)。在Objective-C中,任何数字、单个字符或者字符串通常都称为常量。例如,数字58表示一个常量整数值,字符串@"Programmi 阅读全文
posted @ 2012-11-08 09:23 博文视点(北京)官方博客 阅读(435) 评论(0) 推荐(0)
摘要:你已经看到处理分数的方法如何通过名称直接访问两个实例变量numerator和denominator。事实上,实例方法总是可以直接访问它的实例变量的。然而,类方法则不能,因为它只处理本身,并不处理任何类实例(仔细想想)。但是,如果要从其他位置访问实例变量,例如,从main函数内部来访问,该如何实现?在这种情况下,不能直接访问这些实例变量,因为它们是隐藏的。将实例变量隐藏起来的这种做法实际上涉及一个关键概念——“数据封装”。它使得编写定义的人在不必担心程序员(即类的使用者)是否破坏类的内部细节的情况下,扩展和修改其定义。数据封装提供了程序员和其他开发者之间的良好隔离层。 通过编写特殊方法来检索实. 阅读全文
posted @ 2012-11-07 09:17 博文视点(北京)官方博客 阅读(244) 评论(0) 推荐(0)
摘要:在Objective-C中,事实上与所有的程序设计语言一样,在两个数相加时使用加号(+),在两个数相减时使用减号(-),在两个数相乘时使用乘号(*),在两个数相除时使用除号(/)。这些运算符称为二元算术运算符,因为它们运算两个值或项。运算符的优先级你已经看到如何在Objective-C中执行简单的运算,例如,加法。下面的程序进一步说明了减法、乘法和除法运算。在程序中执行的最后两个运算引入了一个概念,即一个运算符比另一个运算符有更高的优先级。事实上,Objective-C中的每一个运算符都有与之相关的优先级。优先级用于确定包含多个运算符的表达式如何求值:优先级较高的运算符首先求值。如果表达式包含 阅读全文
posted @ 2012-11-06 10:16 博文视点(北京)官方博客 阅读(420) 评论(0) 推荐(0)
摘要:条件表达式Scala的if/else语法结构和Java或C++一样。不过,在Scala中if/else表达式有值,这个值就是跟在if或else之后的表达式的值。例如:if (x > 0) 1 else -1上述表达式的值是1或−1,具体是哪一个取决于x的值。你可以将if/else表达式的值赋值给变量:val s = if (x > 0) 1 else -1这与如下语句的效果一样:if (x > 0) s = 1 else s = -1不过,第一种写法更好,因为它可以用来初始化一个val。而在第二种写法当中,s必须是var。(之前已经提过,Scala中的分号绝大多数情况下不是必 阅读全文
posted @ 2012-11-06 09:13 博文视点(北京)官方博客 阅读(581) 评论(0) 推荐(0)
摘要:前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了SurfaceFlinger服务。有了这些预备知识之后,我们就可以从正面来分析SurfaceFlinger服务的实现原理了。SurfaceFlinger服务负责管理系统的帧缓冲区设备,并且负责渲染系统的UI,即各个应用程序的UI。在本文中,我们就简要介绍SurfaceFlinger服务,并且制定学习计划。 在前面Android应用程序与SurfaceFlinger服务的关系概述和学习计划一系列的文章中提到,SurfaceFlinger服务运行在System进程中,用来统一管理系统的帧缓冲区设备。由.. 阅读全文
posted @ 2012-11-05 17:12 博文视点(北京)官方博客 阅读(503) 评论(0) 推荐(0)
摘要:SurfaceFlinger服务负责绘制Android应用程序的UI,它的实现相当复杂,要从正面分析它的实现不是一件容易的事。既然不能从正面分析,我们就想办法从侧面分析。说到底,无论SurfaceFlinger服务有多复杂,它都是为Android应用程序服务的,因此,我们就从Android应用程序与SurfaceFlinger服务的关系入手,来概述和制定SurfaceFlinger服务的学习计划。 SurfaceFlinger服务运行在Android系统的System进程中,它负责管理Android系统的帧缓冲区(Frame Buffer)。Android系统的帧缓冲区的相关知识,可以参... 阅读全文
posted @ 2012-11-02 12:33 博文视点(北京)官方博客 阅读(172) 评论(0) 推荐(0)
摘要:在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。在前面的文章Android进程间通信(IPC)机制Binder简要介绍和学习计划和Android系统在新进程中启动自定义服务过程(startService)的原理分析中,我们已经系统地介绍了Binder机制和Service的启动过程了,在本文中,简要介绍Activity的启动过程以及后续学习计划。 在Android系.. 阅读全文
posted @ 2012-11-01 14:37 博文视点(北京)官方博客 阅读(212) 评论(0) 推荐(0)